diff options
| -rw-r--r-- | tests/test_dom_traverse.cpp | 10 | ||||
| -rw-r--r-- | tests/test_xpath.cpp | 43 | ||||
| -rw-r--r-- | tests/test_xpath_variables.cpp | 23 | 
3 files changed, 70 insertions, 6 deletions
| 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, "<node attr='value'>text</node>")  {  	xml_node node = doc.first_child(); -	node(0); -	node.first_attribute()(0); -	node.text()(0); +	static_cast<void (*)(xml_node***)>(node)(0); +	static_cast<void (*)(xml_attribute***)>(node.first_attribute())(0); +	static_cast<void (*)(xml_text***)>(node.text())(0);  #ifndef PUGIXML_NO_XPATH  	xpath_query q(STR("/node")); -	q(0); -	q.evaluate_node(doc)(0); +	static_cast<void (*)(xpath_query***)>(q)(0); +	static_cast<void (*)(xpath_node***)>(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, "<node/>")  	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, "<node/>")  	xpath_node_set_tester(reverse_sorted, "reverse sorted order failed") % 5 % 4 % 3;  } +TEST_XML(xpath_sort_attributes_docorder, "<node attr1='' attr2='value' attr4='value' />") +{ +	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, "<node attr='1'/><node attr='2'/>")
  {
  	xpath_variable_set set;
 | 
