tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_exslt.html (8563B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 Test EXSLT extensions
      5 http://www.exslt.org/
      6 -->
      7 <head>
      8  <title>Test for EXSLT extensions</title>
      9  <script src="/tests/SimpleTest/SimpleTest.js"></script>
     10  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
     11 </head>
     12 <body>
     13 <p id="display"></p>
     14 <div id="content" style="display: none"></div>
     15 <pre id="test">
     16 <script type="application/javascript">
     17  let tests = [
     18    {
     19      descr: "Testing common:node-set",
     20      expr: "common:node-set($tree)",
     21      useCopyOf: true,
     22      expResult: "<abc>def</abc>",
     23    },
     24    {
     25      descr: "Testing common:object-type(string)",
     26      expr: "common:object-type($string)",
     27      expResult: "string",
     28    },
     29    {
     30      descr: "Testing common:object-type(number)",
     31      expr: "common:object-type($number)",
     32      expResult: "number",
     33    },
     34    {
     35      descr: "Testing common:object-type(boolean)",
     36      expr: "common:object-type($boolean)",
     37      expResult: "boolean",
     38    },
     39    {
     40      descr: "Testing common:object-type(node-set)",
     41      expr: "common:object-type($node-set)",
     42      expResult: "node-set",
     43    },
     44    {
     45      descr: "Testing common:object-type(tree)",
     46      expr: "common:object-type($tree)",
     47      expResult: "RTF",
     48    },
     49    {
     50      descr: "Testing math:max",
     51      expr: "math:max(root/numbers/number)",
     52      expResult: "11",
     53    },
     54    {
     55      descr: "Testing math:min",
     56      expr: "math:min(root/numbers/number)",
     57      expResult: "4",
     58    },
     59    {
     60      descr: "Testing math:highest",
     61      expr: "math:highest(root/numbers/number)/@id",
     62      expResult: "eleven",
     63    },
     64    {
     65      descr: "Testing math:lowest",
     66      expr: "math:lowest(root/numbers/number)/@id",
     67      expResult: "four",
     68    },
     69    {
     70      descr: "Testing regexp:test",
     71      expr: "regexp:test('XSLT is great', 'XSLT', '')",
     72      expResult: "true",
     73    },
     74    {
     75      descr: "Testing regexp:match",
     76      expr: "regexp:match('XSLT is great', 'XSL.', '')[1]",
     77      expResult: "XSLT",
     78    },
     79    {
     80      descr: "Testing regexp:replace",
     81      expr: "regexp:replace('Food is great', 'Fo.d', '', 'XSLT')",
     82      expResult: "XSLT is great",
     83    },
     84    {
     85      descr: "Testing sets:difference",
     86      expr: "sets:difference($i, $e)",
     87      useCopyOf: true,
     88      expResult: "<city name=\"Paris\" country=\"France\"></city><city name=\"Madrid\" country=\"Spain\"></city><city name=\"Calais\" country=\"France\"></city>",
     89    },
     90    {
     91      descr: "Testing sets:distinct",
     92      expr: "strings:concat(sets:distinct(//@country))",
     93      expResult: "FranceSpainAustriaGermany",
     94    },
     95    {
     96      descr: "Testing sets:hasSameNode",
     97      expr: "sets:has-same-node($i, $e)",
     98      expResult: "true",
     99    },
    100    {
    101      descr: "Testing sets:hasSameNode",
    102      expr: "sets:has-same-node($i, $o)",
    103      expResult: "false",
    104    },
    105    {
    106      descr: "Testing sets:intersection",
    107      expr: "sets:intersection($i, $e)",
    108      useCopyOf: true,
    109      expResult: "<city name=\"Vienna\" country=\"Austria\"></city><city name=\"Berlin\" country=\"Germany\"></city>",
    110    },
    111    {
    112      descr: "Testing sets:leading",
    113      expr: "sets:leading($i, $e)",
    114      useCopyOf: true,
    115      expResult: "<city name=\"Paris\" country=\"France\"></city><city name=\"Madrid\" country=\"Spain\"></city>",
    116    },
    117    {
    118      descr: "Testing sets:leading",
    119      expr: "sets:leading($i, $o)",
    120      useCopyOf: true,
    121      expResult: "",
    122    },
    123    {
    124      descr: "Testing sets:leading",
    125      expr: "sets:leading($i, $empty)",
    126      useCopyOf: true,
    127      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>",
    128    },
    129    {
    130      descr: "Testing sets:trailing",
    131      expr: "sets:trailing($i, $e)",
    132      useCopyOf: true,
    133      expResult: "<city name=\"Calais\" country=\"France\"></city><city name=\"Berlin\" country=\"Germany\"></city>",
    134    },
    135    {
    136      descr: "Testing sets:trailing",
    137      expr: "sets:trailing($i, $o)",
    138      useCopyOf: true,
    139      expResult: "",
    140    },
    141    {
    142      descr: "Testing sets:trailing",
    143      expr: "sets:trailing($i, $empty)",
    144      useCopyOf: true,
    145      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>",
    146    },
    147    {
    148      descr: "Testing strings:concat",
    149      expr: "strings:concat(root/numbers/number/@id)",
    150      expResult: "seveneleveneightfour",
    151    },
    152    {
    153      descr: "Testing strings:split",
    154      expr: "strings:split('a, simple, list', ', ')",
    155      useCopyOf: true,
    156      expResult: "<token>a</token><token>simple</token><token>list</token>",
    157    },
    158    {
    159      descr: "Testing strings:split",
    160      expr: "strings:split('date math str')",
    161      useCopyOf: true,
    162      expResult: "<token>date</token><token>math</token><token>str</token>",
    163    },
    164    {
    165      descr: "Testing strings:split",
    166      expr: "strings:split('foo', '')",
    167      useCopyOf: true,
    168      expResult: "<token>f</token><token>o</token><token>o</token>",
    169    },
    170    {
    171      descr: "Testing strings:tokenize",
    172      expr: "strings:tokenize('2001-06-03T11:40:23', '-T:')",
    173      useCopyOf: true,
    174      expResult: "<token>2001</token><token>06</token><token>03</token><token>11</token><token>40</token><token>23</token>",
    175    },
    176    {
    177      descr: "Testing strings:tokenize",
    178      expr: "strings:tokenize('date math str')",
    179      useCopyOf: true,
    180      expResult: "<token>date</token><token>math</token><token>str</token>",
    181    },
    182    {
    183      descr: "Testing strings:tokenize",
    184      expr: "strings:tokenize('foo', '')",
    185      useCopyOf: true,
    186      expResult: "<token>f</token><token>o</token><token>o</token>",
    187    },
    188  ];
    189 
    190  let style =
    191    `<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
    192                     xmlns:common="http://exslt.org/common"
    193                     xmlns:math="http://exslt.org/math"
    194                     xmlns:regexp="http://exslt.org/regular-expressions"
    195                     xmlns:sets="http://exslt.org/sets"
    196                     xmlns:strings="http://exslt.org/strings">
    197       <xsl:output method="html"/>
    198       <xsl:variable name="tree"><abc>def</abc></xsl:variable>
    199       <xsl:variable name="string" select="'abc'"/>
    200       <xsl:variable name="number" select="123"/>
    201       <xsl:variable name="boolean" select="true()"/>
    202       <xsl:variable name="node-set" select="//*"/>
    203       <xsl:variable name="i" select="/root/sets/city[contains(@name, 'i')]" />
    204       <xsl:variable name="e" select="/root/sets/city[contains(@name, 'e')]" />
    205       <xsl:variable name="o" select="/root/sets/city[contains(@name, 'o')]" />
    206       <xsl:variable name="empty" select="/root/sets/city[contains(@name, 'x')]" />
    207       <xsl:template match="/">
    208         ${tests.map(({expr, useCopyOf}, i) => `<div id="${i}"><xsl:${useCopyOf ? "copy-of" : "value-of"} select="${expr}"/></div>`).join("\n")}
    209       </xsl:template>
    210     </xsl:stylesheet>`;
    211 
    212  let styleDoc = new DOMParser().parseFromString(style, "text/xml");
    213 
    214  let data = `<root>
    215                <numbers>
    216                  <number id="seven">7</number>
    217                  <number id="eleven">11</number>
    218                  <number id="eight">8</number>
    219                  <number id="four">4</number>
    220                </numbers>
    221                <sets>
    222                  <city name="Paris" country="France" />
    223                  <city name="Madrid" country="Spain" />
    224                  <city name="Vienna" country="Austria" />
    225                  <city name="Barcelona" country="Spain" />
    226                  <city name="Salzburg" country="Austria" />
    227                  <city name="Bonn" country="Germany" />
    228                  <city name="Lyon" country="France" />
    229                  <city name="Hannover" country="Germany" />
    230                  <city name="Calais" country="France" />
    231                  <city name="Berlin" country="Germany" />
    232                </sets>
    233              </root>`;
    234  let originalDoc = new DOMParser().parseFromString(data, "text/xml");
    235 
    236  let processor = new XSLTProcessor();
    237  processor.importStylesheet(styleDoc);
    238 
    239  let fragment = processor.transformToFragment(originalDoc, document);
    240 
    241  tests.forEach(({descr, expResult}, i) => {
    242    let result = fragment.getElementById(i);
    243    is(result.innerHTML, expResult, descr);
    244  });
    245 
    246 </script>
    247 </pre>
    248 </body>
    249 </html>