expressions.html revision 5f90462bbf4efb0ac7bb65a852d5559d0ab30f0b
1<html>
2<head>
3<link rel="stylesheet" href="/js/resources/js-test-style.css">
4<script src="/js/resources/js-test-pre.js"></script>
5<script src="/xpath-test-pre.js"></script>
6</head>
7<body>
8<div id="console"></div>
9
10<script>
11var doc = (new DOMParser).parseFromString(
12    '<doc>' +
13        '<item id="1" />' +
14        '<item id="2" />' +
15        '<item id="3" />' +
16        '<item id="4" />' +
17        '<item id="5" />' +
18    '</doc>',
19    'application/xml');
20
21var ROOT = doc.documentElement;
22var ITEM1 = ROOT.firstChild;
23var ITEM2 = ITEM1.nextSibling;
24var ITEM3 = ITEM2.nextSibling;
25var ITEM4 = ITEM3.nextSibling;
26
27test(doc, doc.documentElement, '//item[@id >= 2 and @id <= "4"]', [ITEM2, ITEM3, ITEM4]);
28test(doc, doc.documentElement, '//item[@id >= 2 and @id <= 3]', [ITEM2, ITEM3]);
29shouldThrow('doc.evaluate("position(1)", doc.documentElement, null, XPathResult.ANY_TYPE, null)');
30shouldThrow('doc.evaluate("not()", doc.documentElement, null, XPathResult.ANY_TYPE, null)');
31test(doc, doc, "string-length(100)", 3);
32shouldThrow('doc.evaluate("count(100)", doc.documentElement, null, XPathResult.ANY_TYPE, null)');
33shouldThrow('doc.evaluate("adumbrate()", doc.documentElement, null, XPathResult.ANY_TYPE, null)');
34
35var doc = (new DOMParser).parseFromString(
36    '<doc>' +
37        '<item id="1" />' +
38        '<item id="2" />' +
39        '<item id="3" />' +
40        '<item id="4" />' +
41        '<item id="5" />' +
42        '<item id="6" />' +
43        '<item id="7" />' +
44        '<item id="8" />' +
45        '<item id="9" />' +
46    '</doc>',
47    'application/xml');
48
49var ROOT = doc.documentElement;
50var ITEM1 = ROOT.firstChild;
51var ITEM2 = ITEM1.nextSibling;
52var ITEM3 = ITEM2.nextSibling;
53var ITEM4 = ITEM3.nextSibling;
54var ITEM5 = ITEM4.nextSibling;
55var ITEM6 = ITEM5.nextSibling;
56var ITEM7 = ITEM6.nextSibling;
57var ITEM8 = ITEM7.nextSibling;
58var ITEM9 = ITEM8.nextSibling;
59
60test(doc, doc.documentElement, '//item[@id mod 2 = 0] | //item[@id mod 3 = 0]', [ITEM2, ITEM3, ITEM4, ITEM6, ITEM8, ITEM9]);
61shouldThrow('doc.evaluate("//item | 42", doc.documentElement, null, XPathResult.ANY_TYPE, null)');
62shouldThrow('doc.evaluate("/doc/(item[@id = 2] | item[@id = 6])/@id", doc.documentElement, null, XPathResult.ANY_TYPE, null)'); // This test doesn't throw in py-dom-path, which is a bug.
63shouldThrow("doc.evaluate('\"monty\"/anaconda', doc.documentElement, null, XPathResult.ANY_TYPE, null)");
64shouldThrow("doc.evaluate('/doc/string(item[@id = 2])/@id', doc.documentElement, null, XPathResult.ANY_TYPE, null)");
65shouldThrow("doc.evaluate('(1)[1]', doc.documentElement, null, XPathResult.ANY_TYPE, null)");
66
67// Added for WebKit.
68test(doc, doc.documentElement, '(1)', 1);
69test(doc, doc.documentElement, '((1 + 1))', 2);
70
71var doc = (new DOMParser).parseFromString(
72    '<doc>' +
73    '    <set id="1">' +
74    '        <item>1</item>' +
75    '        <item>2</item>' +
76    '        <item>3</item>' +
77    '        <item>4</item>' +
78    '    </set>' +
79    '    <set id="2">' +
80    '        <item>5</item>' +
81    '        <item>6</item>' +
82    '        <item>7</item>' +
83    '        <item>8</item>' +
84    '    </set>' +
85    '    <set id="3">' +
86    '        <item>0</item>' +
87    '        <item>3</item>' +
88    '        <item>6</item>' +
89    '        <item>9</item>' +
90    '    </set>' +
91    '    <set id="4">' +
92    '        <item>42.0</item>' +
93    '    </set>' +
94    '</doc>',
95    'application/xml');
96
97test(doc, doc.documentElement, '1 or 1', true);
98test(doc, doc.documentElement, '1 or 0', true);
99test(doc, doc.documentElement, '0 or 1', true);
100test(doc, doc.documentElement, '0 or 0', false);
101test(doc, doc.documentElement, '1 and 1', true);
102test(doc, doc.documentElement, '1 and 0', false);
103test(doc, doc.documentElement, '0 and 1', false);
104test(doc, doc.documentElement, '0 and 0', false);
105test(doc, doc.documentElement, '(//set[@id=1]/*) = (//set[@id=3]/*)', true);
106test(doc, doc.documentElement, '(//set[@id=1]/*) = (//set[@id=2]/*)', false);
107test(doc, doc.documentElement, '(//set[@id=1]/*) != (//set[@id=1]/*)', true);
108test(doc, doc.documentElement, '(//set[@id=4]/*) != (//set[@id=4]/*)', false);
109test(doc, doc.documentElement, '(//set[@id=1]/*) <= (//set[@id=2]/*)', true);
110test(doc, doc.documentElement, '(//set[@id=2]/*) <= (//set[@id=1]/*)', false);
111test(doc, doc.documentElement, '(//set[@id=1]/*) < (//set[@id=2]/*)', true);
112test(doc, doc.documentElement, '(//set[@id=2]/*) < (//set[@id=1]/*)', false);
113test(doc, doc.documentElement, '(//set[@id=2]/*) > (//set[@id=1]/*)', true);
114test(doc, doc.documentElement, '(//set[@id=1]/*) > (//set[@id=2]/*)', false);
115test(doc, doc.documentElement, '(//set[@id=2]/*) >= (//set[@id=1]/*)', true);
116test(doc, doc.documentElement, '(//set[@id=1]/*) >= (//set[@id=2]/*)', false);
117test(doc, doc.documentElement, '(//set[@id=4]/*) = (1 = 1)', true);
118test(doc, doc.documentElement, '(//set[@id=4]/*) = (1 = 0)', false);
119test(doc, doc.documentElement, '(//set[@id=4]/*) != (1 = 0)', true);
120test(doc, doc.documentElement, '(//set[@id=4]/*) != (1 = 1)', false);
121test(doc, doc.documentElement, '(//set[@id=4]/*) = 42', true);
122test(doc, doc.documentElement, '(//set[@id=4]/*) = 43', false);
123test(doc, doc.documentElement, '(//set[@id=4]/*) != 43', true);
124test(doc, doc.documentElement, '(//set[@id=4]/*) != 42', false);
125test(doc, doc.documentElement, '(//set[@id=4]/*) = "42.0"', true);
126test(doc, doc.documentElement, '(//set[@id=4]/*) = "42"', false);
127test(doc, doc.documentElement, '(//set[@id=4]/*) != "42"', true);
128test(doc, doc.documentElement, '(//set[@id=4]/*) != "42.0"', false);
129test(doc, doc.documentElement, '"a" <= "a"', false);
130test(doc, doc.documentElement, '"a" <= "b"', false);
131test(doc, doc.documentElement, '"a" >= "a"', false);
132test(doc, doc.documentElement, '"b" > "a"', false);
133test(doc, doc.documentElement, '1 <= 1', true);
134test(doc, doc.documentElement, '2 <= 1', false);
135test(doc, doc.documentElement, '1 < 2', true);
136test(doc, doc.documentElement, '1 < 1', false);
137test(doc, doc.documentElement, '1 >= 1', true);
138test(doc, doc.documentElement, '1 >= 2', false);
139test(doc, doc.documentElement, '2 > 1', true);
140test(doc, doc.documentElement, '1 > 1', false);
141
142
143var successfullyParsed = true;
144
145</script>
146<script src="/js/resources/js-test-post.js"></script>
147</body>
148</html>
149