// 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 splitMapJoin(
///  Pattern pattern, {
///  String onMatch(
///  Match match
///  ),
///  String onNonMatch(
///  String nonMatch
///  )
///  })
///  Splits the string, converts its parts, and combines them into a new string.
///
///  pattern is used to split the string into parts and separating matches.
///
///  Each match is converted to a string by calling onMatch. If onMatch is
///  omitted, the matched string is used.
///
///  Each non-matched part is converted by a call to onNonMatch. If onNonMatch is
///  omitted, the non-matching part is used.
///
///  Then all the converted parts are combined into the resulting string.
/// @description Checks that match argument of omMatch method is correct
/// @author sgrekhov@unipro.ru

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

main() {
  check("11231233", "2", [[2, 3], [5, 6]]);
  check("11231233", new RegExp("2"), [[2, 3], [5, 6]]);
  check("11 23 12 33", new RegExp("\\s"), [[2, 3], [5, 6], [8, 9]]);
}

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

}
