// 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.
import "package:expect/expect.dart";

class Bar {
  required({required int i, required String a}) {
    print(i);
    print(a);
  }

  optional({int? i, String? a}) {
    print(i);
    print(a);
  }
}

main() {
  bool checkedMode = false;
  assert((checkedMode = true));
  // Test that in checked mode, we are checking the type of optional parameters
  // in the correct order (aka, don't check the type of parameter 'a' first).
  if (checkedMode) {
    dynamic x = 'e';
    dynamic y = 3;
    Expect.throws(() => new Bar().required(i: x, a: y), (e) {
      if (e is TypeError) {
        var m = e.toString();
        return m.contains("is not a subtype of type 'int'") ||
            m.contains(
                "Expected a value of type 'int', but got one of type 'String'");
      }
      return false;
    });
    Expect.throws(() => new Bar().optional(i: x, a: y), (e) {
      if (e is TypeError) {
        var m = e.toString();
        return m.contains("is not a subtype of type 'int?'") ||
            m.contains(
                "Expected a value of type 'int?', but got one of type 'String'");
      }
      return false;
    });
  }
}
