blob: 19abfca5289f2875ee234853772bcbc3d656763a [file] [log] [blame]
// Copyright (c) 2019, 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
/// @author
// Requirements=nnbd-strong
import "../../Utils/expect.dart";
class A {}
class C {
static String staticTest1({required String x}) => x;
static String staticTest2({required final x}) => x;
String instanceTest1({required String x}) => x;
A instanceTest2({required covariant A x}) => x;
String instanceTest3({required final 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;
String test4({required final x}) => x;
main() {
A a = new A();
Expect.equals("Show must go on", C.staticTest1(x: "Show must go on"));
Expect.equals("Lily was here", C.staticTest2(x: "Lily was here"));
Expect.equals("Let it be", C().instanceTest1(x: "Let it be"));
Expect.equals(a, C().instanceTest2(x: a));
Expect.equals("No woman no cry", C().instanceTest3(x: "No woman no cry"));
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"));
Expect.equals("I can't get no", test4(x: "I can't get no"));