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
This commit is contained in:
arseny.kapoulkine 2010-05-30 07:52:18 +00:00
parent 3bee04cd11
commit e91b5e3059
5 changed files with 43 additions and 16 deletions

View File

@ -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__)

View File

@ -286,10 +286,44 @@ TEST_XML_FLAGS(xpath_paths_nodetest_type, "<node attr='value'>pcdata<child/><?pi
CHECK_XPATH_FAIL(STR("processing-instruction('', '')"));
}
TEST_XML_FLAGS(xpath_paths_nodetest_principal, "<node attr='value'>pcdata<child/><?pi1 value?><?pi2 value?><!--comment--><![CDATA[cdata]]></node>", parse_default | parse_pi | parse_comments)
TEST_XML_FLAGS(xpath_paths_nodetest_principal, "<node attr='value'>pcdata<child/><?pi1 value?><?pi2 value?><!--comment--><![CDATA[cdata]]></node><abra:cadabra abra:arba=''/>", parse_default | parse_pi | parse_comments)
{
// $$$ self::* should not select attribute nodes (?)
// $$$ name, * and name:* should check type = elem (?)
// 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, "<node><foo><foo/><foo/></foo></node>")

View File

@ -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"));

View File

@ -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;

View File

@ -59,7 +59,8 @@ TEST_XML_FLAGS(xpath_xalan_axes_2, "<far-north> Level-1<north-north-west1/><nort
CHECK_XPATH_NODESET(center, STR("@*/self::node()")) % 21 % 22 % 23;
CHECK_XPATH_NODESET(center, STR("@*/.")) % 21 % 22 % 23;
CHECK_XPATH_NODESET(center, STR("@*/descendant-or-self::node()")) % 21 % 22 % 23;
CHECK_XPATH_NODESET(center, STR("@*/ancestor-or-self::*")) % 2 % 9 % 13 % 20 % 21 % 22 % 23;
CHECK_XPATH_NODESET(center, STR("@*/ancestor-or-self::node()")) % 1 % 2 % 9 % 13 % 20 % 21 % 22 % 23;
CHECK_XPATH_NODESET(center, STR("@*/ancestor-or-self::*")) % 2 % 9 % 13 % 20;
CHECK_XPATH_NODESET(center, STR("@*/preceding-sibling::node()"));
CHECK_XPATH_NODESET(center, STR("@*/following-sibling::*"));
CHECK_XPATH_NODESET(center, STR("@*/ancestor::*/near-north/*[4]/@*/preceding::*")) % 4 % 5 % 14 % 15 % 16;
@ -318,9 +319,9 @@ TEST_XML(xpath_xalan_axes_18, "<north><center center-attr='here'><south/></cente
xml_node center = doc.child(STR("north")).child(STR("center"));
CHECK_XPATH_NODESET(center, STR("@*/self::node()")) % 4;
CHECK_XPATH_NODESET(center, STR("@*/self::*")) % 4; // $$$ wrong - should be empty, since * test tests for principal node type
CHECK_XPATH_NODESET(center, STR("@*/self::*")); // * tests for principal node type
CHECK_XPATH_NODESET(center, STR("@*/self::text()"));
CHECK_XPATH_NODESET(center, STR("@*/self::center-attr")) % 4; // $$$ wrong - should be empty, since name test tests for principal node type
CHECK_XPATH_NODESET(center, STR("@*/self::center-attr")); // * tests for principal node type
}
#endif