From 724a3775440be418eca2617bc970ad1bb35a67c4 Mon Sep 17 00:00:00 2001 From: "arseny.kapoulkine" Date: Sun, 30 May 2010 12:42:03 +0000 Subject: tests: Added more Xalan tests git-svn-id: http://pugixml.googlecode.com/svn/trunk@473 99668b35-9821-0410-8761-19e4c4f06640 --- tests/test_xpath_paths.cpp | 1 + tests/test_xpath_xalan_3.cpp | 20 +-- tests/test_xpath_xalan_4.cpp | 292 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 299 insertions(+), 14 deletions(-) create mode 100644 tests/test_xpath_xalan_4.cpp diff --git a/tests/test_xpath_paths.cpp b/tests/test_xpath_paths.cpp index e58d7b1..b726a5a 100644 --- a/tests/test_xpath_paths.cpp +++ b/tests/test_xpath_paths.cpp @@ -284,6 +284,7 @@ TEST_XML_FLAGS(xpath_paths_nodetest_type, "pcdatapcdata", parse_default | parse_pi | parse_comments) diff --git a/tests/test_xpath_xalan_3.cpp b/tests/test_xpath_xalan_3.cpp index 6514560..ee9253d 100644 --- a/tests/test_xpath_xalan_3.cpp +++ b/tests/test_xpath_xalan_3.cpp @@ -2,20 +2,6 @@ #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(); @@ -207,6 +193,12 @@ TEST_XML(xpath_xalan_axes_9, "1234") +{ + xml_node c = doc.child("doc"); + + CHECK_XPATH_BOOLEAN(c, STR("position()=1"), true); + CHECK_XPATH_NODESET(c, STR("*[position()=4]")) % 9; +} + +TEST_XML_FLAGS(xpath_xalan_position_2, "111912632827256345", parse_default | parse_comments | parse_pi) +{ + xml_node c = doc.child("doc"); + + CHECK_XPATH_NODESET(c, STR("*[@test and position()=8]")) % 27; + CHECK_XPATH_NODESET(c, STR("*[@test][position()=4]/num")) % 29; + CHECK_XPATH_NUMBER(c, STR("count(*)"), 8); + CHECK_XPATH_NODESET(c, STR("*[last()=position()]")) % 27; + CHECK_XPATH_NODESET(c, STR("a[position()=2]")) % 7; + CHECK_XPATH_NODESET(c, STR("a[3]/../a[position()=4]/num/../@test")) % 14; + CHECK_XPATH_BOOLEAN(c, STR("not(position()=last())"), false); + CHECK_XPATH_BOOLEAN(c, STR("position()=2"), false); + CHECK_XPATH_BOOLEAN(c, STR("last()=1"), true); + CHECK_XPATH_BOOLEAN(c, STR("last()+2=3"), true); + CHECK_XPATH_NODESET(c, STR("a[position()=5 mod 3]")) % 7; + CHECK_XPATH_NODESET(c, STR("a/num/text()[position()=1]")) % 6 % 9 % 12 % 16 % 19 % 22 % 26 % 30; + CHECK_XPATH_NODESET(c, STR("a/num/text()[position()=2]")) % 32; + CHECK_XPATH_NODESET(c, STR("a/num/text()[position()=last()]")) % 6 % 9 % 12 % 16 % 19 % 22 % 26 % 32; + CHECK_XPATH_NODESET(c, STR("a/num/text()[1]")) % 6 % 9 % 12 % 16 % 19 % 22 % 26 % 30; + CHECK_XPATH_NODESET(c, STR("a/num/text()[2]")) % 32; + CHECK_XPATH_NODESET(c, STR("a/num/text()[last()]")) % 6 % 9 % 12 % 16 % 19 % 22 % 26 % 32; + CHECK_XPATH_NODESET(c, STR("a[floor(last() div 3)]")) % 7; + CHECK_XPATH_NODESET(c, STR("a[ceiling(last() div 3)]")) % 10; + CHECK_XPATH_NODESET(c, STR("a[round(last() div 3)]")) % 10; + CHECK_XPATH_NODESET(c, STR("a[last() div 3]")); + CHECK_XPATH_NODESET(c, STR("a[last() div 2]")) % 13; + CHECK_XPATH_NODESET(c, STR("a[3]/../a[position()>=2 and position()<=4]")) % 7 % 10 % 13; + CHECK_XPATH_NUMBER(c, STR("count(a[position()>=2 and position()<=4]/num)"), 3); + CHECK_XPATH_NUMBER(c, STR("count(a/@*)"), 4); + CHECK_XPATH_NUMBER(c, STR("count(a/attribute::*)"), 4); + CHECK_XPATH_NODESET(c, STR("*[not(@test)][position()=last()]")) % 20; + CHECK_XPATH_NODESET(c, STR("*[not(@test)][last()]")) % 20; + CHECK_XPATH_NODESET(c, STR("a[3-2]")) % 3; + CHECK_XPATH_NODESET(c, STR("a[0]")); + CHECK_XPATH_NODESET(c, STR("a[9]")); + CHECK_XPATH_NODESET(c, STR("a['3']")) % 3 % 7 % 10 % 13 % 17 % 20 % 23 % 27; + CHECK_XPATH_NODESET(c, STR("a[number('3')]")) % 10; + CHECK_XPATH_NODESET(c, STR("processing-instruction()[2]")) % 34; + CHECK_XPATH_NODESET(c, STR("processing-instruction('pi')[2]")) % 34; + CHECK_XPATH_NODESET(c, STR("comment()[2]")) % 36; + CHECK_XPATH_NODESET(c, STR("a/*[last()]")) % 5 % 8 % 11 % 15 % 18 % 21 % 25 % 29; + CHECK_XPATH_NODESET(c, STR("a/child::*[last()]")) % 5 % 8 % 11 % 15 % 18 % 21 % 25 % 29; + CHECK_XPATH_NODESET(c, STR("a/descendant::*[last()]")) % 5 % 8 % 11 % 15 % 18 % 21 % 25 % 31; + CHECK_XPATH_NODESET(c, STR("a/child::node()[last()]")) % 5 % 8 % 11 % 15 % 18 % 21 % 25 % 29; + CHECK_XPATH_NODESET(c, STR("a/descendant::text()[last()]")) % 6 % 9 % 12 % 16 % 19 % 22 % 26 % 32; + CHECK_XPATH_NODESET(c, STR("child::comment()[last()]")) % 36; +} + +TEST_XML(xpath_xalan_position_3, "
AAA
BBBAbout this article
CCCThis is the section titled 'ZZZ'.DDDDon't worry.
EEEThis is the deep subsection.
") +{ + CHECK_XPATH_NODESET(doc, STR("(article//section/title|/articleinfo/title|article/section/para)[last()]")) % 28; + CHECK_XPATH_NODESET(doc, STR("(article//section/title|/articleinfo/title|article/section/para)[1]")) % 10; + CHECK_XPATH_NUMBER(doc, STR("count(article/articleinfo/section[last()])"), 1); + CHECK_XPATH_NUMBER(doc, STR("count(article/articleinfo/section[last()][title='BBB'])"), 1); +} + +TEST_XML(xpath_xalan_position_4, "
hello
goodbyesayonara
aloha
") +{ + CHECK_XPATH_NODESET(doc, STR("chapter//footnote[1]")) % 4 % 7 % 12; +} + +TEST_XML(xpath_xalan_position_5, "
helloahoy
goodbyesayonaraadios
alohashalomyociao
") +{ + CHECK_XPATH_NODESET(doc, STR("chapter//footnote[2]")) % 6 % 11 % 21 % 23; + CHECK_XPATH_NODESET(doc, STR("(chapter//footnote)[2]")) % 6; + CHECK_XPATH_NODESET(doc, STR("(child::chapter/descendant-or-self::node())/footnote[2]")) % 6 % 11 % 21 % 23; + CHECK_XPATH_NODESET(doc, STR("chapter/descendant::footnote[6]")) % 16; + CHECK_XPATH_NODESET(doc, STR("chapter/descendant::footnote[6][1][last()]")) % 16; +} + +TEST_XML_FLAGS(xpath_xalan_position_6, "pcdata", parse_default | parse_pi | parse_comments) +{ + CHECK_XPATH_NUMBER(doc, STR("count(/node/@attr/ancestor-or-self::node())"), 3); + CHECK_XPATH_NUMBER(doc, STR("count(/node/text()/ancestor-or-self::node())"), 4); + CHECK_XPATH_NUMBER(doc, STR("count(/node/processing-instruction()/ancestor-or-self::node())"), 4); + CHECK_XPATH_NUMBER(doc, STR("count(/node/processing-instruction('pi1')/ancestor-or-self::node())"), 3); + CHECK_XPATH_NUMBER(doc, STR("count(/node/comment()/ancestor-or-self::node())"), 3); +} + +TEST_XML(xpath_xalan_position_7, "
helloahoy
goodbyesayonaraadios
alohaA3b-1A3b-2shalom
") +{ + CHECK_XPATH_NODESET(doc, STR("chapter/section//@title[7]")); + CHECK_XPATH_NODESET(doc, STR("(chapter/section//@title)[7]")) % 21; +} + +TEST_XML(xpath_xalan_match_1, "") +{ + 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_match_2, "doc-l1-v2doc-l1-x2doc-l1-l2-v3doc-l1-l2-w3doc-l1-l2-x3doc-l1-l2-y3doc-l1-l2-l3-v4doc-l1-l2-l3-x4") +{ + CHECK_XPATH_STRING(doc, STR("doc/l1/v2"), STR("doc-l1-v2")); + CHECK_XPATH_STRING(doc, STR("doc/child::l1/x2"), STR("doc-l1-x2")); + CHECK_XPATH_STRING(doc, STR("doc/l1//v3"), STR("doc-l1-l2-v3")); + CHECK_XPATH_STRING(doc, STR("doc//l2/w3"), STR("doc-l1-l2-w3")); + CHECK_XPATH_STRING(doc, STR("doc/child::l1//x3"), STR("doc-l1-l2-x3")); + CHECK_XPATH_STRING(doc, STR("doc//child::l2/y3"), STR("doc-l1-l2-y3")); + CHECK_XPATH_STRING(doc, STR("doc//l2//v4"), STR("doc-l1-l2-l3-v4")); + CHECK_XPATH_STRING(doc, STR("doc//child::l2//x4"), STR("doc-l1-l2-l3-x4")); + + CHECK_XPATH_STRING(doc, STR("doc/l1/v2"), STR("doc-l1-v2")); + CHECK_XPATH_STRING(doc, STR("doc/l1/child::x2"), STR("doc-l1-x2")); + CHECK_XPATH_STRING(doc, STR("doc/l1//v3"), STR("doc-l1-l2-v3")); + CHECK_XPATH_STRING(doc, STR("doc//l2/w3"), STR("doc-l1-l2-w3")); + CHECK_XPATH_STRING(doc, STR("doc/l1//child::x3"), STR("doc-l1-l2-x3")); + CHECK_XPATH_STRING(doc, STR("doc//l2/child::y3"), STR("doc-l1-l2-y3")); + CHECK_XPATH_STRING(doc, STR("doc//l2//v4"), STR("doc-l1-l2-l3-v4")); + CHECK_XPATH_STRING(doc, STR("doc//l2//child::x4"), STR("doc-l1-l2-l3-x4")); + + CHECK_XPATH_STRING(doc, STR("doc/l1/v2"), STR("doc-l1-v2")); + CHECK_XPATH_STRING(doc, STR("doc/child::l1/child::x2"), STR("doc-l1-x2")); + CHECK_XPATH_STRING(doc, STR("doc/l1//v3"), STR("doc-l1-l2-v3")); + CHECK_XPATH_STRING(doc, STR("doc//l2/w3"), STR("doc-l1-l2-w3")); + CHECK_XPATH_STRING(doc, STR("doc/child::l1//child::x3"), STR("doc-l1-l2-x3")); + CHECK_XPATH_STRING(doc, STR("doc//child::l2/child::y3"), STR("doc-l1-l2-y3")); + CHECK_XPATH_STRING(doc, STR("doc//l2//v4"), STR("doc-l1-l2-l3-v4")); + CHECK_XPATH_STRING(doc, STR("doc//child::l2//child::x4"), STR("doc-l1-l2-l3-x4")); +} + +TEST_XML(xpath_xalan_expression_1, "en
en
ENen-us
") +{ + CHECK_XPATH_NODESET(doc, STR("doc/para[@id='1' and lang('en')]")) % 3; + CHECK_XPATH_NODESET(doc, STR("doc/para[@id='4' and lang('en')]")) % 15; + CHECK_XPATH_NODESET(doc, STR("doc/div/para[lang('en')]")) % 9; + CHECK_XPATH_NODESET(doc, STR("doc/para[@id='3' and lang('en')]")) % 11; + CHECK_XPATH_NODESET(doc, STR("//para[lang('en')]/ancestor-or-self::*[@xml:lang]/@xml:lang")) % 5 % 8 % 13 % 17; +} + +TEST_XML(xpath_xalan_predicate_1, "1234") +{ + xml_node c = doc.child(STR("doc")); + + CHECK_XPATH_NODESET(c, STR("a[true()=4]")) % 3 % 5 % 7 % 9; + CHECK_XPATH_NODESET(c, STR("a[true()='stringwithchars']")) % 3 % 5 % 7 % 9; + CHECK_XPATH_NODESET(c, STR("a[true()=following-sibling::*]")) % 3 % 5 % 7; + CHECK_XPATH_NODESET(c, STR("a[true()=preceding-sibling::*]")) % 5 % 7 % 9; + CHECK_XPATH_NODESET(c, STR("a[3=following-sibling::*]")) % 3 % 5; + CHECK_XPATH_NODESET(c, STR("a[0 < true()]")) % 3 % 5 % 7 % 9; + CHECK_XPATH_NODESET(c, STR("a['3.5' < 4]")) % 3 % 5 % 7 % 9; + CHECK_XPATH_NODESET(c, STR("a[3 < following-sibling::*]")) % 3 % 5 % 7; + CHECK_XPATH_NODESET(c, STR("a[following-sibling::*>3]")) % 3 % 5 % 7; + CHECK_XPATH_NODESET(c, STR("a[3 > following-sibling::*]")) % 3; + CHECK_XPATH_NODESET(c, STR("a[following-sibling::*<3]")) % 3; + CHECK_XPATH_NODESET(c, STR("a[1 < 2 < 3]")) % 3 % 5 % 7 % 9; + CHECK_XPATH_NODESET(c, STR("a[1 < 3 < 2]")) % 3 % 5 % 7 % 9; + CHECK_XPATH_NODESET(c, STR("a[following-sibling::*=true()]")) % 3 % 5 % 7; + CHECK_XPATH_NODESET(c, STR("a[false()!=following-sibling::*]")) % 3 % 5 % 7; + CHECK_XPATH_NODESET(c, STR("a[following-sibling::*!=false()]")) % 3 % 5 % 7; + CHECK_XPATH_NODESET(c, STR("a[following-sibling::*=3]")) % 3 % 5; + CHECK_XPATH_NODESET(c, STR("a[3=following-sibling::*]")) % 3 % 5; + CHECK_XPATH_NODESET(c, STR("a[4!=following-sibling::*]")) % 3 % 5; + CHECK_XPATH_NODESET(c, STR("a[following-sibling::*!=4]")) % 3 % 5; + CHECK_XPATH_NODESET(c, STR("a[3>=following-sibling::*]")) % 3 % 5; + CHECK_XPATH_NODESET(c, STR("a[3<=following-sibling::*]")) % 3 % 5 % 7; + CHECK_XPATH_NODESET(c, STR("a[following-sibling::*<=3]")) % 3 % 5; + CHECK_XPATH_NODESET(c, STR("a[following-sibling::*>=3]")) % 3 % 5 % 7; +} + +TEST_XML(xpath_xalan_predicate_2, "") +{ + xml_node c = doc.child(STR("foo")); + + CHECK_XPATH_NODESET(c, STR("bar[@a='1' and @b='1']")) % 75 % 81 % 87 % 93; + CHECK_XPATH_NODESET(c, STR("bar[(@a='1' or @b='1') and @c='1']")) % 39 % 45 % 63 % 69 % 87 % 93; + CHECK_XPATH_NODESET(c, STR("bar[@a='1' and (@b='1' or @c='1') and @d='1']")) % 69 % 81 % 93; + CHECK_XPATH_NODESET(c, STR("bar[@a='1' and @b='1' or @c='1' and @d='1']")) % 21 % 45 % 69 % 75 % 81 % 87 % 93; + CHECK_XPATH_NODESET(c, STR("bar[(@a='1' and @b='1') or (@c='1' and @d='1')]")) % 21 % 45 % 69 % 75 % 81 % 87 % 93; + CHECK_XPATH_NODESET(c, STR("bar[@a='1' or (@b='1' and @c='1') or @d='1']")) % 9 % 21 % 33 % 39 % 45 % 51 % 57 % 63 % 69 % 75 % 81 % 87 % 93; + CHECK_XPATH_NODESET(c, STR("bar[(@a='1' or @b='1') and (@c='1' or @d='1')]")) % 33 % 39 % 45 % 57 % 63 % 69 % 81 % 87 % 93; + CHECK_XPATH_NODESET(c, STR("bar[@a='1' or @b='1' and @c='1' or @d='1']")) % 9 % 21 % 33 % 39 % 45 % 51 % 57 % 63 % 69 % 75 % 81 % 87 % 93; + CHECK_XPATH_NODESET(c, STR("bar[@a='1' or @b='1' or @c='1']")) % 15 % 21 % 27 % 33 % 39 % 45 % 51 % 57 % 63 % 69 % 75 % 81 % 87 % 93; +} + +TEST_XML(xpath_xalan_predicate_3, "12345") +{ + xml_node c = doc.child(STR("doc")); + + CHECK_XPATH_NUMBER(c, STR("count(a[@ex])"), 2); + CHECK_XPATH_NUMBER(c, STR("count(a[@ex=''])"), 1); + CHECK_XPATH_NUMBER(c, STR("count(a[string-length(@ex)=0])"), 4); + CHECK_XPATH_NUMBER(c, STR("count(a[@ex!=''])"), 1); + CHECK_XPATH_NUMBER(c, STR("count(a[string-length(@ex) > 0])"), 1); + CHECK_XPATH_NUMBER(c, STR("count(a[not(@ex)])"), 3); + CHECK_XPATH_NUMBER(c, STR("count(a[not(@ex='')])"), 4); + CHECK_XPATH_NUMBER(c, STR("count(a[not(string-length(@ex)=0)])"), 1); + CHECK_XPATH_NUMBER(c, STR("count(a[@why='value'])"), 1); + CHECK_XPATH_NUMBER(c, STR("count(a[@why!='value'])"), 1); +} + +TEST_XML(xpath_xalan_predicate_4, "
1.11.2
2.12.22.3
3.13.23.2.1
44.14.1.1
5.15.25.35.4
6.16.2
7.17.27.3
8.18.28.38.4
") +{ + CHECK_XPATH_NUMBER(doc, STR("count(//tr)"), 8); + CHECK_XPATH_NUMBER(doc, STR("count(//tr[count(./td)=3])"), 2); +} + +TEST_XML(xpath_xalan_predicate_5, "Wrong node selected!!Test executed successfullyWrong node selected!!") +{ + CHECK_XPATH_STRING(doc, STR("doc/element1[(((((2*10)-4)+9) div 5) mod 3 )]"), STR("Test executed successfully")); + CHECK_XPATH_STRING(doc, STR("doc/element1[(((((2*10)-4)+9) div 5) mod floor(3))]"), STR("Test executed successfully")); + CHECK_XPATH_STRING(doc, STR("doc/element1[floor(2)]"), STR("Test executed successfully")); +} + +TEST_XML(xpath_xalan_predicate_6, "12target34") +{ + CHECK_XPATH_STRING(doc, STR("doc/a['target'=descendant::*]"), STR("2target")); + CHECK_XPATH_STRING(doc, STR("doc/a[descendant::*='target']"), STR("2target")); +} + +TEST_XML(xpath_xalan_predicate_7, "12target34missed") +{ + CHECK_XPATH_STRING(doc, STR("doc/a['target'!=descendant::*]"), STR("4missed")); + CHECK_XPATH_STRING(doc, STR("doc/a[descendant::*!='target']"), STR("4missed")); +} + +TEST_XML(xpath_xalan_predicate_8, "this23thisthisthathellogoodbyethisthatthishellogoodbyeother") +{ + xml_node c = doc.child(STR("doc")); + + CHECK_XPATH_NODESET(c, STR("foo[(bar[2])='this']")) % 13; + CHECK_XPATH_NODESET(c, STR("foo[(bar[(baz[2])='goodbye'])]")) % 23 % 38; + CHECK_XPATH_NODESET(c, STR("foo[(bar[2][(baz[2])='goodbye'])]")) % 38; +} + +TEST_XML(xpath_xalan_predicate_9, "f-insidef-insidef-insidef-insidef-inside") +{ + CHECK_XPATH_NODESET(doc, STR("doc/*[starts-with(name(.),'f')]")) % 23; + CHECK_XPATH_NODESET(doc, STR("//*[starts-with(name(.),'f')]")) % 8 % 15 % 23 % 24; +} + +TEST_XML(xpath_xalan_predicate_10, "Text from first elementText from child1 of first elementText from child2 of first elementText from second elementText from child1 of second elementText from child2 of second element (correct execution)") +{ + xml_node c = doc.child(STR("doc")); + + CHECK_XPATH_STRING(c, STR("//child2[ancestor::element2]"), STR("Text from child2 of second element (correct execution)")); + CHECK_XPATH_STRING(c, STR("//child2[ancestor-or-self::element2]"), STR("Text from child2 of second element (correct execution)")); + CHECK_XPATH_STRING(c, STR("//child2[attribute::attr1]"), STR("Text from child2 of second element (correct execution)")); +} + +TEST_XML(xpath_xalan_predicate_11, "123456") +{ + xml_node c = doc.child(STR("doc")); + + CHECK_XPATH_NODESET(c, STR("a[@squeesh or (@squish and @squash)]")) % 3 % 7 % 11 % 18; + CHECK_XPATH_NODESET(c, STR("a[(@squeesh or @squish) and @squash]")) % 3 % 11; + CHECK_XPATH_NODESET(c, STR("a[@squeesh or @squish and @squash]")) % 3 % 7 % 11 % 18; +} + +TEST_XML(xpath_xalan_predicate_12, "12target3target") +{ + CHECK_XPATH_STRING(doc, STR("doc/a[following-sibling::*=descendant::*]"), STR("2target")); +} + +TEST_XML(xpath_xalan_predicate_13, "12target3") +{ + CHECK_XPATH_NODESET(doc, STR("doc/a[('target'=descendant::*) or @squish]")) % 3 % 6; + CHECK_XPATH_NODESET(doc, STR("doc/a[not(('target'=descendant::*) or @squish)]")) % 10; +} + +TEST_XML(xpath_xalan_predicate_14, "12child234child4") +{ + CHECK_XPATH_NODESET(doc, STR("doc/a[not(@*)]")) % 6 % 11; +} + +TEST_XML(xpath_xalan_predicate_15, "xinside") +{ + CHECK_XPATH_NODESET(doc, STR("doc/descendant::*[string-length(name(.))=1]")) % 3 % 6 % 9 % 11 % 13; +} + +#endif -- cgit v1.2.3