| Index: tests/language/regex/invalid-range-in-class_test.dart
|
| diff --git a/tests/language/regex/invalid-range-in-class_test.dart b/tests/language/regex/invalid-range-in-class_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9eecad55bb4929233939507433fcf42d6232ad78
|
| --- /dev/null
|
| +++ b/tests/language/regex/invalid-range-in-class_test.dart
|
| @@ -0,0 +1,36 @@
|
| +// Copyright (c) 2014, 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 'util.dart';
|
| +import 'package:expect/expect.dart';
|
| +
|
| +void main() {
|
| + description(
|
| + "This page tests invalid character ranges in character classes."
|
| + );
|
| +
|
| + // These test a basic range / non range.
|
| + shouldBe(new RegExp(r"[a-c]+").firstMatch("-acbd"), ["acb"]);
|
| + shouldBe(new RegExp(r"[a\-c]+").firstMatch("-acbd"), ["-ac"]);
|
| +
|
| + // A reverse-range is invalid.
|
| + assertThrows(() => new RegExp(r"[c-a]+").firstMatch("-acbd"));
|
| +
|
| + // A character-class in a range is invalid, according to ECMA-262, but we allow it.
|
| + shouldBe(new RegExp(r"[\d-x]+").firstMatch("1-3xy"), ["1-3x"]);
|
| + shouldBe(new RegExp(r"[x-\d]+").firstMatch("1-3xy"), ["1-3x"]);
|
| + shouldBe(new RegExp(r"[\\d-\d]+").firstMatch("1-3xy"), ["1-3"]);
|
| +
|
| + // Whilst we break with ECMA-262's definition of CharacterRange, we do comply with
|
| + // the grammar, and as such in the following regex a-z cannot be matched as a range.
|
| + shouldBe(new RegExp(r"[\d-a-z]+").firstMatch("az1-3y"), ["az1-3"]);
|
| +
|
| + // An escaped hypen should not be confused for an invalid range.
|
| + shouldBe(new RegExp(r"[\d\-x]+").firstMatch("1-3xy"), ["1-3x"]);
|
| + shouldBe(new RegExp(r"[x\-\d]+").firstMatch("1-3xy"), ["1-3x"]);
|
| + shouldBe(new RegExp(r"[\d\-\d]+").firstMatch("1-3xy"), ["1-3"]);
|
| +
|
| + // A hyphen after a character-class is not invalid.
|
| + shouldBe(new RegExp(r"[\d-]+").firstMatch("1-3xy"), ["1-3"]);
|
| +}
|
|
|