// 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.

/**
 * @assertion Throws RangeError if [group] is out of bounds
 * @description Check that exception is thrown.
 * @author rodionov
 */
import "../../../Utils/expect.dart";

void check(String str, String pattern, int index) {
  RegExp re = new RegExp(pattern, caseSensitive: true, multiLine: false);
  Match ? m = re.firstMatch(str);
  Expect.throws(() { m?.group(index); }, (e) => e is RangeError);
}

main() {
  check("a", "a", 1);
  check("a", "(a)", 2);
  check("abcdef", "(([a-z])*)", 3);
  check("abcdef", "(([a-z])*)", 65536);
  check("abcdef", "(([a-z])*)", -1);
  check("abcdef", "(([a-z])*)", -65536);
}
