00b2e580a3
Bug: https://github.com/dart-lang/sdk/issues/40045 Change-Id: I597259b38684de87016f1e136723d24f4ac05420 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132440 Reviewed-by: Ben Konyi <bkonyi@google.com> Commit-Queue: Ryan Macnak <rmacnak@google.com>
124 lines
4.3 KiB
Dart
124 lines
4.3 KiB
Dart
// 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'));
|
|
}
|