| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft Corporation and contributors. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- function toHexCP(c, cp) {
- var hex = "0123456789abcdef";
- return String.fromCharCode(hex.charCodeAt((c >> (cp * 4)) & 0xf));
- }
- function toHex(str) {
- var result = "";
- for(var i = 0; i < str.length; i++) {
- var c = str.charCodeAt(i);
- for (var cp = 3; cp >= 0; cp--) {
- result += toHexCP(c, cp);
- }
- }
- return "0x" + result;
- }
- var CHECK = function(h)
- {
- var hex_str = String.fromCharCode(h);
- var pattern = eval("/" + hex_str + "/");
- if (toHex(hex_str) != toHex(pattern.source)) {
- throw new Error("String encoding has failed? "
- + toHex(hex_str) + " != " + toHex(pattern.source));
- }
- }
- CHECK("0x0000");
- CHECK("0x0080");
- CHECK("0x0800");
- CHECK("0xFF80");
- CHECK("0xFFFD");
- CHECK("0xFFFFFF");
- CHECK("0xFFFFFF80");
- CHECK("0xFFFFFF80FF");
- function CHECK_EVAL(s)
- {
- var eval_s = new RegExp( s ).source;
- if (s !== eval_s) throw new Error(
- "String Encoding is broken ? ->" + s);
- }
- var CH1 = String.fromCharCode('0xe4b8ad');
- var CH2 = String.fromCharCode('0xe69687');
- var CH3 = String.fromCharCode('0xe336b2');
- var CH4 = String.fromCharCode('0xe336b2aa');
- var CHX = String.fromCharCode("0x80808080");
- var BUFF = '';
- for(var i = 0; i < 16; i++)
- {
- var str = CH1;
- CHECK_EVAL(str + CHX + BUFF)
- CHECK_EVAL(str + BUFF + CHX)
- CHECK_EVAL(str + BUFF + CHX + '1')
- str += BUFF + CH2 + CHX;
- BUFF += '1';
- CHECK_EVAL(str + '1' + CH3);
- CHECK_EVAL(str + '12' + CH3);
- CHECK_EVAL(str + '123' + CH3);
- CHECK_EVAL(str + '1' + CH4);
- CHECK_EVAL(str + '12' + CH4);
- CHECK_EVAL(str + '123' + CH4)
- }
- console.log("PASS");
|