data tree NEW opaque data node
Used for unknown anyxml/anydata nodes.
Some refactoring including making context
const for cases when only the dictionary
is modified or replacing unsigned int with
uint32_t.
diff --git a/tests/src/test_printer_xml.c b/tests/src/test_printer_xml.c
index 83e14dc..f6cca7b 100644
--- a/tests/src/test_printer_xml.c
+++ b/tests/src/test_printer_xml.c
@@ -206,6 +206,8 @@
assert_non_null(tree = lyd_parse_mem(s->ctx, data, LYD_XML, LYD_VALOPT_DATA_ONLY));
assert_true((len = lyd_print_mem(&printed, tree, LYD_XML, 0)) >= 0);
assert_int_equal(len, strlen(printed));
+ /* canonized */
+ data = "<any xmlns=\"urn:tests:types\"><somexml xmlns=\"example.com\"><x xmlns=\"url:x\"/></somexml></any>";
assert_string_equal(printed, data);
free(printed);
lyd_free_all(tree);
@@ -218,6 +220,38 @@
free(printed);
lyd_free_all(tree);
+ data =
+ "<any xmlns=\"urn:tests:types\">"
+ "<cont>"
+ "<defs:elem1 xmlns:defs=\"urn:tests:defs\">"
+ "<elem2 xmlns:defaults=\"urn:defaults\" defs:attr1=\"defaults:val\" attr2=\"/defaults:node/defs:node2\">"
+ "</elem2>"
+ "</defs:elem1>"
+ "</cont>"
+ "</any>";
+ assert_non_null(tree = lyd_parse_mem(s->ctx, data, LYD_XML, LYD_VALOPT_DATA_ONLY));
+ /* cont should be normally parsed */
+ assert_string_equal(tree->schema->name, "any");
+ assert_int_equal(((struct lyd_node_any *)tree)->value_type, LYD_ANYDATA_DATATREE);
+ assert_string_equal(((struct lyd_node_any *)tree)->value.tree->schema->name, "cont");
+ /* but its children not */
+ assert_null(((struct lyd_node_inner *)(((struct lyd_node_any *)tree)->value.tree))->child->schema);
+ assert_true((len = lyd_print_mem(&printed, tree, LYD_XML, 0)) >= 0);
+ assert_int_equal(len, strlen(printed));
+ /* canonized */
+ data =
+ "<any xmlns=\"urn:tests:types\">"
+ "<cont>"
+ "<elem1 xmlns=\"urn:tests:defs\">"
+ "<elem2 xmlns=\"urn:tests:types\" xmlns:defs=\"urn:tests:defs\" xmlns:defaults=\"urn:defaults\""
+ " defs:attr1=\"defaults:val\" attr2=\"/defaults:node/defs:node2\"/>"
+ "</elem1>"
+ "</cont>"
+ "</any>";
+ assert_string_equal(printed, data);
+ free(printed);
+ lyd_free_all(tree);
+
s->func = NULL;
}