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.
6 // WhiteSpace defined in ECMA-262 5.1, 7.2
8 0x000B, // Vertical Tab VT
9 0x000C, // Form Feed FF
11 0x00A0, // No-break space NBSP
12 0xFEFF, // Byte Order Mark BOM
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
20 // Unicode 6.3.0 whitespaces (category 'Zs')
21 0x1680, // Ogham Space Mark
22 0x180E, // Mongolian Vowel Separator
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
34 0x2028, // LINE SEPARATOR
35 0x2029, // PARAGRAPH SEPARATOR
36 0x202F, // NARROW NO-BREAK SPACE
37 0x205F, // MEDIUM MATHEMATICAL SPACE
38 0x3000, // IDEOGRAPHIC SPACE
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";
48 function is_whitespace(c) {
49 return whitespaces.indexOf(c.charCodeAt(0)) > -1;
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];
57 if (is_whitespace(test_char)) {
58 assertEquals(test_char, pos_match[0]);
59 assertEquals(postfix, neg_match[0]);
61 assertEquals(test_char, neg_match[0]);
62 assertNull(pos_match);
66 function test_trim(c, infix) {
67 var str = c + c + c + infix + c;
68 if (is_whitespace(c)) {
69 assertEquals(infix, str.trim());
71 assertEquals(str, str.trim());
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));
82 assertEquals(NaN, parseInt(str));
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));
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);
99 assertEquals(NaN, result);
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);