| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 var whitespaces = [ | |
| 6 // WhiteSpace defined in ECMA-262 5.1, 7.2 | |
| 7 0x0009, // Tab TAB | |
| 8 0x000B, // Vertical Tab VT | |
| 9 0x000C, // Form Feed FF | |
| 10 0x0020, // Space SP | |
| 11 0x00A0, // No-break space NBSP | |
| 12 0xFEFF, // Byte Order Mark BOM | |
| 13 | |
| 14 // LineTerminator defined in ECMA-262 5.1, 7.3 | |
| 15 0x000A, // Line Feed LF | |
| 16 0x000D, // Carriage Return CR | |
| 17 0x2028, // Line Separator LS | |
| 18 0x2029, // Paragraph Separator PS | |
| 19 | |
| 20 // Unicode 6.3.0 whitespaces (category 'Zs') | |
| 21 0x1680, // Ogham Space Mark | |
| 22 0x180E, // Mongolian Vowel Separator | |
| 23 0x2000, // EN QUAD | |
| 24 0x2001, // EM QUAD | |
| 25 0x2002, // EN SPACE | |
| 26 0x2003, // EM SPACE | |
| 27 0x2004, // THREE-PER-EM SPACE | |
| 28 0x2005, // FOUR-PER-EM SPACE | |
| 29 0x2006, // SIX-PER-EM SPACE | |
| 30 0x2007, // FIGURE SPACE | |
| 31 0x2008, // PUNCTUATION SPACE | |
| 32 0x2009, // THIN SPACE | |
| 33 0x200A, // HAIR SPACE | |
| 34 0x2028, // LINE SEPARATOR | |
| 35 0x2029, // PARAGRAPH SEPARATOR | |
| 36 0x202F, // NARROW NO-BREAK SPACE | |
| 37 0x205F, // MEDIUM MATHEMATICAL SPACE | |
| 38 0x3000, // IDEOGRAPHIC SPACE | |
| 39 ]; | |
| 40 | |
| 41 // Add single twobyte char to force twobyte representation. | |
| 42 // Interestingly, snowman is not "white" space :) | |
| 43 var twobyte = "\u2603"; | |
| 44 var onebyte = "\u007E"; | |
| 45 var twobytespace = "\u2000"; | |
| 46 var onebytespace = "\u0020"; | |
| 47 | |
| 48 function is_whitespace(c) { | |
| 49 return whitespaces.indexOf(c.charCodeAt(0)) > -1; | |
| 50 } | |
| 51 | |
| 52 function test_regexp(str) { | |
| 53 var pos_match = str.match(/\s/); | |
| 54 var neg_match = str.match(/\S/); | |
| 55 var test_char = str[0]; | |
| 56 var postfix = str[1]; | |
| 57 if (is_whitespace(test_char)) { | |
| 58 assertEquals(test_char, pos_match[0]); | |
| 59 assertEquals(postfix, neg_match[0]); | |
| 60 } else { | |
| 61 assertEquals(test_char, neg_match[0]); | |
| 62 assertNull(pos_match); | |
| 63 } | |
| 64 } | |
| 65 | |
| 66 function test_trim(c, infix) { | |
| 67 var str = c + c + c + infix + c; | |
| 68 if (is_whitespace(c)) { | |
| 69 assertEquals(infix, str.trim()); | |
| 70 } else { | |
| 71 assertEquals(str, str.trim()); | |
| 72 } | |
| 73 } | |
| 74 | |
| 75 function test_parseInt(c, postfix) { | |
| 76 // Skip if prefix is a digit. | |
| 77 if (c >= "0" && c <= "9") return; | |
| 78 var str = c + c + "123" + postfix; | |
| 79 if (is_whitespace(c)) { | |
| 80 assertEquals(123, parseInt(str)); | |
| 81 } else { | |
| 82 assertEquals(NaN, parseInt(str)); | |
| 83 } | |
| 84 } | |
| 85 | |
| 86 function test_eval(c, content) { | |
| 87 if (!is_whitespace(c)) return; | |
| 88 var str = c + c + "'" + content + "'" + c + c; | |
| 89 assertEquals(content, eval(str)); | |
| 90 } | |
| 91 | |
| 92 function test_stringtonumber(c, postfix) { | |
| 93 // Skip if prefix is a digit. | |
| 94 if (c >= "0" && c <= "9") return; | |
| 95 var result = 1 + Number(c + "123" + c + postfix); | |
| 96 if (is_whitespace(c)) { | |
| 97 assertEquals(124, result); | |
| 98 } else { | |
| 99 assertEquals(NaN, result); | |
| 100 } | |
| 101 } | |
| 102 | |
| 103 for (var i = 0; i < 0x10000; i++) { | |
| 104 c = String.fromCharCode(i); | |
| 105 test_regexp(c + onebyte); | |
| 106 test_regexp(c + twobyte); | |
| 107 test_trim(c, onebyte + "trim"); | |
| 108 test_trim(c, twobyte + "trim"); | |
| 109 test_parseInt(c, onebyte); | |
| 110 test_parseInt(c, twobyte); | |
| 111 test_eval(c, onebyte); | |
| 112 test_eval(c, twobyte); | |
| 113 test_stringtonumber(c, onebytespace); | |
| 114 test_stringtonumber(c, twobytespace); | |
| 115 } | |
| OLD | NEW |