| // Copyright (c) 2018, 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. |
| |
| // @dart = 2.9 |
| |
| import "package:expect/expect.dart"; |
| |
| var escapeChars = r"([)}{]?*+.$^|\"; |
| |
| var nonEscapeAscii = "\x00\x01\x02\x03\x04\x05\x06\x07" // |
| "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" // |
| "\x10\x11\x12\x13\x14\x15\x16\x17" // |
| "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" // |
| """ !"#%&',-/0123456789:;<=>""" // |
| """@ABCDEFGHIJKLMNOPQRSTUVWXYZ_""" // |
| """`abcdefghijklmnopqrstuvwxyz~\x7f"""; |
| var someNonAscii = |
| new String.fromCharCodes(new List.generate(0x1000 - 128, (x) => x + 128)); |
| |
| test(String string, [bool shouldEscape]) { |
| var escape = RegExp.escape(string); |
| Expect.isTrue(new RegExp(escape).hasMatch(string), "$escape"); |
| Expect.equals(string, new RegExp(escape).firstMatch(string)[0], "$escape"); |
| if (shouldEscape == true) { |
| Expect.notEquals(string, escape); |
| } else if (shouldEscape == false) { |
| Expect.equals(string, escape); |
| } |
| } |
| |
| main() { |
| for (var c in escapeChars.split("")) { |
| test(c, true); |
| } |
| for (var c in nonEscapeAscii.split("")) { |
| test(c, false); |
| } |
| test(escapeChars, true); |
| test(nonEscapeAscii, false); |
| test(someNonAscii, false); |
| test((nonEscapeAscii + escapeChars) * 3, true); |
| test(r'.abc', true); // First only. |
| test(r'abc.', true); // Last only. |
| } |