| // 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. |
| |
| // @dart = 2.9 |
| |
| library field_test; |
| |
| import 'dart:mirrors'; |
| import "package:expect/expect.dart"; |
| |
| String toplevelVariable = ""; |
| |
| class C { |
| final int i; |
| const C(this.i); |
| } |
| |
| class A<T> { |
| static int staticField = 0; |
| @C(42) |
| @C(44) |
| String field = ""; |
| var dynamicTypeField; |
| T typeVariableField; |
| H<int> parameterizedTypeField; |
| } |
| |
| class H<T> {} |
| |
| testOriginalDeclaration() { |
| ClassMirror a = reflectClass(A); |
| VariableMirror staticField = a.declarations[#staticField] as VariableMirror; |
| VariableMirror field = a.declarations[#field] as VariableMirror; |
| VariableMirror dynamicTypeField = |
| a.declarations[#dynamicTypeField] as VariableMirror; |
| VariableMirror typeVariableField = |
| a.declarations[#typeVariableField] as VariableMirror; |
| VariableMirror parameterizedTypeField = |
| a.declarations[#parameterizedTypeField] as VariableMirror; |
| |
| Expect.equals(reflectType(int), staticField.type); |
| Expect.equals(reflectClass(String), field.type); |
| Expect.equals(reflectType(dynamic), dynamicTypeField.type); |
| Expect.equals(a.typeVariables.single, typeVariableField.type); |
| Expect.equals(reflect(new H<int>()).type, parameterizedTypeField.type); |
| |
| Expect.equals(2, field.metadata.length); |
| Expect.equals(reflect(const C(42)), field.metadata.first); |
| Expect.equals(reflect(const C(44)), field.metadata.last); |
| } |
| |
| testInstance() { |
| ClassMirror aOfString = reflect(new A<String>()).type; |
| VariableMirror staticField = |
| aOfString.declarations[#staticField] as VariableMirror; |
| VariableMirror field = aOfString.declarations[#field] as VariableMirror; |
| VariableMirror dynamicTypeField = |
| aOfString.declarations[#dynamicTypeField] as VariableMirror; |
| VariableMirror typeVariableField = |
| aOfString.declarations[#typeVariableField] as VariableMirror; |
| VariableMirror parameterizedTypeField = |
| aOfString.declarations[#parameterizedTypeField] as VariableMirror; |
| |
| Expect.equals(reflectType(int), staticField.type); |
| Expect.equals(reflectClass(String), field.type); |
| Expect.equals(reflectType(dynamic), dynamicTypeField.type); |
| Expect.equals(reflectClass(String), typeVariableField.type); |
| Expect.equals(reflect(new H<int>()).type, parameterizedTypeField.type); |
| |
| Expect.equals(2, field.metadata.length); |
| Expect.equals(reflect(const C(42)), field.metadata.first); |
| Expect.equals(reflect(const C(44)), field.metadata.last); |
| } |
| |
| testTopLevel() { |
| LibraryMirror currentLibrary = currentMirrorSystem().findLibrary(#field_test); |
| VariableMirror topLevel = |
| currentLibrary.declarations[#toplevelVariable] as VariableMirror; |
| Expect.equals(reflectClass(String), topLevel.type); |
| } |
| |
| main() { |
| testOriginalDeclaration(); |
| testInstance(); |
| testTopLevel(); |
| } |