// 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 regular expressions in Dart. import "package:expect/expect.dart"; void main() { RegExp exp = new RegExp(r"(\w+)"); String str = "Parse my string"; List matches = exp.allMatches(str).toList(); Expect.equals(3, matches.length); Expect.equals("Parse", matches[0].group(0)); Expect.equals("my", matches[1].group(0)); Expect.equals("string", matches[2].group(0)); // Check that allMatches progresses correctly for empty matches, and that // it includes the empty match at the end position. exp = new RegExp("a?"); str = "babba"; Expect.listEquals(["", "a", "", "", "a", ""], exp.allMatches(str).map((x) => x[0]).toList()); // Check that allMatches works with optional start index. exp = new RegExp("as{2}"); str = "assassin"; Expect.equals(2, exp.allMatches(str).length); Expect.equals(2, exp.allMatches(str, 0).length); Expect.equals(1, exp.allMatches(str, 1).length); Expect.equals(0, exp.allMatches(str, 4).length); Expect.equals(0, exp.allMatches(str, str.length).length); Expect.throws(() => exp.allMatches(str, -1)); Expect.throws(() => exp.allMatches(str, str.length + 1)); exp = new RegExp(".*"); Expect.equals("", exp.allMatches(str, str.length).single[0]); // The "^" must only match at the beginning of the string. // Using a start-index doesn't change where the string starts. exp = new RegExp("^ass"); Expect.equals(1, exp.allMatches(str, 0).length); Expect.equals(0, exp.allMatches(str, 3).length); // Regression test for http://dartbug.com/2980 exp = new RegExp("^", multiLine: true); // Any zero-length match will work. str = "foo\nbar\nbaz"; Expect.equals(" foo\n bar\n baz", str.replaceAll(exp, " ")); exp = new RegExp(r"(\w+)"); Expect.isNull(exp.matchAsPrefix(" xyz ab")); Expect.isNull(exp.matchAsPrefix(" xyz ab", 0)); var m = exp.matchAsPrefix(" xyz ab", 1)!; Expect.equals("xyz", m[0]); Expect.equals("xyz", m[1]); Expect.equals(1, m.groupCount); m = exp.matchAsPrefix(" xyz ab", 2)!; Expect.equals("yz", m[0]); Expect.equals("yz", m[1]); Expect.equals(1, m.groupCount); m = exp.matchAsPrefix(" xyz ab", 3)!; Expect.equals("z", m[0]); Expect.equals("z", m[1]); Expect.equals(1, m.groupCount); Expect.isNull(exp.matchAsPrefix(" xyz ab", 4)); m = exp.matchAsPrefix(" xyz ab", 5)!; Expect.equals("ab", m[0]); Expect.equals("ab", m[1]); Expect.equals(1, m.groupCount); m = exp.matchAsPrefix(" xyz ab", 6)!; Expect.equals("b", m[0]); Expect.equals("b", m[1]); Expect.equals(1, m.groupCount); Expect.isNull(exp.matchAsPrefix(" xyz ab", 7)); Expect.throws(() => exp.matchAsPrefix(" xyz ab", -1)); Expect.throws(() => exp.matchAsPrefix(" xyz ab", 8)); }