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);