|  | // 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)); | 
|  | } |