From e91b5e305966f5d03fb1f8fc3fa5f2e4dac16041 Mon Sep 17 00:00:00 2001 From: "arseny.kapoulkine" Date: Sun, 30 May 2010 07:52:18 +0000 Subject: tests: Added tests for principal node types with attributes for all axes that can return attributes git-svn-id: http://pugixml.googlecode.com/svn/trunk@471 99668b35-9821-0410-8761-19e4c4f06640 --- tests/test.cpp | 8 -------- tests/test_xpath_paths.cpp | 42 ++++++++++++++++++++++++++++++++++++++---- tests/test_xpath_xalan_1.cpp | 2 +- tests/test_xpath_xalan_2.cpp | 2 +- tests/test_xpath_xalan_3.cpp | 7 ++++--- 5 files changed, 44 insertions(+), 17 deletions(-) (limited to 'tests') diff --git a/tests/test.cpp b/tests/test.cpp index be0d86b..247c714 100644 --- a/tests/test.cpp +++ b/tests/test.cpp @@ -58,8 +58,6 @@ bool test_xpath_string(const pugi::xml_node& node, const pugi::char_t* query, co { pugi::xpath_query q(query); - // $$$ q.rettype() == string - return q.evaluate_string(node) == expected; } @@ -67,8 +65,6 @@ bool test_xpath_boolean(const pugi::xml_node& node, const pugi::char_t* query, b { pugi::xpath_query q(query); - // $$$ q.rettype() == boolean - return q.evaluate_boolean(node) == expected; } @@ -78,8 +74,6 @@ bool test_xpath_number(const pugi::xml_node& node, const pugi::char_t* query, do { pugi::xpath_query q(query); - // $$$ q.rettype() == number - double value = q.evaluate_number(node); double absolute_error = fabs(value - expected); @@ -91,8 +85,6 @@ bool test_xpath_number_nan(const pugi::xml_node& node, const pugi::char_t* query { pugi::xpath_query q(query); - // $$$ q.rettype() == number - double r = q.evaluate_number(node); #if defined(_MSC_VER) || defined(__BORLANDC__) diff --git a/tests/test_xpath_paths.cpp b/tests/test_xpath_paths.cpp index 2d00c34..e58d7b1 100644 --- a/tests/test_xpath_paths.cpp +++ b/tests/test_xpath_paths.cpp @@ -286,10 +286,44 @@ TEST_XML_FLAGS(xpath_paths_nodetest_type, "pcdatapcdata", parse_default | parse_pi | parse_comments) -{ - // $$$ self::* should not select attribute nodes (?) - // $$$ name, * and name:* should check type = elem (?) +TEST_XML_FLAGS(xpath_paths_nodetest_principal, "pcdata", parse_default | parse_pi | parse_comments) +{ + // node() test is true for any node type + CHECK_XPATH_NODESET(doc, STR("//node()")) % 2 % 4 % 5 % 6 % 7 % 8 % 9 % 10; + CHECK_XPATH_NODESET(doc, STR("//attribute::node()")) % 3 % 11; + CHECK_XPATH_NODESET(doc, STR("//attribute::node()/ancestor-or-self::node()")) % 1 % 2 % 3 % 10 % 11; + + // name test is true only for node with principal node type (depends on axis) + CHECK_XPATH_NODESET(doc, STR("node/child::child")) % 5; + CHECK_XPATH_NODESET(doc, STR("node/attribute::attr")) % 3; + CHECK_XPATH_NODESET(doc, STR("node/child::pi1")); + CHECK_XPATH_NODESET(doc, STR("node/child::attr")); + CHECK_XPATH_NODESET(doc, STR("node/child::child/self::child")) % 5; + CHECK_XPATH_NODESET(doc, STR("node/attribute::attr/self::attr")); // attribute is not of element type + CHECK_XPATH_NODESET(doc, STR("node/child::child/ancestor-or-self::child")) % 5; + CHECK_XPATH_NODESET(doc, STR("node/attribute::attr/ancestor-or-self::attr")); // attribute is not of element type + CHECK_XPATH_NODESET(doc, STR("node/child::child/descendant-or-self::child")) % 5; + CHECK_XPATH_NODESET(doc, STR("node/attribute::attr/descendant-or-self::attr")); // attribute is not of element type + + // any name test is true only for node with principal node type (depends on axis) + CHECK_XPATH_NODESET(doc, STR("node/child::*")) % 5; + CHECK_XPATH_NODESET(doc, STR("node/attribute::*")) % 3; + CHECK_XPATH_NODESET(doc, STR("node/child::*/self::*")) % 5; + CHECK_XPATH_NODESET(doc, STR("node/attribute::*/self::*")); // attribute is not of element type + CHECK_XPATH_NODESET(doc, STR("node/child::*/ancestor-or-self::*")) % 5 % 2; + CHECK_XPATH_NODESET(doc, STR("node/attribute::*/ancestor-or-self::*")) % 2; // attribute is not of element type + CHECK_XPATH_NODESET(doc, STR("node/child::*/descendant-or-self::*")) % 5; + CHECK_XPATH_NODESET(doc, STR("node/attribute::*/descendant-or-self::*")); // attribute is not of element type + + // namespace test is true only for node with principal node type (depends on axis) + CHECK_XPATH_NODESET(doc, STR("child::abra:*")) % 10; + CHECK_XPATH_NODESET(doc, STR("child::abra:*/attribute::abra:*")) % 11; + CHECK_XPATH_NODESET(doc, STR("child::abra:*/self::abra:*")) % 10; + CHECK_XPATH_NODESET(doc, STR("child::abra:*/attribute::abra:*/self::abra:*")); // attribute is not of element type + CHECK_XPATH_NODESET(doc, STR("child::abra:*/ancestor-or-self::abra:*")) % 10; + CHECK_XPATH_NODESET(doc, STR("child::abra:*/attribute::abra:*/ancestor-or-self::abra:*")) % 10; // attribute is not of element type + CHECK_XPATH_NODESET(doc, STR("child::abra:*/descendant-or-self::abra:*")) % 10; + CHECK_XPATH_NODESET(doc, STR("child::abra:*/attribute::abra:*/descendant-or-self::abra:*")); // attribute is not of element type } TEST_XML(xpath_paths_absolute, "") diff --git a/tests/test_xpath_xalan_1.cpp b/tests/test_xpath_xalan_1.cpp index 4e685af..6114bd2 100644 --- a/tests/test_xpath_xalan_1.cpp +++ b/tests/test_xpath_xalan_1.cpp @@ -388,7 +388,7 @@ TEST(xpath_xalan_math_9) CHECK_XPATH_STRING(c, STR("string(number('0.0004'))"), STR("0.0004")); CHECK_XPATH_STRING(c, STR("string(-1 * number('0.0004'))"), STR("-0.0004")); -#if 0 // $$$ commented out temporarily because number formatting is not compliant yet +#if 0 // $$ commented out temporarily because number formatting is not compliant yet CHECK_XPATH_STRING(c, STR("string(number('0.0000000000001'))"), STR("0.0000000000001")); CHECK_XPATH_STRING(c, STR("string(-1 * number('0.0000000000001'))"), STR("-0.0000000000001")); diff --git a/tests/test_xpath_xalan_2.cpp b/tests/test_xpath_xalan_2.cpp index 13838d1..a4c640a 100644 --- a/tests/test_xpath_xalan_2.cpp +++ b/tests/test_xpath_xalan_2.cpp @@ -166,7 +166,7 @@ TEST(xpath_xalan_string_5) CHECK_XPATH_STRING(xml_node(), query.c_str(), expected.c_str()); } -#if 0 // number formatting is not precise yet; also some compilers don't have a good CRT implementation that can handle large numbers +#if 0 // $$ number formatting is not precise yet; also some compilers don't have a good CRT implementation that can handle large numbers TEST(xpath_xalan_string_6) { xml_node c; diff --git a/tests/test_xpath_xalan_3.cpp b/tests/test_xpath_xalan_3.cpp index e36788a..6514560 100644 --- a/tests/test_xpath_xalan_3.cpp +++ b/tests/test_xpath_xalan_3.cpp @@ -59,7 +59,8 @@ TEST_XML_FLAGS(xpath_xalan_axes_2, " Level-1