0
0
mirror of https://github.com/zeux/pugixml.git synced 2024-12-28 06:10:55 +08:00

tests: Added node test tests, added abbreviated step/axis tests

git-svn-id: http://pugixml.googlecode.com/svn/trunk@212 99668b35-9821-0410-8761-19e4c4f06640
This commit is contained in:
arseny.kapoulkine 2009-11-08 10:14:29 +00:00
parent 4ab1551932
commit f22d0647a2

View File

@ -189,4 +189,136 @@ TEST_XML(xpath_paths_axes_ancestor_or_self, "<node attr='value'><child attr='val
CHECK_XPATH_NODESET(doc, "ancestor-or-self:: node()") % 1; // root
}
TEST_XML(xpath_paths_axes_abbrev, "<node attr='value'><foo/></node>")
{
doc.precompute_document_order();
xml_node c;
xml_node n = doc.child("node");
// @ axis
CHECK_XPATH_NODESET(c, "@attr");
CHECK_XPATH_NODESET(n, "@attr") % 3;
// no axis - child implied
CHECK_XPATH_NODESET(c, "foo");
CHECK_XPATH_NODESET(n, "foo") % 4;
CHECK_XPATH_NODESET(doc, "node()") % 2;
// @ axis should disable all other axis specifiers
CHECK_XPATH_FAIL("@child::foo");
CHECK_XPATH_FAIL("@attribute::foo");
}
TEST_XML(xpath_paths_nodetest_all, "<node a1='v1' x:a2='v2'><c1/><x:c2/><c3/><x:c4/></node>")
{
doc.precompute_document_order();
xml_node c;
xml_node n = doc.child("node");
CHECK_XPATH_NODESET(c, "*");
CHECK_XPATH_NODESET(c, "child::*");
CHECK_XPATH_NODESET(n, "*") % 5 % 6 % 7 % 8;
CHECK_XPATH_NODESET(n, "child::*") % 5 % 6 % 7 % 8;
CHECK_XPATH_NODESET(n, "attribute::*") % 3 % 4;
}
TEST_XML_FLAGS(xpath_paths_nodetest_name, "<node a1='v1' x:a2='v2'><c1/><x:c2/><c3/><x:c4/><?c1?></node>", parse_default | parse_pi)
{
doc.precompute_document_order();
xml_node c;
xml_node n = doc.child("node");
CHECK_XPATH_NODESET(c, "c1");
CHECK_XPATH_NODESET(c, "child::c1");
CHECK_XPATH_NODESET(n, "c1") % 5;
CHECK_XPATH_NODESET(n, "x:c2") % 6;
CHECK_XPATH_NODESET(n, "child::c1") % 5;
CHECK_XPATH_NODESET(n, "child::x:c2") % 6;
CHECK_XPATH_NODESET(n, "attribute::a1") % 3;
CHECK_XPATH_NODESET(n, "attribute::x:a2") % 4;
CHECK_XPATH_NODESET(n, "@x:a2") % 4;
}
TEST_XML(xpath_paths_nodetest_all_in_namespace, "<node a1='v1' x:a2='v2'><c1/><x:c2/><c3/><x:c4/></node>")
{
doc.precompute_document_order();
xml_node c;
xml_node n = doc.child("node");
CHECK_XPATH_NODESET(c, "x:*");
CHECK_XPATH_NODESET(c, "child::x:*");
CHECK_XPATH_NODESET(n, "x:*") % 6 % 8;
CHECK_XPATH_NODESET(n, "child::x:*") % 6 % 8;
CHECK_XPATH_NODESET(n, "attribute::x:*") % 4;
CHECK_XPATH_NODESET(n, "@x:*") % 4;
CHECK_XPATH_FAIL(":*");
CHECK_XPATH_FAIL("@:*");
}
TEST_XML_FLAGS(xpath_paths_nodetest_type, "<node attr='value'>pcdata<child/><?pi1 value?><?pi2 value?><!--comment--><![CDATA[cdata]]></node>", parse_default | parse_pi | parse_comments)
{
doc.precompute_document_order();
xml_node c;
xml_node n = doc.child("node");
// check on empty nodes
CHECK_XPATH_NODESET(c, "node()");
CHECK_XPATH_NODESET(c, "text()");
CHECK_XPATH_NODESET(c, "comment()");
CHECK_XPATH_NODESET(c, "processing-instruction()");
CHECK_XPATH_NODESET(c, "processing-instruction('foobar')");
// child axis
CHECK_XPATH_NODESET(n, "node()") % 4 % 5 % 6 % 7 % 8 % 9;
CHECK_XPATH_NODESET(n, "text()") % 4 % 9;
CHECK_XPATH_NODESET(n, "comment()") % 8;
CHECK_XPATH_NODESET(n, "processing-instruction()") % 6 % 7;
CHECK_XPATH_NODESET(n, "processing-instruction('pi2')") % 7;
// attribute axis
CHECK_XPATH_NODESET(n, "@node()") % 3;
CHECK_XPATH_NODESET(n, "@text()");
CHECK_XPATH_NODESET(n, "@comment()");
CHECK_XPATH_NODESET(n, "@processing-instruction()");
CHECK_XPATH_NODESET(n, "@processing-instruction('pi2')");
// incorrect 'argument' number
CHECK_XPATH_FAIL("node('')");
CHECK_XPATH_FAIL("text('')");
CHECK_XPATH_FAIL("comment('')");
CHECK_XPATH_FAIL("processing-instruction(1)");
CHECK_XPATH_FAIL("processing-instruction('', '')");
}
TEST_XML(xpath_paths_step_abbrev, "<node><foo/></node>")
{
doc.precompute_document_order();
xml_node c;
xml_node n = doc.child("node");
CHECK_XPATH_NODESET(c, ".");
CHECK_XPATH_NODESET(c, "..");
CHECK_XPATH_NODESET(n, ".") % 2;
CHECK_XPATH_NODESET(n, "..") % 1;
CHECK_XPATH_NODESET(n, "../node") % 2;
CHECK_XPATH_NODESET(n.child("foo"), "..") % 2;
CHECK_XPATH_FAIL(".node");
CHECK_XPATH_FAIL("..node");
}
#endif