// Copyright (c) 2017, 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.

/**
 * @assertion Returns an ordered collection of matches of the regular expression
 * in [str]. The order in the collection is the order of the matches found
 * in [str].
 * @description Checks that all matches are returned in correct order
 * @author sgrekhov@unipro.ru
 */
import "../../../Utils/expect.dart";
 
main() {
  check("as", "paspaspas", ["as", "as", "as"]);
  check("p", "paspaspasp", ["p", "p", "p", "p"]);
  check("p.", "paspaspasp.", ["p."]);
  check(r"\s", r"pa\spa spasps", [r"\s"]);
  check(r"\w", "1 a \\w", ["\\w"]);
}
  
void check(String pattern, String str, List expMatchesData) {
  Iterable<Match> matches = pattern.allMatches(str);
  if(matches.length == 0) {
    Expect.fail("Nothing found for pattern <$pattern> in string <$str>");
  }
  Expect.equals(expMatchesData.length, matches.length);
  for (int i = 0; i < matches.length; i++) {
    String sub = str.substring(matches.elementAt(i).start, matches.elementAt(i).end);
    Expect.equals(expMatchesData[i], sub);
  }
}
