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

main() {
  // Test that not providing an optional argument goes to the end.
  Expect.equals("".substring(0), "");
  Expect.throws(() => "".substring(1),
      (e) => e is IndexOutOfRangeException);
  Expect.throws(() => "".substring(-1),
      (e) => e is IndexOutOfRangeException);

  Expect.equals("abc".substring(0), "abc");
  Expect.equals("abc".substring(1), "bc");
  Expect.equals("abc".substring(2), "c");
  Expect.equals("abc".substring(3), "");
  Expect.throws(() => "abc".substring(4),
      (e) => e is IndexOutOfRangeException);
  Expect.throws(() => "abc".substring(-1),
      (e) => e is IndexOutOfRangeException);

  // Test that providing null goes to the end.
  Expect.equals("".substring(0, null), "");
  Expect.throws(() => "".substring(1, null),
      (e) => e is IndexOutOfRangeException);
  Expect.throws(() => "".substring(-1, null),
      (e) => e is IndexOutOfRangeException);

  Expect.equals("abc".substring(0, null), "abc");
  Expect.equals("abc".substring(1, null), "bc");
  Expect.equals("abc".substring(2, null), "c");
  Expect.equals("abc".substring(3, null), "");
  Expect.throws(() => "abc".substring(4, null),
      (e) => e is IndexOutOfRangeException);
  Expect.throws(() => "abc".substring(-1, null),
      (e) => e is IndexOutOfRangeException);
}
