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

Side by Side Diff: packages/collection/test/wrapper_test.dart

Issue 2989763002: Update charted to 0.4.8 and roll (Closed)
Patch Set: Removed Cutch from list of reviewers Created 3 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 unified diff | Download patch
« no previous file with comments | « packages/collection/test/utils.dart ('k') | packages/csslib/.analysis_options » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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:test/test.dart"; 9 import "package:test/test.dart";
10 10
11 // Test that any member access/call on the wrapper object is equal to 11 // Test that any member access/call on the wrapper object is equal to
12 // an expected access on the wrapped object. 12 // an expected access on the wrapped object.
13 // This is implemented by capturing accesses using noSuchMethod and comparing 13 // This is implemented by capturing accesses using noSuchMethod and comparing
14 // them to expected accesses captured previously. 14 // them to expected accesses captured previously.
15 15
16 // Compare two Invocations for having equal type and arguments. 16 // Compare two Invocations for having equal type and arguments.
17 void testInvocations(Invocation i1, Invocation i2) { 17 void testInvocations(Invocation i1, Invocation i2) {
18 String name = "${i1.memberName}"; 18 String name = "${i1.memberName}";
19 expect(i1.isGetter, equals(i2.isGetter), reason: name); 19 expect(i1.isGetter, equals(i2.isGetter), reason: name);
20 expect(i1.isSetter, equals(i2.isSetter), reason: name); 20 expect(i1.isSetter, equals(i2.isSetter), reason: name);
21 expect(i1.memberName, equals(i2.memberName), reason: name); 21 expect(i1.memberName, equals(i2.memberName), reason: name);
22 expect(i1.positionalArguments, equals(i2.positionalArguments), reason: name); 22 expect(i1.positionalArguments, equals(i2.positionalArguments), reason: name);
23 expect(i1.namedArguments, equals(i2.namedArguments), reason: name); 23 expect(i1.namedArguments, equals(i2.namedArguments), reason: name);
24 } 24 }
25 25
26 /** 26 /// Utility class to record a member access and a member access on a wrapped
27 * Utility class to record a member access and a member access on a wrapped 27 /// object, and compare them for equality.
28 * object, and compare them for equality.
29 */
30 abstract class Expector { 28 abstract class Expector {
31 getWrappedObject(action(Invocation i)); 29 getWrappedObject(action(Invocation i));
32 // Hack to test assignment ([]=) because it doesn't return the result 30 // 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 31 // 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. 32 // you would normally use expect[4].equals[4] for non-assignments.
35 var equals; 33 var equals;
36 34
37 noSuchMethod(Invocation m) => new _Equals(equals = getWrappedObject((m2) { 35 noSuchMethod(Invocation m) => new _Equals(equals = getWrappedObject((m2) {
38 testInvocations(m, m2); 36 testInvocations(m, m2);
39 })); 37 }));
40 38
41 toString() => new _Equals(equals = getWrappedObject((m2) { 39 // dartanalyzer complains if this method is named `toString()`, since, if it
42 testInvocations(TO_STRING_INVOCATION, m2); 40 // truly overrides Object's `toString()`, it should return a String.
43 })); 41 asString() => new _Equals(equals = getWrappedObject((m2) {
42 testInvocations(TO_STRING_INVOCATION, m2);
43 }));
44 } 44 }
45 45
46 // An object with a field called "equals", only introduced into the 46 // An object with a field called "equals", only introduced into the
47 // flow to allow writing expect.xxx.equals.xxx. 47 // flow to allow writing expect.xxx.equals.xxx.
48 class _Equals { 48 class _Equals {
49 final equals; 49 final equals;
50 _Equals(this.equals); 50 _Equals(this.equals);
51 } 51 }
52 52
53 class SyntheticInvocation implements Invocation { 53 class SyntheticInvocation implements Invocation {
54 static const int METHOD = 0x00; 54 static const int METHOD = 0x00;
55 static const int GETTER = 0x01; 55 static const int GETTER = 0x01;
56 static const int SETTER = 0x02; 56 static const int SETTER = 0x02;
57 final Symbol memberName; 57 final Symbol memberName;
58 final List positionalArguments; 58 final List positionalArguments;
59 final Map namedArguments; 59 final Map<Symbol, dynamic> namedArguments;
60 final int _type; 60 final int _type;
61 const SyntheticInvocation(this.memberName, 61 const SyntheticInvocation(this.memberName, this.positionalArguments,
62 this.positionalArguments, 62 this.namedArguments, this._type);
63 this.namedArguments, 63
64 this._type); 64 List<Type> get typeArguments => const <Type>[];
65
65 bool get isMethod => _type == METHOD; 66 bool get isMethod => _type == METHOD;
66 67
67 bool get isGetter => _type == GETTER; 68 bool get isGetter => _type == GETTER;
68 69
69 bool get isSetter => _type == SETTER; 70 bool get isSetter => _type == SETTER;
70 71
71 bool get isAccessor => isGetter || isSetter; 72 bool get isAccessor => isGetter || isSetter;
72 } 73 }
73 74
74 // Parameterization of noSuchMethod. 75 // Parameterization of noSuchMethod.
75 class NSM { 76 class NSM {
76 Function _action; 77 Function _action;
77 NSM(this._action); 78 NSM(this._action);
78 noSuchMethod(Invocation i) => _action(i); 79 noSuchMethod(Invocation i) => _action(i);
79 } 80 }
80 81
81 const TO_STRING_INVOCATION = const SyntheticInvocation( 82 const TO_STRING_INVOCATION = const SyntheticInvocation(
82 #toString, const[], const{}, SyntheticInvocation.METHOD); 83 #toString, const [], const {}, SyntheticInvocation.METHOD);
83 84
84 // LikeNSM, but has types Iterable, Set and List to allow it as 85 // LikeNSM, but has types Iterable, Set and List to allow it as
85 // argument to DelegatingIterable/Set/List. 86 // argument to DelegatingIterable/Set/List.
86 class IterableNSM extends NSM implements Iterable, Set, List, Queue { 87 class IterableNSM extends NSM implements Iterable, Set, List, Queue {
87 IterableNSM(action(Invocation i)) : super(action); 88 IterableNSM(action(Invocation i)) : super(action);
88 noSuchMethod(Invocation i) => super.noSuchMethod(i); // Silence warnings
89 toString() => super.noSuchMethod(TO_STRING_INVOCATION); 89 toString() => super.noSuchMethod(TO_STRING_INVOCATION);
90 } 90 }
91 91
92 // Expector that wraps in DelegatingIterable. 92 // Expector that wraps in DelegatingIterable.
93 class IterableExpector extends Expector { 93 class IterableExpector extends Expector {
94 getWrappedObject(void action(Invocation i)) { 94 getWrappedObject(void action(Invocation i)) {
95 return new DelegatingIterable(new IterableNSM(action)); 95 return new DelegatingIterable(new IterableNSM(action));
96 } 96 }
97 } 97 }
98 98
(...skipping 14 matching lines...) Expand all
113 // Expector that wraps in DelegatingSet. 113 // Expector that wraps in DelegatingSet.
114 class QueueExpector extends Expector { 114 class QueueExpector extends Expector {
115 getWrappedObject(void action(Invocation i)) { 115 getWrappedObject(void action(Invocation i)) {
116 return new DelegatingQueue(new IterableNSM(action)); 116 return new DelegatingQueue(new IterableNSM(action));
117 } 117 }
118 } 118 }
119 119
120 // Like NSM but implements Map to allow as argument for DelegatingMap. 120 // Like NSM but implements Map to allow as argument for DelegatingMap.
121 class MapNSM extends NSM implements Map { 121 class MapNSM extends NSM implements Map {
122 MapNSM(action(Invocation i)) : super(action); 122 MapNSM(action(Invocation i)) : super(action);
123 noSuchMethod(Invocation i) => super.noSuchMethod(i);
124 toString() => super.noSuchMethod(TO_STRING_INVOCATION); 123 toString() => super.noSuchMethod(TO_STRING_INVOCATION);
125 } 124 }
126 125
127 // Expector that wraps in DelegatingMap. 126 // Expector that wraps in DelegatingMap.
128 class MapExpector extends Expector { 127 class MapExpector extends Expector {
129 getWrappedObject(void action(Invocation i)) { 128 getWrappedObject(void action(Invocation i)) {
130 return new DelegatingMap(new MapNSM(action)); 129 return new DelegatingMap(new MapNSM(action));
131 } 130 }
132 } 131 }
133 132
134 // Utility values to use as arguments in calls. 133 // Utility values to use as arguments in calls.
135 func0() {} 134 func0() {}
136 func1(x) {} 135 func1(x) {}
137 func2(x, y) {} 136 func2(x, y) {}
138 var val = new Object(); 137 var val = new Object();
139 138
140 void main() { 139 void main() {
141 testIterable(var expect) { 140 testIterable(var expect) {
142 expect.any(func1).equals.any(func1); 141 expect.any(func1).equals.any(func1);
143 expect.contains(val).equals.contains(val); 142 expect.contains(val).equals.contains(val);
144 expect.elementAt(0).equals.elementAt(0); 143 expect.elementAt(0).equals.elementAt(0);
145 expect.every(func1).equals.every(func1); 144 expect.every(func1).equals.every(func1);
146 expect.expand(func1).equals.expand(func1); 145 expect.expand(func1).equals.expand(func1);
147 expect.first.equals.first; 146 expect.first.equals.first;
148 // Default values of the Iterable interface will be added in the 147 // Default values of the Iterable interface will be added in the
149 // second call to firstWhere, so we must record them in our 148 // second call to firstWhere, so we must record them in our
150 // expectation (which doesn't have the interface implemented or 149 // expectation (which doesn't have the interface implemented or
151 // its default values). 150 // its default values).
152 expect.firstWhere(func1, orElse: null).equals.firstWhere(func1); 151 expect.firstWhere(func1, orElse: null).equals.firstWhere(func1);
153 expect.firstWhere(func1, orElse: func0).equals. 152 expect
154 firstWhere(func1, orElse: func0); 153 .firstWhere(func1, orElse: func0)
154 .equals
155 .firstWhere(func1, orElse: func0);
155 expect.fold(null, func2).equals.fold(null, func2); 156 expect.fold(null, func2).equals.fold(null, func2);
156 expect.forEach(func1).equals.forEach(func1); 157 expect.forEach(func1).equals.forEach(func1);
157 expect.isEmpty.equals.isEmpty; 158 expect.isEmpty.equals.isEmpty;
158 expect.isNotEmpty.equals.isNotEmpty; 159 expect.isNotEmpty.equals.isNotEmpty;
159 expect.iterator.equals.iterator; 160 expect.iterator.equals.iterator;
160 expect.join('').equals.join(); 161 expect.join('').equals.join();
161 expect.join("X").equals.join("X"); 162 expect.join("X").equals.join("X");
162 expect.last.equals.last; 163 expect.last.equals.last;
163 expect.lastWhere(func1, orElse: null).equals.lastWhere(func1); 164 expect.lastWhere(func1, orElse: null).equals.lastWhere(func1);
164 expect.lastWhere(func1, orElse: func0).equals. 165 expect
165 lastWhere(func1, orElse: func0); 166 .lastWhere(func1, orElse: func0)
167 .equals
168 .lastWhere(func1, orElse: func0);
166 expect.length.equals.length; 169 expect.length.equals.length;
167 expect.map(func1).equals.map(func1); 170 expect.map(func1).equals.map(func1);
168 expect.reduce(func2).equals.reduce(func2); 171 expect.reduce(func2).equals.reduce(func2);
169 expect.single.equals.single; 172 expect.single.equals.single;
170 expect.singleWhere(func1).equals.singleWhere(func1); 173 expect.singleWhere(func1).equals.singleWhere(func1);
171 expect.skip(5).equals.skip(5); 174 expect.skip(5).equals.skip(5);
172 expect.skipWhile(func1).equals.skipWhile(func1); 175 expect.skipWhile(func1).equals.skipWhile(func1);
173 expect.take(5).equals.take(5); 176 expect.take(5).equals.take(5);
174 expect.takeWhile(func1).equals.takeWhile(func1); 177 expect.takeWhile(func1).equals.takeWhile(func1);
175 expect.toList(growable: true).equals.toList(); 178 expect.toList(growable: true).equals.toList();
176 expect.toList(growable: true).equals.toList(growable: true); 179 expect.toList(growable: true).equals.toList(growable: true);
177 expect.toList(growable: false).equals.toList(growable: false); 180 expect.toList(growable: false).equals.toList(growable: false);
178 expect.toSet().equals.toSet(); 181 expect.toSet().equals.toSet();
179 expect.toString().equals.toString(); 182 expect.asString().equals.toString();
180 expect.where(func1).equals.where(func1); 183 expect.where(func1).equals.where(func1);
181 } 184 }
182 185
183 void testList(var expect) { 186 void testList(var expect) {
184 testIterable(expect); 187 testIterable(expect);
185 188
186 expect[4].equals[4]; 189 expect[4].equals[4];
187 (expect..[4] = 5).equals[4] = 5; 190 (expect..[4] = 5).equals[4] = 5;
188 191
189 expect.add(val).equals.add(val); 192 expect.add(val).equals.add(val);
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 expect.containsKey(val).equals.containsKey(val); 258 expect.containsKey(val).equals.containsKey(val);
256 expect.containsValue(val).equals.containsValue(val); 259 expect.containsValue(val).equals.containsValue(val);
257 expect.forEach(func2).equals.forEach(func2); 260 expect.forEach(func2).equals.forEach(func2);
258 expect.isEmpty.equals.isEmpty; 261 expect.isEmpty.equals.isEmpty;
259 expect.isNotEmpty.equals.isNotEmpty; 262 expect.isNotEmpty.equals.isNotEmpty;
260 expect.keys.equals.keys; 263 expect.keys.equals.keys;
261 expect.length.equals.length; 264 expect.length.equals.length;
262 expect.putIfAbsent(val, func0).equals.putIfAbsent(val, func0); 265 expect.putIfAbsent(val, func0).equals.putIfAbsent(val, func0);
263 expect.remove(val).equals.remove(val); 266 expect.remove(val).equals.remove(val);
264 expect.values.equals.values; 267 expect.values.equals.values;
265 expect.toString().equals.toString(); 268 expect.asString().equals.toString();
266 } 269 }
267 270
268 // Runs tests of Set behavior. 271 // Runs tests of Set behavior.
269 // 272 //
270 // [setUpSet] should return a set with two elements: "foo" and "bar". 273 // [setUpSet] should return a set with two elements: "foo" and "bar".
271 void testTwoElementSet(Set<String> setUpSet()) { 274 void testTwoElementSet(Set<String> setUpSet()) {
272 group("with two elements", () { 275 group("with two elements", () {
273 var set; 276 var set;
274 setUp(() => set = setUpSet()); 277 setUp(() => set = setUpSet());
275 278
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 test(".join", () { 334 test(".join", () {
332 expect(set.join(", "), equals("foo, bar")); 335 expect(set.join(", "), equals("foo, bar"));
333 }); 336 });
334 337
335 test(".last", () { 338 test(".last", () {
336 expect(set.last, equals("bar")); 339 expect(set.last, equals("bar"));
337 }); 340 });
338 341
339 test(".lastWhere", () { 342 test(".lastWhere", () {
340 expect(set.lastWhere((element) => element is String), equals("bar")); 343 expect(set.lastWhere((element) => element is String), equals("bar"));
341 expect(set.lastWhere((element) => element.startsWith("f")), 344 expect(
342 equals("foo")); 345 set.lastWhere((element) => element.startsWith("f")), equals("foo"));
343 expect(() => set.lastWhere((element) => element is int), 346 expect(
344 throwsStateError); 347 () => set.lastWhere((element) => element is int), throwsStateError);
345 expect(set.lastWhere((element) => element is int, orElse: () => "baz"), 348 expect(set.lastWhere((element) => element is int, orElse: () => "baz"),
346 equals("baz")); 349 equals("baz"));
347 }); 350 });
348 351
349 test(".map", () { 352 test(".map", () {
350 expect(set.map((element) => element.substring(1)), 353 expect(
351 equals(["oo", "ar"])); 354 set.map((element) => element.substring(1)), equals(["oo", "ar"]));
352 }); 355 });
353 356
354 test(".reduce", () { 357 test(".reduce", () {
355 expect(set.reduce((previous, element) => previous + element), 358 expect(set.reduce((previous, element) => previous + element),
356 equals("foobar")); 359 equals("foobar"));
357 }); 360 });
358 361
359 test(".singleWhere", () { 362 test(".singleWhere", () {
360 expect(() => set.singleWhere((element) => element == "baz"), 363 expect(() => set.singleWhere((element) => element == "baz"),
361 throwsStateError); 364 throwsStateError);
362 expect(set.singleWhere((element) => element == "foo"), 365 expect(set.singleWhere((element) => element == "foo"), "foo");
363 "foo");
364 expect(() => set.singleWhere((element) => element is String), 366 expect(() => set.singleWhere((element) => element is String),
365 throwsStateError); 367 throwsStateError);
366 }); 368 });
367 369
368 test(".skip", () { 370 test(".skip", () {
369 expect(set.skip(0), equals(["foo", "bar"])); 371 expect(set.skip(0), equals(["foo", "bar"]));
370 expect(set.skip(1), equals(["bar"])); 372 expect(set.skip(1), equals(["bar"]));
371 expect(set.skip(2), equals([])); 373 expect(set.skip(2), equals([]));
372 }); 374 });
373 375
374 test(".skipWhile", () { 376 test(".skipWhile", () {
375 expect(set.skipWhile((element) => element.startsWith("f")), 377 expect(set.skipWhile((element) => element.startsWith("f")),
376 equals(["bar"])); 378 equals(["bar"]));
377 expect(set.skipWhile((element) => element.startsWith("z")), 379 expect(set.skipWhile((element) => element.startsWith("z")),
378 equals(["foo", "bar"])); 380 equals(["foo", "bar"]));
379 expect(set.skipWhile((element) => element is String), 381 expect(set.skipWhile((element) => element is String), equals([]));
380 equals([]));
381 }); 382 });
382 383
383 test(".take", () { 384 test(".take", () {
384 expect(set.take(0), equals([])); 385 expect(set.take(0), equals([]));
385 expect(set.take(1), equals(["foo"])); 386 expect(set.take(1), equals(["foo"]));
386 expect(set.take(2), equals(["foo", "bar"])); 387 expect(set.take(2), equals(["foo", "bar"]));
387 }); 388 });
388 389
389 test(".takeWhile", () { 390 test(".takeWhile", () {
390 expect(set.takeWhile((element) => element.startsWith("f")), 391 expect(set.takeWhile((element) => element.startsWith("f")),
391 equals(["foo"])); 392 equals(["foo"]));
392 expect(set.takeWhile((element) => element.startsWith("z")), 393 expect(set.takeWhile((element) => element.startsWith("z")), equals([]));
393 equals([]));
394 expect(set.takeWhile((element) => element is String), 394 expect(set.takeWhile((element) => element is String),
395 equals(["foo", "bar"])); 395 equals(["foo", "bar"]));
396 }); 396 });
397 397
398 test(".toList", () { 398 test(".toList", () {
399 expect(set.toList(), equals(["foo", "bar"])); 399 expect(set.toList(), equals(["foo", "bar"]));
400 expect(() => set.toList(growable: false).add("baz"), 400 expect(() => set.toList(growable: false).add("baz"),
401 throwsUnsupportedError); 401 throwsUnsupportedError);
402 expect(set.toList()..add("baz"), equals(["foo", "bar", "baz"])); 402 expect(set.toList()..add("baz"), equals(["foo", "bar", "baz"]));
403 }); 403 });
404 404
405 test(".toSet", () { 405 test(".toSet", () {
406 expect(set.toSet(), equals(new Set.from(["foo", "bar"]))); 406 expect(set.toSet(), equals(new Set.from(["foo", "bar"])));
407 }); 407 });
408 408
409 test(".where", () { 409 test(".where", () {
410 expect(set.where((element) => element.startsWith("f")), 410 expect(
411 equals(["foo"])); 411 set.where((element) => element.startsWith("f")), equals(["foo"]));
412 expect(set.where((element) => element.startsWith("z")), equals([])); 412 expect(set.where((element) => element.startsWith("z")), equals([]));
413 expect(set.where((element) => element is String), 413 expect(
414 equals(["foo", "bar"])); 414 set.where((element) => element is String), equals(["foo", "bar"]));
415 }); 415 });
416 416
417 test(".containsAll", () { 417 test(".containsAll", () {
418 expect(set.containsAll(["foo", "bar"]), isTrue); 418 expect(set.containsAll(["foo", "bar"]), isTrue);
419 expect(set.containsAll(["foo"]), isTrue); 419 expect(set.containsAll(["foo"]), isTrue);
420 expect(set.containsAll(["foo", "bar", "qux"]), isFalse); 420 expect(set.containsAll(["foo", "bar", "qux"]), isFalse);
421 }); 421 });
422 422
423 test(".difference", () { 423 test(".difference", () {
424 expect(set.difference(new Set.from(["foo", "baz"])), 424 expect(set.difference(new Set.from(["foo", "baz"])),
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 expect(() => set.clear(), throwsUnsupportedError); 524 expect(() => set.clear(), throwsUnsupportedError);
525 }); 525 });
526 }); 526 });
527 527
528 group("MapValueSet", () { 528 group("MapValueSet", () {
529 var map; 529 var map;
530 var set; 530 var set;
531 531
532 setUp(() { 532 setUp(() {
533 map = new Map<String, String>(); 533 map = new Map<String, String>();
534 set = new MapValueSet<String, String>(map, 534 set = new MapValueSet<String, String>(
535 (string) => string.substring(0, 1)); 535 map, (string) => string.substring(0, 1));
536 }); 536 });
537 537
538 testTwoElementSet(() { 538 testTwoElementSet(() {
539 map["f"] = "foo"; 539 map["f"] = "foo";
540 map["b"] = "bar"; 540 map["b"] = "bar";
541 return set; 541 return set;
542 }); 542 });
543 543
544 test(".single", () { 544 test(".single", () {
545 expect(() => set.single, throwsStateError); 545 expect(() => set.single, throwsStateError);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
636 map["q"] = "qux"; 636 map["q"] = "qux";
637 set.retainAll(["fblthp", "qux"]); 637 set.retainAll(["fblthp", "qux"]);
638 expect(map, equals({"f": "foo", "q": "qux"})); 638 expect(map, equals({"f": "foo", "q": "qux"}));
639 }); 639 });
640 640
641 test(".retainAll respects an unusual notion of equality", () { 641 test(".retainAll respects an unusual notion of equality", () {
642 map = new HashMap<String, String>( 642 map = new HashMap<String, String>(
643 equals: (value1, value2) => 643 equals: (value1, value2) =>
644 value1.toLowerCase() == value2.toLowerCase(), 644 value1.toLowerCase() == value2.toLowerCase(),
645 hashCode: (value) => value.toLowerCase().hashCode); 645 hashCode: (value) => value.toLowerCase().hashCode);
646 set = new MapValueSet<String, String>(map, 646 set = new MapValueSet<String, String>(
647 (string) => string.substring(0, 1)); 647 map, (string) => string.substring(0, 1));
648 648
649 map["f"] = "foo"; 649 map["f"] = "foo";
650 map["B"] = "bar"; 650 map["B"] = "bar";
651 map["Q"] = "qux"; 651 map["Q"] = "qux";
652 set.retainAll(["fblthp", "qux"]); 652 set.retainAll(["fblthp", "qux"]);
653 expect(map, equals({"f": "foo", "Q": "qux"})); 653 expect(map, equals({"f": "foo", "Q": "qux"}));
654 }); 654 });
655 655
656 test(".retainWhere", () { 656 test(".retainWhere", () {
657 map["f"] = "foo"; 657 map["f"] = "foo";
658 map["b"] = "bar"; 658 map["b"] = "bar";
659 map["q"] = "qoo"; 659 map["q"] = "qoo";
660 set.retainWhere((element) => element.endsWith("o")); 660 set.retainWhere((element) => element.endsWith("o"));
661 expect(map, equals({"f": "foo", "q": "qoo"})); 661 expect(map, equals({"f": "foo", "q": "qoo"}));
662 }); 662 });
663 }); 663 });
664 } 664 }
OLDNEW
« no previous file with comments | « packages/collection/test/utils.dart ('k') | packages/csslib/.analysis_options » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698