Blame nss/cmd/libpkix/pkix/util/test_list.c

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