Wed, 21 Feb 2024 18:53:55 +0100
add xml test case for the tree iterator
closes #371
tests/test_tree.c | file | annotate | diff | comparison | revisions |
1.1 --- a/tests/test_tree.c Wed Feb 21 18:32:38 2024 +0100 1.2 +++ b/tests/test_tree.c Wed Feb 21 18:53:55 2024 +0100 1.3 @@ -388,6 +388,83 @@ 1.4 } 1.5 } 1.6 1.7 +typedef struct test_xml_node { 1.8 + struct test_xml_node *parent; 1.9 + struct test_xml_node *next; 1.10 + struct test_xml_node *prev; 1.11 + struct test_xml_node *children; 1.12 + char const* name; 1.13 +} test_xml_node; 1.14 + 1.15 +CX_TEST(test_tree_iterator_xml) { 1.16 + test_xml_node project = {0}; 1.17 + test_xml_node config = {0}; 1.18 + test_xml_node var1 = {0}; 1.19 + test_xml_node var2 = {0}; 1.20 + test_xml_node var3 = {0}; 1.21 + test_xml_node dependency1 = {0}; 1.22 + test_xml_node dependency1make = {0}; 1.23 + test_xml_node dependency2 = {0}; 1.24 + test_xml_node dependency2lang = {0}; 1.25 + test_xml_node dependency2make = {0}; 1.26 + test_xml_node target = {0}; 1.27 + test_xml_node target_feature = {0}; 1.28 + test_xml_node target_feature_dependencies = {0}; 1.29 + test_xml_node target_dependencies = {0}; 1.30 + 1.31 + project.name = "project"; 1.32 + config.name = "config"; 1.33 + var1.name = "var"; 1.34 + var2.name = "var"; 1.35 + var3.name = "var"; 1.36 + dependency1.name = "dependency"; 1.37 + dependency1make.name = "make"; 1.38 + dependency2.name = "dependency"; 1.39 + dependency2lang.name = "lang"; 1.40 + dependency2make.name = "make"; 1.41 + target.name = "target"; 1.42 + target_feature.name = "feature"; 1.43 + target_dependencies.name = "dependencies"; 1.44 + target_feature_dependencies.name = "dependencies"; 1.45 + 1.46 + cx_tree_link(&project, &target, tree_node_layout); 1.47 + cx_tree_link(&project, &dependency2, tree_node_layout); 1.48 + cx_tree_link(&project, &dependency1, tree_node_layout); 1.49 + cx_tree_link(&project, &config, tree_node_layout); 1.50 + cx_tree_link(&config, &var3, tree_node_layout); 1.51 + cx_tree_link(&config, &var2, tree_node_layout); 1.52 + cx_tree_link(&config, &var1, tree_node_layout); 1.53 + cx_tree_link(&dependency1, &dependency1make, tree_node_layout); 1.54 + cx_tree_link(&dependency2, &dependency2make, tree_node_layout); 1.55 + cx_tree_link(&dependency2, &dependency2lang, tree_node_layout); 1.56 + cx_tree_link(&target, &target_dependencies, tree_node_layout); 1.57 + cx_tree_link(&target, &target_feature, tree_node_layout); 1.58 + cx_tree_link(&target_feature, &target_feature_dependencies, tree_node_layout); 1.59 + 1.60 + char const *expected = 1.61 + "<project><config><var></var><var></var><var></var></config>" 1.62 + "<dependency><make></make></dependency><dependency><lang></lang><make></make></dependency>" 1.63 + "<target><feature><dependencies></dependencies></feature><dependencies></dependencies></target></project>"; 1.64 + char *actual = malloc(512); 1.65 + CX_TEST_DO { 1.66 + CxTreeIterator iter = cx_tree_iterator(&project, true, tree_child_list); 1.67 + size_t i = 0; 1.68 + cx_foreach(test_xml_node*, node, iter) { 1.69 + size_t len = strlen(node->name); 1.70 + actual[i++] = '<'; 1.71 + if (iter.exiting) { 1.72 + actual[i++] = '/'; 1.73 + } 1.74 + memcpy(actual+i, node->name, len); 1.75 + i += len; 1.76 + actual[i++] = '>'; 1.77 + } 1.78 + actual[i] = '\0'; 1.79 + CX_TEST_ASSERT(0 == strcmp(expected, actual)); 1.80 + } 1.81 + free(actual); 1.82 +} 1.83 + 1.84 CxTestSuite *cx_test_suite_tree_low_level(void) { 1.85 CxTestSuite *suite = cx_test_suite_new("tree (low level)"); 1.86 1.87 @@ -399,6 +476,7 @@ 1.88 cx_test_register(suite, test_tree_iterator_create_and_dispose); 1.89 cx_test_register(suite, test_tree_iterator_basic_only_enter); 1.90 cx_test_register(suite, test_tree_iterator_basic_enter_and_exit); 1.91 + cx_test_register(suite, test_tree_iterator_xml); 1.92 1.93 return suite; 1.94 }