| Index: test/codegen/corelib/string_trimlr_test.dart
|
| diff --git a/test/codegen/corelib/string_trimlr_test.dart b/test/codegen/corelib/string_trimlr_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..cf47ffc6a8b9fbb3642ba9c852182c27dedb1e5f
|
| --- /dev/null
|
| +++ b/test/codegen/corelib/string_trimlr_test.dart
|
| @@ -0,0 +1,103 @@
|
| +// 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.2).
|
| +// 0009..000D ; White_Space # Cc <control-0009>..<control-000D>
|
| +// 0020 ; White_Space # Zs SPACE
|
| +// 0085 ; White_Space # Cc <control-0085>
|
| +// 00A0 ; White_Space # Zs NO-BREAK SPACE
|
| +// 1680 ; White_Space # Zs OGHAM SPACE MARK
|
| +// 180E ; White_Space # Zs MONGOLIAN VOWEL SEPARATOR
|
| +// 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,
|
| + 0x180E,
|
| + 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;
|
| + }
|
| + // U+200b is currently being treated as whitespace by some JS engines.
|
| + // Should be fixed in tip-of-tree V8 per 2014-02-10.
|
| + // This line makes string_trimlr_test/none fail but /01 succeede where
|
| + // this bug is in the JS. Both succeede on the VM and where the bug is
|
| + // not. Remove this line and comment if all JS engines fix it.
|
| + if (i == 0x200b) continue; /// 01: ok
|
| +
|
| + var s = new String.fromCharCode(i);
|
| + Expect.identical(s, s.trimLeft());
|
| + Expect.identical(s, s.trimRight());
|
| + }
|
| +}
|
|
|