From 630be2edb3110b9627718bd7b735348e4940fdd4 Mon Sep 17 00:00:00 2001 From: "arseny.kapoulkine" Date: Sun, 26 Sep 2010 19:01:36 +0000 Subject: tests: Added node_doctype and parse_doctype tests git-svn-id: http://pugixml.googlecode.com/svn/trunk@757 99668b35-9821-0410-8761-19e4c4f06640 --- tests/test_dom_modify.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++-- tests/test_dom_traverse.cpp | 19 +++++++------ tests/test_parse_doctype.cpp | 27 +++++++++++++++--- tests/test_write.cpp | 6 ++++ 4 files changed, 102 insertions(+), 15 deletions(-) diff --git a/tests/test_dom_modify.cpp b/tests/test_dom_modify.cpp index 46b0543..eefda58 100644 --- a/tests/test_dom_modify.cpp +++ b/tests/test_dom_modify.cpp @@ -514,13 +514,16 @@ TEST_XML(dom_node_copy_crossdoc, "") CHECK_NODE(newdoc, STR("")); } -TEST_XML_FLAGS(dom_node_copy_types, "pcdata", parse_default | parse_pi | parse_comments | parse_declaration) +TEST_XML_FLAGS(dom_node_copy_types, "pcdata", parse_full) { doc.append_copy(doc.child(STR("root"))); - CHECK_NODE(doc, STR("pcdatapcdata")); + CHECK_NODE(doc, STR("pcdatapcdata")); doc.insert_copy_before(doc.first_child(), doc.first_child()); - CHECK_NODE(doc, STR("pcdatapcdata")); + CHECK_NODE(doc, STR("pcdatapcdata")); + + doc.insert_copy_after(doc.first_child().next_sibling().next_sibling(), doc.first_child()); + CHECK_NODE(doc, STR("pcdatapcdata")); } TEST_XML(dom_attr_assign_large_number, "") @@ -549,6 +552,16 @@ TEST(dom_node_declaration_name) CHECK_NODE(doc, STR("")); } +TEST(dom_node_declaration_attributes) +{ + xml_document doc; + xml_node node = doc.append_child(node_declaration); + node.append_attribute(STR("version")) = STR("1.0"); + node.append_attribute(STR("encoding")) = STR("utf-8"); + + CHECK_NODE(doc, STR("")); +} + TEST(dom_node_declaration_top_level) { xml_document doc; @@ -677,3 +690,49 @@ TEST(dom_node_memory_limit) CHECK(doc.remove_child(doc.first_child())); } } + +TEST(dom_node_doctype_top_level) +{ + xml_document doc; + doc.append_child().set_name(STR("node")); + + xml_node node = doc.first_child(); + node.append_child(node_pcdata).set_value(STR("text")); + + CHECK(node.insert_child_before(node_doctype, node.first_child()) == xml_node()); + CHECK(node.insert_child_after(node_doctype, node.first_child()) == xml_node()); + CHECK(node.append_child(node_doctype) == xml_node()); + + CHECK_NODE(doc, STR("text")); + + CHECK(doc.insert_child_before(node_doctype, node)); + CHECK(doc.insert_child_after(node_doctype, node)); + CHECK(doc.append_child(node_doctype)); + + CHECK_NODE(doc, STR("text")); +} + +TEST(dom_node_doctype_copy) +{ + xml_document doc; + doc.append_child(node_doctype); + + doc.append_child().set_name(STR("node")); + + doc.last_child().append_copy(doc.first_child()); + + CHECK_NODE(doc, STR("")); +} + +TEST(dom_node_doctype_value) +{ + xml_document doc; + xml_node node = doc.append_child(node_doctype); + + CHECK(node.type() == node_doctype); + CHECK_STRING(node.value(), STR("")); + CHECK_NODE(node, STR("")); + + CHECK(node.set_value(STR("id [ foo ]"))); + CHECK_NODE(node, STR("")); +} diff --git a/tests/test_dom_traverse.cpp b/tests/test_dom_traverse.cpp index 09055f0..865b90a 100644 --- a/tests/test_dom_traverse.cpp +++ b/tests/test_dom_traverse.cpp @@ -347,7 +347,7 @@ TEST_XML(dom_node_root, "") CHECK(doc.child(STR("node")).root() == doc); } -TEST_XML_FLAGS(dom_node_type, "pcdata", parse_default | parse_pi | parse_comments | parse_declaration) +TEST_XML_FLAGS(dom_node_type, "pcdata", parse_default | parse_pi | parse_comments | parse_declaration | parse_doctype) { CHECK(xml_node().type() == node_null); CHECK(doc.type() == node_document); @@ -355,6 +355,7 @@ TEST_XML_FLAGS(dom_node_type, "pcdatatype() == node_declaration); + CHECK((it++)->type() == node_doctype); CHECK((it++)->type() == node_pi); CHECK((it++)->type() == node_comment); CHECK((it++)->type() == node_element); @@ -365,7 +366,7 @@ TEST_XML_FLAGS(dom_node_type, "pcdatatype() == node_cdata); } -TEST_XML_FLAGS(dom_node_name_value, "pcdata", parse_default | parse_pi | parse_comments | parse_declaration) +TEST_XML_FLAGS(dom_node_name_value, "pcdata", parse_default | parse_pi | parse_comments | parse_declaration | parse_doctype) { CHECK_NAME_VALUE(xml_node(), STR(""), STR("")); CHECK_NAME_VALUE(doc, STR(""), STR("")); @@ -373,6 +374,7 @@ TEST_XML_FLAGS(dom_node_name_value, "pcdatatext") CHECK(walker.log == STR("|-1 <=|0 !node=|1 !child=|2 !=text|-1 >=")); } -TEST_XML_FLAGS(dom_offset_debug, "pcdata", parse_default | parse_pi | parse_comments | parse_declaration) +TEST_XML_FLAGS(dom_offset_debug, "pcdata", parse_default | parse_pi | parse_comments | parse_declaration | parse_doctype) { CHECK(xml_node().offset_debug() == -1); CHECK(doc.offset_debug() == 0); @@ -748,14 +750,15 @@ TEST_XML_FLAGS(dom_offset_debug, "pcdataoffset_debug() == 2); - CHECK((it++)->offset_debug() == 9); - CHECK((it++)->offset_debug() == 17); - CHECK((it++)->offset_debug() == 28); + CHECK((it++)->offset_debug() == 16); + CHECK((it++)->offset_debug() == 19); + CHECK((it++)->offset_debug() == 27); + CHECK((it++)->offset_debug() == 38); xml_node_iterator cit = doc.child(STR("node")).begin(); - CHECK((cit++)->offset_debug() == 33); - CHECK((cit++)->offset_debug() == 48); + CHECK((cit++)->offset_debug() == 43); + CHECK((cit++)->offset_debug() == 58); } TEST_XML(dom_internal_object, "value") diff --git a/tests/test_parse_doctype.cpp b/tests/test_parse_doctype.cpp index c633467..2a092d9 100644 --- a/tests/test_parse_doctype.cpp +++ b/tests/test_parse_doctype.cpp @@ -40,8 +40,9 @@ static bool test_doctype_wf(const char_t* decl) if (!load_concat(doc, decl, STR("")) || !test_node(doc, STR(""), STR(""), format_raw)) return false; if (!load_concat(doc, STR(""), decl, STR("")) || !test_node(doc, STR(""), STR(""), format_raw)) return false; - // wrap in node to check that doctype is parsed fully (does not leave any "pcdata") - if (!load_concat(doc, STR(""), decl, STR("")) || !test_node(doc, STR(""), STR(""), format_raw)) return false; + // check load-store contents preservation + CHECK(doc.load(decl, parse_doctype)); + CHECK_NODE(doc, decl); return true; } @@ -276,9 +277,12 @@ TEST(parse_doctype_xmlconf_oasis_1) TEST_DOCTYPE_WF(" ?>/\''\"> ]>"); TEST_DOCTYPE_WF(" ]>"); TEST_DOCTYPE_WF(" ]>"); - TEST_DOCTYPE_WF(" "); // not actually a doctype :) - TEST_DOCTYPE_WF(" &a%b&#c?>"); // not actually a doctype :) TEST_DOCTYPE_WF("]>"); + + // not actually a doctype :) + xml_document doc; + CHECK(doc.load(STR(" "), parse_full) && doc.first_child().type() == node_comment && doc.last_child().type() == node_comment && doc.first_child().next_sibling() == doc.last_child()); + CHECK(doc.load(STR(" &a%b&#c?>"), parse_full) && doc.first_child().type() == node_pi && doc.first_child() == doc.last_child()); } TEST(parse_doctype_xmlconf_xmltest_1) @@ -294,3 +298,18 @@ TEST(parse_doctype_xmlconf_xmltest_1) TEST_DOCTYPE_WF("\"> ]>"); TEST_DOCTYPE_WF(" \"> ]>"); } + +TEST_XML_FLAGS(parse_doctype_value, " \"> ]>", parse_minimal | parse_doctype) +{ + xml_node n = doc.first_child(); + + CHECK(n.type() == node_doctype); + CHECK_STRING(n.value(), STR("doc [ \"> ]")); +} + +TEST(parse_doctype_error_toplevel) +{ + xml_document doc; + CHECK(doc.load(STR("")).status == status_bad_doctype); + CHECK(doc.load(STR(""), parse_doctype).status == status_bad_doctype); +} diff --git a/tests/test_write.cpp b/tests/test_write.cpp index 4237739..0904b21 100644 --- a/tests/test_write.cpp +++ b/tests/test_write.cpp @@ -63,6 +63,12 @@ TEST_XML_FLAGS(write_declaration, "", parse_default | parse CHECK_NODE_EX(doc, STR("\n"), STR(""), 0); } +TEST_XML_FLAGS(write_doctype, "", parse_default | parse_doctype) +{ + CHECK_NODE(doc, STR("")); + CHECK_NODE_EX(doc, STR("\n"), STR(""), 0); +} + TEST_XML(write_escape, "text") { doc.child(STR("node")).attribute(STR("attr")) = STR("<>'\"&\x04\r\n\t"); -- cgit v1.2.3