From d1b41ba17825911ed37d7fb9bd1a9464ca7ce073 Mon Sep 17 00:00:00 2001 From: "arseny.kapoulkine" Date: Sat, 29 May 2010 20:11:12 +0000 Subject: tests: Added some axis Xalan tests, extended all axis tests to include attribute context nodes git-svn-id: http://pugixml.googlecode.com/svn/trunk@465 99668b35-9821-0410-8761-19e4c4f06640 --- tests/test_xpath_paths.cpp | 21 ++++++++++++++++--- tests/test_xpath_xalan_3.cpp | 50 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 tests/test_xpath_xalan_3.cpp (limited to 'tests') diff --git a/tests/test_xpath_paths.cpp b/tests/test_xpath_paths.cpp index 4da3989..9de6fb1 100644 --- a/tests/test_xpath_paths.cpp +++ b/tests/test_xpath_paths.cpp @@ -11,6 +11,8 @@ TEST_XML(xpath_paths_axes_child, "") @@ -24,6 +26,8 @@ TEST_XML(xpath_paths_axes_descendant, "") @@ -89,9 +93,12 @@ TEST_XML(xpath_paths_axes_following, "") +TEST_XML(xpath_paths_axes_preceding, "") { xml_node c; xml_node n = doc.child(STR("node")); @@ -99,9 +106,12 @@ TEST_XML(xpath_paths_axes_preceding, "") @@ -116,13 +126,16 @@ TEST_XML(xpath_paths_axes_attribute, "") +TEST_XML(xpath_paths_axes_namespace, "") { xml_node n = doc.child(STR("node")); CHECK_XPATH_NODESET(n, STR("namespace:: node()")); // namespace nodes are not supported + CHECK_XPATH_NODESET(n, STR("@attr/attribute::node()")); } TEST_XML(xpath_paths_axes_self, "") @@ -150,6 +163,8 @@ TEST_XML(xpath_paths_axes_descendant_or_self, "") diff --git a/tests/test_xpath_xalan_3.cpp b/tests/test_xpath_xalan_3.cpp new file mode 100644 index 0000000..ceaa69a --- /dev/null +++ b/tests/test_xpath_xalan_3.cpp @@ -0,0 +1,50 @@ +#ifndef PUGIXML_NO_XPATH + +#include "common.hpp" + +TEST_XML(xpath_xalan_match, "") +{ + xml_node c = doc.child(STR("root")); + + CHECK_XPATH_NODESET(c, STR("x[(position() mod 2)=1][position() > 3]")) % 21 % 27 % 33; + CHECK_XPATH_NODESET(c, STR("x[(position() mod 2)=1][position() > 3][position()=2]")) % 27; + CHECK_XPATH_NODESET(c, STR("x[(position() mod 2) > 0][position() > 3][2]")) % 27; + CHECK_XPATH_NODESET(c, STR("x[(position() mod 2)=1][position() > 3][last()]")) % 33; + CHECK_XPATH_NODESET(c, STR("x[(position() mod 2)=1][@num > 5][last()]")) % 33; + CHECK_XPATH_NODESET(c, STR("x[(@num mod 3)=2][position() > 2][last()]")) % 33; + CHECK_XPATH_NODESET(c, STR("x[(position() mod 2)=1][2][@num < 10]")) % 9; + CHECK_XPATH_NODESET(c, STR("x[(((((2*10)-4)+9) div 5) mod 3)]")) % 6; +} + +TEST_XML(xpath_xalan_axes_1, "
") +{ + xml_node center = doc.select_single_node(STR("//center")).node(); + + CHECK_XPATH_NODESET(center, STR("self::*[near-south]")) % 10; + CHECK_XPATH_NODESET(center, STR("self::*[@center-attr-2]")) % 10; + CHECK_XPATH_NODESET(center, STR("preceding-sibling::*")) % 9 % 8 % 7; + CHECK_XPATH_NODESET(center, STR("preceding-sibling::*/following-sibling::*")) % 8 % 9 % 10 % 19 % 20 % 21; + CHECK_XPATH_NODESET(center, STR("preceding-sibling::*[2]/following-sibling::*")) % 9 % 10 % 19 % 20 % 21; + CHECK_XPATH_NODESET(center, STR("preceding-sibling::*[2]/following-sibling::*[4]")) % 20; + CHECK_XPATH_NODESET(center, STR("preceding-sibling::*[2]/following-sibling::*[4]/preceding-sibling::*[5]/following-sibling::*[4]/following-sibling::*[2]")) % 21; + CHECK_XPATH_NODESET(center, STR("following-sibling::*")) % 19 % 20 % 21; + CHECK_XPATH_NODESET(center, STR("following-sibling::*/preceding-sibling::*")) % 7 % 8 % 9 % 10 % 19 % 20; + CHECK_XPATH_NODESET(center, STR("following-sibling::*[2]/preceding-sibling::*")) % 19 % 10 % 9 % 8 % 7; + CHECK_XPATH_NODESET(center, STR("following-sibling::*[2]/preceding-sibling::*[4]")) % 8; + CHECK_XPATH_NODESET(center, STR("following-sibling::*[2]/preceding-sibling::*[4]/following-sibling::*[5]/preceding-sibling::*[4]/preceding-sibling::*[2]")) % 7; + CHECK_XPATH_NODESET(center, STR("following::*[4]/../*[2]")) % 4; + CHECK_XPATH_NODESET(center, STR("preceding::*[2]/../following::*")) % 22 % 23; + CHECK_XPATH_NODESET(center, STR("preceding::*[2]/../descendant::*[10]/following-sibling::east")) % 20; + CHECK_XPATH_NODESET(center, STR("//*")) % 2 % 3 % 4 % 5 % 6 % 7 % 8 % 9 % 10 % 14 % 15 % 16 % 17 % 18 % 19 % 20 % 21 % 22 % 23; + CHECK_XPATH_NODESET(center, STR("//ancestor::*")) % 2 % 5 % 6 % 10 % 15 % 16; + CHECK_XPATH_NODESET(center, STR("//*[count(ancestor::*) >= 2]/../parent::*")) % 2 % 5 % 6 % 10 % 15; + CHECK_XPATH_NODESET(center, STR("//*[count(./*/*) > 0]")) % 2 % 5 % 6 % 10 % 15; + CHECK_XPATH_NODESET(center, STR("@*/ancestor::*")) % 2 % 5 % 6 % 10; + CHECK_XPATH_NODESET(center, STR("@*/following::*")) % 14 % 15 % 16 % 17 % 18 % 19 % 20 % 21 % 22 % 23; + CHECK_XPATH_NODESET(center, STR("@*/preceding::*")) % 3 % 4 % 7 % 8 % 9; + CHECK_XPATH_NODESET(center, STR("preceding-sibling::*|following-sibling::*")) % 7 % 8 % 9 % 19 % 20 % 21; + CHECK_XPATH_NODESET(center, STR("(preceding-sibling::*|following-sibling::*)/ancestor::*[last()]/*[last()]")) % 23; + CHECK_XPATH_NODESET(center, STR(".//near-south/preceding-sibling::*|following-sibling::east/ancestor-or-self::*[2]")) % 6 % 14; +} + +#endif -- cgit v1.2.3