blob: 14ab43649a7933f3098ddcaf701621ae8865c29d [file] [log] [blame]
// Copyright (c) 2011, 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.
// TODO(rmacnak): Move the existing mirror tests here (a place for
// cross-implementation tests).
library MirrorsTest;
import "dart:mirrors";
import "../../../pkg/unittest/lib/unittest.dart";
var topLevelField;
class Class {
Class() { this.field = "default value"; }
Class.withInitialValue(this.field);
var field;
static var staticField;
}
testFieldAccess(mirrors) {
var instance = new Class();
var libMirror = mirrors.libraries["MirrorsTest"];
var classMirror = libMirror.classes["Class"];
var instMirror = reflect(instance);
libMirror.setField('topLevelField', 42);
var future = libMirror.getField('topLevelField');
future.then(expectAsync1((resultMirror) {
expect(resultMirror.reflectee, equals(42));
expect(topLevelField, equals(42));
}));
classMirror.setField('staticField', 43);
future = classMirror.getField('staticField');
future.then(expectAsync1((resultMirror) {
expect(resultMirror.reflectee, equals(43));
expect(Class.staticField, equals(43));
}));
instMirror.setField('field', 44);
future = instMirror.getField('field');
future.then(expectAsync1((resultMirror) {
expect(resultMirror.reflectee, equals(44));
expect(instance.field, equals(44));
}));
}
testClosureMirrors(mirrors) {
var closure = (x, y, z) { return x + y + z; };
var mirror = reflect(closure);
expect(mirror is ClosureMirror, equals(true));
var funcMirror = mirror.function;
expect(funcMirror is MethodMirror, equals(true));
expect(funcMirror.parameters.length, equals(3));
var future = mirror.apply([2, 4, 8]);
future.then(expectAsync1((resultMirror) {
expect(resultMirror.reflectee, equals(14));
}));
}
testInvokeConstructor(mirrors) {
var libMirror = mirrors.libraries["MirrorsTest"];
var classMirror = libMirror.classes["Class"];
var future = classMirror.newInstance('', []);
future.then(expectAsync1((resultMirror) {
var instance = resultMirror.reflectee;
expect(instance is Class, equals(true));
expect(instance.field, equals("default value"));
}));
future = classMirror.newInstance('withInitialValue', [45]);
future.then(expectAsync1((resultMirror) {
var instance = resultMirror.reflectee;
expect(instance is Class, equals(true));
expect(instance.field, equals(45));
}));
}
main() {
var mirrors = currentMirrorSystem();
test("Test field access", () { testFieldAccess(mirrors); });
test("Test closure mirrors", () { testClosureMirrors(mirrors); });
test("Test invoke constructor", () { testInvokeConstructor(mirrors); });
}