blob: 85937ff5b270acfbe1b052f90320520ec1fb780d [file] [log] [blame]
// 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_allowed_values;
import 'dart:mirrors';
import 'package:expect/expect.dart';
import 'metadata_allowed_values_import.dart'; // Unprefixed.
import 'metadata_allowed_values_import.dart' as prefix;
@A // //# 01: compile-time error
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 // //# 02: compile-time error
class E {
static var NOT_CONSTANT = 3;
}
@F(6) // //# 03: compile-time error
class F {
final field;
F(this.field);
}
@G.named(4) // //# 04: compile-time error
class G {
final field;
G.named(this.field);
}
@I[0] // //# 06: compile-time error
class I {}
@this.toString // //# 07: compile-time error
class J {}
@super.toString // //# 08: compile-time error
class K {}
@L.func() // //# 09: compile-time error
class L {
static func() => 6;
}
@Imported // //# 10: compile-time error
class M {}
@Imported()
class N {}
@Imported.named()
class O {}
@Imported.CONSTANT
class P {}
@prefix.Imported // //# 11: compile-time error
class Q {}
@prefix.Imported()
class R {}
@prefix.Imported.named()
class S {}
@prefix.Imported.CONSTANT
class T {}
@U..toString() // //# 12: compile-time error
class U {}
@V.tearOff // //# 13: compile-time error
class V {
static tearOff() {}
}
topLevelTearOff() => 4;
@topLevelTearOff // //# 14: compile-time error
class W {}
@TypeParameter // //# 15: compile-time error
class X<TypeParameter> {}
@TypeParameter.member // //# 16: compile-time error
class Y<TypeParameter> {}
@1 // //# 17: compile-time error
class Z {}
@3.14 // //# 18: compile-time error
class AA {}
@'string' // //# 19: compile-time error
class BB {}
@#symbol // //# 20: compile-time error
class CC {}
@['element'] // //# 21: compile-time error
class DD {}
@{'key': 'value'} // //# 22: compile-time error
class EE {}
@true // //# 23: compile-time error
class FF {}
@false // //# 24: compile-time error
class GG {}
@null // //# 25: compile-time error
class HH {}
const a = const [1, 2, 3];
@a
class II {}
@a[0] // //# 26: compile-time error
class JJ {}
@kk // //# 27: compile-time error
class KK {
const KK();
}
get kk => const KK();
@LL(() => 42) // //# 28: compile-time error
class LL {
final field;
const LL(this.field);
}
@MM((x) => 42) // //# 29: compile-time error
class MM {
final field;
const MM(this.field);
}
@NN(() {}) // //# 30: compile-time error
class NN {
final field;
const NN(this.field);
}
@OO(() { () {} }) // //# 31: compile-time error
class OO {
final field;
const OO(this.field);
}
checkMetadata(DeclarationMirror mirror, List expectedMetadata) {
Expect.listEquals(expectedMetadata.map(reflect).toList(), mirror.metadata);
}
main() {
reflectClass(A).metadata;
checkMetadata(reflectClass(B), [B.CONSTANT]);
checkMetadata(reflectClass(C), [const C(3)]);
checkMetadata(reflectClass(D), [const D.named(4)]);
reflectClass(E).metadata;
reflectClass(F).metadata;
reflectClass(G).metadata;
reflectClass(I).metadata;
reflectClass(J).metadata;
reflectClass(K).metadata;
reflectClass(L).metadata;
reflectClass(M).metadata;
checkMetadata(reflectClass(N), [const Imported()]);
checkMetadata(reflectClass(O), [const Imported.named()]);
checkMetadata(reflectClass(P), [Imported.CONSTANT]);
reflectClass(Q).metadata;
checkMetadata(reflectClass(R), [const prefix.Imported()]);
checkMetadata(reflectClass(S), [const prefix.Imported.named()]);
checkMetadata(reflectClass(T), [prefix.Imported.CONSTANT]);
reflectClass(U).metadata;
reflectClass(V).metadata;
reflectClass(W).metadata;
reflectClass(X).metadata;
reflectClass(Y).metadata;
reflectClass(Z).metadata;
reflectClass(AA).metadata;
reflectClass(BB).metadata;
reflectClass(CC).metadata;
reflectClass(DD).metadata;
reflectClass(EE).metadata;
reflectClass(FF).metadata;
reflectClass(GG).metadata;
reflectClass(HH).metadata;
reflectClass(II).metadata;
reflectClass(JJ).metadata;
reflectClass(KK).metadata;
reflectClass(LL).metadata;
reflectClass(MM).metadata;
reflectClass(NN).metadata;
reflectClass(OO).metadata;
}