<html>
<head>
<script src="../../../resources/js-test-pre.js"></script>
<script src="../xpath-test-pre.js"></script>
</head>
<body>
<div id="console"></div>

<script>
var doc = (new DOMParser).parseFromString(
    '<doc>' +
        '<item id="1" />' +
        '<item id="2" />' +
        '<item id="3" />' +
        '<item id="4" />' +
        '<item id="5" />' +
    '</doc>',
    'application/xml');

var ROOT = doc.documentElement;
var ITEM1 = ROOT.firstChild;
var ITEM2 = ITEM1.nextSibling;
var ITEM3 = ITEM2.nextSibling;
var ITEM4 = ITEM3.nextSibling;

test(doc, doc.documentElement, '//item[@id >= 2 and @id <= "4"]', [ITEM2, ITEM3, ITEM4]);
test(doc, doc.documentElement, '//item[@id >= 2 and @id <= 3]', [ITEM2, ITEM3]);
shouldThrow('doc.evaluate("position(1)", doc.documentElement, null, XPathResult.ANY_TYPE, null)');
shouldThrow('doc.evaluate("not()", doc.documentElement, null, XPathResult.ANY_TYPE, null)');
test(doc, doc, "string-length(100)", 3);
shouldThrow('doc.evaluate("count(100)", doc.documentElement, null, XPathResult.ANY_TYPE, null)');
shouldThrow('doc.evaluate("adumbrate()", doc.documentElement, null, XPathResult.ANY_TYPE, null)');

var doc = (new DOMParser).parseFromString(
    '<doc>' +
        '<item id="1" />' +
        '<item id="2" />' +
        '<item id="3" />' +
        '<item id="4" />' +
        '<item id="5" />' +
        '<item id="6" />' +
        '<item id="7" />' +
        '<item id="8" />' +
        '<item id="9" />' +
    '</doc>',
    'application/xml');

var ROOT = doc.documentElement;
var ITEM1 = ROOT.firstChild;
var ITEM2 = ITEM1.nextSibling;
var ITEM3 = ITEM2.nextSibling;
var ITEM4 = ITEM3.nextSibling;
var ITEM5 = ITEM4.nextSibling;
var ITEM6 = ITEM5.nextSibling;
var ITEM7 = ITEM6.nextSibling;
var ITEM8 = ITEM7.nextSibling;
var ITEM9 = ITEM8.nextSibling;

test(doc, doc.documentElement, '//item[@id mod 2 = 0] | //item[@id mod 3 = 0]', [ITEM2, ITEM3, ITEM4, ITEM6, ITEM8, ITEM9]);
shouldThrow('doc.evaluate("//item | 42", doc.documentElement, null, XPathResult.ANY_TYPE, null)');
shouldThrow('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.
shouldThrow("doc.evaluate('\"monty\"/anaconda', doc.documentElement, null, XPathResult.ANY_TYPE, null)");
shouldThrow("doc.evaluate('/doc/string(item[@id = 2])/@id', doc.documentElement, null, XPathResult.ANY_TYPE, null)");
shouldThrow("doc.evaluate('(1)[1]', doc.documentElement, null, XPathResult.ANY_TYPE, null)");

// Added for WebKit.
test(doc, doc.documentElement, '(1)', 1);
test(doc, doc.documentElement, '((1 + 1))', 2);

var doc = (new DOMParser).parseFromString(
    '<doc>' +
    '    <set id="1">' +
    '        <item>1</item>' +
    '        <item>2</item>' +
    '        <item>3</item>' +
    '        <item>4</item>' +
    '    </set>' +
    '    <set id="2">' +
    '        <item>5</item>' +
    '        <item>6</item>' +
    '        <item>7</item>' +
    '        <item>8</item>' +
    '    </set>' +
    '    <set id="3">' +
    '        <item>0</item>' +
    '        <item>3</item>' +
    '        <item>6</item>' +
    '        <item>9</item>' +
    '    </set>' +
    '    <set id="4">' +
    '        <item>42.0</item>' +
    '    </set>' +
    '</doc>',
    'application/xml');

test(doc, doc.documentElement, '1 or 1', true);
test(doc, doc.documentElement, '1 or 0', true);
test(doc, doc.documentElement, '0 or 1', true);
test(doc, doc.documentElement, '0 or 0', false);
test(doc, doc.documentElement, '1 and 1', true);
test(doc, doc.documentElement, '1 and 0', false);
test(doc, doc.documentElement, '0 and 1', false);
test(doc, doc.documentElement, '0 and 0', false);
test(doc, doc.documentElement, '(//set[@id=1]/*) = (//set[@id=3]/*)', true);
test(doc, doc.documentElement, '(//set[@id=1]/*) = (//set[@id=2]/*)', false);
test(doc, doc.documentElement, '(//set[@id=1]/*) != (//set[@id=1]/*)', true);
test(doc, doc.documentElement, '(//set[@id=4]/*) != (//set[@id=4]/*)', false);
test(doc, doc.documentElement, '(//set[@id=1]/*) <= (//set[@id=2]/*)', true);
test(doc, doc.documentElement, '(//set[@id=2]/*) <= (//set[@id=1]/*)', false);
test(doc, doc.documentElement, '(//set[@id=1]/*) < (//set[@id=2]/*)', true);
test(doc, doc.documentElement, '(//set[@id=2]/*) < (//set[@id=1]/*)', false);
test(doc, doc.documentElement, '(//set[@id=2]/*) > (//set[@id=1]/*)', true);
test(doc, doc.documentElement, '(//set[@id=1]/*) > (//set[@id=2]/*)', false);
test(doc, doc.documentElement, '(//set[@id=2]/*) >= (//set[@id=1]/*)', true);
test(doc, doc.documentElement, '(//set[@id=1]/*) >= (//set[@id=2]/*)', false);
test(doc, doc.documentElement, '(//set[@id=4]/*) = (1 = 1)', true);
test(doc, doc.documentElement, '(//set[@id=4]/*) = (1 = 0)', false);
test(doc, doc.documentElement, '(//set[@id=4]/*) != (1 = 0)', true);
test(doc, doc.documentElement, '(//set[@id=4]/*) != (1 = 1)', false);
test(doc, doc.documentElement, '(//set[@id=4]/*) = 42', true);
test(doc, doc.documentElement, '(//set[@id=4]/*) = 43', false);
test(doc, doc.documentElement, '(//set[@id=4]/*) != 43', true);
test(doc, doc.documentElement, '(//set[@id=4]/*) != 42', false);
test(doc, doc.documentElement, '(//set[@id=4]/*) = "42.0"', true);
test(doc, doc.documentElement, '(//set[@id=4]/*) = "42"', false);
test(doc, doc.documentElement, '(//set[@id=4]/*) != "42"', true);
test(doc, doc.documentElement, '(//set[@id=4]/*) != "42.0"', false);
test(doc, doc.documentElement, '"a" <= "a"', false);
test(doc, doc.documentElement, '"a" <= "b"', false);
test(doc, doc.documentElement, '"a" >= "a"', false);
test(doc, doc.documentElement, '"b" > "a"', false);
test(doc, doc.documentElement, '1 <= 1', true);
test(doc, doc.documentElement, '2 <= 1', false);
test(doc, doc.documentElement, '1 < 2', true);
test(doc, doc.documentElement, '1 < 1', false);
test(doc, doc.documentElement, '1 >= 1', true);
test(doc, doc.documentElement, '1 >= 2', false);
test(doc, doc.documentElement, '2 > 1', true);
test(doc, doc.documentElement, '1 > 1', false);

</script>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>
