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