Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(744)

Unified Diff: runtime/tests/vm/dart/isolate_mirror_local_test.dart

Issue 10687004: Implement method and variable reflection in dart:mirrors. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/lib/mirrors_impl.dart ('k') | runtime/vm/dart_api_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/tests/vm/dart/isolate_mirror_local_test.dart
===================================================================
--- runtime/tests/vm/dart/isolate_mirror_local_test.dart (revision 9490)
+++ runtime/tests/vm/dart/isolate_mirror_local_test.dart (working copy)
@@ -25,13 +25,70 @@
}
int global_var = 0;
+final int final_global_var = 0;
+// Top-level getter and setter.
+int get myVar() { return 5; }
+int set myVar(x) {}
+
// This function will be invoked reflectively.
int function(int x) {
global_var = x;
return x + 1;
}
+_stringCompare(String a, String b) => a.compareTo(b);
+sort(list) => list.sort(_stringCompare);
+
+String buildMethodString(MethodMirror func) {
+ var result = '${func.simpleName}';
+ if (func.isTopLevel) {
+ result = '$result toplevel';
+ }
+ if (func.isStatic) {
+ result = '$result static';
+ }
+ if (func.isMethod) {
+ 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 = '${variable.simpleName}';
+ 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('isolate_mirror_local_test', lib_mirror.simpleName);
Expect.isTrue(lib_mirror.url.contains('isolate_mirror_local_test.dart'));
@@ -48,6 +105,123 @@
Expect.equals(124, retval.simpleValue);
testDone('testRootLibraryMirror');
});
+
+ // Check that the members map is complete.
+ List keys = lib_mirror.members().getKeys();
+ sort(keys);
+ Expect.equals('['
+ 'MyClass, '
+ 'MyException, '
+ 'MyInterface, '
+ 'MySuperClass, '
+ '_stringCompare, '
+ 'buildMethodString, '
+ 'buildVariableString, '
+ 'exit_port, '
+ 'expectedTests, '
+ 'final_global_var, '
+ 'function, '
+ 'global_var, '
+ 'main, '
+ 'methodWithError, '
+ 'methodWithException, '
+ 'myVar, '
+ 'myVar=, '
+ 'sort, '
+ 'testBoolInstanceMirror, '
+ 'testCustomInstanceMirror, '
+ 'testDone, '
+ 'testIntegerInstanceMirror, '
+ 'testIsolateMirror, '
+ 'testLibrariesMap, '
+ 'testMirrorErrors, '
+ 'testNullInstanceMirror, '
+ 'testRootLibraryMirror, '
+ 'testStringInstanceMirror]',
+ '$keys');
+
+ // Check that the classes map is complete.
+ keys = lib_mirror.classes().getKeys();
+ sort(keys);
+ Expect.equals('['
+ 'MyClass, '
+ 'MyException, '
+ 'MyInterface, '
+ 'MySuperClass]',
+ '$keys');
+
+ // Check that the functions map is complete.
+ keys = lib_mirror.functions().getKeys();
+ sort(keys);
+ Expect.equals('['
+ '_stringCompare, '
+ 'buildMethodString, '
+ 'buildVariableString, '
+ 'function, '
+ 'main, '
+ 'methodWithError, '
+ 'methodWithException, '
+ 'myVar, '
+ 'myVar=, '
+ 'sort, '
+ 'testBoolInstanceMirror, '
+ 'testCustomInstanceMirror, '
+ 'testDone, '
+ 'testIntegerInstanceMirror, '
+ 'testIsolateMirror, '
+ 'testLibrariesMap, '
+ 'testMirrorErrors, '
+ 'testNullInstanceMirror, '
+ 'testRootLibraryMirror, '
+ 'testStringInstanceMirror]',
+ '$keys');
+
+ // Check that the variables map is complete.
+ keys = lib_mirror.variables().getKeys();
+ sort(keys);
+ Expect.equals('['
+ 'exit_port, '
+ 'expectedTests, '
+ 'final_global_var, '
+ 'global_var]',
+ '$keys');
+
+ InterfaceMirror cls_mirror = lib_mirror.members()['MyClass'];
+
+ // Test function mirrors.
+ MethodMirror func = lib_mirror.members()['function'];
+ Expect.isTrue(func is MethodMirror);
+ Expect.equals('function toplevel static method', buildMethodString(func));
+
+ func = lib_mirror.members()['myVar'];
+ Expect.isTrue(func is MethodMirror);
+ Expect.equals('myVar toplevel static getter', buildMethodString(func));
+
+ func = lib_mirror.members()['myVar='];
+ Expect.isTrue(func is MethodMirror);
+ Expect.equals('myVar= toplevel static setter', buildMethodString(func));
+
+ func = cls_mirror.members()['method'];
+ Expect.isTrue(func is MethodMirror);
+ Expect.equals('method method', buildMethodString(func));
+
+ func = cls_mirror.members()['MyClass'];
+ Expect.isTrue(func is MethodMirror);
+ Expect.equals('MyClass constructor', buildMethodString(func));
+
+ // Test variable mirrors.
+ VariableMirror variable = lib_mirror.members()['global_var'];
+ Expect.isTrue(variable is VariableMirror);
+ Expect.equals('global_var toplevel static', buildVariableString(variable));
+
+ variable = lib_mirror.members()['final_global_var'];
+ Expect.isTrue(variable is VariableMirror);
+ Expect.equals('final_global_var toplevel static final',
+ buildVariableString(variable));
+
+ variable = cls_mirror.members()['value'];
+ Expect.isTrue(variable is VariableMirror);
+ Expect.equals('value final', buildVariableString(variable));
}
void testLibrariesMap(Map libraries) {
« no previous file with comments | « runtime/lib/mirrors_impl.dart ('k') | runtime/vm/dart_api_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698