// 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 String replaceAllMapped(Pattern from, String replace(Match match))
/// ...
/// The replace function is called with the Match generated by the pattern, and
/// its result is used as replacement
/// @description Checks that the replace function is called with the Match
/// generated by the pattern, and its result is used as replacement
/// @author sgrekhov@unipro.ru

import "../../../Utils/expect.dart";

main() {
  check("123", "1", [[0, 1]]);
  check("1231", "1", [[0, 1], [3, 4]]);
  check("1231", "12", [[0, 2]]);
  check("1231", "23", [[1, 3]]);
  check("aa 1231\\n", new RegExp("\\s"), [[2, 3], [7, 8]]);
}

check(String str, Pattern from, List expected) {
  int count = 0;
  str.replaceAllMapped(from, (m) {
    var expData = expected[count++];
    Expect.equals(str, m.input);
    Expect.equals(from, m.pattern);
    Expect.equals(expData[0], m.start);
    Expect.equals(expData[1], m.end);
    return "";
  });
}
