| Index: runtime/tests/vm/dart/isolate_mirror_local_test.dart
|
| diff --git a/runtime/tests/vm/dart/isolate_mirror_local_test.dart b/runtime/tests/vm/dart/isolate_mirror_local_test.dart
|
| deleted file mode 100644
|
| index e5ca82ec12b6b483ada51e538a27458bce132a8f..0000000000000000000000000000000000000000
|
| --- a/runtime/tests/vm/dart/isolate_mirror_local_test.dart
|
| +++ /dev/null
|
| @@ -1,505 +0,0 @@
|
| -// Copyright (c) 2012, 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 test program for checking implemention of MirrorSystem when
|
| -// inspecting the current isolate.
|
| -//
|
| -// VMOptions=--enable_type_checks
|
| -
|
| -library isolate_mirror_local_test;
|
| -
|
| -import "package:expect/expect.dart";
|
| -import 'dart:async';
|
| -import 'dart:isolate';
|
| -import 'dart:mirrors';
|
| -
|
| -ReceivePort exit_port;
|
| -Set expectedTests;
|
| -
|
| -void testDone(String test) {
|
| - if (!expectedTests.contains(test)) {
|
| - throw "Unexpected test name '$test'";
|
| - }
|
| - expectedTests.remove(test);
|
| - if (expectedTests.isEmpty) {
|
| - // All tests are done.
|
| - exit_port.close();
|
| - }
|
| -}
|
| -
|
| -int global_var = 0;
|
| -final int final_global_var = 0;
|
| -
|
| -// Top-level getter and setter.
|
| -int get myVar { return 5; }
|
| -void set myVar(x) {}
|
| -
|
| -// This function will be invoked reflectively.
|
| -int function(int x) {
|
| - global_var = x;
|
| - return x + 1;
|
| -}
|
| -
|
| -typedef void FuncType(String a);
|
| -
|
| -FuncType myFunc = null;
|
| -
|
| -_stringCompare(String a, String b) => a.compareTo(b);
|
| -sort(list) => list.sort(_stringCompare);
|
| -
|
| -String buildMethodString(MethodMirror func) {
|
| - var result = '${MirrorSystem.getName(func.simpleName)} '
|
| - 'return(${MirrorSystem.getName(func.returnType.simpleName)})';
|
| - if (func.isPrivate) {
|
| - result = '$result private';
|
| - }
|
| - if (func.isTopLevel) {
|
| - result = '$result toplevel';
|
| - }
|
| - if (func.isStatic) {
|
| - result = '$result static';
|
| - }
|
| - if (func.isAbstract) {
|
| - result = '$result abstract';
|
| - }
|
| - if (func.isRegularMethod) {
|
| - result = '$result method';
|
| - }
|
| - if (func.isGetter) {
|
| - result = '$result getter';
|
| - }
|
| - if (func.isSetter) {
|
| - result = '$result setter';
|
| - }
|
| - if (func.isConstructor) {
|
| - result = '$result constructor';
|
| - }
|
| - if (func.isConstConstructor) {
|
| - result = '$result const';
|
| - }
|
| - if (func.isGenerativeConstructor) {
|
| - result = '$result generative';
|
| - }
|
| - if (func.isRedirectingConstructor) {
|
| - result = '$result redirecting';
|
| - }
|
| - if (func.isFactoryConstructor) {
|
| - result = '$result factory';
|
| - }
|
| - return result;
|
| -}
|
| -
|
| -String buildVariableString(VariableMirror variable) {
|
| - var result = '${MirrorSystem.getName(variable.simpleName)} '
|
| - 'type(${MirrorSystem.getName(variable.type.simpleName)})';
|
| - if (variable.isPrivate) {
|
| - result = '$result private';
|
| - }
|
| - if (variable.isTopLevel) {
|
| - result = '$result toplevel';
|
| - }
|
| - if (variable.isStatic) {
|
| - result = '$result static';
|
| - }
|
| - if (variable.isFinal) {
|
| - result = '$result final';
|
| - }
|
| - return result;
|
| -}
|
| -
|
| -void testRootLibraryMirror(LibraryMirror lib_mirror) {
|
| - Expect.equals(const Symbol('isolate_mirror_local_test'),
|
| - lib_mirror.simpleName);
|
| - Expect.equals(const Symbol('isolate_mirror_local_test'),
|
| - lib_mirror.qualifiedName);
|
| - Expect.equals(null, lib_mirror.owner);
|
| - Expect.isFalse(lib_mirror.isPrivate);
|
| - Expect.isTrue(lib_mirror.uri.path.contains('isolate_mirror_local_test.dart'));
|
| - Expect.equals("LibraryMirror on 'isolate_mirror_local_test'",
|
| - lib_mirror.toString());
|
| -
|
| - // Test library invocation by calling function(123).
|
| - Expect.equals(0, global_var);
|
| - lib_mirror.invokeAsync(const Symbol('function'), [123]).then(
|
| - (InstanceMirror retval) {
|
| - Expect.equals(123, global_var);
|
| - testImplements(retval.type, #int);
|
| - Expect.isTrue(retval.hasReflectee);
|
| - Expect.equals(124, retval.reflectee);
|
| - testDone('testRootLibraryMirror');
|
| - });
|
| -
|
| - // Check that the members map is complete.
|
| - List keys = lib_mirror.members.keys.map(MirrorSystem.getName).toList();
|
| - sort(keys);
|
| - Expect.equals('['
|
| - 'FuncType, '
|
| - 'GenericClass, '
|
| - 'MyClass, '
|
| - 'MyException, '
|
| - 'MyInterface, '
|
| - 'MySuperClass, '
|
| - '_stringCompare, '
|
| - 'buildMethodString, '
|
| - 'buildVariableString, '
|
| - 'exit_port, '
|
| - 'expectedTests, '
|
| - 'final_global_var, '
|
| - 'function, '
|
| - 'global_var, '
|
| - 'main, '
|
| - 'myFunc, '
|
| - 'myVar, '
|
| - 'myVar=, '
|
| - 'sort, '
|
| - 'testBoolInstanceMirror, '
|
| - 'testCustomInstanceMirror, '
|
| - 'testDone, '
|
| - 'testImplements, '
|
| - 'testIntegerInstanceMirror, '
|
| - 'testLibrariesMap, '
|
| - 'testMirrorSystem, '
|
| - 'testNullInstanceMirror, '
|
| - 'testRootLibraryMirror, '
|
| - 'testStringInstanceMirror]',
|
| - '$keys');
|
| -
|
| - // Check that the classes map is complete.
|
| - keys = lib_mirror.classes.keys.map(MirrorSystem.getName).toList();
|
| - sort(keys);
|
| - print(keys);
|
| - Expect.equals('['
|
| - 'GenericClass, '
|
| - 'MyClass, '
|
| - 'MyException, '
|
| - 'MyInterface, '
|
| - 'MySuperClass]',
|
| - '$keys');
|
| -
|
| - // Check that the types map is complete.
|
| - keys = lib_mirror.types.keys.map(MirrorSystem.getName).toList();
|
| - sort(keys);
|
| - print(keys);
|
| - Expect.equals('['
|
| - 'FuncType, '
|
| - 'GenericClass, '
|
| - 'MyClass, '
|
| - 'MyException, '
|
| - 'MyInterface, '
|
| - 'MySuperClass]',
|
| - '$keys');
|
| -
|
| - // Check that the functions map is complete.
|
| - keys = lib_mirror.functions.keys.map(MirrorSystem.getName).toList();
|
| - sort(keys);
|
| - Expect.equals('['
|
| - '_stringCompare, '
|
| - 'buildMethodString, '
|
| - 'buildVariableString, '
|
| - 'function, '
|
| - 'main, '
|
| - 'myVar, '
|
| - 'myVar=, '
|
| - 'sort, '
|
| - 'testBoolInstanceMirror, '
|
| - 'testCustomInstanceMirror, '
|
| - 'testDone, '
|
| - 'testImplements, '
|
| - 'testIntegerInstanceMirror, '
|
| - 'testLibrariesMap, '
|
| - 'testMirrorSystem, '
|
| - 'testNullInstanceMirror, '
|
| - 'testRootLibraryMirror, '
|
| - 'testStringInstanceMirror]',
|
| - '$keys');
|
| -
|
| - // Check that the getters map is complete.
|
| - keys = lib_mirror.getters.keys.map(MirrorSystem.getName).toList();
|
| - sort(keys);
|
| - Expect.equals('[myVar]', '$keys');
|
| -
|
| - // Check that the setters map is complete.
|
| - keys = lib_mirror.setters.keys.map(MirrorSystem.getName).toList();
|
| - sort(keys);
|
| - Expect.equals('[myVar=]', '$keys');
|
| -
|
| - // Check that the variables map is complete.
|
| - keys = lib_mirror.variables.keys.map(MirrorSystem.getName).toList();
|
| - sort(keys);
|
| - Expect.equals('['
|
| - 'exit_port, '
|
| - 'expectedTests, '
|
| - 'final_global_var, '
|
| - 'global_var, '
|
| - 'myFunc]',
|
| - '$keys');
|
| -
|
| - ClassMirror cls_mirror = lib_mirror.members[const Symbol('MyClass')];
|
| - ClassMirror generic_cls_mirror =
|
| - lib_mirror.members[const Symbol('GenericClass')];
|
| -
|
| - // Test function mirrors.
|
| - MethodMirror func = lib_mirror.members[const Symbol('function')];
|
| - Expect.isTrue(func is MethodMirror);
|
| - Expect.equals('function return(int) toplevel static method',
|
| - buildMethodString(func));
|
| -
|
| - func = lib_mirror.members[const Symbol('myVar')];
|
| - Expect.isTrue(func is MethodMirror);
|
| - Expect.equals('myVar return(int) toplevel static getter',
|
| - buildMethodString(func));
|
| -
|
| - func = lib_mirror.members[const Symbol('myVar=')];
|
| - Expect.isTrue(func is MethodMirror);
|
| - Expect.equals('myVar= return(void) toplevel static setter',
|
| - buildMethodString(func));
|
| -
|
| - func = cls_mirror.members[const Symbol('method')];
|
| - Expect.isTrue(func is MethodMirror);
|
| - Expect.equals('method return(int) method', buildMethodString(func));
|
| -
|
| - func = cls_mirror.constructors[const Symbol('MyClass')];
|
| - Expect.isTrue(func is MethodMirror);
|
| - Expect.equals('MyClass return(MyClass) constructor generative',
|
| - buildMethodString(func));
|
| -
|
| - func = cls_mirror.constructors[const Symbol('MyClass.named')];
|
| - Expect.isTrue(func is MethodMirror);
|
| - Expect.equals('MyClass.named return(MyClass) constructor generative',
|
| - buildMethodString(func));
|
| -
|
| - func = generic_cls_mirror.members[const Symbol('method')];
|
| - Expect.isTrue(func is MethodMirror);
|
| - Expect.equals('method return(T) method', buildMethodString(func));
|
| -
|
| - // Test variable mirrors.
|
| - VariableMirror variable = lib_mirror.members[const Symbol('global_var')];
|
| - Expect.isTrue(variable is VariableMirror);
|
| - Expect.equals('global_var type(int) toplevel static',
|
| - buildVariableString(variable));
|
| -
|
| - variable = lib_mirror.members[const Symbol('final_global_var')];
|
| - Expect.isTrue(variable is VariableMirror);
|
| - Expect.equals('final_global_var type(int) toplevel static final',
|
| - buildVariableString(variable));
|
| -
|
| - variable = cls_mirror.members[const Symbol('value')];
|
| - Expect.isTrue(variable is VariableMirror);
|
| - Expect.equals('value type(dynamic) final', buildVariableString(variable));
|
| -
|
| - // Test type variable mirrors.
|
| - var type_var = generic_cls_mirror.members[const Symbol('method')].returnType;
|
| - Expect.isTrue(type_var is TypeVariableMirror);
|
| - Expect.equals(const Symbol('GenericClass'), type_var.owner.simpleName);
|
| - Expect.equals(const Symbol('Object'), type_var.upperBound.simpleName);
|
| -
|
| - // Test typedef mirrors.
|
| - var typedef_mirror = lib_mirror.members[const Symbol('myFunc')].type;
|
| - Expect.isTrue(typedef_mirror is TypedefMirror);
|
| - Expect.equals(const Symbol('isolate_mirror_local_test'),
|
| - typedef_mirror.owner.simpleName);
|
| -
|
| - // Test function type mirrors.
|
| - var func_cls_mirror = typedef_mirror.referent;
|
| - Expect.isTrue(func_cls_mirror is FunctionTypeMirror);
|
| - // Expect.equals('void (dart.core.String)', func_cls_mirror.simpleName);
|
| - Expect.equals(const Symbol('void'), func_cls_mirror.returnType.simpleName);
|
| -}
|
| -
|
| -void testLibrariesMap(Map libraries) {
|
| - // Just look for a couple of well-known libs.
|
| - LibraryMirror core_lib = libraries[Uri.parse('dart:core')];
|
| - Expect.isTrue(core_lib is LibraryMirror);
|
| -
|
| - LibraryMirror mirror_lib = libraries[Uri.parse('dart:mirrors')];
|
| - Expect.isTrue(mirror_lib is LibraryMirror);
|
| -
|
| - // Lookup an interface from a library and make sure it is sane.
|
| - ClassMirror list_intf = core_lib.members[const Symbol('List')];
|
| - Expect.isTrue(list_intf is ClassMirror);
|
| - Expect.equals(const Symbol('List'), list_intf.simpleName);
|
| - Expect.equals(const Symbol('dart.core.List'), list_intf.qualifiedName);
|
| - Expect.isFalse(list_intf.isPrivate);
|
| - Expect.equals(const Symbol('Object'), list_intf.superclass.simpleName);
|
| - Expect.equals(const Symbol('dart.core'), list_intf.owner.simpleName);
|
| - Expect.isTrue(list_intf.isClass);
|
| - Expect.equals(const Symbol('Iterable'),
|
| - list_intf.superinterfaces[0].simpleName);
|
| - Expect.equals("ClassMirror on 'List'", list_intf.toString());
|
| -
|
| - // Lookup a class from a library and make sure it is sane.
|
| - ClassMirror oom_cls = core_lib.members[const Symbol('OutOfMemoryError')];
|
| - Expect.isTrue(oom_cls is ClassMirror);
|
| - Expect.equals(const Symbol('OutOfMemoryError'), oom_cls.simpleName);
|
| - Expect.equals(const Symbol('dart.core.OutOfMemoryError'),
|
| - oom_cls.qualifiedName);
|
| - Expect.isFalse(oom_cls.isPrivate);
|
| - Expect.equals(const Symbol('Object'), oom_cls.superclass.simpleName);
|
| - Expect.isTrue(oom_cls.defaultFactory == null);
|
| - Expect.equals(const Symbol('dart.core'), oom_cls.owner.simpleName);
|
| - Expect.isTrue(oom_cls.isClass);
|
| - Expect.equals(const Symbol('Error'), oom_cls.superinterfaces[0].simpleName);
|
| - Expect.equals("ClassMirror on 'OutOfMemoryError'",
|
| - oom_cls.toString());
|
| - testDone('testLibrariesMap');
|
| -}
|
| -
|
| -void testMirrorSystem(MirrorSystem mirrors) {
|
| - Expect.isTrue(mirrors.isolate.debugName.contains('main'));
|
| - testRootLibraryMirror(mirrors.isolate.rootLibrary);
|
| - testLibrariesMap(mirrors.libraries);
|
| - Expect.equals(const Symbol('void'), mirrors.voidType.simpleName);
|
| - Expect.equals(const Symbol('dynamic'), mirrors.dynamicType.simpleName);
|
| - Expect.isTrue(mirrors.voidType is TypeMirror);
|
| - Expect.isTrue(mirrors.dynamicType is TypeMirror);
|
| - Expect.isFalse(mirrors.voidType is ClassMirror);
|
| - Expect.isFalse(mirrors.dynamicType is ClassMirror);
|
| - testDone('testMirrorSystem');
|
| -}
|
| -
|
| -void testImplements(klass, intfName) {
|
| - bool foundInterface = false;
|
| - for (ClassMirror cm = klass; cm != null; cm = cm.superclass) {
|
| - if (cm.simpleName == intfName) foundInterface = true;
|
| - cm.superinterfaces.forEach((intf) {
|
| - if (intf.simpleName == intfName) foundInterface = true;
|
| - });
|
| - }
|
| - Expect.isTrue(foundInterface, '$klass should implement $intfName');
|
| -}
|
| -
|
| -void testIntegerInstanceMirror(InstanceMirror mirror) {
|
| - testImplements(mirror.type, #int);
|
| - Expect.isTrue(mirror.hasReflectee);
|
| - Expect.equals(1001, mirror.reflectee);
|
| - Expect.equals("InstanceMirror on 1001", mirror.toString());
|
| -
|
| - // Invoke (mirror + mirror).
|
| - mirror.invokeAsync(const Symbol('+'), [ mirror ]).then(
|
| - (InstanceMirror retval) {
|
| - testImplements(retval.type, #int);
|
| - Expect.isTrue(retval.hasReflectee);
|
| - Expect.equals(2002, retval.reflectee);
|
| - testDone('testIntegerInstanceMirror');
|
| - });
|
| -}
|
| -
|
| -void testStringInstanceMirror(InstanceMirror mirror) {
|
| - testImplements(mirror.type, #String);
|
| - Expect.isTrue(mirror.hasReflectee);
|
| - Expect.equals('This\nis\na\nString', mirror.reflectee);
|
| - Expect.equals('InstanceMirror on "This\\nis\\na\\nString"',
|
| - mirror.toString());
|
| -
|
| - // Invoke mirror[0].
|
| - mirror.invokeAsync(const Symbol('[]'), [ 0 ]).then(
|
| - (InstanceMirror retval) {
|
| - testImplements(retval.type, #String);
|
| - Expect.isTrue(retval.hasReflectee);
|
| - Expect.equals('T', retval.reflectee);
|
| - testDone('testStringInstanceMirror');
|
| - });
|
| -}
|
| -
|
| -void testBoolInstanceMirror(InstanceMirror mirror) {
|
| - testImplements(mirror.type, #bool);
|
| - Expect.isTrue(mirror.hasReflectee);
|
| - Expect.equals(true, mirror.reflectee);
|
| - Expect.equals("InstanceMirror on true", mirror.toString());
|
| - testDone('testBoolInstanceMirror');
|
| -}
|
| -
|
| -void testNullInstanceMirror(InstanceMirror mirror) {
|
| - testImplements(mirror.type, #Null);
|
| - Expect.isTrue(mirror.hasReflectee);
|
| - Expect.equals(null, mirror.reflectee);
|
| - Expect.equals("InstanceMirror on null", mirror.toString());
|
| - testDone('testNullInstanceMirror');
|
| -}
|
| -
|
| -class MySuperClass {
|
| -}
|
| -
|
| -class MyInterface {
|
| -}
|
| -
|
| -class MyClass extends MySuperClass implements MyInterface {
|
| - MyClass(this.value) {}
|
| - MyClass.named() {}
|
| -
|
| - final value;
|
| -
|
| - int method(int arg) {
|
| - return arg + value;
|
| - }
|
| -}
|
| -
|
| -class GenericClass<T> {
|
| - T method(int arg) {
|
| - return null;
|
| - }
|
| -}
|
| -
|
| -void testCustomInstanceMirror(InstanceMirror mirror) {
|
| - Expect.isTrue(mirror.hasReflectee);
|
| - bool saw_exception = false;
|
| - try {
|
| - mirror.reflectee;
|
| - } on MirrorException catch (me) {
|
| - saw_exception = true;
|
| - }
|
| - Expect.isFalse(saw_exception);
|
| - Expect.equals("InstanceMirror on Instance of 'MyClass'",
|
| - mirror.toString());
|
| -
|
| - ClassMirror cls = mirror.type;
|
| - Expect.isTrue(cls is ClassMirror);
|
| - Expect.equals(const Symbol('MyClass'), cls.simpleName);
|
| - Expect.equals(const Symbol('MySuperClass'), cls.superclass.simpleName);
|
| - Expect.isTrue(cls.defaultFactory == null);
|
| - Expect.equals(const Symbol('isolate_mirror_local_test'),
|
| - cls.owner.simpleName);
|
| - Expect.isTrue(cls.isClass);
|
| - Expect.equals(const Symbol('MyInterface'), cls.superinterfaces[0].simpleName);
|
| - Expect.equals("ClassMirror on 'MyClass'", cls.toString());
|
| -
|
| - // Invoke mirror.method(1000).
|
| - mirror.invokeAsync(const Symbol('method'), [ 1000 ]).then(
|
| - (InstanceMirror retval) {
|
| - testImplements(retval.type, #int);
|
| - Expect.isTrue(retval.hasReflectee);
|
| - Expect.equals(1017, retval.reflectee);
|
| - testDone('testCustomInstanceMirror');
|
| - });
|
| -
|
| -}
|
| -
|
| -class MyException implements Exception {
|
| - MyException(this._message);
|
| - final String _message;
|
| - String toString() { return 'MyException: $_message'; }
|
| -}
|
| -
|
| -void main() {
|
| - // When all of the expected tests complete, the exit_port is closed,
|
| - // allowing the program to terminate.
|
| - exit_port = new ReceivePort();
|
| - expectedTests = new Set<String>.from(['testRootLibraryMirror',
|
| - 'testLibrariesMap',
|
| - 'testMirrorSystem',
|
| - 'testIntegerInstanceMirror',
|
| - 'testStringInstanceMirror',
|
| - 'testBoolInstanceMirror',
|
| - 'testNullInstanceMirror',
|
| - 'testCustomInstanceMirror']);
|
| -
|
| - // Test that an isolate can reflect on itself.
|
| - mirrorSystemOf(exit_port.sendPort).then(testMirrorSystem);
|
| -
|
| - testIntegerInstanceMirror(reflect(1001));
|
| - testStringInstanceMirror(reflect('This\nis\na\nString'));
|
| - testBoolInstanceMirror(reflect(true));
|
| - testNullInstanceMirror(reflect(null));
|
| - testCustomInstanceMirror(reflect(new MyClass(17)));
|
| -}
|
|
|