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 /// Tests wrapper utilities. | 5 /// Tests wrapper utilities. |
6 | 6 |
7 import "dart:collection"; | 7 import "dart:collection"; |
8 import "package:collection/collection.dart"; | 8 import "package:collection/collection.dart"; |
9 import "package:unittest/unittest.dart"; | 9 import "package:unittest/unittest.dart"; |
10 | 10 |
(...skipping 19 matching lines...) Expand all Loading... |
30 abstract class Expector { | 30 abstract class Expector { |
31 getWrappedObject(action(Invocation i)); | 31 getWrappedObject(action(Invocation i)); |
32 // Hack to test assignment ([]=) because it doesn't return the result | 32 // Hack to test assignment ([]=) because it doesn't return the result |
33 // of the member call. Instead use (expect..[4]=5).equal[4]=5 where | 33 // of the member call. Instead use (expect..[4]=5).equal[4]=5 where |
34 // you would normally use expect[4].equals[4] for non-assignments. | 34 // you would normally use expect[4].equals[4] for non-assignments. |
35 var equals; | 35 var equals; |
36 | 36 |
37 noSuchMethod(Invocation m) => new _Equals(equals = getWrappedObject((m2) { | 37 noSuchMethod(Invocation m) => new _Equals(equals = getWrappedObject((m2) { |
38 testInvocations(m, m2); | 38 testInvocations(m, m2); |
39 })); | 39 })); |
| 40 |
| 41 toString() => new _Equals(equals = getWrappedObject((m2) { |
| 42 testInvocations(TO_STRING_INVOCATION, m2); |
| 43 })); |
40 } | 44 } |
41 | 45 |
42 // An object with a field called "equals", only introduced into the | 46 // An object with a field called "equals", only introduced into the |
43 // flow to allow writing expect.xxx.equals.xxx. | 47 // flow to allow writing expect.xxx.equals.xxx. |
44 class _Equals { | 48 class _Equals { |
45 final equals; | 49 final equals; |
46 _Equals(this.equals); | 50 _Equals(this.equals); |
47 } | 51 } |
48 | 52 |
| 53 class SyntheticInvocation implements Invocation { |
| 54 static const int METHOD = 0x00; |
| 55 static const int GETTER = 0x01; |
| 56 static const int SETTER = 0x02; |
| 57 final Symbol memberName; |
| 58 final List positionalArguments; |
| 59 final Map namedArguments; |
| 60 final int _type; |
| 61 const SyntheticInvocation(this.memberName, |
| 62 this.positionalArguments, |
| 63 this.namedArguments, |
| 64 this._type); |
| 65 bool get isMethod => _type == METHOD; |
| 66 |
| 67 bool get isGetter => _type == GETTER; |
| 68 |
| 69 bool get isSetter => _type == SETTER; |
| 70 |
| 71 bool get isAccessor => isGetter || isSetter; |
| 72 } |
| 73 |
49 // Parameterization of noSuchMethod. | 74 // Parameterization of noSuchMethod. |
50 class NSM { | 75 class NSM { |
51 Function _action; | 76 Function _action; |
52 NSM(this._action); | 77 NSM(this._action); |
53 noSuchMethod(Invocation i) => _action(i); | 78 noSuchMethod(Invocation i) => _action(i); |
54 } | 79 } |
55 | 80 |
| 81 const TO_STRING_INVOCATION = const SyntheticInvocation( |
| 82 #toString, const[], const{}, SyntheticInvocation.METHOD); |
| 83 |
56 // LikeNSM, but has types Iterable, Set and List to allow it as | 84 // LikeNSM, but has types Iterable, Set and List to allow it as |
57 // argument to DelegatingIterable/Set/List. | 85 // argument to DelegatingIterable/Set/List. |
58 class IterableNSM extends NSM implements Iterable, Set, List, Queue { | 86 class IterableNSM extends NSM implements Iterable, Set, List, Queue { |
59 IterableNSM(action(Invocation i)) : super(action); | 87 IterableNSM(action(Invocation i)) : super(action); |
60 noSuchMethod(Invocation i) => super.noSuchMethod(i); // Silence warnings | 88 noSuchMethod(Invocation i) => super.noSuchMethod(i); // Silence warnings |
| 89 toString() => super.noSuchMethod(TO_STRING_INVOCATION); |
61 } | 90 } |
62 | 91 |
63 // Expector that wraps in DelegatingIterable. | 92 // Expector that wraps in DelegatingIterable. |
64 class IterableExpector extends Expector { | 93 class IterableExpector extends Expector { |
65 getWrappedObject(void action(Invocation i)) { | 94 getWrappedObject(void action(Invocation i)) { |
66 return new DelegatingIterable(new IterableNSM(action)); | 95 return new DelegatingIterable(new IterableNSM(action)); |
67 } | 96 } |
68 } | 97 } |
69 | 98 |
70 // Expector that wraps in DelegatingList. | 99 // Expector that wraps in DelegatingList. |
(...skipping 14 matching lines...) Expand all Loading... |
85 class QueueExpector extends Expector { | 114 class QueueExpector extends Expector { |
86 getWrappedObject(void action(Invocation i)) { | 115 getWrappedObject(void action(Invocation i)) { |
87 return new DelegatingQueue(new IterableNSM(action)); | 116 return new DelegatingQueue(new IterableNSM(action)); |
88 } | 117 } |
89 } | 118 } |
90 | 119 |
91 // Like NSM but implements Map to allow as argument for DelegatingMap. | 120 // Like NSM but implements Map to allow as argument for DelegatingMap. |
92 class MapNSM extends NSM implements Map { | 121 class MapNSM extends NSM implements Map { |
93 MapNSM(action(Invocation i)) : super(action); | 122 MapNSM(action(Invocation i)) : super(action); |
94 noSuchMethod(Invocation i) => super.noSuchMethod(i); | 123 noSuchMethod(Invocation i) => super.noSuchMethod(i); |
| 124 toString() => super.noSuchMethod(TO_STRING_INVOCATION); |
95 } | 125 } |
96 | 126 |
97 // Expector that wraps in DelegatingMap. | 127 // Expector that wraps in DelegatingMap. |
98 class MapExpector extends Expector { | 128 class MapExpector extends Expector { |
99 getWrappedObject(void action(Invocation i)) { | 129 getWrappedObject(void action(Invocation i)) { |
100 return new DelegatingMap(new MapNSM(action)); | 130 return new DelegatingMap(new MapNSM(action)); |
101 } | 131 } |
102 } | 132 } |
103 | 133 |
104 // Utility values to use as arguments in calls. | 134 // Utility values to use as arguments in calls. |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 expect.single.equals.single; | 169 expect.single.equals.single; |
140 expect.singleWhere(func1).equals.singleWhere(func1); | 170 expect.singleWhere(func1).equals.singleWhere(func1); |
141 expect.skip(5).equals.skip(5); | 171 expect.skip(5).equals.skip(5); |
142 expect.skipWhile(func1).equals.skipWhile(func1); | 172 expect.skipWhile(func1).equals.skipWhile(func1); |
143 expect.take(5).equals.take(5); | 173 expect.take(5).equals.take(5); |
144 expect.takeWhile(func1).equals.takeWhile(func1); | 174 expect.takeWhile(func1).equals.takeWhile(func1); |
145 expect.toList(growable: true).equals.toList(); | 175 expect.toList(growable: true).equals.toList(); |
146 expect.toList(growable: true).equals.toList(growable: true); | 176 expect.toList(growable: true).equals.toList(growable: true); |
147 expect.toList(growable: false).equals.toList(growable: false); | 177 expect.toList(growable: false).equals.toList(growable: false); |
148 expect.toSet().equals.toSet(); | 178 expect.toSet().equals.toSet(); |
| 179 expect.toString().equals.toString(); |
149 expect.where(func1).equals.where(func1); | 180 expect.where(func1).equals.where(func1); |
150 } | 181 } |
151 | 182 |
152 void testList(var expect) { | 183 void testList(var expect) { |
153 testIterable(expect); | 184 testIterable(expect); |
154 | 185 |
155 expect[4].equals[4]; | 186 expect[4].equals[4]; |
156 (expect..[4] = 5).equals[4] = 5; | 187 (expect..[4] = 5).equals[4] = 5; |
157 | 188 |
158 expect.add(val).equals.add(val); | 189 expect.add(val).equals.add(val); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 expect.containsKey(val).equals.containsKey(val); | 255 expect.containsKey(val).equals.containsKey(val); |
225 expect.containsValue(val).equals.containsValue(val); | 256 expect.containsValue(val).equals.containsValue(val); |
226 expect.forEach(func2).equals.forEach(func2); | 257 expect.forEach(func2).equals.forEach(func2); |
227 expect.isEmpty.equals.isEmpty; | 258 expect.isEmpty.equals.isEmpty; |
228 expect.isNotEmpty.equals.isNotEmpty; | 259 expect.isNotEmpty.equals.isNotEmpty; |
229 expect.keys.equals.keys; | 260 expect.keys.equals.keys; |
230 expect.length.equals.length; | 261 expect.length.equals.length; |
231 expect.putIfAbsent(val, func0).equals.putIfAbsent(val, func0); | 262 expect.putIfAbsent(val, func0).equals.putIfAbsent(val, func0); |
232 expect.remove(val).equals.remove(val); | 263 expect.remove(val).equals.remove(val); |
233 expect.values.equals.values; | 264 expect.values.equals.values; |
| 265 expect.toString().equals.toString(); |
234 } | 266 } |
235 | 267 |
236 test("Iterable", () { | 268 test("Iterable", () { |
237 testIterable(new IterableExpector()); | 269 testIterable(new IterableExpector()); |
238 }); | 270 }); |
239 | 271 |
240 test("List", () { | 272 test("List", () { |
241 testList(new ListExpector()); | 273 testList(new ListExpector()); |
242 }); | 274 }); |
243 | 275 |
244 test("Set", () { | 276 test("Set", () { |
245 testSet(new SetExpector()); | 277 testSet(new SetExpector()); |
246 }); | 278 }); |
247 | 279 |
248 test("Queue", () { | 280 test("Queue", () { |
249 testQueue(new QueueExpector()); | 281 testQueue(new QueueExpector()); |
250 }); | 282 }); |
251 | 283 |
252 test("Map", () { | 284 test("Map", () { |
253 testMap(new MapExpector()); | 285 testMap(new MapExpector()); |
254 }); | 286 }); |
255 } | 287 } |
OLD | NEW |