tor-browser

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

S15.1.3.4_A2.4_T2.js (2276B)


      1 // Copyright 2009 the Sputnik authors.  All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 
      4 /*---
      5 info: |
      6    If string.charAt(k) in [0xD800 - 0xDBFF] and string.charAt(k+1) in
      7    [0xDC00 � 0xDFFF], return 4 octets (000wwwxx xxxxyyyy yyzzzzzz ->
      8    11110www 10xxxxxx 10yyyyyy 10zzzzzz)
      9 esid: sec-encodeuricomponent-uricomponent
     10 description: >
     11    Complex tests, use RFC 3629, string.charAt(k) in [0xD800, 0xDBFF,
     12    0xD9FF]
     13 includes: [decimalToHexString.js]
     14 ---*/
     15 
     16 var chars = [0xD800, 0xDBFF, 0xD9FF];
     17 var errorCount = 0;
     18 var count = 0;
     19 var indexP;
     20 var indexO = 0;
     21 for (var index = 0xDC00; index <= 0xDFFF; index++) {
     22  var res = true;
     23  for (var indexC = 0; indexC < chars.length; indexC++) {
     24    var index1 = (chars[indexC] - 0xD800) * 0x400 + (index - 0xDC00) + 0x10000;
     25    var hex1 = decimalToPercentHexString(0x0080 + (index1 & 0x003F));
     26    var hex2 = decimalToPercentHexString(0x0080 + (index1 & 0x0FC0) / 0x0040);
     27    var hex3 = decimalToPercentHexString(0x0080 + (index1 & 0x3F000) / 0x1000);
     28    var hex4 = decimalToPercentHexString(0x00F0 + (index1 & 0x1C0000) / 0x40000);
     29    var str = String.fromCharCode(chars[indexC], index);
     30    if (encodeURIComponent(str).toUpperCase() === hex4 + hex3 + hex2 + hex1) continue;
     31 
     32    res = false;
     33  }
     34  if (res !== true) {
     35    if (indexO === 0) {
     36      indexO = index;
     37    } else {
     38      if ((index - indexP) !== 1) {
     39        if ((indexP - indexO) !== 0) {
     40          var hexP = decimalToHexString(indexP);
     41          var hexO = decimalToHexString(indexO);
     42          throw new Test262Error('#' + hexO + '-' + hexP + ' ');
     43        }
     44        else {
     45          var hexP = decimalToHexString(indexP);
     46          throw new Test262Error('#' + hexP + ' ');
     47        }
     48        indexO = index;
     49      }
     50    }
     51    indexP = index;
     52    errorCount++;
     53  }
     54  count++;
     55 }
     56 
     57 if (errorCount > 0) {
     58  if ((indexP - indexO) !== 0) {
     59    var hexP = decimalToHexString(indexP);
     60    var hexO = decimalToHexString(indexO);
     61    throw new Test262Error('#' + hexO + '-' + hexP + ' ');
     62  } else {
     63    var hexP = decimalToHexString(indexP);
     64    throw new Test262Error('#' + hexP + ' ');
     65  }
     66  throw new Test262Error('Total error: ' + errorCount + ' bad Unicode character in ' + count + ' ');
     67 }
     68 
     69 reportCompare(0, 0);