  // 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 int parse(String source, {int radix, int onError(String source)})
/// Parse source as a, possibly signed, integer literal and return its value.
/// ...
/// If the source is not a valid integer literal, optionally prefixed by a sign,
/// the onError is called with the source as argument, and its return value is
/// used instead. If no onError is provided, a FormatException is thrown.
///
/// The onError handler can be chosen to return null. This is preferable to to
/// throwing and then immediately catching the FormatException. Example:
///
/// var value = int.parse(text, onError: (source) => null);
/// if (value == null) ... handle the problem
/// The onError function is only invoked if source is a String. It is not invoked
/// if the source is, for example, null.
/// @description Checks that the source is not a valid integer literal,
/// optionally prefixed by a sign, the onError is called with the source as
/// argument, and its return value is used instead
/// @author sgrekhov@unipro.ru

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

main() {
  bool called = false;
  Expect.equals(1, int.parse("-a1", onError: (s) {
    called = true;
    Expect.equals("-a1", s);
    return 1;
  }));
  Expect.isTrue(called);

  called = false;
  Expect.equals(2, int.parse("a1", onError: (s) {
    called = true;
    Expect.equals("a1", s);
    return 2;
  }));
  Expect.isTrue(called);

  called = false;
  Expect.equals(3, int.parse("0xxxx", onError: (s) {
    called = true;
    Expect.equals("0xxxx", s);
    return 3;
  }));
  Expect.isTrue(called);

}
