dependent.js (2605B)
1 function testSubstrLatin1() { 2 var s1 = "abcdefghijklmnopqrstuvwxyz12345678900000a"; 3 4 // Static strings. 5 assertEq(s1.substr(s1.length - 1), "a"); 6 assertEq(s1.substr(s1.length - 2), "0a"); 7 assertEq(s1.substr(26, 3), "123"); 8 9 // (Fat) inline strings. 10 var s2 = s1.substr(3, 5); 11 assertEq(isLatin1(s2), true); 12 assertEq(s2, "defgh"); 13 s2 = s1.substr(0, 20); 14 assertEq(isLatin1(s2), true); 15 assertEq(s2, "abcdefghijklmnopqrst"); 16 17 // Dependent string. 18 s2 = s1.substr(1, s1.length - 2); 19 assertEq(isLatin1(s2), true); 20 assertEq(s2.length, 39); 21 assertEq(s2, "bcdefghijklmnopqrstuvwxyz12345678900000"); 22 23 s2 = s2.substr(2).substr(1); 24 assertEq(isLatin1(s2), true); 25 assertEq(s2, "efghijklmnopqrstuvwxyz12345678900000"); 26 } 27 testSubstrLatin1(); 28 29 function testSubstrTwoByte() { 30 // Two byte string. 31 var s1 = "abcdefghijklmnopqrstuvwxyz12345678900000a\u1480"; 32 assertEq(isLatin1(s1), false); 33 34 // Static string. 35 var s2 = s1.substr(28, 1); 36 assertEq(s2, "3"); 37 38 // Inline string. 39 s2 = s1.substr(3, 5); 40 assertEq(s2, "defgh"); 41 42 // Dependent string. 43 s2 = s1.substr(2); 44 assertEq(isLatin1(s2), false); 45 assertEq(s2, "cdefghijklmnopqrstuvwxyz12345678900000a\u1480"); 46 47 s2 = s2.substr(2).substr(1); 48 assertEq(isLatin1(s2), false); 49 assertEq(s2, "fghijklmnopqrstuvwxyz12345678900000a\u1480"); 50 } 51 testSubstrTwoByte(); 52 53 function testSubstring() { 54 var s1 = "abcdefghijklmnopqrstuvwxyz123456789000ab"; 55 var s2 = s1.substring(1, 8); 56 assertEq(isLatin1(s2), true); 57 assertEq(s2, "bcdefgh"); 58 s2 = s1.substring(0, s1.length - 1); 59 assertEq(isLatin1(s2), true); 60 assertEq(s2, "abcdefghijklmnopqrstuvwxyz123456789000a"); 61 } 62 testSubstring(); 63 64 function testSlice() { 65 var s1 = "abcdefghijklmnopqrstuvwxyz123456789000ABC"; 66 var s2 = s1.slice(1, 8); 67 assertEq(isLatin1(s2), true); 68 assertEq(s2, "bcdefgh"); 69 s2 = s1.slice(0, -2); 70 assertEq(isLatin1(s2), true); 71 assertEq(s2, "abcdefghijklmnopqrstuvwxyz123456789000A"); 72 } 73 testSlice(); 74 75 function testUndepend() { 76 // Latin1 77 var s = "abcdefg".repeat(7); 78 s.indexOf("def"); // flatten 79 assertEq(isLatin1(s), true); 80 81 var dep = s.substr(7); 82 var res = dep.replace(/abcdef/g, ""); // StrReplaceRegexpRemove undepends. 83 assertEq(res, "gggggg"); 84 85 // TwoByte 86 var s = "abcdefg\u1200".repeat(6); 87 s.indexOf("def"); // flatten 88 var dep = s.substr(8); 89 var res = dep.replace(/abcdefg/g, ""); // StrReplaceRegexpRemove undepends. 90 assertEq(res, "\u1200\u1200\u1200\u1200\u1200"); 91 } 92 testUndepend();