OLD | NEW |
| (Empty) |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | |
2 // for details. All rights reserved. Use of this source code is governed by a | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 import "package:expect/expect.dart"; | |
6 | |
7 // Characters with Whitespace property (Unicode 6.3). | |
8 // 0009..000D ; White_Space # Cc <control-0009>..<control-000D> | |
9 // 0020 ; White_Space # Zs SPACE | |
10 // 0085 ; White_Space # Cc <control-0085> | |
11 // 00A0 ; White_Space # Zs NO-BREAK SPACE | |
12 // 1680 ; White_Space # Zs OGHAM SPACE MARK | |
13 // 2000..200A ; White_Space # Zs EN QUAD..HAIR SPACE | |
14 // 2028 ; White_Space # Zl LINE SEPARATOR | |
15 // 2029 ; White_Space # Zp PARAGRAPH SEPARATOR | |
16 // 202F ; White_Space # Zs NARROW NO-BREAK SPACE | |
17 // 205F ; White_Space # Zs MEDIUM MATHEMATICAL SPACE | |
18 // 3000 ; White_Space # Zs IDEOGRAPHIC SPACE | |
19 // And BOM: | |
20 // FEFF ; Byte order mark. | |
21 const WHITESPACE = const [ | |
22 0x09, | |
23 0x0A, | |
24 0x0B, | |
25 0x0C, | |
26 0x0D, | |
27 0x20, | |
28 0x85, | |
29 0xA0, | |
30 0x1680, | |
31 0x2000, | |
32 0x2001, | |
33 0x2002, | |
34 0x2003, | |
35 0x2004, | |
36 0x2005, | |
37 0x2006, | |
38 0x2007, | |
39 0x2008, | |
40 0x2009, | |
41 0x200A, | |
42 0x2028, | |
43 0x2029, | |
44 0x202F, | |
45 0x205F, | |
46 0x3000, | |
47 0xFEFF, | |
48 ]; | |
49 | |
50 main() { | |
51 // Test the whitespace in different positions. | |
52 test(ws) { | |
53 // trimLeft | |
54 Expect.equals("", ws.trimLeft(), "K1"); | |
55 Expect.equals("", (ws + ws).trimLeft(), "L2"); | |
56 Expect.equals("a" + ws, ("a" + ws).trimLeft(), "L3"); | |
57 Expect.equals("a", (ws + "a").trimLeft(), "L4"); | |
58 Expect.equals("a" + ws + ws, (ws + ws + "a" + ws + ws).trimLeft(), "L5"); | |
59 Expect.equals("a" + ws + "a", (ws + ws + "a" + ws + "a").trimLeft(), "L6"); | |
60 var untrimmable = "a" + ws + "a"; | |
61 Expect.identical(untrimmable, untrimmable.trimLeft(), "L7"); | |
62 // trimRight | |
63 Expect.equals("", ws.trimRight(), "R1"); | |
64 Expect.equals("", (ws + ws).trimRight(), "R2"); | |
65 Expect.equals("a", ("a" + ws).trimRight(), "R3"); | |
66 Expect.equals(ws + "a", (ws + "a").trimRight(), "R4"); | |
67 Expect.equals(ws + ws + "a", (ws + ws + "a" + ws + ws).trimRight(), "R5"); | |
68 Expect.equals("a" + ws + "a", ("a" + ws + "a" + ws + ws).trimRight(), "R6"); | |
69 Expect.identical(untrimmable, untrimmable.trimRight(), "R7"); | |
70 } | |
71 | |
72 // Test each whitespace at different locations. | |
73 for (var ws in WHITESPACE) { | |
74 var c = new String.fromCharCode(ws); | |
75 test(c); | |
76 } | |
77 // Test all whitespaces at once at different locations. | |
78 test(new String.fromCharCodes(WHITESPACE)); | |
79 | |
80 // Empty strings. | |
81 Expect.identical("", "".trimLeft()); | |
82 Expect.identical("", "".trimRight()); | |
83 | |
84 // Test all BMP chars and one surrogate pair. | |
85 for (int i = 0, j = 0; i <= 0x10000; i++) { | |
86 if (j < WHITESPACE.length && i == WHITESPACE[j]) { | |
87 j++; | |
88 continue; | |
89 } | |
90 // See below for these exceptions. | |
91 if (i == 0x180E) continue; | |
92 if (i == 0x200B) continue; | |
93 | |
94 var s = new String.fromCharCode(i); | |
95 Expect.identical(s, s.trimLeft()); | |
96 Expect.identical(s, s.trimRight()); | |
97 } | |
98 | |
99 // U+200b is currently being treated as whitespace by some JS engines. | |
100 // string_trimlr_test/01 fails on these engines. | |
101 // Should be fixed in tip-of-tree V8 per 2014-02-10. | |
102 var s200B = new String.fromCharCode(0x200B); | |
103 Expect.identical(s200B, s200B.trimLeft()); // //# 01: ok | |
104 Expect.identical(s200B, s200B.trimRight()); // //# 01: ok | |
105 | |
106 // U+180E ceased to be whitespace in Unicode version 6.3.0 | |
107 // string_trimlr_test/02 fails on implementations using earlier versions. | |
108 var s180E = new String.fromCharCode(0x180E); | |
109 Expect.identical(s180E, s180E.trimLeft()); // //# 02: ok | |
110 Expect.identical(s180E, s180E.trimRight()); // //# 02: ok | |
111 } | |
OLD | NEW |