From fc6c8633ddd60ff72592986938fa9e0a31f508d1 Mon Sep 17 00:00:00 2001 From: Arseny Kapoulkine Date: Tue, 12 Jan 2016 20:16:29 -0800 Subject: tests: Add test for parse_embed_pcdata --- tests/test_parse.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'tests/test_parse.cpp') diff --git a/tests/test_parse.cpp b/tests/test_parse.cpp index 2c3f125..47f774e 100644 --- a/tests/test_parse.cpp +++ b/tests/test_parse.cpp @@ -1139,3 +1139,46 @@ TEST(parse_fuzz_doctype) xml_document doc; CHECK(doc.load_buffer(data, sizeof(data)).status == status_bad_doctype); } + +TEST(parse_embed_pcdata) +{ + // parse twice - once with default and once with embed_pcdata flags + for (int i = 0; i < 2; ++i) + { + unsigned int flags = (i == 0) ? parse_default : parse_default | parse_embed_pcdata; + + xml_document doc; + xml_parse_result res = doc.load_string(STR("valuevalue1value2outertext"), flags); + CHECK(res); + + xml_node child = doc.child(STR("node")).child(STR("child")); + + // parse_embed_pcdata omits PCDATA nodes so DOM is different + if (flags & parse_embed_pcdata) + { + CHECK_STRING(doc.child(STR("node")).child(STR("key")).value(), STR("value")); + CHECK(!doc.child(STR("node")).child(STR("key")).first_child()); + } + else + { + CHECK_STRING(doc.child(STR("node")).child(STR("key")).value(), STR("")); + CHECK(doc.child(STR("node")).child(STR("key")).first_child()); + CHECK_STRING(doc.child(STR("node")).child(STR("key")).first_child().value(), STR("value")); + } + + // higher-level APIs work the same though + CHECK_STRING(child.text().get(), STR("outer")); + CHECK_STRING(child.child(STR("inner1")).text().get(), STR("value1")); + + CHECK_STRING(child.child_value(), STR("outer")); + CHECK_STRING(child.child_value(STR("inner2")), STR("value2")); + + #ifndef PUGIXML_NO_XPATH + CHECK_XPATH_NUMBER(doc, STR("count(node/child/*[starts-with(., 'value')])"), 2); + #endif + + CHECK_NODE(doc, STR("valuevalue1value2outertext")); + CHECK_NODE_EX(doc, STR("\nvalue\n\nvalue1\nvalue2outer\ntext\n\n\n"), STR("\t"), 0); + CHECK_NODE_EX(doc, STR("\n\tvalue\n\t\n\t\tvalue1\n\t\tvalue2outer\n\ttext\n\t\n\n"), STR("\t"), format_indent); + } +} \ No newline at end of file -- cgit v1.2.3