<html>
<head>
<script src="../js/resources/js-test-pre.js"></script>
<script src="xpath-test-pre.js"></script>
<style>
#context {display:none}
</style>
</head>
<body>
<p>Test that an NCName and * are interpreted as an operator when in
binary operator context, and as a NameTest otherwise.

<p>See <a href="http://bugs.webkit.org/show_bug.cgi?id=50366">bug 50366</a>:
XPath lexer misinterprets expression starting with "div".</p>

<div id="console"></div>

<div id="context">
  <div id="two" div="x">2</div>
</div>

<script>
var context = document.getElementById('context');
var div = document.getElementById('two');

// =========== div ===========

test(document, context, "div", [div], null);  // div with no preceding token
test(document, context, "  div", [div], null);
// div following every possible [28] ExprToken http://www.w3.org/TR/xpath/
test(document, context, "(div) div (div)", 2/2, null);  // div after ( and )
test(document, context, "self::node()[div] div 1", 2/1, null);  // div after [ and ]
test(document, context, ". div .", 2/2, null);  // div after .
test(document, div, ".. div ..", 2/2, null);  // div after ..
test(document, context, "string(div/@div)", "x", null);  // div after @
test(document, context, "substring-before('1992', div)", "199", null);  // div after ,
test(document, div, "self::div", [div], null);  // div after ::
test(document, context, "* div 4", 2/4, null);  // div after NameTest *
test(document, context, "'3' div 4", 3/4, null);  // div after Literal
test(document, context, "\"3\" div 4", 3/4, null);  // div after Literal
test(document, context, "12 div 4", 12/4, null);  // div after Number

// div following every [32] Operator
test(document, context, "true() and div", true, null);  // div after OperatorName and
test(document, context, "false() or div", true, null);  // div after OperatorName or
test(document, context, "div mod div", 0, null);  // div after OperatorName mod
test(document, context, "div div div", 1, null);  // div after OperatorName div
test(document, context, "3 * div", 6, null);  // div after MultiplyOperator
test(document, context, "div/div", [], null);  // div after /
test(document, context, "div//div", [], null);  // div after //
test(document, context, "zz|div", [div], null);  // div after |
test(document, context, "div+div", 4, null);  // div after +
test(document, context, "- - div", 2, null);  // div after unary -
test(document, context, "5 -div", 3, null);  // div after binary -
test(document, context, "div=div", true, null);  // div after =
test(document, context, "div!=div", false, null);  // div after =
test(document, context, "div<div", false, null);  // div after <
test(document, context, "div<=div", true, null);  // div after <=
test(document, context, "div>div", false, null);  // div after >
test(document, context, "div>=div", true, null);  // div after >=


// =========== * ===========

test(document, context, "*", [div], null);  // * with no preceding token
test(document, context, "  *", [div], null);
// * following every possible [28] ExprToken http://www.w3.org/TR/xpath/
test(document, context, "(*) * (*)", 2*2, null);  // * after ( and )
test(document, context, "self::node()[*] * 1", 2*1, null);  // * after [ and ]
test(document, context, ". * .", 2*2, null);  // * after .
test(document, div, ".. * ..", 2*2, null);  // * after ..
// (* can't follow @)
test(document, context, "substring-before('1992', *)", "199", null);  // * after ,
test(document, div, "self::*", [div], null);  // * after ::
test(document, context, "* * 4", 2*4, null);  // * after NameTest *
test(document, context, "'3' * 4", 3*4, null);  // * after Literal
test(document, context, "\"3\" * 4", 3*4, null);  // * after Literal
test(document, context, "12 * 4", 12*4, null);  // * after Number

// * following every [32] Operator
test(document, context, "true() and *", true, null);  // * after OperatorName and
test(document, context, "false() or *", true, null);  // * after OperatorName or
test(document, context, "* mod *", 0, null);  // * after OperatorName mod
test(document, context, "* div *", 1, null);  // * after OperatorName div
test(document, context, "3 * *", 6, null);  // * after MultiplyOperator
test(document, context, "*/*", [], null);  // * after /
test(document, context, "*//*", [], null);  // * after //
test(document, context, "zz|*", [div], null);  // * after |
test(document, context, "*+*", 4, null);  // * after +
test(document, context, "- - *", 2, null);  // * after unary -
test(document, context, "5 -*", 3, null);  // * after binary -
test(document, context, "*=*", true, null);  // * after =
test(document, context, "*!=*", false, null);  // * after =
test(document, context, "*<*", false, null);  // * after <
test(document, context, "*<=*", true, null);  // * after <=
test(document, context, "*>*", false, null);  // * after >
test(document, context, "*>=*", true, null);  // * after >=

var xmlDoc = (new DOMParser).parseFromString("<or xmlns='uri'>5</or>", "text/xml");
var nsResolver = function(prefix) {return 'uri';}
// div and * after :
test(xmlDoc, xmlDoc, "or:or", [xmlDoc.documentElement], nsResolver);
test(xmlDoc, xmlDoc, "or:*", [xmlDoc.documentElement], nsResolver);

// A few tests with mod as well
var xmlDoc2 = (new DOMParser).parseFromString("<mod and='x'>8</mod>", "text/xml");
test(xmlDoc2, xmlDoc2, "mod", [xmlDoc2.documentElement], null);
test(xmlDoc2, xmlDoc2, "mod mod mod", 0, null);
test(xmlDoc2, xmlDoc2, "(mod) mod 5", 3, null);
test(xmlDoc2, xmlDoc2, "string(mod/@and)", 'x', null);
</script>
<script src="../js/resources/js-test-post.js"></script>
</body>
</html>
