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

Unified Diff: test/codegen/lib/mirrors/parameter_test.dart

Issue 2265533002: Add mirrors tests (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 4 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
Index: test/codegen/lib/mirrors/parameter_test.dart
diff --git a/test/codegen/lib/mirrors/parameter_test.dart b/test/codegen/lib/mirrors/parameter_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..4eb6ad596432523ba8d400ee2f55e28872861e2b
--- /dev/null
+++ b/test/codegen/lib/mirrors/parameter_test.dart
@@ -0,0 +1,183 @@
+// 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.
+
+// This tests uses the multi-test "ok" feature:
+// none: Desired behaviour, passing on the VM.
+// 01: Trimmed version for dart2js.
+//
+// TODO(rmacnak,ahe): Remove multi-test when VM and dart2js are on par.
+
+/** Test of [ParameterMirror]. */
+library test.parameter_test;
+
+@MirrorsUsed(targets: const ['test.parameter_test', 'dart.core.int'], override: '*')
+import 'dart:mirrors';
+
+import 'package:expect/expect.dart';
+import 'stringify.dart';
+
+class B {
+ B();
+ B.foo(int x);
+ B.bar(int z, x);
+
+ // TODO(6490): Currently only supported by the VM.
+ B.baz(final int x, int y, final int z);
+ B.qux(int x, [int y= 3 + 1]);
+ B.quux(int x, {String str: "foo"});
+ B.corge({int x: 3 * 17, String str: "bar"});
+
+ var _x;
+ get x => _x;
+ set x(final value) { _x = value; }
+
+ grault([int x]) {}
+ garply({int y}) {}
+ waldo(int z) {}
+}
+
+class C <S extends int, T> {
+ // TODO(6490): Currently only supported by the VM.
+ foo(int a, S b) => b;
+ bar(S a, T b, num c) {}
+}
+
+main() {
+ ClassMirror cm = reflectClass(B);
+ var constructors = new Map<Symbol, MethodMirror>();
+ cm.declarations.forEach((k, v) {
+ if (v is MethodMirror && v.isConstructor) constructors[k] = v;
+ });
+
+ List<Symbol> constructorKeys =
+ [#B, #B.bar, #B.baz, #B.foo, #B.quux, #B.qux, #B.corge];
+ Expect.setEquals(constructorKeys, constructors.keys);
+
+ MethodMirror unnamedConstructor = constructors[#B];
+ expect('Method(s(B) in s(B), constructor)', unnamedConstructor);
+ expect('[]', unnamedConstructor.parameters);
+ expect('Class(s(B) in s(test.parameter_test), top-level)',
+ unnamedConstructor.returnType);
+
+ MethodMirror fooConstructor = constructors[#B.foo];
+ expect('Method(s(B.foo) in s(B), constructor)', fooConstructor);
+ expect('[Parameter(s(x) in s(B.foo),'
+ ' type = Class(s(int) in s(dart.core), top-level))]',
+ fooConstructor.parameters);
+ expect('Class(s(B) in s(test.parameter_test), top-level)',
+ fooConstructor.returnType);
+
+ MethodMirror barConstructor = constructors[#B.bar];
+ expect('Method(s(B.bar) in s(B), constructor)', barConstructor);
+ expect('[Parameter(s(z) in s(B.bar),'
+ ' type = Class(s(int) in s(dart.core), top-level)), '
+ 'Parameter(s(x) in s(B.bar),'
+ ' type = Type(s(dynamic), top-level))]',
+ barConstructor.parameters);
+ expect('Class(s(B) in s(test.parameter_test), top-level)',
+ barConstructor.returnType);
+
+ // dart2js stops testing here.
+ return; /// 01: ok
+
+ MethodMirror bazConstructor = constructors[#B.baz];
+ expect('Method(s(B.baz) in s(B), constructor)', bazConstructor);
+ expect('[Parameter(s(x) in s(B.baz), final,'
+ ' type = Class(s(int) in s(dart.core), top-level)), '
+ 'Parameter(s(y) in s(B.baz),'
+ ' type = Class(s(int) in s(dart.core), top-level)), '
+ 'Parameter(s(z) in s(B.baz), final,'
+ ' type = Class(s(int) in s(dart.core), top-level))]',
+ bazConstructor.parameters);
+ expect('Class(s(B) in s(test.parameter_test), top-level)',
+ bazConstructor.returnType);
+
+ MethodMirror quxConstructor = constructors[#B.qux];
+ expect('Method(s(B.qux) in s(B), constructor)', quxConstructor);
+ expect('[Parameter(s(x) in s(B.qux),'
+ ' type = Class(s(int) in s(dart.core), top-level)), '
+ 'Parameter(s(y) in s(B.qux), optional,'
+ ' value = Instance(value = 4),'
+ ' type = Class(s(int) in s(dart.core), top-level))]',
+ quxConstructor.parameters);
+ expect('Class(s(B) in s(test.parameter_test), top-level)',
+ quxConstructor.returnType);
+
+ MethodMirror quuxConstructor = constructors[#B.quux];
+ expect('Method(s(B.quux) in s(B), constructor)', quuxConstructor);
+ expect('[Parameter(s(x) in s(B.quux),'
+ ' type = Class(s(int) in s(dart.core), top-level)), '
+ 'Parameter(s(str) in s(B.quux), optional, named,'
+ ' value = Instance(value = foo),'
+ ' type = Class(s(String) in s(dart.core), top-level))]',
+ quuxConstructor.parameters);
+ expect('Class(s(B) in s(test.parameter_test), top-level)',
+ quuxConstructor.returnType);
+
+ MethodMirror corgeConstructor = constructors[#B.corge];
+ expect('Method(s(B.corge) in s(B), constructor)', corgeConstructor);
+ expect('[Parameter(s(x) in s(B.corge), optional, named,'
+ ' value = Instance(value = 51),'
+ ' type = Class(s(int) in s(dart.core), top-level)), '
+ 'Parameter(s(str) in s(B.corge), optional, named,'
+ ' value = Instance(value = bar),'
+ ' type = Class(s(String) in s(dart.core), top-level))]',
+ corgeConstructor.parameters);
+ expect('Class(s(B) in s(test.parameter_test), top-level)',
+ corgeConstructor.returnType);
+
+ MethodMirror xGetter = cm.declarations[#x];
+ expect('Method(s(x) in s(B), getter)', xGetter);
+ expect('[]', xGetter.parameters);
+
+ MethodMirror xSetter = cm.declarations[const Symbol('x=')];
+ expect('Method(s(x=) in s(B), setter)', xSetter);
+ expect('[Parameter(s(value) in s(x=), final,'
+ ' type = Type(s(dynamic), top-level))]',
+ xSetter.parameters);
+
+ MethodMirror grault = cm.declarations[#grault];
+ expect('Method(s(grault) in s(B))', grault);
+ expect('[Parameter(s(x) in s(grault), optional,'
+ ' type = Class(s(int) in s(dart.core), top-level))]',
+ grault.parameters);
+ expect('Instance(value = <null>)', grault.parameters[0].defaultValue);
+
+ MethodMirror garply = cm.declarations[#garply];
+ expect('Method(s(garply) in s(B))', garply);
+ expect('[Parameter(s(y) in s(garply), optional, named,'
+ ' type = Class(s(int) in s(dart.core), top-level))]',
+ garply.parameters);
+ expect('Instance(value = <null>)', garply.parameters[0].defaultValue);
+
+ MethodMirror waldo = cm.declarations[#waldo];
+ expect('Method(s(waldo) in s(B))', waldo);
+ expect('[Parameter(s(z) in s(waldo),'
+ ' type = Class(s(int) in s(dart.core), top-level))]',
+ waldo.parameters);
+ expect('<null>', waldo.parameters[0].defaultValue);
+
+ cm = reflectClass(C);
+
+ MethodMirror fooInC = cm.declarations[#foo];
+ expect('Method(s(foo) in s(C))', fooInC);
+ expect('[Parameter(s(a) in s(foo),'
+ ' type = Class(s(int) in s(dart.core), top-level)), '
+ 'Parameter(s(b) in s(foo),'
+ ' type = TypeVariable(s(S) in s(C),'
+ ' upperBound = Class(s(int) in s(dart.core), top-level)))]',
+ fooInC.parameters);
+
+ MethodMirror barInC = cm.declarations[#bar];
+ expect('Method(s(bar) in s(C))', barInC);
+ expect('[Parameter(s(a) in s(bar),'
+ ' type = TypeVariable(s(S) in s(C),'
+ ' upperBound = Class(s(int) in s(dart.core), top-level))), '
+ 'Parameter(s(b) in s(bar),'
+ ' type = TypeVariable(s(T) in s(C),'
+ ' upperBound = Class(s(Object) in s(dart.core), top-level))), '
+ 'Parameter(s(c) in s(bar),'
+ ' type = Class(s(num) in s(dart.core), top-level))]',
+ barInC.parameters);
+}

Powered by Google App Engine
This is Rietveld 408576698