| OLD | NEW | 
|---|
| 1 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file | 
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a | 
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. | 
| 4 | 4 | 
| 5 /// Test operators. | 5 /// Test operators. | 
| 6 library test.operator_test; | 6 library test.operator_test; | 
| 7 | 7 | 
| 8 @MirrorsUsed(targets: "test.operator_test") | 8 @MirrorsUsed(targets: "test.operator_test") | 
| 9 import 'dart:mirrors'; | 9 import 'dart:mirrors'; | 
| 10 | 10 | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
| 35   Foo operator -(Foo a) {} | 35   Foo operator -(Foo a) {} | 
| 36 | 36 | 
| 37   // TODO(ahe): use void when dart2js reifies that type. | 37   // TODO(ahe): use void when dart2js reifies that type. | 
| 38   operator []=(int a, Foo b) {} | 38   operator []=(int a, Foo b) {} | 
| 39 } | 39 } | 
| 40 | 40 | 
| 41 void main() { | 41 void main() { | 
| 42   ClassMirror cls = reflectClass(Foo); | 42   ClassMirror cls = reflectClass(Foo); | 
| 43   var operators = new Map<Symbol, MethodMirror>(); | 43   var operators = new Map<Symbol, MethodMirror>(); | 
| 44   var operatorParameters = new Map<Symbol, List>(); | 44   var operatorParameters = new Map<Symbol, List>(); | 
| 45   var returnTypes =  new Map<Symbol, Mirror>(); | 45   var returnTypes = new Map<Symbol, Mirror>(); | 
| 46   for (MethodMirror method in cls.declarations.values.where( | 46   for (MethodMirror method in cls.declarations.values | 
| 47       (d) => d is MethodMirror && !d.isConstructor)) { | 47       .where((d) => d is MethodMirror && !d.isConstructor)) { | 
| 48     Expect.isTrue(method.isRegularMethod); | 48     Expect.isTrue(method.isRegularMethod); | 
| 49     Expect.isTrue(method.isOperator); | 49     Expect.isTrue(method.isOperator); | 
| 50     Expect.isFalse(method.isGetter); | 50     Expect.isFalse(method.isGetter); | 
| 51     Expect.isFalse(method.isSetter); | 51     Expect.isFalse(method.isSetter); | 
| 52     Expect.isFalse(method.isAbstract); | 52     Expect.isFalse(method.isAbstract); | 
| 53     operators[method.simpleName] = method; | 53     operators[method.simpleName] = method; | 
| 54     operatorParameters[method.simpleName] = method.parameters; | 54     operatorParameters[method.simpleName] = method.parameters; | 
| 55     returnTypes[method.simpleName] = method.returnType; | 55     returnTypes[method.simpleName] = method.returnType; | 
| 56   } | 56   } | 
| 57   expect(OPERATORS, operators); | 57   expect(OPERATORS, operators); | 
| 58   expect(PARAMETERS, operatorParameters); | 58   expect(PARAMETERS, operatorParameters); | 
| 59   expect(RETURN_TYPES, returnTypes); | 59   expect(RETURN_TYPES, returnTypes); | 
| 60 } | 60 } | 
| 61 | 61 | 
| 62 const String OPERATORS = '{' | 62 const String OPERATORS = '{' | 
| 63 '%: Method(s(%) in s(Foo)), ' | 63     '%: Method(s(%) in s(Foo)), ' | 
| 64 '&: Method(s(&) in s(Foo)), ' | 64     '&: Method(s(&) in s(Foo)), ' | 
| 65 '*: Method(s(*) in s(Foo)), ' | 65     '*: Method(s(*) in s(Foo)), ' | 
| 66 '+: Method(s(+) in s(Foo)), ' | 66     '+: Method(s(+) in s(Foo)), ' | 
| 67 '-: Method(s(-) in s(Foo)), ' | 67     '-: Method(s(-) in s(Foo)), ' | 
| 68 '/: Method(s(/) in s(Foo)), ' | 68     '/: Method(s(/) in s(Foo)), ' | 
| 69 '<: Method(s(<) in s(Foo)), ' | 69     '<: Method(s(<) in s(Foo)), ' | 
| 70 '<<: Method(s(<<) in s(Foo)), ' | 70     '<<: Method(s(<<) in s(Foo)), ' | 
| 71 '<=: Method(s(<=) in s(Foo)), ' | 71     '<=: Method(s(<=) in s(Foo)), ' | 
| 72 '==: Method(s(==) in s(Foo)), ' | 72     '==: Method(s(==) in s(Foo)), ' | 
| 73 '>: Method(s(>) in s(Foo)), ' | 73     '>: Method(s(>) in s(Foo)), ' | 
| 74 '>=: Method(s(>=) in s(Foo)), ' | 74     '>=: Method(s(>=) in s(Foo)), ' | 
| 75 '>>: Method(s(>>) in s(Foo)), ' | 75     '>>: Method(s(>>) in s(Foo)), ' | 
| 76 '[]: Method(s([]) in s(Foo)), ' | 76     '[]: Method(s([]) in s(Foo)), ' | 
| 77 '[]=: Method(s([]=) in s(Foo)), ' | 77     '[]=: Method(s([]=) in s(Foo)), ' | 
| 78 '^: Method(s(^) in s(Foo)), ' | 78     '^: Method(s(^) in s(Foo)), ' | 
| 79 'unary-: Method(s(unary-) in s(Foo)), ' | 79     'unary-: Method(s(unary-) in s(Foo)), ' | 
| 80 '|: Method(s(|) in s(Foo)), ' | 80     '|: Method(s(|) in s(Foo)), ' | 
| 81 '~: Method(s(~) in s(Foo)), ' | 81     '~: Method(s(~) in s(Foo)), ' | 
| 82 '~/: Method(s(~/) in s(Foo))' | 82     '~/: Method(s(~/) in s(Foo))' | 
| 83 '}'; | 83     '}'; | 
| 84 | 84 | 
| 85 const String DYNAMIC = 'Type(s(dynamic), top-level)'; | 85 const String DYNAMIC = 'Type(s(dynamic), top-level)'; | 
| 86 | 86 | 
| 87 const String FOO = 'Class(s(Foo) in s(test.operator_test), top-level)'; | 87 const String FOO = 'Class(s(Foo) in s(test.operator_test), top-level)'; | 
| 88 | 88 | 
| 89 const String INT = 'Class(s(int) in s(dart.core), top-level)'; | 89 const String INT = 'Class(s(int) in s(dart.core), top-level)'; | 
| 90 | 90 | 
| 91 const String BOOL = 'Class(s(bool) in s(dart.core), top-level)'; | 91 const String BOOL = 'Class(s(bool) in s(dart.core), top-level)'; | 
| 92 | 92 | 
| 93 const String PARAMETERS = '{' | 93 const String PARAMETERS = '{' | 
| 94 '%: [Parameter(s(a) in s(%), type = $FOO)], ' | 94     '%: [Parameter(s(a) in s(%), type = $FOO)], ' | 
| 95 '&: [Parameter(s(a) in s(&), type = $FOO)], ' | 95     '&: [Parameter(s(a) in s(&), type = $FOO)], ' | 
| 96 '*: [Parameter(s(a) in s(*), type = $FOO)], ' | 96     '*: [Parameter(s(a) in s(*), type = $FOO)], ' | 
| 97 '+: [Parameter(s(a) in s(+), type = $FOO)], ' | 97     '+: [Parameter(s(a) in s(+), type = $FOO)], ' | 
| 98 '-: [Parameter(s(a) in s(-), type = $FOO)], ' | 98     '-: [Parameter(s(a) in s(-), type = $FOO)], ' | 
| 99 '/: [Parameter(s(a) in s(/), type = $FOO)], ' | 99     '/: [Parameter(s(a) in s(/), type = $FOO)], ' | 
| 100 '<: [Parameter(s(a) in s(<), type = $FOO)], ' | 100     '<: [Parameter(s(a) in s(<), type = $FOO)], ' | 
| 101 '<<: [Parameter(s(a) in s(<<), type = $FOO)], ' | 101     '<<: [Parameter(s(a) in s(<<), type = $FOO)], ' | 
| 102 '<=: [Parameter(s(a) in s(<=), type = $FOO)], ' | 102     '<=: [Parameter(s(a) in s(<=), type = $FOO)], ' | 
| 103 '==: [Parameter(s(a) in s(==), type = $DYNAMIC)], ' | 103     '==: [Parameter(s(a) in s(==), type = $DYNAMIC)], ' | 
| 104 '>: [Parameter(s(a) in s(>), type = $FOO)], ' | 104     '>: [Parameter(s(a) in s(>), type = $FOO)], ' | 
| 105 '>=: [Parameter(s(a) in s(>=), type = $FOO)], ' | 105     '>=: [Parameter(s(a) in s(>=), type = $FOO)], ' | 
| 106 '>>: [Parameter(s(a) in s(>>), type = $FOO)], ' | 106     '>>: [Parameter(s(a) in s(>>), type = $FOO)], ' | 
| 107 '[]: [Parameter(s(a) in s([]), type = $INT)], ' | 107     '[]: [Parameter(s(a) in s([]), type = $INT)], ' | 
| 108 '[]=: [Parameter(s(a) in s([]=), type = $INT), ' | 108     '[]=: [Parameter(s(a) in s([]=), type = $INT), ' | 
| 109       'Parameter(s(b) in s([]=), type = $FOO)], ' | 109     'Parameter(s(b) in s([]=), type = $FOO)], ' | 
| 110 '^: [Parameter(s(a) in s(^), type = $FOO)], ' | 110     '^: [Parameter(s(a) in s(^), type = $FOO)], ' | 
| 111 'unary-: [], ' | 111     'unary-: [], ' | 
| 112 '|: [Parameter(s(a) in s(|), type = $FOO)], ' | 112     '|: [Parameter(s(a) in s(|), type = $FOO)], ' | 
| 113 '~: [], ' | 113     '~: [], ' | 
| 114 '~/: [Parameter(s(a) in s(~/), type = $FOO)]' | 114     '~/: [Parameter(s(a) in s(~/), type = $FOO)]' | 
| 115 '}'; | 115     '}'; | 
| 116 | 116 | 
| 117 const String RETURN_TYPES = '{' | 117 const String RETURN_TYPES = '{' | 
| 118 '%: $FOO, ' | 118     '%: $FOO, ' | 
| 119 '&: $FOO, ' | 119     '&: $FOO, ' | 
| 120 '*: $FOO, ' | 120     '*: $FOO, ' | 
| 121 '+: $FOO, ' | 121     '+: $FOO, ' | 
| 122 '-: $FOO, ' | 122     '-: $FOO, ' | 
| 123 '/: $FOO, ' | 123     '/: $FOO, ' | 
| 124 '<: $FOO, ' | 124     '<: $FOO, ' | 
| 125 '<<: $FOO, ' | 125     '<<: $FOO, ' | 
| 126 '<=: $FOO, ' | 126     '<=: $FOO, ' | 
| 127 '==: $BOOL, ' | 127     '==: $BOOL, ' | 
| 128 '>: $FOO, ' | 128     '>: $FOO, ' | 
| 129 '>=: $FOO, ' | 129     '>=: $FOO, ' | 
| 130 '>>: $FOO, ' | 130     '>>: $FOO, ' | 
| 131 '[]: $FOO, ' | 131     '[]: $FOO, ' | 
| 132 '[]=: $DYNAMIC, ' | 132     '[]=: $DYNAMIC, ' | 
| 133 '^: $FOO, ' | 133     '^: $FOO, ' | 
| 134 'unary-: $FOO, ' | 134     'unary-: $FOO, ' | 
| 135 '|: $FOO, ' | 135     '|: $FOO, ' | 
| 136 '~: $FOO, ' | 136     '~: $FOO, ' | 
| 137 '~/: $FOO' | 137     '~/: $FOO' | 
| 138 '}'; | 138     '}'; | 
| OLD | NEW | 
|---|