2 #include <testing/basic.h>
5 test_fdt_basic_iter(ptr_t dtb)
14 testcase("iter-child1", {
15 loc = fdt_next_token(loc, &depth);
18 expect_int(loc.token->token, FDT_NOD_BEGIN);
19 expect_str(loc.node->name, "child@1");
22 testcase("iter-child1-prop", {
23 loc = fdt_next_token(loc, &depth);
26 expect_true(fdt_prop(loc.token));
27 expect_str(fdt_prop_key(&fdt, loc), "prop-child1");
30 testcase("iter-child1-end", {
31 loc = fdt_next_token(loc, &depth);
34 expect_true(fdt_node_end(loc.token));
37 testcase("iter-step-out", {
38 loc = fdt_next_token(loc, &depth);
40 expect_int(depth, -1);
41 expect_true(fdt_node(loc.token));
42 expect_str(loc.node->name, "child@2");
47 test_fdt_sibling_iter(ptr_t dtb)
56 loc = fdt_descend_into(loc);
58 testcase("sibling-iter-1", {
59 expect_int(loc.token->token, FDT_NOD_BEGIN);
60 expect_str(loc.node->name, "child@1");
63 testcase("sibling-iter-2", {
64 expect_true(fdt_next_sibling(loc, &loc));
66 expect_int(loc.token->token, FDT_NOD_BEGIN);
67 expect_str(loc.node->name, "child@2");
70 testcase("sibling-iter-3", {
71 expect_true(fdt_next_sibling(loc, &loc));
73 expect_int(loc.token->token, FDT_NOD_BEGIN);
74 expect_str(loc.node->name, "child@3");
77 testcase("sibling-iter-3", {
78 expect_false(fdt_next_sibling(loc, &loc));
80 expect_true(fdt_node_end(loc.token));
85 test_fdt_descend_ascend(ptr_t dtb)
94 testcase("descend-to-child1", {
95 loc = fdt_descend_into(loc);
97 expect_int(loc.token->token, FDT_NOD_BEGIN);
98 expect_str(loc.node->name, "child@1");
101 testcase("goto-child2", {
102 expect_true(fdt_next_sibling(loc, &loc));
104 expect_int(loc.token->token, FDT_NOD_BEGIN);
105 expect_str(loc.node->name, "child@2");
107 loc = fdt_descend_into(loc);
109 expect_int(loc.token->token, FDT_PROP);
110 expect_str(fdt_prop_key(&fdt, loc), "prop-child2");
113 testcase("descend-on-prop", {
114 loc = fdt_descend_into(loc);
116 expect_true(loc.ptr == loc.ptr);
117 expect_int(loc.token->token, FDT_PROP);
118 expect_str(fdt_prop_key(&fdt, loc), "prop-child2");
121 testcase("descend-to-child21", {
122 expect_true(fdt_next_sibling(loc, &loc));
124 expect_int(loc.token->token, FDT_NOD_BEGIN);
125 expect_str(loc.node->name, "child@21");
129 loc = fdt_ascend_from(loc);
131 expect_int(loc.token->token, FDT_NOD_BEGIN);
132 expect_str(loc.node->name, "child@3");
135 testcase("ascend-to-root", {
136 loc = fdt_ascend_from(loc);
138 expect_true(fdt_node_end(loc.token));
144 test_find_prop(ptr_t dtb)
154 testcase("prop-find-child1", {
155 loc = fdt_descend_into(loc);
156 expect_int(loc.token->token, FDT_NOD_BEGIN);
157 expect_str(loc.node->name, "child@1");
159 expect_true(fdt_find_prop(&fdt, loc, "prop-child1", &val));
160 expect_int(val.size, 0);
162 expect_false(fdt_find_prop(&fdt, loc, "prop-child2", &val));
167 run_test(int argc, const char* argv[])
169 ptr_t dtb = load_fdt();
171 test_fdt_basic_iter(dtb);
172 test_fdt_descend_ascend(dtb);
173 test_fdt_sibling_iter(dtb);