Chromium Code Reviews| Index: tests/lib/mirrors/metadata_allowed_values_test.dart |
| diff --git a/tests/lib/mirrors/metadata_allowed_values_test.dart b/tests/lib/mirrors/metadata_allowed_values_test.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..8ca6a0f89d540cc3a8fbc9f63d59a00d7d0e5528 |
| --- /dev/null |
| +++ b/tests/lib/mirrors/metadata_allowed_values_test.dart |
| @@ -0,0 +1,138 @@ |
| +// Copyright (c) 2013, 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. |
| + |
| +library test.metadata_with_type_literal; |
| + |
| +import 'dart:mirrors'; |
| + |
| +import 'metadata_test.dart'; |
| +import 'metadata_allowed_values_import.dart'; // Unprefixed. |
| +import 'metadata_allowed_values_import.dart' as prefix; |
| + |
| +@A |
| +class A {} |
| + |
| +@B.CONSTANT |
| +class B { |
| + static const CONSTANT = 3; |
| +} |
| + |
| +@C(3) |
| +class C { |
| + final field; |
| + const C(this.field); |
| +} |
| + |
| +@D.named(4) |
| +class D { |
| + final field; |
| + const D.named(this.field); |
| +} |
| + |
| +@E.NOT_CONSTANT /// 01: compile-time error |
| +class E { |
| + static var NOT_CONSTANT = 3; |
| +} |
| + |
| +@F(6) /// 02: compile-time error |
| +class F { |
| + final field; |
| + F(this.field); |
| +} |
| + |
| +@G.named(4) /// 03: compile-time error |
| +class G { |
| + final field; |
| + G.named(this.field); |
| +} |
| + |
| +@H<int>() /// 04: compile-time error |
| +class H<T> { |
| + const H(); |
| +} |
| + |
| +@I[0] /// 05: compile-time error |
| +class I {} |
| + |
| +@this.toString /// 06: compile-time error |
| +class J {} |
| + |
| +@super.toString /// 07: compile-time error |
| +class K {} |
| + |
| +@L.func() /// 08: compile-time error |
| +class L { |
| + static func() => 6; |
| +} |
| + |
| +@Imported |
| +class M {} |
| + |
| +@Imported() |
| +class N {} |
| + |
| +@Imported.named() |
| +class O {} |
| + |
| +@Imported.CONSTANT |
| +class P {} |
| + |
| +@prefix.Imported |
| +class Q {} |
| + |
| +@prefix.Imported() |
| +class R {} |
| + |
| +@prefix.Imported.named() |
| +class S {} |
| + |
| +@prefix.Imported.CONSTANT |
| +class T {} |
| + |
| +@U..toString() /// 09: compile-time error |
| +class U {} |
| + |
| +@V.tearOff |
| +class V { |
| + static tearOff() {} |
| +} |
| + |
| +topLevelTearOff() => 4; |
| + |
| +@topLevelTearOff |
|
rmacnak
2013/10/25 20:37:56
Gilad, is this permitted?
The spec does allow for
|
| +class W {} |
| + |
| +@TypeParameter /// 10: compile-time error |
| +class X<TypeParameter> {} |
| + |
| +@TypeParameter.member /// 11: compile-time error |
| +class Y<TypeParameter> {} |
| + |
| +main() { |
| + checkMetadata(reflectClass(A), [A]); |
| + checkMetadata(reflectClass(B), [B.CONSTANT]); |
| + checkMetadata(reflectClass(C), [const C(3)]); |
| + checkMetadata(reflectClass(D), [const D.named(4)]); |
| + reflectClass(E).metadata; /// 01: continued |
| + reflectClass(F).metadata; /// 02: continued |
| + reflectClass(G).metadata; /// 03: continued |
| + reflectClass(H).metadata; /// 04: continued |
| + reflectClass(I).metadata; /// 05: continued |
| + reflectClass(J).metadata; /// 06: continued |
| + reflectClass(K).metadata; /// 07: continued |
| + reflectClass(L).metadata; /// 08: continued |
| + checkMetadata(reflectClass(M), [Imported]); |
| + checkMetadata(reflectClass(N), [const Imported()]); |
| + checkMetadata(reflectClass(O), [const Imported.named()]); |
| + checkMetadata(reflectClass(P), [Imported.CONSTANT]); |
| + checkMetadata(reflectClass(Q), [prefix.Imported]); |
| + checkMetadata(reflectClass(R), [const prefix.Imported()]); |
| + checkMetadata(reflectClass(S), [const prefix.Imported.named()]); |
| + checkMetadata(reflectClass(T), [prefix.Imported.CONSTANT]); |
| + reflectClass(U).metadata; /// 09: continued |
| + checkMetadata(reflectClass(V), [V.tearOff]); |
| + checkMetadata(reflectClass(W), [topLevelTearOff]); |
| + reflectClass(X).metadata; /// 10: continued |
| + reflectClass(Y).metadata; /// 11: continued |
| +} |