<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>' +
    '    <para id="1" />' +
    '    <div id="2" />' +
    '    <para id="3" />' +
    '</doc>',
    'application/xml');
test(doc, doc.documentElement, "para", [doc.getElementsByTagName("para")[0], doc.getElementsByTagName("para")[1]]);
test(doc, doc.documentElement, "*", [doc.getElementsByTagName("para")[0], doc.getElementsByTagName("div")[0], doc.getElementsByTagName("para")[1]]);

doc = (new DOMParser).parseFromString('<doc>This is <i>some</i> text.</doc>', 'application/xml');
test(doc, doc.documentElement, "text()", [doc.documentElement.firstChild, doc.documentElement.lastChild]);

doc = (new DOMParser).parseFromString('<doc name="foo" value="bar" />', 'application/xml');
test(doc, doc.documentElement, "@name", [doc.documentElement.getAttributeNode("name")]);
test(doc, doc.documentElement, "@*", [doc.documentElement.getAttributeNode("name"), doc.documentElement.getAttributeNode("value")]);

doc = (new DOMParser).parseFromString('<doc><para id="1" /><para id="2" /><para id="3" /></doc>', 'application/xml');
test(doc, doc.documentElement, "para[1]", [doc.getElementsByTagName("para")[0]]);
test(doc, doc.documentElement, "para[last()]", [doc.getElementsByTagName("para")[2]]);

doc = (new DOMParser).parseFromString(
    '<doc>' +
    '    <chapter><para id="1" /><para id="2" /></chapter>' +
    '    <section><para id="3" /><sub><para id="4" /></sub></section>' +
    '    <para id="4" />' +
    '</doc>',
    'application/xml');
test(doc, doc.documentElement, "*/para", [doc.getElementsByTagName("para")[0], doc.getElementsByTagName("para")[1], doc.getElementsByTagName("para")[2]]);

doc = (new DOMParser).parseFromString(
    '<doc>' +
    '    <chapter id="1" /><chapter id="2" /><chapter id="3" />' +
    '    <chapter id="4">' +
    '      <section id="4.1" /><section id="4.2" /><section id="4.3" />' +
    '    </chapter>' +
    '    <chapter id="5">' +
    '      <section id="5.1" /><section id="5.2" /><section id="5.3" />' +
    '    </chapter>' +
    '</doc>',
    'application/xml');
test(doc, doc.documentElement, "/doc/chapter[5]/section[2]", [doc.getElementsByTagName("section")[4]]);

doc = (new DOMParser).parseFromString(
    '<doc>' +
    '    <chapter><para id="1" /><para id="2" /></chapter>' +
    '    <chapter><section><para id="3" /></section></chapter>' +
    '    <para id="4" />' +
    '</doc>',
    'application/xml');
test(doc, doc.documentElement, "chapter//para", [doc.getElementsByTagName("para")[0], doc.getElementsByTagName("para")[1], doc.getElementsByTagName("para")[2]]);

doc = (new DOMParser).parseFromString(
    '<para id="0">' +
    '    <div id="1" />' +
    '    <para id="2">' +
    '        <para id="3" />' +
    '    </para>' +
    '</para>',
    'application/xml');
test(doc, '//para[@id="2"]', '//para', [doc.getElementsByTagName("para")[0], doc.getElementsByTagName("para")[1], doc.getElementsByTagName("para")[2]]);

doc = (new DOMParser).parseFromString(
    '<doc>' +
    '    <item id="1">' +
    '        <context />' +
    '        <olist><item id="2" /></olist>' +
    '    </item>' +
    '    <olist><item id="3" /></olist>' +
    '</doc>',
    'application/xml');
test(doc, '//context', '//olist/item', [doc.getElementsByTagName("item")[1], doc.getElementsByTagName("item")[2]]);

doc = (new DOMParser).parseFromString(
    '<doc id="0">' +
    '    <para id="1"/>' +
    '</doc>',
    'application/xml');
test(doc, doc.documentElement, '.', [doc.documentElement]);

doc = (new DOMParser).parseFromString(
    '<para id="0">' +
    '    <div id="1" />' +
    '    <para id="2">' +
    '        <para id="3" />' +
    '    </para>' +
    '</para>',
    'application/xml');
test(doc, '//para[@id="2"]', './para', [doc.getElementsByTagName("para")[2]]);

doc = (new DOMParser).parseFromString(
    '<doc id="0">' +
    '    <chapter id="1">' +
    '        <item id="2" />' +
    '        <item id="3"><subitem id="4" /></item>' +
    '    </chapter>' +
    '</doc>',
    'application/xml');
test(doc, '//item[@id="3"]', '..', [doc.getElementsByTagName("chapter")[0]]);

doc = (new DOMParser).parseFromString(
    '<doc id="0">' +
    '    <chapter id="1" lang="en">' +
    '        <item id="2" />' +
    '        <item id="3"><subitem id="4" /></item>' +
    '    </chapter>' +
    '</doc>',
    'application/xml');
test(doc, '//item[@id="3"]', '../@lang', [doc.getElementsByTagName("chapter")[0].getAttributeNode("lang")]);

doc = (new DOMParser).parseFromString(
    '<doc>' +
    '    <para id="1" type="info" />' +
    '    <para id="2" type="warning" />' +
    '    <para id="3" type="warning" />' +
    '    <para id="4" type="error" />' +
    '</doc>',
    'application/xml');
test(doc, doc.documentElement, 'para[@type="warning"]', [doc.getElementsByTagName("para")[1], doc.getElementsByTagName("para")[2]]);

doc = (new DOMParser).parseFromString(
    '<doc>' +
    '    <para id="1" type="info" />' +
    '    <para id="2" type="warning" />' +
    '    <para id="3" type="warning" />' +
    '    <para id="4" type="warning" />' +
    '    <para id="5" type="error" />' +
    '    <para id="6" type="warning" />' +
    '    <para id="7" type="warning" />' +
    '</doc>',
    'application/xml');
test(doc, doc.documentElement, 'para[@type="warning"][5]', [doc.getElementsByTagName("para")[6]]);
test(doc, doc.documentElement, 'para[5][@type="warning"]', []);

doc = (new DOMParser).parseFromString(
    '<doc>' +
    '    <chapter id="1" />' +
    '    <chapter id="2"><title>Introduction</title></chapter>' +
    '    <chapter id="3"><title>Body</title></chapter>' +
    '    <chapter id="4">' +
    '        <title>Another</title>' +
    '        <title>Introduction</title>' +
    '    </chapter>' +
    '</doc>',
    'application/xml');
test(doc, doc.documentElement, "chapter[title='Introduction']", [doc.getElementsByTagName("chapter")[1], doc.getElementsByTagName("chapter")[3]]);

doc = (new DOMParser).parseFromString(
    '<doc>' +
    '    <chapter id="1" />' +
    '    <chapter id="2"><title /></chapter>' +
    '    <chapter id="3"><title /><title /></chapter>' +
    '</doc>',
    'application/xml');
test(doc, doc.documentElement, "chapter[title]", [doc.getElementsByTagName("chapter")[1], doc.getElementsByTagName("chapter")[2]]);

doc = (new DOMParser).parseFromString(
    '<doc>' +
    '    <employee name="Alice" />' +
    '    <employee name="Bob" secretary="Cathy" />' +
    '    <employee name="Dianne" secretary="Edward" assistant="Fran" />' +
    '</doc>',
    'application/xml');
test(doc, doc.documentElement, "employee[@secretary and @assistant]", [doc.getElementsByTagName("employee")[2]]);

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