| /* This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| /* |
| * test_list.c |
| * |
| * Tests List Objects |
| * |
| */ |
| |
| #include "testutil.h" |
| #include "testutil_nss.h" |
| |
| static void *plContext = NULL; |
| |
| static void |
| createLists(PKIX_List **list, PKIX_List **list2) |
| { |
| PKIX_TEST_STD_VARS(); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(list, plContext)); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(list2, plContext)); |
| |
| cleanup: |
| |
| PKIX_TEST_RETURN(); |
| } |
| |
| static void |
| testReverseList(void) |
| { |
| PKIX_List *firstList = NULL; |
| PKIX_List *reverseList = NULL; |
| PKIX_UInt32 length, i; |
| char *testItemString = "one"; |
| char *testItemString2 = "two"; |
| PKIX_PL_String *testItem = NULL; |
| PKIX_PL_String *testItem2 = NULL; |
| PKIX_PL_Object *retrievedItem1 = NULL; |
| PKIX_PL_Object *retrievedItem2 = NULL; |
| |
| PKIX_TEST_STD_VARS(); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(&firstList, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_ReverseList(firstList, &reverseList, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetLength(reverseList, &length, plContext)); |
| if (length != 0) { |
| testError("Incorrect Length returned"); |
| } |
| |
| PKIX_TEST_DECREF_BC(reverseList); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_ESCASCII, |
| testItemString, |
| 0, |
| &testItem, |
| plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_ESCASCII, |
| testItemString2, |
| 0, |
| &testItem2, |
| plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(firstList, |
| (PKIX_PL_Object *)testItem, |
| plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_ReverseList(firstList, &reverseList, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetLength(reverseList, &length, plContext)); |
| if (length != 1) { |
| testError("Incorrect Length returned"); |
| } |
| |
| PKIX_TEST_DECREF_BC(reverseList); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(firstList, |
| (PKIX_PL_Object *)testItem2, |
| plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(firstList, |
| (PKIX_PL_Object *)testItem, |
| plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(firstList, |
| (PKIX_PL_Object *)testItem2, |
| plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_ReverseList(firstList, &reverseList, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetLength(reverseList, &length, plContext)); |
| if (length != 4) { |
| testError("Incorrect Length returned"); |
| } |
| |
| for (i = 0; i < length; i++) { |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetItem(firstList, |
| i, |
| &retrievedItem1, |
| plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetItem(reverseList, |
| (length - 1) - i, |
| &retrievedItem2, |
| plContext)); |
| |
| testEqualsHelper(retrievedItem1, retrievedItem2, PKIX_TRUE, plContext); |
| |
| PKIX_TEST_DECREF_BC(retrievedItem1); |
| PKIX_TEST_DECREF_BC(retrievedItem2); |
| } |
| |
| cleanup: |
| |
| PKIX_TEST_DECREF_AC(firstList); |
| PKIX_TEST_DECREF_AC(reverseList); |
| |
| PKIX_TEST_DECREF_AC(testItem); |
| PKIX_TEST_DECREF_AC(testItem2); |
| |
| PKIX_TEST_DECREF_AC(retrievedItem1); |
| PKIX_TEST_DECREF_AC(retrievedItem2); |
| |
| PKIX_TEST_RETURN(); |
| } |
| |
| static void |
| testZeroLengthList(PKIX_List *list) |
| { |
| PKIX_UInt32 length; |
| PKIX_Boolean empty; |
| char *testItemString = "hello"; |
| PKIX_PL_String *testItem = NULL; |
| PKIX_PL_String *retrievedItem = NULL; |
| PKIX_List *diffList = NULL; |
| |
| PKIX_TEST_STD_VARS(); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(&diffList, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetLength(list, &length, plContext)); |
| |
| if (length != 0) { |
| testError("Incorrect Length returned"); |
| } |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_IsEmpty(list, &empty, plContext)); |
| if (!empty) { |
| testError("Incorrect result for PKIX_List_IsEmpty"); |
| } |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_ESCASCII, |
| testItemString, |
| 0, |
| &testItem, |
| plContext)); |
| |
| PKIX_TEST_EXPECT_ERROR(PKIX_List_InsertItem(list, 0, (PKIX_PL_Object *)testItem, plContext)); |
| |
| PKIX_TEST_EXPECT_ERROR(PKIX_List_SetItem(list, 0, (PKIX_PL_Object *)testItem, plContext)); |
| |
| PKIX_TEST_EXPECT_ERROR(PKIX_List_GetItem(list, |
| 0, |
| (PKIX_PL_Object **)&retrievedItem, |
| plContext)); |
| |
| PKIX_TEST_EXPECT_ERROR(PKIX_List_DeleteItem(list, 0, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(diffList, |
| (PKIX_PL_Object *)testItem, |
| plContext)); |
| |
| testDuplicateHelper((PKIX_PL_Object *)diffList, plContext); |
| |
| PKIX_TEST_EQ_HASH_TOSTR_DUP(list, list, diffList, "(EMPTY)", List, PKIX_TRUE); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetLength(diffList, &length, plContext)); |
| if (length != 1) { |
| testError("Incorrect Length returned"); |
| } |
| |
| PKIX_TEST_EXPECT_ERROR(PKIX_List_DeleteItem(list, 1, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_DeleteItem(diffList, 0, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetLength(diffList, &length, plContext)); |
| if (length != 0) { |
| testError("Incorrect Length returned"); |
| } |
| |
| cleanup: |
| |
| PKIX_TEST_DECREF_AC(testItem); |
| PKIX_TEST_DECREF_AC(diffList); |
| PKIX_TEST_RETURN(); |
| } |
| |
| static void |
| testGetLength(PKIX_List *list) |
| { |
| PKIX_UInt32 length; |
| PKIX_TEST_STD_VARS(); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetLength(list, &length, plContext)); |
| |
| if (length != 3) { |
| testError("Incorrect Length returned"); |
| } |
| |
| cleanup: |
| |
| PKIX_TEST_RETURN(); |
| } |
| |
| static void |
| testGetSetItem( |
| PKIX_List *list, |
| char *testItemString, |
| char *testItemString2, |
| char *testItemString3, |
| PKIX_PL_String **testItem, |
| PKIX_PL_String **testItem2, |
| PKIX_PL_String **testItem3) |
| { |
| PKIX_PL_Object *tempItem = NULL; |
| char *temp = NULL; |
| |
| PKIX_TEST_STD_VARS(); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_ESCASCII, |
| testItemString, |
| PL_strlen(testItemString), |
| testItem, |
| plContext)); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_ESCASCII, |
| testItemString2, |
| PL_strlen(testItemString2), |
| testItem2, |
| plContext)); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_ESCASCII, |
| testItemString3, |
| PL_strlen(testItemString3), |
| testItem3, |
| plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(list, (PKIX_PL_Object *)*testItem, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(list, (PKIX_PL_Object *)*testItem, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(list, (PKIX_PL_Object *)*testItem, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_SetItem(list, 0, (PKIX_PL_Object *)*testItem, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_SetItem(list, 1, (PKIX_PL_Object *)*testItem2, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_SetItem(list, 2, (PKIX_PL_Object *)*testItem3, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetItem(list, 0, &tempItem, plContext)); |
| |
| temp = PKIX_String2ASCII((PKIX_PL_String *)tempItem, plContext); |
| if (temp) { |
| if (PL_strcmp(testItemString, temp) != 0) |
| testError("GetItem from list is incorrect"); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext)); |
| } |
| |
| PKIX_TEST_DECREF_BC(tempItem); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetItem(list, 1, &tempItem, plContext)); |
| |
| temp = PKIX_String2ASCII((PKIX_PL_String *)tempItem, plContext); |
| if (temp) { |
| if (PL_strcmp(testItemString2, temp) != 0) |
| testError("GetItem from list is incorrect"); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext)); |
| } |
| PKIX_TEST_DECREF_BC(tempItem); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetItem(list, 2, &tempItem, plContext)); |
| |
| temp = PKIX_String2ASCII((PKIX_PL_String *)tempItem, plContext); |
| if (temp) { |
| if (PL_strcmp(testItemString3, temp) != 0) |
| testError("GetItem from list is incorrect"); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext)); |
| } |
| PKIX_TEST_DECREF_BC(tempItem); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_SetItem(list, 0, (PKIX_PL_Object *)*testItem3, plContext)); |
| temp = PKIX_String2ASCII(*testItem3, plContext); |
| if (temp) { |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext)); |
| } |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetItem(list, 0, &tempItem, plContext)); |
| |
| temp = PKIX_String2ASCII((PKIX_PL_String *)tempItem, plContext); |
| if (temp) { |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext)); |
| } |
| |
| temp = PKIX_String2ASCII((PKIX_PL_String *)tempItem, plContext); |
| if (temp) { |
| if (PL_strcmp(testItemString3, temp) != 0) |
| testError("GetItem from list is incorrect"); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext)); |
| } |
| PKIX_TEST_DECREF_BC(tempItem); |
| |
| cleanup: |
| |
| PKIX_TEST_RETURN(); |
| } |
| |
| static void |
| testInsertItem( |
| PKIX_List *list, |
| PKIX_PL_String *testItem, |
| char *testItemString) |
| { |
| PKIX_PL_Object *tempItem = NULL; |
| PKIX_PL_String *outputString = NULL; |
| char *temp = NULL; |
| |
| PKIX_TEST_STD_VARS(); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_InsertItem(list, 0, (PKIX_PL_Object *)testItem, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetItem(list, 0, &tempItem, plContext)); |
| |
| temp = PKIX_String2ASCII((PKIX_PL_String *)tempItem, plContext); |
| if (temp) { |
| if (PL_strcmp(testItemString, temp) != 0) |
| testError("GetItem from list is incorrect"); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext)); |
| } |
| PKIX_TEST_DECREF_BC(tempItem); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString((PKIX_PL_Object *)list, |
| &outputString, |
| plContext)); |
| |
| temp = PKIX_String2ASCII(outputString, plContext); |
| if (temp) { |
| if (PL_strcmp("(a, c, b, c)", temp) != 0) |
| testError("List toString is Incorrect"); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext)); |
| } |
| |
| PKIX_TEST_DECREF_BC(outputString); |
| |
| cleanup: |
| |
| PKIX_TEST_RETURN(); |
| } |
| |
| static void |
| testAppendItem(PKIX_List *list, PKIX_PL_String *testItem) |
| { |
| PKIX_UInt32 length2; |
| PKIX_PL_String *outputString = NULL; |
| char *temp = NULL; |
| |
| PKIX_TEST_STD_VARS(); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetLength(list, &length2, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(list, |
| (PKIX_PL_Object *)testItem, |
| plContext)); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString((PKIX_PL_Object *)list, |
| &outputString, |
| plContext)); |
| |
| temp = PKIX_String2ASCII(outputString, plContext); |
| if (temp) { |
| if (PL_strcmp("(a, c, b, c, a)", temp) != 0) |
| testError("List toString is Incorrect"); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext)); |
| } |
| |
| PKIX_TEST_DECREF_BC(outputString); |
| |
| cleanup: |
| |
| PKIX_TEST_RETURN(); |
| } |
| |
| static void |
| testNestedLists( |
| PKIX_List *list, |
| PKIX_List *list2, |
| PKIX_PL_String *testItem, |
| PKIX_PL_String *testItem2) |
| { |
| PKIX_PL_String *outputString = NULL; |
| char *temp = NULL; |
| |
| PKIX_TEST_STD_VARS(); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(list2, (PKIX_PL_Object *)testItem, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(list2, |
| (PKIX_PL_Object *)NULL, |
| plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(list2, |
| (PKIX_PL_Object *)testItem, |
| plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString((PKIX_PL_Object *)list2, |
| &outputString, |
| plContext)); |
| |
| temp = PKIX_String2ASCII(outputString, plContext); |
| if (temp) { |
| if (PL_strcmp("(a, (null), a)", temp) != 0) |
| testError("List toString is Incorrect"); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext)); |
| } |
| PKIX_TEST_DECREF_BC(outputString); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_InsertItem(list, 1, |
| (PKIX_PL_Object *)list2, |
| plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString((PKIX_PL_Object *)list, |
| &outputString, |
| plContext)); |
| |
| temp = PKIX_String2ASCII(outputString, plContext); |
| if (temp) { |
| if (PL_strcmp("(a, (a, (null), a), c, b, c, a)", temp) != 0) |
| testError("List toString is Incorrect"); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext)); |
| } |
| PKIX_TEST_DECREF_BC(outputString); |
| |
| cleanup: |
| |
| PKIX_TEST_RETURN(); |
| } |
| |
| static void |
| testDeleteItem( |
| PKIX_List *list, |
| PKIX_List *list2, |
| PKIX_PL_String *testItem2, |
| PKIX_PL_String *testItem3) |
| { |
| PKIX_PL_String *outputString = NULL; |
| char *temp = NULL; |
| |
| PKIX_TEST_STD_VARS(); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_DeleteItem(list, 5, plContext)); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString((PKIX_PL_Object *)list, |
| &outputString, |
| plContext)); |
| |
| temp = PKIX_String2ASCII(outputString, plContext); |
| if (temp) { |
| if (PL_strcmp("(a, (a, (null), a), c, b, c)", temp) != 0) |
| testError("List toString is Incorrect"); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext)); |
| } |
| PKIX_TEST_DECREF_BC(outputString); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_DeleteItem(list, 1, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString((PKIX_PL_Object *)list, |
| &outputString, |
| plContext)); |
| |
| temp = PKIX_String2ASCII(outputString, plContext); |
| if (temp) { |
| if (PL_strcmp("(a, c, b, c)", temp) != 0) |
| testError("List toString is Incorrect"); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext)); |
| } |
| PKIX_TEST_DECREF_BC(outputString); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_DeleteItem(list, 0, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString((PKIX_PL_Object *)list, |
| &outputString, |
| plContext)); |
| |
| temp = PKIX_String2ASCII(outputString, plContext); |
| if (temp) { |
| if (PL_strcmp("(c, b, c)", temp) != 0) |
| testError("List toString is Incorrect"); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext)); |
| } |
| PKIX_TEST_DECREF_BC(outputString); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_DeleteItem(list2, 1, plContext)); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString((PKIX_PL_Object *)list2, |
| &outputString, |
| plContext)); |
| temp = PKIX_String2ASCII(outputString, plContext); |
| if (temp) { |
| if (PL_strcmp("(a, a)", temp) != 0) |
| testError("List toString is Incorrect"); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext)); |
| } |
| PKIX_TEST_DECREF_BC(outputString); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(list2, |
| (PKIX_PL_Object *)testItem2, |
| plContext)); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString((PKIX_PL_Object *)list2, |
| &outputString, |
| plContext)); |
| |
| temp = PKIX_String2ASCII(outputString, plContext); |
| if (temp) { |
| if (PL_strcmp("(a, a, b)", temp) != 0) |
| testError("List toString is Incorrect"); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext)); |
| } |
| PKIX_TEST_DECREF_BC(outputString); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_DeleteItem(list2, 2, plContext)); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString((PKIX_PL_Object *)list2, |
| &outputString, |
| plContext)); |
| |
| temp = PKIX_String2ASCII(outputString, plContext); |
| if (temp) { |
| if (PL_strcmp("(a, a)", temp) != 0) |
| testError("List toString is Incorrect"); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext)); |
| } |
| PKIX_TEST_DECREF_BC(outputString); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(list2, |
| (PKIX_PL_Object *)testItem3, |
| plContext)); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString((PKIX_PL_Object *)list2, |
| &outputString, |
| plContext)); |
| temp = PKIX_String2ASCII(outputString, plContext); |
| if (temp) { |
| if (PL_strcmp("(a, a, c)", temp) != 0) |
| testError("List toString is Incorrect"); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext)); |
| } |
| PKIX_TEST_DECREF_BC(outputString); |
| |
| PKIX_TEST_DECREF_BC(list2); |
| |
| cleanup: |
| |
| PKIX_TEST_RETURN(); |
| } |
| |
| #if testContainsFunction |
| /* This test requires pkix_List_Contains to be in nss.def */ |
| static void |
| testContains(void) |
| { |
| |
| PKIX_List *list; |
| PKIX_PL_String *testItem, *testItem2, *testItem3, *testItem4; |
| char *testItemString = "a"; |
| char *testItemString2 = "b"; |
| char *testItemString3 = "c"; |
| char *testItemString4 = "d"; |
| PKIX_Boolean found = PKIX_FALSE; |
| |
| PKIX_TEST_STD_VARS(); |
| subTest("pkix_ListContains"); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_ESCASCII, |
| testItemString, |
| PL_strlen(testItemString), |
| &testItem, |
| plContext)); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_ESCASCII, |
| testItemString2, |
| PL_strlen(testItemString2), |
| &testItem2, |
| plContext)); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_ESCASCII, |
| testItemString3, |
| PL_strlen(testItemString3), |
| &testItem3, |
| plContext)); |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_ESCASCII, |
| testItemString4, |
| PL_strlen(testItemString4), |
| &testItem4, |
| plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(&list, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(list, (PKIX_PL_Object *)testItem, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(list, (PKIX_PL_Object *)testItem2, plContext)); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(list, (PKIX_PL_Object *)testItem3, plContext)); |
| |
| subTest("pkix_List_Contains <object missing>"); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(pkix_List_Contains(list, (PKIX_PL_Object *)testItem4, &found, plContext)); |
| |
| if (found) { |
| testError("Contains found item that wasn't there!"); |
| } |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(list, (PKIX_PL_Object *)testItem4, plContext)); |
| |
| subTest("pkix_List_Contains <object present>"); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(pkix_List_Contains(list, (PKIX_PL_Object *)testItem4, &found, plContext)); |
| |
| if (!found) { |
| testError("Contains missed item that was present!"); |
| } |
| |
| PKIX_TEST_DECREF_BC(list); |
| PKIX_TEST_DECREF_BC(testItem); |
| PKIX_TEST_DECREF_BC(testItem2); |
| PKIX_TEST_DECREF_BC(testItem3); |
| PKIX_TEST_DECREF_BC(testItem4); |
| |
| cleanup: |
| |
| PKIX_TEST_RETURN(); |
| } |
| #endif |
| |
| static void |
| testErrorHandling(void) |
| { |
| PKIX_List *emptylist = NULL; |
| PKIX_List *list = NULL; |
| PKIX_PL_Object *tempItem = NULL; |
| |
| PKIX_TEST_STD_VARS(); |
| |
| PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(&list, plContext)); |
| |
| PKIX_TEST_EXPECT_ERROR(PKIX_List_GetItem(list, 4, &tempItem, plContext)); |
| |
| PKIX_TEST_EXPECT_ERROR(PKIX_List_GetItem(list, 1, NULL, plContext)); |
| PKIX_TEST_EXPECT_ERROR(PKIX_List_SetItem(list, 4, tempItem, plContext)); |
| PKIX_TEST_EXPECT_ERROR(PKIX_List_SetItem(NULL, 1, tempItem, plContext)); |
| PKIX_TEST_EXPECT_ERROR(PKIX_List_InsertItem(list, 4, tempItem, plContext)); |
| |
| PKIX_TEST_EXPECT_ERROR(PKIX_List_InsertItem(NULL, 1, tempItem, plContext)); |
| |
| PKIX_TEST_EXPECT_ERROR(PKIX_List_AppendItem(NULL, tempItem, plContext)); |
| PKIX_TEST_EXPECT_ERROR(PKIX_List_DeleteItem(list, 5, plContext)); |
| PKIX_TEST_EXPECT_ERROR(PKIX_List_DeleteItem(NULL, 1, plContext)); |
| PKIX_TEST_EXPECT_ERROR(PKIX_List_GetLength(list, NULL, plContext)); |
| |
| PKIX_TEST_DECREF_BC(list); |
| PKIX_TEST_DECREF_BC(emptylist); |
| |
| cleanup: |
| |
| PKIX_TEST_RETURN(); |
| } |
| |
| static void |
| testDestroy(PKIX_List *list) |
| { |
| PKIX_TEST_STD_VARS(); |
| |
| PKIX_TEST_DECREF_BC(list); |
| |
| cleanup: |
| |
| PKIX_TEST_RETURN(); |
| } |
| |
| int |
| test_list(int argc, char *argv[]) |
| { |
| |
| PKIX_List *list, *list2; |
| PKIX_PL_String *testItem, *testItem2, *testItem3; |
| char *testItemString = "a"; |
| char *testItemString2 = "b"; |
| char *testItemString3 = "c"; |
| PKIX_UInt32 actualMinorVersion; |
| PKIX_UInt32 j = 0; |
| |
| PKIX_TEST_STD_VARS(); |
| |
| startTests("Lists"); |
| |
| PKIX_TEST_EXPECT_NO_ERROR( |
| PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext)); |
| |
| subTest("PKIX_List_Create"); |
| createLists(&list, &list2); |
| |
| subTest("pkix_List_ReverseList"); |
| testReverseList(); |
| |
| subTest("Zero-length List"); |
| testZeroLengthList(list); |
| |
| subTest("PKIX_List_Get/SetItem"); |
| testGetSetItem(list, |
| testItemString, |
| testItemString2, |
| testItemString3, |
| &testItem, |
| &testItem2, |
| &testItem3); |
| |
| subTest("PKIX_List_GetLength"); |
| testGetLength(list); |
| |
| PKIX_TEST_EQ_HASH_TOSTR_DUP(list, |
| list, |
| list2, |
| "(c, b, c)", |
| List, |
| PKIX_TRUE); |
| |
| subTest("PKIX_List_InsertItem"); |
| testInsertItem(list, testItem, testItemString); |
| |
| subTest("PKIX_List_AppendItem"); |
| testAppendItem(list, testItem); |
| |
| subTest("Nested Lists"); |
| testNestedLists(list, list2, testItem, testItem2); |
| |
| subTest("PKIX_List_DeleteItem"); |
| testDeleteItem(list, list2, testItem2, testItem3); |
| |
| PKIX_TEST_DECREF_BC(testItem); |
| PKIX_TEST_DECREF_BC(testItem2); |
| PKIX_TEST_DECREF_BC(testItem3); |
| |
| #if testContainsFunction |
| /* This test requires pkix_List_Contains to be in nss.def */ |
| testContains(); |
| #endif |
| |
| subTest("PKIX_List Error Handling"); |
| testErrorHandling(); |
| |
| subTest("PKIX_List_Destroy"); |
| testDestroy(list); |
| |
| cleanup: |
| |
| PKIX_Shutdown(plContext); |
| |
| PKIX_TEST_RETURN(); |
| |
| endTests("Lists"); |
| |
| return (0); |
| } |