// Copyright (c) 2021, 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 The modifier required is added as a built-in identifier. The
/// grammar of function types is extended to allow any named parameter
/// declaration to be prefixed by the required modifier (e.g. int Function(int,
/// {int? y, required int z}).
///
/// @description Check that any named parameter declaration can be prefixed by
/// the 'required' modifier. Test one named required parameter and nullable
/// argument
/// @author sgrekhov@unipro.ru

// Requirements=nnbd-weak
import "../../../Utils/expect.dart";

class A {}

class C {
  static String? staticTest1({required String? x}) => x;
  String? instanceTest1({required String? x}) => x;
  A? instanceTest2({required covariant A? x}) => x;
}

String? test1({required String? x}) => x;

typedef String? Foo({required String? x});

Foo test2 = ({required String? x}) => x;

Function test3 = ({required String? x}) => x;

main() {
  A? a = new A();
  Expect.equals("Show must go on", C.staticTest1(x: "Show must go on"));
  Expect.equals("Let it be", C().instanceTest1(x: "Let it be"));
  Expect.equals(a, C().instanceTest2(x: a));
  Expect.equals("I can't get no",  test1(x: "I can't get no"));
  Expect.equals("I can't get no",  test2(x: "I can't get no"));
  Expect.equals("I can't get no",  test3(x: "I can't get no"));
}
