File: fn-lang.html

package info (click to toggle)
firefox 145.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,653,344 kB
  • sloc: cpp: 7,594,932; javascript: 6,459,612; ansic: 3,752,905; python: 1,403,433; xml: 629,811; asm: 438,677; java: 186,421; sh: 67,287; makefile: 19,169; objc: 13,086; perl: 12,982; yacc: 4,583; cs: 3,846; pascal: 3,448; lex: 1,720; ruby: 1,003; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10
file content (40 lines) | stat: -rw-r--r-- 1,959 bytes parent folder | download | duplicates (13)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<!DOCTYPE html>
<link rel="help" href="https://www.w3.org/TR/1999/REC-xpath-19991116/#function-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>');

// XPath 3.1 is not to be followed as per: https://github.com/whatwg/dom/issues/1199
testFirstChild('lang("ko")', '<root><unmatch xml:lang="&#x212A;o"/></root>');
</script>
</body>