|  | // 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; | 
|  |  | 
|  | import 'dart:mirrors'; | 
|  | import 'package:expect/expect.dart'; | 
|  |  | 
|  | typedef int _F(int i); | 
|  |  | 
|  | class _C<_T> { | 
|  | get g {} | 
|  | set s(x) {} | 
|  | m(_p) {} | 
|  | get _g {} | 
|  | set _s(x) {} | 
|  | _m() {} | 
|  | } | 
|  |  | 
|  | main() { | 
|  | // Test private symbols are distinct across libraries, and the same within a | 
|  | // library when created multiple ways. Test the string can be properly | 
|  | // extracted. | 
|  | LibraryMirror libcore = currentMirrorSystem().findLibrary(#dart.core); | 
|  | LibraryMirror libmath = currentMirrorSystem().findLibrary(#dart.math); | 
|  | LibraryMirror libtest = currentMirrorSystem().findLibrary(#test); | 
|  |  | 
|  | Symbol corefoo = MirrorSystem.getSymbol('foo', libcore); | 
|  | Symbol mathfoo = MirrorSystem.getSymbol('foo', libmath); | 
|  | Symbol testfoo = MirrorSystem.getSymbol('foo', libtest); | 
|  | Symbol nullfoo1 = MirrorSystem.getSymbol('foo'); | 
|  | Symbol nullfoo2 = MirrorSystem.getSymbol('foo', null); | 
|  |  | 
|  | Expect.equals(corefoo, mathfoo); | 
|  | Expect.equals(mathfoo, testfoo); | 
|  | Expect.equals(testfoo, corefoo); | 
|  | Expect.equals(nullfoo1, corefoo); | 
|  | Expect.equals(nullfoo2, corefoo); | 
|  |  | 
|  | Expect.equals('foo', MirrorSystem.getName(corefoo)); | 
|  | Expect.equals('foo', MirrorSystem.getName(mathfoo)); | 
|  | Expect.equals('foo', MirrorSystem.getName(testfoo)); | 
|  | Expect.equals('foo', MirrorSystem.getName(#foo)); | 
|  | Expect.equals('foo', MirrorSystem.getName(nullfoo1)); | 
|  | Expect.equals('foo', MirrorSystem.getName(nullfoo2)); | 
|  |  | 
|  | Symbol core_foo = MirrorSystem.getSymbol('_foo', libcore); | 
|  | Symbol math_foo = MirrorSystem.getSymbol('_foo', libmath); | 
|  | Symbol test_foo = MirrorSystem.getSymbol('_foo', libtest); | 
|  |  | 
|  | Expect.equals('_foo', MirrorSystem.getName(core_foo)); | 
|  | Expect.equals('_foo', MirrorSystem.getName(math_foo)); | 
|  | Expect.equals('_foo', MirrorSystem.getName(test_foo)); | 
|  | Expect.equals('_foo', MirrorSystem.getName(#_foo)); | 
|  |  | 
|  | Expect.notEquals(core_foo, math_foo); | 
|  | Expect.notEquals(math_foo, test_foo); | 
|  | Expect.notEquals(test_foo, core_foo); | 
|  |  | 
|  | Expect.notEquals(corefoo, core_foo); | 
|  | Expect.notEquals(mathfoo, math_foo); | 
|  | Expect.notEquals(testfoo, test_foo); | 
|  |  | 
|  | Expect.equals(test_foo, #_foo); | 
|  |  | 
|  | // Test interactions with the manglings for getters and setters, etc. | 
|  | ClassMirror cm = reflectClass(_C); | 
|  | Expect.equals(#_C, cm.simpleName); | 
|  | Expect.equals('_C', MirrorSystem.getName(cm.simpleName)); | 
|  |  | 
|  | MethodMirror mm = cm.declarations[#g] as MethodMirror; | 
|  | Expect.isNotNull(mm); | 
|  | Expect.isTrue(mm.isGetter); | 
|  | Expect.equals(#g, mm.simpleName); | 
|  | Expect.equals('g', MirrorSystem.getName(mm.simpleName)); | 
|  |  | 
|  | mm = cm.declarations[const Symbol('s=')] as MethodMirror; | 
|  | Expect.isNotNull(mm); | 
|  | Expect.isTrue(mm.isSetter); | 
|  | Expect.equals(const Symbol('s='), mm.simpleName); | 
|  | Expect.equals('s=', MirrorSystem.getName(mm.simpleName)); | 
|  |  | 
|  | mm = cm.declarations[#m] as MethodMirror; | 
|  | Expect.isNotNull(mm); | 
|  | Expect.isTrue(mm.isRegularMethod); | 
|  | Expect.equals(#m, mm.simpleName); | 
|  | Expect.equals('m', MirrorSystem.getName(mm.simpleName)); | 
|  |  | 
|  | mm = cm.declarations[#_g] as MethodMirror; | 
|  | Expect.isNotNull(mm); | 
|  | Expect.isTrue(mm.isGetter); | 
|  | Expect.equals(#_g, mm.simpleName); | 
|  | Expect.equals('_g', MirrorSystem.getName(mm.simpleName)); | 
|  |  | 
|  | mm = cm.declarations[MirrorSystem.getSymbol('_s=', libtest)] as MethodMirror; | 
|  | Expect.isNotNull(mm); | 
|  | Expect.isTrue(mm.isSetter); | 
|  | Expect.equals(MirrorSystem.getSymbol('_s=', libtest), mm.simpleName); | 
|  | Expect.equals('_s=', MirrorSystem.getName(mm.simpleName)); | 
|  |  | 
|  | mm = cm.declarations[#_m] as MethodMirror; | 
|  | Expect.isNotNull(mm); | 
|  | Expect.isTrue(mm.isRegularMethod); | 
|  | Expect.equals(#_m, mm.simpleName); | 
|  | Expect.equals('_m', MirrorSystem.getName(mm.simpleName)); | 
|  |  | 
|  | TypeVariableMirror tvm = cm.typeVariables[0]; | 
|  | Expect.isNotNull(tvm); | 
|  | Expect.equals(#_T, tvm.simpleName); | 
|  | Expect.equals('_T', MirrorSystem.getName(tvm.simpleName)); | 
|  |  | 
|  | TypedefMirror tdm = reflectType(_F) as TypedefMirror; | 
|  | Expect.equals(#_F, tdm.simpleName); | 
|  | Expect.equals('_F', MirrorSystem.getName(tdm.simpleName)); | 
|  |  | 
|  | ParameterMirror pm = (cm.declarations[#m] as MethodMirror).parameters[0]; | 
|  | Expect.equals(#_p, pm.simpleName); | 
|  | Expect.equals('_p', MirrorSystem.getName(pm.simpleName)); | 
|  |  | 
|  | // Private symbol without a library. | 
|  | Expect.throwsArgumentError(() => MirrorSystem.getSymbol('_private')); | 
|  | } |