// Copyright (c) 2016, 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 RangeError.index(int index, indexable,
 *    [String name, String message, int length])
 * ...
 * An optional name can specify the argument name that has the invalid value,
 * and the message can override the default error description.
 * ...
 * @description Checks that if name and message are specified they rewrite
 * default ones
 * @author sgrekhov@unipro.ru
 */
import "../../../Utils/expect.dart";

check(int index, indexable, String name, String message) {
  RangeError re = new RangeError.index(index, indexable, name, message);
  Expect.equals(message, re.message);
  Expect.equals(name, re.name);
  Expect.equals(index, re.invalidValue);
}

main() {
  check(-1, [1, 2, 3], "name1", "message1");
  check(5, [1, 2, 3], "name2", "message2");
  check(1, [1, 2, 3], "name3", "message3");
  check(1, "indexable", "name3", "message3");
}
