<!DOCTYPE html>
<link rel="help" href="https://www.w3.org/TR/1999/REC-xpath-19991116/#function-lang">
<link rel="help" href="https://www.w3.org/TR/xpath-functions-31/#func-lang">
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
// Set the context node to the first child of the root element, and evaluate
// the specified XPath expression. The test passes if
//  - The first child element name is 'match' and XPath result is true, or
//  - The first child element name is not 'match' and XPath result is false.
function testFirstChild(expression, xmlString) {
  let doc = (new DOMParser()).parseFromString(xmlString, 'text/xml');
  test(() => {
    let element = doc.documentElement.firstChild;
    let result = doc.evaluate(expression, element, null, XPathResult.BOOLEAN_TYPE, null);
    assert_equals(result.resultType, XPathResult.BOOLEAN_TYPE);
    assert_equals(result.booleanValue, element.localName == 'match', element.outerHTML);
  }, `${expression}: ${doc.documentElement.outerHTML}`);
}

testFirstChild('lang("en")', '<root><match xml:lang="en"/></root>');
testFirstChild('lang("en")', '<root><match xml:lang="EN"/></root>');
testFirstChild('lang("en")', '<root><match xml:lang="en-us"/></root>');
testFirstChild('lang("en")', '<root><unmatch/></root>');

// XPath 1.0 says:
// if the context node has no xml:lang attribute, by the value of the
// xml:lang attribute on the nearest ancestor of the context node that has
// an xml:lang attribute.
testFirstChild('lang("ja")', '<root xml:lang="ja"><match/></root>');

// XPath 1.0 says:
// if there is some suffix starting with - such that the attribute value is
// equal to the argument ignoring that suffix of the attribute value
testFirstChild('lang("ja")', '<root xml:lang="ja-jp"><unmatch xml:lang="ja_JP"/></root>');

// U+212A should match to ASCII 'k'.
// XPath 1.0 says:
// ... such that the attribute value is equal to the argument ignoring that suffix
// of the attribute value and ignoring case.
// XPath 3.1 says:
// ... true if and only if, based on a caseless default match as specified in
// section 3.13 of The Unicode Standard,
testFirstChild('lang("ko")', '<root><match xml:lang="&#x212A;o"/></root>');
</script>
</body>
