blob: dd4ba1e054db92e4b994e8293e0ffd01bce80858 [file] [log] [blame]
// 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.
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.
}