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