From b3ef67feb69f84f86939f6f3d410930c370c15f8 Mon Sep 17 00:00:00 2001 From: Vreixo Formoso Date: Sat, 1 Mar 2008 16:27:54 +0100 Subject: [PATCH] Test case for iso_dir_iter_take(). --- test/test_node.c | 123 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) diff --git a/test/test_node.c b/test/test_node.c index 6c2084a..a638861 100644 --- a/test/test_node.c +++ b/test/test_node.c @@ -527,6 +527,128 @@ void test_iso_dir_get_children() free(dir); } +void test_iso_dir_iter_take() +{ + int result; + IsoDirIter *iter; + IsoDir *dir; + IsoNode *node, *node1, *node2; + + /* init dir with default values, not all field need to be initialized */ + dir = malloc(sizeof(IsoDir)); + dir->children = NULL; + dir->nchildren = 0; + + result = iso_dir_get_children(dir, &iter); + CU_ASSERT_EQUAL(result, 1); + + /* remove on empty dir! */ + result = iso_dir_iter_take(iter); + CU_ASSERT_TRUE(result < 0); /* should fail */ + + iso_dir_iter_free(iter); + + /* 1st node to be added */ + node1 = calloc(1, sizeof(IsoNode)); + node1->name = "Node1"; + result = iso_dir_add_node(dir, node1, 0); + CU_ASSERT_EQUAL(dir->nchildren, 1); + + /* test iteration again */ + result = iso_dir_get_children(dir, &iter); + CU_ASSERT_EQUAL(result, 1); + + /* remove before iso_dir_iter_next() */ + result = iso_dir_iter_take(iter); + CU_ASSERT_TRUE(result < 0); /* should fail */ + + result = iso_dir_iter_next(iter, &node); + + /* this should remove the child */ + result = iso_dir_iter_take(iter); + CU_ASSERT_EQUAL(result, 1); + CU_ASSERT_EQUAL(dir->nchildren, 0); + CU_ASSERT_PTR_NULL(dir->children); + + result = iso_dir_iter_has_next(iter); + CU_ASSERT_EQUAL(result, 0); + + iso_dir_iter_free(iter); + + /* add two node */ + result = iso_dir_add_node(dir, node1, 0); + CU_ASSERT_EQUAL(dir->nchildren, 1); + + node2 = calloc(1, sizeof(IsoNode)); + node2->name = "A node to be added first"; + result = iso_dir_add_node(dir, node2, 0); + CU_ASSERT_EQUAL(result, 2); + + result = iso_dir_get_children(dir, &iter); + CU_ASSERT_EQUAL(result, 1); + + /* remove before iso_dir_iter_next() */ + result = iso_dir_iter_take(iter); + CU_ASSERT_TRUE(result < 0); /* should fail */ + + /* iter should have two items... */ + result = iso_dir_iter_next(iter, &node); + CU_ASSERT_EQUAL(result, 1); + CU_ASSERT_PTR_EQUAL(node, node2); + + /* remove node 2 */ + result = iso_dir_iter_take(iter); + CU_ASSERT_EQUAL(result, 1); + CU_ASSERT_EQUAL(dir->nchildren, 1); + CU_ASSERT_PTR_EQUAL(dir->children, node1); + + /* next should still work */ + result = iso_dir_iter_next(iter, &node); + CU_ASSERT_EQUAL(result, 1); + CU_ASSERT_PTR_EQUAL(node, node1); + + /* ...and no more */ + result = iso_dir_iter_has_next(iter); + CU_ASSERT_EQUAL(result, 0); + + result = iso_dir_iter_next(iter, &node); + CU_ASSERT_EQUAL(result, 0); + CU_ASSERT_PTR_NULL(node); + iso_dir_iter_free(iter); + + /* now remove only last child */ + result = iso_dir_add_node(dir, node2, 0); + CU_ASSERT_EQUAL(result, 2); + + result = iso_dir_get_children(dir, &iter); + CU_ASSERT_EQUAL(result, 1); + result = iso_dir_iter_next(iter, &node); + CU_ASSERT_EQUAL(result, 1); + CU_ASSERT_PTR_EQUAL(node, node2); + + result = iso_dir_iter_next(iter, &node); + CU_ASSERT_EQUAL(result, 1); + CU_ASSERT_PTR_EQUAL(node, node1); + + /* take last child */ + result = iso_dir_iter_take(iter); + CU_ASSERT_EQUAL(result, 1); + CU_ASSERT_EQUAL(dir->nchildren, 1); + CU_ASSERT_PTR_EQUAL(dir->children, node2); + + result = iso_dir_iter_has_next(iter); + CU_ASSERT_EQUAL(result, 0); + + result = iso_dir_iter_next(iter, &node); + CU_ASSERT_EQUAL(result, 0); + CU_ASSERT_PTR_NULL(node); + iso_dir_iter_free(iter); + + free(node1); + free(node2); + free(dir); +} + void test_iso_node_take() { int result; @@ -685,6 +807,7 @@ void add_node_suite() CU_add_test(pSuite, "iso_dir_add_node()", test_iso_dir_add_node); CU_add_test(pSuite, "iso_dir_get_node()", test_iso_dir_get_node); CU_add_test(pSuite, "iso_dir_get_children()", test_iso_dir_get_children); + CU_add_test(pSuite, "iso_dir_iter_take()", test_iso_dir_iter_take); CU_add_test(pSuite, "iso_node_take()", test_iso_node_take); CU_add_test(pSuite, "iso_node_set_name()", test_iso_node_set_name); }