diff options
Diffstat (limited to 'dom/xslt/tests/mochitest/test_exslt.html')
-rw-r--r-- | dom/xslt/tests/mochitest/test_exslt.html | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/dom/xslt/tests/mochitest/test_exslt.html b/dom/xslt/tests/mochitest/test_exslt.html new file mode 100644 index 0000000000..739d1c1988 --- /dev/null +++ b/dom/xslt/tests/mochitest/test_exslt.html @@ -0,0 +1,249 @@ +<!DOCTYPE HTML> +<html> +<!-- +Test EXSLT extensions +http://www.exslt.org/ +--> +<head> + <title>Test for EXSLT extensions</title> + <script src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<p id="display"></p> +<div id="content" style="display: none"></div> +<pre id="test"> +<script type="application/javascript"> + let tests = [ + { + descr: "Testing common:node-set", + expr: "common:node-set($tree)", + useCopyOf: true, + expResult: "<abc>def</abc>", + }, + { + descr: "Testing common:object-type(string)", + expr: "common:object-type($string)", + expResult: "string", + }, + { + descr: "Testing common:object-type(number)", + expr: "common:object-type($number)", + expResult: "number", + }, + { + descr: "Testing common:object-type(boolean)", + expr: "common:object-type($boolean)", + expResult: "boolean", + }, + { + descr: "Testing common:object-type(node-set)", + expr: "common:object-type($node-set)", + expResult: "node-set", + }, + { + descr: "Testing common:object-type(tree)", + expr: "common:object-type($tree)", + expResult: "RTF", + }, + { + descr: "Testing math:max", + expr: "math:max(root/numbers/number)", + expResult: "11", + }, + { + descr: "Testing math:min", + expr: "math:min(root/numbers/number)", + expResult: "4", + }, + { + descr: "Testing math:highest", + expr: "math:highest(root/numbers/number)/@id", + expResult: "eleven", + }, + { + descr: "Testing math:lowest", + expr: "math:lowest(root/numbers/number)/@id", + expResult: "four", + }, + { + descr: "Testing regexp:test", + expr: "regexp:test('XSLT is great', 'XSLT', '')", + expResult: "true", + }, + { + descr: "Testing regexp:match", + expr: "regexp:match('XSLT is great', 'XSL.', '')[1]", + expResult: "XSLT", + }, + { + descr: "Testing regexp:replace", + expr: "regexp:replace('Food is great', 'Fo.d', '', 'XSLT')", + expResult: "XSLT is great", + }, + { + descr: "Testing sets:difference", + expr: "sets:difference($i, $e)", + useCopyOf: true, + expResult: "<city name=\"Paris\" country=\"France\"></city><city name=\"Madrid\" country=\"Spain\"></city><city name=\"Calais\" country=\"France\"></city>", + }, + { + descr: "Testing sets:distinct", + expr: "strings:concat(sets:distinct(//@country))", + expResult: "FranceSpainAustriaGermany", + }, + { + descr: "Testing sets:hasSameNode", + expr: "sets:has-same-node($i, $e)", + expResult: "true", + }, + { + descr: "Testing sets:hasSameNode", + expr: "sets:has-same-node($i, $o)", + expResult: "false", + }, + { + descr: "Testing sets:intersection", + expr: "sets:intersection($i, $e)", + useCopyOf: true, + expResult: "<city name=\"Vienna\" country=\"Austria\"></city><city name=\"Berlin\" country=\"Germany\"></city>", + }, + { + descr: "Testing sets:leading", + expr: "sets:leading($i, $e)", + useCopyOf: true, + expResult: "<city name=\"Paris\" country=\"France\"></city><city name=\"Madrid\" country=\"Spain\"></city>", + }, + { + descr: "Testing sets:leading", + expr: "sets:leading($i, $o)", + useCopyOf: true, + expResult: "", + }, + { + descr: "Testing sets:leading", + expr: "sets:leading($i, $empty)", + useCopyOf: true, + expResult: "<city name=\"Paris\" country=\"France\"></city><city name=\"Madrid\" country=\"Spain\"></city><city name=\"Vienna\" country=\"Austria\"></city><city name=\"Calais\" country=\"France\"></city><city name=\"Berlin\" country=\"Germany\"></city>", + }, + { + descr: "Testing sets:trailing", + expr: "sets:trailing($i, $e)", + useCopyOf: true, + expResult: "<city name=\"Calais\" country=\"France\"></city><city name=\"Berlin\" country=\"Germany\"></city>", + }, + { + descr: "Testing sets:trailing", + expr: "sets:trailing($i, $o)", + useCopyOf: true, + expResult: "", + }, + { + descr: "Testing sets:trailing", + expr: "sets:trailing($i, $empty)", + useCopyOf: true, + expResult: "<city name=\"Paris\" country=\"France\"></city><city name=\"Madrid\" country=\"Spain\"></city><city name=\"Vienna\" country=\"Austria\"></city><city name=\"Calais\" country=\"France\"></city><city name=\"Berlin\" country=\"Germany\"></city>", + }, + { + descr: "Testing strings:concat", + expr: "strings:concat(root/numbers/number/@id)", + expResult: "seveneleveneightfour", + }, + { + descr: "Testing strings:split", + expr: "strings:split('a, simple, list', ', ')", + useCopyOf: true, + expResult: "<token>a</token><token>simple</token><token>list</token>", + }, + { + descr: "Testing strings:split", + expr: "strings:split('date math str')", + useCopyOf: true, + expResult: "<token>date</token><token>math</token><token>str</token>", + }, + { + descr: "Testing strings:split", + expr: "strings:split('foo', '')", + useCopyOf: true, + expResult: "<token>f</token><token>o</token><token>o</token>", + }, + { + descr: "Testing strings:tokenize", + expr: "strings:tokenize('2001-06-03T11:40:23', '-T:')", + useCopyOf: true, + expResult: "<token>2001</token><token>06</token><token>03</token><token>11</token><token>40</token><token>23</token>", + }, + { + descr: "Testing strings:tokenize", + expr: "strings:tokenize('date math str')", + useCopyOf: true, + expResult: "<token>date</token><token>math</token><token>str</token>", + }, + { + descr: "Testing strings:tokenize", + expr: "strings:tokenize('foo', '')", + useCopyOf: true, + expResult: "<token>f</token><token>o</token><token>o</token>", + }, + ]; + + let style = + `<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:common="http://exslt.org/common" + xmlns:math="http://exslt.org/math" + xmlns:regexp="http://exslt.org/regular-expressions" + xmlns:sets="http://exslt.org/sets" + xmlns:strings="http://exslt.org/strings"> + <xsl:output method="html"/> + <xsl:variable name="tree"><abc>def</abc></xsl:variable> + <xsl:variable name="string" select="'abc'"/> + <xsl:variable name="number" select="123"/> + <xsl:variable name="boolean" select="true()"/> + <xsl:variable name="node-set" select="//*"/> + <xsl:variable name="i" select="/root/sets/city[contains(@name, 'i')]" /> + <xsl:variable name="e" select="/root/sets/city[contains(@name, 'e')]" /> + <xsl:variable name="o" select="/root/sets/city[contains(@name, 'o')]" /> + <xsl:variable name="empty" select="/root/sets/city[contains(@name, 'x')]" /> + <xsl:template match="/"> + ${tests.map(({expr, useCopyOf}, i) => `<div id="${i}"><xsl:${useCopyOf ? "copy-of" : "value-of"} select="${expr}"/></div>`).join("\n")} + </xsl:template> + </xsl:stylesheet>`; + + let styleDoc = new DOMParser().parseFromString(style, "text/xml"); + + let data = `<root> + <numbers> + <number id="seven">7</number> + <number id="eleven">11</number> + <number id="eight">8</number> + <number id="four">4</number> + </numbers> + <sets> + <city name="Paris" country="France" /> + <city name="Madrid" country="Spain" /> + <city name="Vienna" country="Austria" /> + <city name="Barcelona" country="Spain" /> + <city name="Salzburg" country="Austria" /> + <city name="Bonn" country="Germany" /> + <city name="Lyon" country="France" /> + <city name="Hannover" country="Germany" /> + <city name="Calais" country="France" /> + <city name="Berlin" country="Germany" /> + </sets> + </root>`; + let originalDoc = new DOMParser().parseFromString(data, "text/xml"); + + let processor = new XSLTProcessor(); + processor.importStylesheet(styleDoc); + + let fragment = processor.transformToFragment(originalDoc, document); + + tests.forEach(({descr, expResult}, i) => { + let result = fragment.getElementById(i); + is(result.innerHTML, expResult, descr); + }); + +</script> +</pre> +</body> +</html> |