Index: tests/language/generalized_void_syntax_test.dart |
diff --git a/tests/language/generalized_void_syntax_test.dart b/tests/language/generalized_void_syntax_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..47fcad36dfab24b14149686159d090c9153b460f |
--- /dev/null |
+++ b/tests/language/generalized_void_syntax_test.dart |
@@ -0,0 +1,105 @@ |
+// 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. |
+ |
+// Testing that the reserved word `void` is allowed to occur as a type. |
+ |
+import 'package:expect/expect.dart'; |
+ |
+class A<T> { |
+ T t; |
+ const A(this.t); |
+} |
+ |
+const void x1 = null; |
+const A<void> x2 = const A<void>(null); |
+ |
+final void x3 = null; |
+final A<void> x4 = new A<void>(null); |
+ |
+void x5 = null, x6; |
+A<void> x7 = new A<void>(null), x8; |
+ |
+void get g1 => null; |
+A<void> get g2 => new A<void>(null); |
+void set s1(void x) => null; |
+void set s2(A<void> x) => null; |
+void m1(void x, [void y]) => null; |
+void m2(void x, {void y}) => null; |
+A<void> m3(A<void> x, [A<void> y]) => new A<void>(null); |
+A<void> m4(A<void> x, {A<void> y}) => new A<void>(null); |
+ |
+class B<S, T> {} |
+ |
+class C extends A<void> with B<void, A<void>> implements A<void> { |
+ static final void x1 = null; |
+ static final A<void> x2 = new A<void>(null); |
+ |
+ static const void x3 = null; |
+ static const A<void> x4 = const A<void>(null); |
+ |
+ final void x5 = null, x6; |
+ final A<void> x7 = new A<void>(null), x8; |
+ |
+ static void x9 = null, x10; |
+ static A<void> x11 = new A<void>(null), x12; |
+ |
+ covariant void x13 = null, x14; |
+ covariant A<void> x15 = new A<void>(null), x16; |
+ |
+ static void get g1 => null; |
+ static A<void> get g2 => new A<void>(null); |
+ static void set s1(void x) => null; |
+ static void set s2(A<void> x) => null; |
+ static void m1(void x, [void y]) => null; |
+ static void m2(void x, {void y}) => null; |
+ static A<void> m3(A<void> x, [A<void> y]) => null; |
+ static A<void> m4(A<void> x, {A<void> y}) => null; |
+ |
+ void get g3 => null; |
+ A<void> get g4 => new A<void>(null); |
+ void set s3(void x) => null; |
+ void set s4(A<void> x) => null; |
+ void m5(void x, [void y]) => null; |
+ void m6(void x, {void y}) => null; |
+ A<void> m7(A<void> x, [A<void> y]) => null; |
+ A<void> m8(A<void> x, {A<void> y}) => null; |
+ |
+ // Ensure that all members are used, and use `void` in expressions. |
+ void run() { |
+ var ignore = [x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, |
+ x15, x16, g1, g2, g3, g4]; |
+ |
+ s1 = null; |
+ s2 = new A<void>(null); |
+ s3 = null; |
+ s4 = new A<void>(null); |
+ m1(null, null); |
+ m2(null, y: null); |
+ m3(null, new A<void>(null)); |
+ m4(null, y: new A<void>(null)); |
+ m5(null, null); |
+ m6(null, y: null); |
+ m7(null, new A<void>(null)); |
+ m8(null, y: new A<void>(null)); |
+ |
+ void pretendToUse(dynamic x) => null; |
+ pretendToUse(<void>[]); |
+ pretendToUse(<void, void>{}); |
+ pretendToUse(<A<void>>[]); |
+ pretendToUse(<A<void>, A<void>>{}); |
+ } |
+} |
+ |
+// Testing syntax, just enforce compilation. |
+main() { |
+ var ignore = [x1, x2, x3, x4, x5, x6, x7, x8, g1, g2]; |
+ |
+ s1 = null; |
+ s2 = new A<void>(null); |
+ m1(null, null); |
+ m2(null, y: null); |
+ m3(null, null); |
+ m4(null, y: null); |
+ new C().run(); |
+} |