Index: tests/lib/mirrors/metadata_nested_constructor_call_test.dart |
diff --git a/tests/lib/mirrors/metadata_nested_constructor_call_test.dart b/tests/lib/mirrors/metadata_nested_constructor_call_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7b50b6796f60bbe2348b44c478e965f11b2cd10d |
--- /dev/null |
+++ b/tests/lib/mirrors/metadata_nested_constructor_call_test.dart |
@@ -0,0 +1,83 @@ |
+// Copyright (c) 2014, 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. |
+ |
+// Regression test for Issue 17141. |
+ |
+library test.metadata_nested_constructor_call; |
+ |
+import 'dart:mirrors'; |
+import 'package:expect/expect.dart'; |
+ |
+class Box { |
+ final contents; |
+ const Box([this.contents]); |
+} |
+ |
+class MutableBox { |
+ var contents; |
+ MutableBox([this.contents]); // Not const. |
+} |
+ |
+@Box() |
+class A {} |
+ |
+@Box(const Box()) |
+class B {} |
+ |
+@Box(const Box(const Box())) |
+class C {} |
+ |
+@Box(const Box(const MutableBox())) /// 01: compile-time error |
+class D {} |
+ |
+@Box(const MutableBox(const Box())) /// 02: compile-time error |
+class E {} |
+ |
+@Box(Box()) /// 03: compile-time error |
+class F {} |
+ |
+@Box(Box(const Box())) /// 04: compile-time error |
+class G {} |
+ |
+@Box(Box(const MutableBox())) /// 05: compile-time error |
+class H {} |
+ |
+@Box(MutableBox(const Box())) /// 06: compile-time error |
+class I {} |
+ |
+final closure = () => 42; |
+@Box(closure()) /// 07: compile-time error |
+class J {} |
+ |
+@Box(closure) /// 08: compile-time error |
+class K {} |
+ |
+function() => 42; |
+@Box(function()) /// 09: compile-time error |
+class L {} |
+ |
+// N.B. This is legal, but @function is not (tested by metadata_allowed_values). |
+@Box(function) |
+class M {} |
+ |
+checkMetadata(DeclarationMirror mirror, List expectedMetadata) { |
+ Expect.listEquals(expectedMetadata.map(reflect).toList(), mirror.metadata); |
+} |
+ |
+main() { |
+ closure(); |
+ checkMetadata(reflectClass(A), [const Box()]); |
+ checkMetadata(reflectClass(B), [const Box(const Box())]); |
+ checkMetadata(reflectClass(C), [const Box(const Box(const Box()))]); |
+ reflectClass(D).metadata; |
+ reflectClass(E).metadata; |
+ reflectClass(F).metadata; |
+ reflectClass(G).metadata; |
+ reflectClass(H).metadata; |
+ reflectClass(I).metadata; |
+ reflectClass(J).metadata; |
+ reflectClass(K).metadata; |
+ reflectClass(L).metadata; |
+ reflectClass(M).metadata; |
+} |