diff --git a/tests/test_dom_traverse.cpp b/tests/test_dom_traverse.cpp index e42846f..83afec8 100644 --- a/tests/test_dom_traverse.cpp +++ b/tests/test_dom_traverse.cpp @@ -1048,14 +1048,14 @@ TEST_XML(dom_unspecified_bool_coverage, "text") { xml_node node = doc.first_child(); - node(0); - node.first_attribute()(0); - node.text()(0); + static_cast(node)(0); + static_cast(node.first_attribute())(0); + static_cast(node.text())(0); #ifndef PUGIXML_NO_XPATH xpath_query q(STR("/node")); - q(0); - q.evaluate_node(doc)(0); + static_cast(q)(0); + static_cast(q.evaluate_node(doc))(0); #endif } diff --git a/tests/test_xpath.cpp b/tests/test_xpath.cpp index 80115b8..a65ee37 100644 --- a/tests/test_xpath.cpp +++ b/tests/test_xpath.cpp @@ -110,7 +110,7 @@ TEST_XML(xpath_sort_attributes, "") n.append_attribute(STR("attr3")); n.insert_attribute_before(STR("attr1"), n.attribute(STR("attr2"))); - xpath_node_set ns = n.select_nodes(STR("@*")); + xpath_node_set ns = n.select_nodes(STR("@* | @*")); ns.sort(true); xpath_node_set reverse_sorted = ns; @@ -122,6 +122,25 @@ TEST_XML(xpath_sort_attributes, "") xpath_node_set_tester(reverse_sorted, "reverse sorted order failed") % 5 % 4 % 3; } +TEST_XML(xpath_sort_attributes_docorder, "") +{ + xml_node n = doc.child(STR("node")); + + n.first_attribute().set_name(STR("attribute1")); + n.insert_attribute_after(STR("attr3"), n.attribute(STR("attr2"))); + + xpath_node_set ns = n.select_nodes(STR("@* | @*")); + + ns.sort(true); + xpath_node_set reverse_sorted = ns; + + ns.sort(false); + xpath_node_set sorted = ns; + + xpath_node_set_tester(sorted, "sorted order failed") % 3 % 4 % 5 % 6; + xpath_node_set_tester(reverse_sorted, "reverse sorted order failed") % 6 % 5 % 4 % 3; +} + TEST(xpath_sort_random_medium) { xml_document doc; @@ -629,4 +648,26 @@ TEST(xpath_allocate_string_out_of_memory) } #endif } + +TEST(xpath_remove_duplicates) +{ + xml_document doc; + + for (int i = 0; i < 20; ++i) + { + doc.append_child(STR("node2")); + doc.prepend_child(STR("node1")); + } + + xpath_node_set ns = doc.select_nodes(STR("/node2/preceding::* | //node1 | /node() | /* | /node1/following-sibling::*")); + + ns.sort(); + + { + xpath_node_set_tester tester(ns, "sorted order failed"); + + for (int i = 0; i < 40; ++i) + tester % (2 + i); + } +} #endif diff --git a/tests/test_xpath_variables.cpp b/tests/test_xpath_variables.cpp index 39a4f05..728eaa9 100644 --- a/tests/test_xpath_variables.cpp +++ b/tests/test_xpath_variables.cpp @@ -276,6 +276,29 @@ TEST(xpath_variables_long_name) CHECK_XPATH_BOOLEAN_VAR(xml_node(), STR("$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), &set, true); } +TEST(xpath_variables_long_name_out_of_memory) +{ + xpath_variable_set set; + set.set(STR("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), true); + + test_runner::_memory_fail_threshold = 4096 + 128; + +#ifdef PUGIXML_NO_EXCEPTIONS + xpath_query q(STR("$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), &set); + CHECK(!q); +#else + try + { + xpath_query q(STR("$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), &set); + + CHECK_FORCE_FAIL("Expected exception"); + } + catch (const xpath_exception&) + { + } +#endif +} + TEST_XML(xpath_variables_select, "") { xpath_variable_set set;