add xml test case for the tree iterator

Wed, 21 Feb 2024 18:53:55 +0100

author
Mike Becker <universe@uap-core.de>
date
Wed, 21 Feb 2024 18:53:55 +0100
changeset 839
62d3aecc5bb7
parent 838
1ce90ab4fab9
child 840
4f02995ce44e

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  }

mercurial