| // Copyright (c) 2011, 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 test for testing String.allMatches. | |
| import "package:expect/expect.dart"; | |
| String str = "this is a string with hello here and hello there"; | |
| main() { | |
| testNoMatch(); | |
| testOneMatch(); | |
| testTwoMatches(); | |
| testEmptyPattern(); | |
| testEmptyString(); | |
| testEmptyPatternAndString(); | |
| testMatchAsPrefix(); | |
| testAllMatchesStart(); | |
| } | |
| testNoMatch() { | |
| // Also tests that RegExp groups don't work. | |
| String helloPattern = "with (hello)"; | |
| Iterable<Match> matches = helloPattern.allMatches(str); | |
| Expect.isFalse(matches.iterator.moveNext()); | |
| } | |
| testOneMatch() { | |
| String helloPattern = "with hello"; | |
| Iterable<Match> matches = helloPattern.allMatches(str); | |
| var iterator = matches.iterator; | |
| Expect.isTrue(iterator.moveNext()); | |
| Match match = iterator.current; | |
| Expect.isFalse(iterator.moveNext()); | |
| Expect.equals(str.indexOf('with', 0), match.start); | |
| Expect.equals(str.indexOf('with', 0) + helloPattern.length, match.end); | |
| Expect.equals(helloPattern, match.pattern); | |
| Expect.equals(str, match.input); | |
| Expect.equals(helloPattern, match[0]); | |
| Expect.equals(0, match.groupCount); | |
| } | |
| testTwoMatches() { | |
| String helloPattern = "hello"; | |
| Iterable<Match> matches = helloPattern.allMatches(str); | |
| int count = 0; | |
| int start = 0; | |
| for (var match in matches) { | |
| count++; | |
| Expect.equals(str.indexOf('hello', start), match.start); | |
| Expect.equals(str.indexOf('hello', start) + helloPattern.length, match.end); | |
| Expect.equals(helloPattern, match.pattern); | |
| Expect.equals(str, match.input); | |
| Expect.equals(helloPattern, match[0]); | |
| Expect.equals(0, match.groupCount); | |
| start = match.end; | |
| } | |
| Expect.equals(2, count); | |
| } | |
| testEmptyPattern() { | |
| String pattern = ""; | |
| Iterable<Match> matches = pattern.allMatches(str); | |
| Expect.isTrue(matches.iterator.moveNext()); | |
| } | |
| testEmptyString() { | |
| String pattern = "foo"; | |
| String str = ""; | |
| Iterable<Match> matches = pattern.allMatches(str); | |
| Expect.isFalse(matches.iterator.moveNext()); | |
| } | |
| testEmptyPatternAndString() { | |
| String pattern = ""; | |
| String str = ""; | |
| Iterable<Match> matches = pattern.allMatches(str); | |
| Expect.isTrue(matches.iterator.moveNext()); | |
| } | |
| testMatchAsPrefix() { | |
| String pattern = "an"; | |
| String str = "banana"; | |
| Expect.isNull(pattern.matchAsPrefix(str)); | |
| Expect.isNull(pattern.matchAsPrefix(str, 0)); | |
| var m = pattern.matchAsPrefix(str, 1)!; | |
| Expect.equals("an", m[0]); | |
| Expect.equals(1, m.start); | |
| Expect.isNull(pattern.matchAsPrefix(str, 2)); | |
| m = pattern.matchAsPrefix(str, 3)!; | |
| Expect.equals("an", m[0]); | |
| Expect.equals(3, m.start); | |
| Expect.isNull(pattern.matchAsPrefix(str, 4)); | |
| Expect.isNull(pattern.matchAsPrefix(str, 5)); | |
| Expect.isNull(pattern.matchAsPrefix(str, 6)); | |
| Expect.throws(() => pattern.matchAsPrefix(str, -1)); | |
| Expect.throws(() => pattern.matchAsPrefix(str, 7)); | |
| } | |
| testAllMatchesStart() { | |
| String p = "ass"; | |
| String s = "assassin"; | |
| Expect.equals(2, p.allMatches(s).length); | |
| Expect.equals(2, p.allMatches(s, 0).length); | |
| Expect.equals(1, p.allMatches(s, 1).length); | |
| Expect.equals(0, p.allMatches(s, 4).length); | |
| Expect.equals(0, p.allMatches(s, s.length).length); | |
| Expect.throws(() => p.allMatches(s, -1)); | |
| Expect.throws(() => p.allMatches(s, s.length + 1)); | |
| } |