| Index: test/codegen/lib/mirrors/operator_test.dart
|
| diff --git a/test/codegen/lib/mirrors/operator_test.dart b/test/codegen/lib/mirrors/operator_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c534f1ff514481b263bfebe1a9ef47d7329ffbda
|
| --- /dev/null
|
| +++ b/test/codegen/lib/mirrors/operator_test.dart
|
| @@ -0,0 +1,137 @@
|
| +// 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.
|
| +
|
| +/// Test operators.
|
| +library test.operator_test;
|
| +
|
| +import 'dart:mirrors';
|
| +
|
| +import 'package:expect/expect.dart';
|
| +
|
| +import 'stringify.dart';
|
| +
|
| +class Foo {
|
| + Foo operator ~() {}
|
| + Foo operator -() {}
|
| +
|
| + bool operator ==(a) {}
|
| + Foo operator [](int a) {}
|
| + Foo operator *(Foo a) {}
|
| + Foo operator /(Foo a) {}
|
| + Foo operator %(Foo a) {}
|
| + Foo operator ~/(Foo a) {}
|
| + Foo operator +(Foo a) {}
|
| + Foo operator <<(Foo a) {}
|
| + Foo operator >>(Foo a) {}
|
| + Foo operator >=(Foo a) {}
|
| + Foo operator >(Foo a) {}
|
| + Foo operator <=(Foo a) {}
|
| + Foo operator <(Foo a) {}
|
| + Foo operator &(Foo a) {}
|
| + Foo operator ^(Foo a) {}
|
| + Foo operator |(Foo a) {}
|
| + Foo operator -(Foo a) {}
|
| +
|
| + // TODO(ahe): use void when dart2js reifies that type.
|
| + operator []=(int a, Foo b) {}
|
| +}
|
| +
|
| +void main() {
|
| + ClassMirror cls = reflectClass(Foo);
|
| + var operators = new Map<Symbol, MethodMirror>();
|
| + var operatorParameters = new Map<Symbol, List>();
|
| + var returnTypes = new Map<Symbol, Mirror>();
|
| + for (MethodMirror method in cls.declarations.values.where(
|
| + (d) => d is MethodMirror && !d.isConstructor)) {
|
| + Expect.isTrue(method.isRegularMethod);
|
| + Expect.isTrue(method.isOperator);
|
| + Expect.isFalse(method.isGetter);
|
| + Expect.isFalse(method.isSetter);
|
| + Expect.isFalse(method.isAbstract);
|
| + operators[method.simpleName] = method;
|
| + operatorParameters[method.simpleName] = method.parameters;
|
| + returnTypes[method.simpleName] = method.returnType;
|
| + }
|
| + expect(OPERATORS, operators);
|
| + expect(PARAMETERS, operatorParameters);
|
| + expect(RETURN_TYPES, returnTypes);
|
| +}
|
| +
|
| +const String OPERATORS = '{'
|
| +'%: Method(s(%) in s(Foo)), '
|
| +'&: Method(s(&) in s(Foo)), '
|
| +'*: Method(s(*) in s(Foo)), '
|
| +'+: Method(s(+) in s(Foo)), '
|
| +'-: Method(s(-) in s(Foo)), '
|
| +'/: Method(s(/) in s(Foo)), '
|
| +'<: Method(s(<) in s(Foo)), '
|
| +'<<: Method(s(<<) in s(Foo)), '
|
| +'<=: Method(s(<=) in s(Foo)), '
|
| +'==: Method(s(==) in s(Foo)), '
|
| +'>: Method(s(>) in s(Foo)), '
|
| +'>=: Method(s(>=) in s(Foo)), '
|
| +'>>: Method(s(>>) in s(Foo)), '
|
| +'[]: Method(s([]) in s(Foo)), '
|
| +'[]=: Method(s([]=) in s(Foo)), '
|
| +'^: Method(s(^) in s(Foo)), '
|
| +'unary-: Method(s(unary-) in s(Foo)), '
|
| +'|: Method(s(|) in s(Foo)), '
|
| +'~: Method(s(~) in s(Foo)), '
|
| +'~/: Method(s(~/) in s(Foo))'
|
| +'}';
|
| +
|
| +const String DYNAMIC = 'Type(s(dynamic), top-level)';
|
| +
|
| +const String FOO = 'Class(s(Foo) in s(test.operator_test), top-level)';
|
| +
|
| +const String INT = 'Class(s(int) in s(dart.core), top-level)';
|
| +
|
| +const String BOOL = 'Class(s(bool) in s(dart.core), top-level)';
|
| +
|
| +const String PARAMETERS = '{'
|
| +'%: [Parameter(s(a) in s(%), type = $FOO)], '
|
| +'&: [Parameter(s(a) in s(&), type = $FOO)], '
|
| +'*: [Parameter(s(a) in s(*), type = $FOO)], '
|
| +'+: [Parameter(s(a) in s(+), type = $FOO)], '
|
| +'-: [Parameter(s(a) in s(-), type = $FOO)], '
|
| +'/: [Parameter(s(a) in s(/), type = $FOO)], '
|
| +'<: [Parameter(s(a) in s(<), type = $FOO)], '
|
| +'<<: [Parameter(s(a) in s(<<), type = $FOO)], '
|
| +'<=: [Parameter(s(a) in s(<=), type = $FOO)], '
|
| +'==: [Parameter(s(a) in s(==), type = $DYNAMIC)], '
|
| +'>: [Parameter(s(a) in s(>), type = $FOO)], '
|
| +'>=: [Parameter(s(a) in s(>=), type = $FOO)], '
|
| +'>>: [Parameter(s(a) in s(>>), type = $FOO)], '
|
| +'[]: [Parameter(s(a) in s([]), type = $INT)], '
|
| +'[]=: [Parameter(s(a) in s([]=), type = $INT), '
|
| + 'Parameter(s(b) in s([]=), type = $FOO)], '
|
| +'^: [Parameter(s(a) in s(^), type = $FOO)], '
|
| +'unary-: [], '
|
| +'|: [Parameter(s(a) in s(|), type = $FOO)], '
|
| +'~: [], '
|
| +'~/: [Parameter(s(a) in s(~/), type = $FOO)]'
|
| +'}';
|
| +
|
| +const String RETURN_TYPES = '{'
|
| +'%: $FOO, '
|
| +'&: $FOO, '
|
| +'*: $FOO, '
|
| +'+: $FOO, '
|
| +'-: $FOO, '
|
| +'/: $FOO, '
|
| +'<: $FOO, '
|
| +'<<: $FOO, '
|
| +'<=: $FOO, '
|
| +'==: $BOOL, '
|
| +'>: $FOO, '
|
| +'>=: $FOO, '
|
| +'>>: $FOO, '
|
| +'[]: $FOO, '
|
| +'[]=: $DYNAMIC, '
|
| +'^: $FOO, '
|
| +'unary-: $FOO, '
|
| +'|: $FOO, '
|
| +'~: $FOO, '
|
| +'~/: $FOO'
|
| +'}';
|
|
|