#1228. More named arguments anywhere tests added
diff --git a/LanguageFeatures/Named-arguments-anywhere/constructor_t01.dart b/LanguageFeatures/Named-arguments-anywhere/constructor_t01.dart
new file mode 100644
index 0000000..8e462ab
--- /dev/null
+++ b/LanguageFeatures/Named-arguments-anywhere/constructor_t01.dart
@@ -0,0 +1,36 @@
+// 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 Since named arguments are distinguishable from positional ones,
+/// allowing named arguments to be placed anywhere in the argument list can be
+/// done without changing calling semantics.
+///
+/// @description Checks that named arguments may be placed anywhere in the
+/// argument list. Test constructors
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=named-arguments-anywhere
+
+import "../../Utils/expect.dart";
+
+class C {
+  String log = "";
+
+  C(int x, int y, {int z = 42}) {
+    log = "x=$x, y=$y, z=$z";
+  }
+
+  C.named(int x, int y, {int z = 42}) {
+    log = "x=$x, y=$y, z=$z";
+  }
+}
+
+main() {
+  Expect.equals("x=1, y=2, z=3", C(1, 2, z: 3).log);
+  Expect.equals("x=1, y=2, z=3", C(z: 3, 1, 2).log);
+  Expect.equals("x=1, y=2, z=3", C(1, z: 3, 2).log);
+  Expect.equals("x=1, y=2, z=3", C.named(1, 2, z: 3).log);
+  Expect.equals("x=1, y=2, z=3", C.named(z: 3, 1, 2).log);
+  Expect.equals("x=1, y=2, z=3", C.named(1, z: 3, 2).log);
+}
diff --git a/LanguageFeatures/Named-arguments-anywhere/constructor_t02.dart b/LanguageFeatures/Named-arguments-anywhere/constructor_t02.dart
new file mode 100644
index 0000000..e0ba80c
--- /dev/null
+++ b/LanguageFeatures/Named-arguments-anywhere/constructor_t02.dart
@@ -0,0 +1,36 @@
+// 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 Since named arguments are distinguishable from positional ones,
+/// allowing named arguments to be placed anywhere in the argument list can be
+/// done without changing calling semantics.
+///
+/// @description Checks that named arguments may be placed anywhere in the
+/// argument list. Test constructors
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=named-arguments-anywhere
+
+import "../../Utils/expect.dart";
+
+class C<T> {
+  String log = "";
+
+  C(T x, T y, {T? z}) {
+    log = "x=$x, y=$y, z=$z";
+  }
+
+  C.named(T x, T y, {T? z}) {
+    log = "x=$x, y=$y, z=$z";
+  }
+}
+
+main() {
+  Expect.equals("x=1, y=2, z=3", C<int>(1, 2, z: 3).log);
+  Expect.equals("x=1, y=2, z=3", C<int>(z: 3, 1, 2).log);
+  Expect.equals("x=1, y=2, z=3", C<int>(1, z: 3, 2).log);
+  Expect.equals("x=1, y=2, z=3", C.named<int>(1, 2, z: 3).log);
+  Expect.equals("x=1, y=2, z=3", C.named<int>(z: 3, 1, 2).log);
+  Expect.equals("x=1, y=2, z=3", C.named<int>(1, z: 3, 2).log);
+}
diff --git a/LanguageFeatures/Named-arguments-anywhere/constructor_t03.dart b/LanguageFeatures/Named-arguments-anywhere/constructor_t03.dart
new file mode 100644
index 0000000..cbb1f80
--- /dev/null
+++ b/LanguageFeatures/Named-arguments-anywhere/constructor_t03.dart
@@ -0,0 +1,36 @@
+// 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 Since named arguments are distinguishable from positional ones,
+/// allowing named arguments to be placed anywhere in the argument list can be
+/// done without changing calling semantics.
+///
+/// @description Checks that named arguments may be placed anywhere in the
+/// argument list. Test constructors
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=named-arguments-anywhere
+
+import "../../Utils/expect.dart";
+
+class C {
+  String log = "";
+
+  C(int x, int y, {int z = 42}) {
+    log = "x=$x, y=$y, z=$z";
+  }
+
+  C.named1(int x, int y, int z) : this(x, y, z: z);
+  C.named2(int x, int y, int z) : this(x, z: z, y);
+  C.named3(int x, int y, int z) : this(z: z, x, y);
+}
+
+main() {
+  Expect.equals("x=1, y=2, z=3", C(1, 2, z: 3).log);
+  Expect.equals("x=1, y=2, z=3", C(z: 3, 1, 2).log);
+  Expect.equals("x=1, y=2, z=3", C(1, z: 3, 2).log);
+  Expect.equals("x=1, y=2, z=3", C.named1(1, 2, 3).log);
+  Expect.equals("x=1, y=2, z=3", C.named2(1, 2, 3).log);
+  Expect.equals("x=1, y=2, z=3", C.named3(1, 2, 3).log);
+}
diff --git a/LanguageFeatures/Named-arguments-anywhere/constructor_t04.dart b/LanguageFeatures/Named-arguments-anywhere/constructor_t04.dart
new file mode 100644
index 0000000..641dbe5
--- /dev/null
+++ b/LanguageFeatures/Named-arguments-anywhere/constructor_t04.dart
@@ -0,0 +1,36 @@
+// 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 Since named arguments are distinguishable from positional ones,
+/// allowing named arguments to be placed anywhere in the argument list can be
+/// done without changing calling semantics.
+///
+/// @description Checks that named arguments may be placed anywhere in the
+/// argument list. Test constructors
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=named-arguments-anywhere
+
+import "../../Utils/expect.dart";
+
+class C<T> {
+  String log = "";
+
+  C(T x, T y, {T? z}) {
+    log = "x=$x, y=$y, z=$z";
+  }
+
+  C.named1(T x, T y, T z) : this(x, y, z: z);
+  C.named2(T x, T y, T z) : this(x, z: z, y);
+  C.named3(T x, T y, T z) : this(z: z, x, y);
+}
+
+main() {
+  Expect.equals("x=1, y=2, z=3", C<int>(1, 2, z: 3).log);
+  Expect.equals("x=1, y=2, z=3", C<int>(z: 3, 1, 2).log);
+  Expect.equals("x=1, y=2, z=3", C<int>(1, z: 3, 2).log);
+  Expect.equals("x=1, y=2, z=3", C<int>.named1(1, 2, 3).log);
+  Expect.equals("x=1, y=2, z=3", C<int>.named2(1, 2, 3).log);
+  Expect.equals("x=1, y=2, z=3", C<int>.named3(1, 2, 3).log);
+}
diff --git a/LanguageFeatures/Named-arguments-anywhere/constructor_t05.dart b/LanguageFeatures/Named-arguments-anywhere/constructor_t05.dart
new file mode 100644
index 0000000..5570b00
--- /dev/null
+++ b/LanguageFeatures/Named-arguments-anywhere/constructor_t05.dart
@@ -0,0 +1,42 @@
+// 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 Since named arguments are distinguishable from positional ones,
+/// allowing named arguments to be placed anywhere in the argument list can be
+/// done without changing calling semantics.
+///
+/// @description Checks that named arguments may be placed anywhere in the
+/// argument list. Test factory constructors
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=named-arguments-anywhere
+
+import "../../Utils/expect.dart";
+
+class C {
+  String log = "";
+
+  C(int x, int y, int z) {
+    log = "x=$x, y=$y, z=$z";
+  }
+
+  factory C.f1(int x, int y, {int z = 42}) {
+    return new C(x, y, z);
+  }
+
+  factory C.f2(int x, int y, {int z}) = D;
+}
+
+class D extends C {
+  D(int x, int y, {int z = 42}) : super(x, y, z);
+}
+
+main() {
+  Expect.equals("x=1, y=2, z=3", C.f1(1, 2, z: 3).log);
+  Expect.equals("x=1, y=2, z=3", C.f1(z: 3, 1, 2).log);
+  Expect.equals("x=1, y=2, z=3", C.f1(1, z: 3, 2).log);
+  Expect.equals("x=1, y=2, z=3", C.f2(1, 2, z: 3).log);
+  Expect.equals("x=1, y=2, z=3", C.f2(z: 3, 1, 2).log);
+  Expect.equals("x=1, y=2, z=3", C.f2(1, z: 3, 2).log);
+}
diff --git a/LanguageFeatures/Named-arguments-anywhere/constructor_t06.dart b/LanguageFeatures/Named-arguments-anywhere/constructor_t06.dart
new file mode 100644
index 0000000..6c5b810
--- /dev/null
+++ b/LanguageFeatures/Named-arguments-anywhere/constructor_t06.dart
@@ -0,0 +1,42 @@
+// 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 Since named arguments are distinguishable from positional ones,
+/// allowing named arguments to be placed anywhere in the argument list can be
+/// done without changing calling semantics.
+///
+/// @description Checks that named arguments may be placed anywhere in the
+/// argument list. Test factory constructors
+/// @author sgrekhov@unipro.ru
+
+// SharedOptions=--enable-experiment=named-arguments-anywhere
+
+import "../../Utils/expect.dart";
+
+class C<T> {
+  String log = "";
+
+  C(T x, T y, T? z) {
+    log = "x=$x, y=$y, z=$z";
+  }
+
+  factory C.f1(T x, T y, {T? z}) {
+    return new C(x, y, z);
+  }
+
+  factory C.f2(Tx, T y, {T? z}) = D;
+}
+
+class D<T> extends C<T> {
+  D(T x, T y, {T? z}) : super(x, y, z);
+}
+
+main() {
+  Expect.equals("x=1, y=2, z=3", C<int>.f1(1, 2, z: 3).log);
+  Expect.equals("x=1, y=2, z=3", C<int>.f1(z: 3, 1, 2).log);
+  Expect.equals("x=1, y=2, z=3", C<int>.f1(1, z: 3, 2).log);
+  Expect.equals("x=1, y=2, z=3", C<int>.f2(1, 2, z: 3).log);
+  Expect.equals("x=1, y=2, z=3", C<int>.f2(z: 3, 1, 2).log);
+  Expect.equals("x=1, y=2, z=3", C<int>.f2(1, z: 3, 2).log);
+}
diff --git a/LanguageFeatures/NamedArgumentsAnywhere/global_t01.dart b/LanguageFeatures/Named-arguments-anywhere/global_t01.dart
similarity index 100%
rename from LanguageFeatures/NamedArgumentsAnywhere/global_t01.dart
rename to LanguageFeatures/Named-arguments-anywhere/global_t01.dart
diff --git a/LanguageFeatures/NamedArgumentsAnywhere/global_t02.dart b/LanguageFeatures/Named-arguments-anywhere/global_t02.dart
similarity index 100%
rename from LanguageFeatures/NamedArgumentsAnywhere/global_t02.dart
rename to LanguageFeatures/Named-arguments-anywhere/global_t02.dart
diff --git a/LanguageFeatures/NamedArgumentsAnywhere/local_t01.dart b/LanguageFeatures/Named-arguments-anywhere/local_t01.dart
similarity index 100%
rename from LanguageFeatures/NamedArgumentsAnywhere/local_t01.dart
rename to LanguageFeatures/Named-arguments-anywhere/local_t01.dart
diff --git a/LanguageFeatures/NamedArgumentsAnywhere/local_t02.dart b/LanguageFeatures/Named-arguments-anywhere/local_t02.dart
similarity index 100%
rename from LanguageFeatures/NamedArgumentsAnywhere/local_t02.dart
rename to LanguageFeatures/Named-arguments-anywhere/local_t02.dart
diff --git a/LanguageFeatures/NamedArgumentsAnywhere/local_t03.dart b/LanguageFeatures/Named-arguments-anywhere/local_t03.dart
similarity index 100%
rename from LanguageFeatures/NamedArgumentsAnywhere/local_t03.dart
rename to LanguageFeatures/Named-arguments-anywhere/local_t03.dart
diff --git a/LanguageFeatures/NamedArgumentsAnywhere/local_t04.dart b/LanguageFeatures/Named-arguments-anywhere/local_t04.dart
similarity index 100%
rename from LanguageFeatures/NamedArgumentsAnywhere/local_t04.dart
rename to LanguageFeatures/Named-arguments-anywhere/local_t04.dart
diff --git a/LanguageFeatures/NamedArgumentsAnywhere/method_t01.dart b/LanguageFeatures/Named-arguments-anywhere/method_t01.dart
similarity index 100%
rename from LanguageFeatures/NamedArgumentsAnywhere/method_t01.dart
rename to LanguageFeatures/Named-arguments-anywhere/method_t01.dart
diff --git a/LanguageFeatures/NamedArgumentsAnywhere/method_t02.dart b/LanguageFeatures/Named-arguments-anywhere/method_t02.dart
similarity index 93%
rename from LanguageFeatures/NamedArgumentsAnywhere/method_t02.dart
rename to LanguageFeatures/Named-arguments-anywhere/method_t02.dart
index db6e50a..446f291 100644
--- a/LanguageFeatures/NamedArgumentsAnywhere/method_t02.dart
+++ b/LanguageFeatures/Named-arguments-anywhere/method_t02.dart
@@ -15,7 +15,7 @@
 import "../../Utils/expect.dart";
 
 class C<T> {
-  String foo(T x, T y, {T z}) => "x=$x, y=$y, z=$z";
+  String foo(T x, T y, {T? z}) => "x=$x, y=$y, z=$z";
 }
 
 main() {
diff --git a/LanguageFeatures/NamedArgumentsAnywhere/method_t02.dart b/LanguageFeatures/Named-arguments-anywhere/static_t01.dart
similarity index 68%
copy from LanguageFeatures/NamedArgumentsAnywhere/method_t02.dart
copy to LanguageFeatures/Named-arguments-anywhere/static_t01.dart
index db6e50a..2e490a2 100644
--- a/LanguageFeatures/NamedArgumentsAnywhere/method_t02.dart
+++ b/LanguageFeatures/Named-arguments-anywhere/static_t01.dart
@@ -7,19 +7,19 @@
 /// done without changing calling semantics.
 ///
 /// @description Checks that named arguments may be placed anywhere in the
-/// argument list. Test instance method
+/// argument list. Test static method
 /// @author sgrekhov@unipro.ru
 
 // SharedOptions=--enable-experiment=named-arguments-anywhere
 
 import "../../Utils/expect.dart";
 
-class C<T> {
-  String foo(T x, T y, {T z}) => "x=$x, y=$y, z=$z";
+class C {
+  static String foo(int x, int y, {int z = 42}) => "x=$x, y=$y, z=$z";
 }
 
 main() {
-  Expect.equals("x=1, y=2, z=3", C<int>().foo(1, 2, z: 3));
-  Expect.equals("x=1, y=2, z=3", C<int>().foo(z: 3, 1, 2));
-  Expect.equals("x=1, y=2, z=3", C<int>().foo(1, z: 3, 2));
+  Expect.equals("x=1, y=2, z=3", C.foo(1, 2, z: 3));
+  Expect.equals("x=1, y=2, z=3", C.foo(z: 3, 1, 2));
+  Expect.equals("x=1, y=2, z=3", C.foo(1, z: 3, 2));
 }
diff --git a/LanguageFeatures/NamedArgumentsAnywhere/method_t02.dart b/LanguageFeatures/Named-arguments-anywhere/static_t02.dart
similarity index 73%
copy from LanguageFeatures/NamedArgumentsAnywhere/method_t02.dart
copy to LanguageFeatures/Named-arguments-anywhere/static_t02.dart
index db6e50a..3805a87 100644
--- a/LanguageFeatures/NamedArgumentsAnywhere/method_t02.dart
+++ b/LanguageFeatures/Named-arguments-anywhere/static_t02.dart
@@ -14,12 +14,12 @@
 
 import "../../Utils/expect.dart";
 
-class C<T> {
-  String foo(T x, T y, {T z}) => "x=$x, y=$y, z=$z";
+class C {
+  static String foo<T>(T x, T y, {T? z}) => "x=$x, y=$y, z=$z";
 }
 
 main() {
-  Expect.equals("x=1, y=2, z=3", C<int>().foo(1, 2, z: 3));
-  Expect.equals("x=1, y=2, z=3", C<int>().foo(z: 3, 1, 2));
-  Expect.equals("x=1, y=2, z=3", C<int>().foo(1, z: 3, 2));
+  Expect.equals("x=1, y=2, z=3", C.foo<int>(1, 2, z: 3));
+  Expect.equals("x=1, y=2, z=3", C.foo<int>(z: 3, 1, 2));
+  Expect.equals("x=1, y=2, z=3", C.foo<int>(1, z: 3, 2));
 }