// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. import "package:expect/expect.dart"; // Characters with Whitespace property (Unicode 6.3). // 0009..000D ; White_Space # Cc .. // 0020 ; White_Space # Zs SPACE // 0085 ; White_Space # Cc // 00A0 ; White_Space # Zs NO-BREAK SPACE // 1680 ; White_Space # Zs OGHAM SPACE MARK // 2000..200A ; White_Space # Zs EN QUAD..HAIR SPACE // 2028 ; White_Space # Zl LINE SEPARATOR // 2029 ; White_Space # Zp PARAGRAPH SEPARATOR // 202F ; White_Space # Zs NARROW NO-BREAK SPACE // 205F ; White_Space # Zs MEDIUM MATHEMATICAL SPACE // 3000 ; White_Space # Zs IDEOGRAPHIC SPACE // And BOM: // FEFF ; Byte order mark. const WHITESPACE = const [ 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x20, 0x85, 0xA0, 0x1680, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x2028, 0x2029, 0x202F, 0x205F, 0x3000, 0xFEFF, ]; main() { // Test the whitespace in different positions. test(ws) { // trimLeft Expect.equals("", ws.trimLeft(), "K1"); Expect.equals("", (ws + ws).trimLeft(), "L2"); Expect.equals("a" + ws, ("a" + ws).trimLeft(), "L3"); Expect.equals("a", (ws + "a").trimLeft(), "L4"); Expect.equals("a" + ws + ws, (ws + ws + "a" + ws + ws).trimLeft(), "L5"); Expect.equals("a" + ws + "a", (ws + ws + "a" + ws + "a").trimLeft(), "L6"); var untrimmable = "a" + ws + "a"; Expect.identical(untrimmable, untrimmable.trimLeft(), "L7"); // trimRight Expect.equals("", ws.trimRight(), "R1"); Expect.equals("", (ws + ws).trimRight(), "R2"); Expect.equals("a", ("a" + ws).trimRight(), "R3"); Expect.equals(ws + "a", (ws + "a").trimRight(), "R4"); Expect.equals(ws + ws + "a", (ws + ws + "a" + ws + ws).trimRight(), "R5"); Expect.equals("a" + ws + "a", ("a" + ws + "a" + ws + ws).trimRight(), "R6"); Expect.identical(untrimmable, untrimmable.trimRight(), "R7"); } // Test each whitespace at different locations. for (var ws in WHITESPACE) { var c = new String.fromCharCode(ws); test(c); } // Test all whitespaces at once at different locations. test(new String.fromCharCodes(WHITESPACE)); // Empty strings. Expect.identical("", "".trimLeft()); Expect.identical("", "".trimRight()); // Test all BMP chars and one surrogate pair. for (int i = 0, j = 0; i <= 0x10000; i++) { if (j < WHITESPACE.length && i == WHITESPACE[j]) { j++; continue; } // See below for these exceptions. if (i == 0x180E) continue; if (i == 0x200B) continue; var s = new String.fromCharCode(i); Expect.identical(s, s.trimLeft()); Expect.identical(s, s.trimRight()); } // U+200b is not treated as whitespace, though historically, some JS engines // did. var s200B = new String.fromCharCode(0x200B); Expect.identical(s200B, s200B.trimLeft()); Expect.identical(s200B, s200B.trimRight()); // U+180E ceased to be whitespace in Unicode version 6.3.0 // string_trimlr_test/unicode63 fails on implementations using earlier versions. var s180E = new String.fromCharCode(0x180E); Expect.identical(s180E, s180E.trimLeft()); // //# unicode63: ok Expect.identical(s180E, s180E.trimRight()); // //# unicode63: ok }