From 0cac815b6398d60171e992a4333ab16ad542aebc Mon Sep 17 00:00:00 2001 From: "arseny.kapoulkine" Date: Sun, 8 Nov 2009 15:17:46 +0000 Subject: tests: More coverage tests git-svn-id: http://pugixml.googlecode.com/svn/trunk@225 99668b35-9821-0410-8761-19e4c4f06640 --- tests/test_xpath.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++ tests/test_xpath_functions.cpp | 3 ++- tests/test_xpath_parse.cpp | 5 ++++ tests/test_xpath_paths.cpp | 7 ++++++ 4 files changed, 71 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/test_xpath.cpp b/tests/test_xpath.cpp index abcefd9..5f23f44 100644 --- a/tests/test_xpath.cpp +++ b/tests/test_xpath.cpp @@ -38,4 +38,61 @@ TEST(xpath_allocator_large_page) CHECK_XPATH_NUMBER(xml_node(), ("string-length('" + query + "')").c_str(), 8192); } +TEST_XML(xpath_sort_complex, "test") +{ + // just some random union order, it should not matter probably? + xpath_node_set ns = doc.child("node").select_nodes("child1 | child2 | child1/@* | . | child2/@* | child2/text()"); + + ns.sort(false); + xpath_node_set sorted = ns; + + ns.sort(true); + xpath_node_set reverse_sorted = ns; + + doc.precompute_document_order(); + + xpath_node_set_tester(sorted, "sorted order failed") % 2 % 3 % 4 % 5 % 6 % 7 % 8; + xpath_node_set_tester(reverse_sorted, "reverse sorted order failed") % 8 % 7 % 6 % 5 % 4 % 3 % 2; +} + +TEST_XML(xpath_sort_children, "") +{ + xpath_node_set ns = doc.child("node").select_nodes("child/subchild[@id=1] | child/subchild[@id=2]"); + + ns.sort(false); + xpath_node_set sorted = ns; + + ns.sort(true); + xpath_node_set reverse_sorted = ns; + + doc.precompute_document_order(); + + xpath_node_set_tester(sorted, "sorted order failed") % 4 % 7; + xpath_node_set_tester(reverse_sorted, "reverse sorted order failed") % 7 % 4; +} + +TEST_XML(xpath_sort_attributes, "") +{ + xml_node n = doc.child("node"); + + // we need to insert attributes manually since unsorted node sets are (always?) sorted via pointers because of remove_duplicates, + // so we need to have different document and pointer order to cover all comparator cases + n.append_attribute("attr2"); + n.append_attribute("attr3"); + n.insert_attribute_before("attr1", n.attribute("attr2")); + + xpath_node_set ns = n.select_nodes("@*"); + + ns.sort(true); + xpath_node_set reverse_sorted = ns; + + ns.sort(false); + xpath_node_set sorted = ns; + + doc.precompute_document_order(); + + xpath_node_set_tester(sorted, "sorted order failed") % 3 % 4 % 5; + xpath_node_set_tester(reverse_sorted, "reverse sorted order failed") % 5 % 4 % 3; +} + #endif diff --git a/tests/test_xpath_functions.cpp b/tests/test_xpath_functions.cpp index ed2c47a..9cf8164 100644 --- a/tests/test_xpath_functions.cpp +++ b/tests/test_xpath_functions.cpp @@ -599,7 +599,7 @@ TEST_XML_FLAGS(xpath_nodeset_local_name, "text< CHECK_XPATH_FAIL("local-name(c1, c2)"); } -TEST_XML_FLAGS(xpath_nodeset_namespace_uri, "text", parse_default | parse_pi) +TEST_XML_FLAGS(xpath_nodeset_namespace_uri, "text", parse_default | parse_pi) { xml_node c; xml_node n = doc.child("node"); @@ -621,6 +621,7 @@ TEST_XML_FLAGS(xpath_nodeset_namespace_uri, "te CHECK_XPATH_STRING(n, "namespace-uri(c3)", "http://def"); CHECK_XPATH_STRING(n, "namespace-uri(c3/@attr)", ""); // the namespace name for an unprefixed attribute name always has no value (Namespaces in XML 1.0) CHECK_XPATH_STRING(n, "namespace-uri(c3/child::node())", "http://def"); + CHECK_XPATH_STRING(n, "namespace-uri(c6/@bar:attr)", ""); // namespace-uri with 2 arguments CHECK_XPATH_FAIL("namespace-uri(c1, c2)"); diff --git a/tests/test_xpath_parse.cpp b/tests/test_xpath_parse.cpp index 4595b3c..cce3085 100644 --- a/tests/test_xpath_parse.cpp +++ b/tests/test_xpath_parse.cpp @@ -44,4 +44,9 @@ TEST(xpath_empty_expression) CHECK_XPATH_FAIL(""); } +TEST(xpath_lexer_error) +{ + CHECK_XPATH_FAIL("!"); +} + #endif diff --git a/tests/test_xpath_paths.cpp b/tests/test_xpath_paths.cpp index f2b6402..3d45e9c 100644 --- a/tests/test_xpath_paths.cpp +++ b/tests/test_xpath_paths.cpp @@ -463,4 +463,11 @@ TEST_XML(xpath_paths_descendant_double_slash_w3c, "") +{ + doc.precompute_document_order(); + + CHECK_XPATH_NODESET(doc, "(node/child/subchild)[2]") % 7; +} + #endif -- cgit v1.2.3