Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / v8 / test / mjsunit / whitespaces.js
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 }