| Index: mojo/public/dart/third_party/collection/test/wrapper_test.dart
|
| diff --git a/mojo/public/dart/third_party/collection/test/wrapper_test.dart b/mojo/public/dart/third_party/collection/test/wrapper_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a3526a34848e29286b1f78e7336284202d691d1a
|
| --- /dev/null
|
| +++ b/mojo/public/dart/third_party/collection/test/wrapper_test.dart
|
| @@ -0,0 +1,664 @@
|
| +// 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.
|
| +
|
| +/// Tests wrapper utilities.
|
| +
|
| +import "dart:collection";
|
| +import "package:collection/collection.dart";
|
| +import "package:test/test.dart";
|
| +
|
| +// Test that any member access/call on the wrapper object is equal to
|
| +// an expected access on the wrapped object.
|
| +// This is implemented by capturing accesses using noSuchMethod and comparing
|
| +// them to expected accesses captured previously.
|
| +
|
| +// Compare two Invocations for having equal type and arguments.
|
| +void testInvocations(Invocation i1, Invocation i2) {
|
| + String name = "${i1.memberName}";
|
| + expect(i1.isGetter, equals(i2.isGetter), reason: name);
|
| + expect(i1.isSetter, equals(i2.isSetter), reason: name);
|
| + expect(i1.memberName, equals(i2.memberName), reason: name);
|
| + expect(i1.positionalArguments, equals(i2.positionalArguments), reason: name);
|
| + expect(i1.namedArguments, equals(i2.namedArguments), reason: name);
|
| +}
|
| +
|
| +/**
|
| + * Utility class to record a member access and a member access on a wrapped
|
| + * object, and compare them for equality.
|
| + */
|
| +abstract class Expector {
|
| + getWrappedObject(action(Invocation i));
|
| + // Hack to test assignment ([]=) because it doesn't return the result
|
| + // of the member call. Instead use (expect..[4]=5).equal[4]=5 where
|
| + // you would normally use expect[4].equals[4] for non-assignments.
|
| + var equals;
|
| +
|
| + noSuchMethod(Invocation m) => new _Equals(equals = getWrappedObject((m2) {
|
| + testInvocations(m, m2);
|
| + }));
|
| +
|
| + toString() => new _Equals(equals = getWrappedObject((m2) {
|
| + testInvocations(TO_STRING_INVOCATION, m2);
|
| + }));
|
| +}
|
| +
|
| +// An object with a field called "equals", only introduced into the
|
| +// flow to allow writing expect.xxx.equals.xxx.
|
| +class _Equals {
|
| + final equals;
|
| + _Equals(this.equals);
|
| +}
|
| +
|
| +class SyntheticInvocation implements Invocation {
|
| + static const int METHOD = 0x00;
|
| + static const int GETTER = 0x01;
|
| + static const int SETTER = 0x02;
|
| + final Symbol memberName;
|
| + final List positionalArguments;
|
| + final Map namedArguments;
|
| + final int _type;
|
| + const SyntheticInvocation(this.memberName,
|
| + this.positionalArguments,
|
| + this.namedArguments,
|
| + this._type);
|
| + bool get isMethod => _type == METHOD;
|
| +
|
| + bool get isGetter => _type == GETTER;
|
| +
|
| + bool get isSetter => _type == SETTER;
|
| +
|
| + bool get isAccessor => isGetter || isSetter;
|
| +}
|
| +
|
| +// Parameterization of noSuchMethod.
|
| +class NSM {
|
| + Function _action;
|
| + NSM(this._action);
|
| + noSuchMethod(Invocation i) => _action(i);
|
| +}
|
| +
|
| +const TO_STRING_INVOCATION = const SyntheticInvocation(
|
| + #toString, const[], const{}, SyntheticInvocation.METHOD);
|
| +
|
| +// LikeNSM, but has types Iterable, Set and List to allow it as
|
| +// argument to DelegatingIterable/Set/List.
|
| +class IterableNSM extends NSM implements Iterable, Set, List, Queue {
|
| + IterableNSM(action(Invocation i)) : super(action);
|
| + noSuchMethod(Invocation i) => super.noSuchMethod(i); // Silence warnings
|
| + toString() => super.noSuchMethod(TO_STRING_INVOCATION);
|
| +}
|
| +
|
| +// Expector that wraps in DelegatingIterable.
|
| +class IterableExpector extends Expector {
|
| + getWrappedObject(void action(Invocation i)) {
|
| + return new DelegatingIterable(new IterableNSM(action));
|
| + }
|
| +}
|
| +
|
| +// Expector that wraps in DelegatingList.
|
| +class ListExpector extends Expector {
|
| + getWrappedObject(void action(Invocation i)) {
|
| + return new DelegatingList(new IterableNSM(action));
|
| + }
|
| +}
|
| +
|
| +// Expector that wraps in DelegatingSet.
|
| +class SetExpector extends Expector {
|
| + getWrappedObject(void action(Invocation i)) {
|
| + return new DelegatingSet(new IterableNSM(action));
|
| + }
|
| +}
|
| +
|
| +// Expector that wraps in DelegatingSet.
|
| +class QueueExpector extends Expector {
|
| + getWrappedObject(void action(Invocation i)) {
|
| + return new DelegatingQueue(new IterableNSM(action));
|
| + }
|
| +}
|
| +
|
| +// Like NSM but implements Map to allow as argument for DelegatingMap.
|
| +class MapNSM extends NSM implements Map {
|
| + MapNSM(action(Invocation i)) : super(action);
|
| + noSuchMethod(Invocation i) => super.noSuchMethod(i);
|
| + toString() => super.noSuchMethod(TO_STRING_INVOCATION);
|
| +}
|
| +
|
| +// Expector that wraps in DelegatingMap.
|
| +class MapExpector extends Expector {
|
| + getWrappedObject(void action(Invocation i)) {
|
| + return new DelegatingMap(new MapNSM(action));
|
| + }
|
| +}
|
| +
|
| +// Utility values to use as arguments in calls.
|
| +func0() {}
|
| +func1(x) {}
|
| +func2(x, y) {}
|
| +var val = new Object();
|
| +
|
| +void main() {
|
| + testIterable(var expect) {
|
| + expect.any(func1).equals.any(func1);
|
| + expect.contains(val).equals.contains(val);
|
| + expect.elementAt(0).equals.elementAt(0);
|
| + expect.every(func1).equals.every(func1);
|
| + expect.expand(func1).equals.expand(func1);
|
| + expect.first.equals.first;
|
| + // Default values of the Iterable interface will be added in the
|
| + // second call to firstWhere, so we must record them in our
|
| + // expectation (which doesn't have the interface implementat or
|
| + // its default values).
|
| + expect.firstWhere(func1, orElse: null).equals.firstWhere(func1);
|
| + expect.firstWhere(func1, orElse: func0).equals.
|
| + firstWhere(func1, orElse: func0);
|
| + expect.fold(null, func2).equals.fold(null, func2);
|
| + expect.forEach(func1).equals.forEach(func1);
|
| + expect.isEmpty.equals.isEmpty;
|
| + expect.isNotEmpty.equals.isNotEmpty;
|
| + expect.iterator.equals.iterator;
|
| + expect.join('').equals.join();
|
| + expect.join("X").equals.join("X");
|
| + expect.last.equals.last;
|
| + expect.lastWhere(func1, orElse: null).equals.lastWhere(func1);
|
| + expect.lastWhere(func1, orElse: func0).equals.
|
| + lastWhere(func1, orElse: func0);
|
| + expect.length.equals.length;
|
| + expect.map(func1).equals.map(func1);
|
| + expect.reduce(func2).equals.reduce(func2);
|
| + expect.single.equals.single;
|
| + expect.singleWhere(func1).equals.singleWhere(func1);
|
| + expect.skip(5).equals.skip(5);
|
| + expect.skipWhile(func1).equals.skipWhile(func1);
|
| + expect.take(5).equals.take(5);
|
| + expect.takeWhile(func1).equals.takeWhile(func1);
|
| + expect.toList(growable: true).equals.toList();
|
| + expect.toList(growable: true).equals.toList(growable: true);
|
| + expect.toList(growable: false).equals.toList(growable: false);
|
| + expect.toSet().equals.toSet();
|
| + expect.toString().equals.toString();
|
| + expect.where(func1).equals.where(func1);
|
| + }
|
| +
|
| + void testList(var expect) {
|
| + testIterable(expect);
|
| +
|
| + expect[4].equals[4];
|
| + (expect..[4] = 5).equals[4] = 5;
|
| +
|
| + expect.add(val).equals.add(val);
|
| + expect.addAll([val]).equals.addAll([val]);
|
| + expect.asMap().equals.asMap();
|
| + expect.clear().equals.clear();
|
| + expect.fillRange(4, 5, null).equals.fillRange(4, 5);
|
| + expect.fillRange(4, 5, val).equals.fillRange(4, 5, val);
|
| + expect.getRange(4, 5).equals.getRange(4, 5);
|
| + expect.indexOf(val, 0).equals.indexOf(val);
|
| + expect.indexOf(val, 4).equals.indexOf(val, 4);
|
| + expect.insert(4, val).equals.insert(4, val);
|
| + expect.insertAll(4, [val]).equals.insertAll(4, [val]);
|
| + expect.lastIndexOf(val, null).equals.lastIndexOf(val);
|
| + expect.lastIndexOf(val, 4).equals.lastIndexOf(val, 4);
|
| + (expect..length = 4).equals.length = 4;
|
| + expect.remove(val).equals.remove(val);
|
| + expect.removeAt(4).equals.removeAt(4);
|
| + expect.removeLast().equals.removeLast();
|
| + expect.removeRange(4, 5).equals.removeRange(4, 5);
|
| + expect.removeWhere(func1).equals.removeWhere(func1);
|
| + expect.replaceRange(4, 5, [val]).equals.replaceRange(4, 5, [val]);
|
| + expect.retainWhere(func1).equals.retainWhere(func1);
|
| + expect.reversed.equals.reversed;
|
| + expect.setAll(4, [val]).equals.setAll(4, [val]);
|
| + expect.setRange(4, 5, [val], 0).equals.setRange(4, 5, [val]);
|
| + expect.setRange(4, 5, [val], 3).equals.setRange(4, 5, [val], 3);
|
| + expect.sort(null).equals.sort();
|
| + expect.sort(func2).equals.sort(func2);
|
| + expect.sublist(4, null).equals.sublist(4);
|
| + expect.sublist(4, 5).equals.sublist(4, 5);
|
| + }
|
| +
|
| + void testSet(var expect) {
|
| + testIterable(expect);
|
| + Set set = new Set();
|
| + expect.add(val).equals.add(val);
|
| + expect.addAll([val]).equals.addAll([val]);
|
| + expect.clear().equals.clear();
|
| + expect.containsAll([val]).equals.containsAll([val]);
|
| + expect.difference(set).equals.difference(set);
|
| + expect.intersection(set).equals.intersection(set);
|
| + expect.remove(val).equals.remove(val);
|
| + expect.removeAll([val]).equals.removeAll([val]);
|
| + expect.removeWhere(func1).equals.removeWhere(func1);
|
| + expect.retainAll([val]).equals.retainAll([val]);
|
| + expect.retainWhere(func1).equals.retainWhere(func1);
|
| + expect.union(set).equals.union(set);
|
| + }
|
| +
|
| + void testQueue(var expect) {
|
| + testIterable(expect);
|
| + expect.add(val).equals.add(val);
|
| + expect.addAll([val]).equals.addAll([val]);
|
| + expect.addFirst(val).equals.addFirst(val);
|
| + expect.addLast(val).equals.addLast(val);
|
| + expect.clear().equals.clear();
|
| + expect.remove(val).equals.remove(val);
|
| + expect.removeFirst().equals.removeFirst();
|
| + expect.removeLast().equals.removeLast();
|
| + }
|
| +
|
| + void testMap(var expect) {
|
| + Map map = new Map();
|
| + expect[val].equals[val];
|
| + (expect..[val] = val).equals[val] = val;
|
| + expect.addAll(map).equals.addAll(map);
|
| + expect.clear().equals.clear();
|
| + expect.containsKey(val).equals.containsKey(val);
|
| + expect.containsValue(val).equals.containsValue(val);
|
| + expect.forEach(func2).equals.forEach(func2);
|
| + expect.isEmpty.equals.isEmpty;
|
| + expect.isNotEmpty.equals.isNotEmpty;
|
| + expect.keys.equals.keys;
|
| + expect.length.equals.length;
|
| + expect.putIfAbsent(val, func0).equals.putIfAbsent(val, func0);
|
| + expect.remove(val).equals.remove(val);
|
| + expect.values.equals.values;
|
| + expect.toString().equals.toString();
|
| + }
|
| +
|
| + // Runs tests of Set behavior.
|
| + //
|
| + // [setUpSet] should return a set with two elements: "foo" and "bar".
|
| + void testTwoElementSet(Set<String> setUpSet()) {
|
| + group("with two elements", () {
|
| + var set;
|
| + setUp(() => set = setUpSet());
|
| +
|
| + test(".any", () {
|
| + expect(set.any((element) => element == "foo"), isTrue);
|
| + expect(set.any((element) => element == "baz"), isFalse);
|
| + });
|
| +
|
| + test(".elementAt", () {
|
| + expect(set.elementAt(0), equals("foo"));
|
| + expect(set.elementAt(1), equals("bar"));
|
| + expect(() => set.elementAt(2), throwsRangeError);
|
| + });
|
| +
|
| + test(".every", () {
|
| + expect(set.every((element) => element == "foo"), isFalse);
|
| + expect(set.every((element) => element is String), isTrue);
|
| + });
|
| +
|
| + test(".expand", () {
|
| + expect(set.expand((element) {
|
| + return [element.substring(0, 1), element.substring(1)];
|
| + }), equals(["f", "oo", "b", "ar"]));
|
| + });
|
| +
|
| + test(".first", () {
|
| + expect(set.first, equals("foo"));
|
| + });
|
| +
|
| + test(".firstWhere", () {
|
| + expect(set.firstWhere((element) => element is String), equals("foo"));
|
| + expect(set.firstWhere((element) => element.startsWith("b")),
|
| + equals("bar"));
|
| + expect(() => set.firstWhere((element) => element is int),
|
| + throwsStateError);
|
| + expect(set.firstWhere((element) => element is int, orElse: () => "baz"),
|
| + equals("baz"));
|
| + });
|
| +
|
| + test(".fold", () {
|
| + expect(set.fold("start", (previous, element) => previous + element),
|
| + equals("startfoobar"));
|
| + });
|
| +
|
| + test(".forEach", () {
|
| + var values = [];
|
| + set.forEach(values.add);
|
| + expect(values, equals(["foo", "bar"]));
|
| + });
|
| +
|
| + test(".iterator", () {
|
| + var values = [];
|
| + for (var element in set) {
|
| + values.add(element);
|
| + }
|
| + expect(values, equals(["foo", "bar"]));
|
| + });
|
| +
|
| + test(".join", () {
|
| + expect(set.join(", "), equals("foo, bar"));
|
| + });
|
| +
|
| + test(".last", () {
|
| + expect(set.last, equals("bar"));
|
| + });
|
| +
|
| + test(".lastWhere", () {
|
| + expect(set.lastWhere((element) => element is String), equals("bar"));
|
| + expect(set.lastWhere((element) => element.startsWith("f")),
|
| + equals("foo"));
|
| + expect(() => set.lastWhere((element) => element is int),
|
| + throwsStateError);
|
| + expect(set.lastWhere((element) => element is int, orElse: () => "baz"),
|
| + equals("baz"));
|
| + });
|
| +
|
| + test(".map", () {
|
| + expect(set.map((element) => element.substring(1)),
|
| + equals(["oo", "ar"]));
|
| + });
|
| +
|
| + test(".reduce", () {
|
| + expect(set.reduce((previous, element) => previous + element),
|
| + equals("foobar"));
|
| + });
|
| +
|
| + test(".singleWhere", () {
|
| + expect(() => set.singleWhere((element) => element == "baz"),
|
| + throwsStateError);
|
| + expect(set.singleWhere((element) => element == "foo"),
|
| + "foo");
|
| + expect(() => set.singleWhere((element) => element is String),
|
| + throwsStateError);
|
| + });
|
| +
|
| + test(".skip", () {
|
| + expect(set.skip(0), equals(["foo", "bar"]));
|
| + expect(set.skip(1), equals(["bar"]));
|
| + expect(set.skip(2), equals([]));
|
| + });
|
| +
|
| + test(".skipWhile", () {
|
| + expect(set.skipWhile((element) => element.startsWith("f")),
|
| + equals(["bar"]));
|
| + expect(set.skipWhile((element) => element.startsWith("z")),
|
| + equals(["foo", "bar"]));
|
| + expect(set.skipWhile((element) => element is String),
|
| + equals([]));
|
| + });
|
| +
|
| + test(".take", () {
|
| + expect(set.take(0), equals([]));
|
| + expect(set.take(1), equals(["foo"]));
|
| + expect(set.take(2), equals(["foo", "bar"]));
|
| + });
|
| +
|
| + test(".takeWhile", () {
|
| + expect(set.takeWhile((element) => element.startsWith("f")),
|
| + equals(["foo"]));
|
| + expect(set.takeWhile((element) => element.startsWith("z")),
|
| + equals([]));
|
| + expect(set.takeWhile((element) => element is String),
|
| + equals(["foo", "bar"]));
|
| + });
|
| +
|
| + test(".toList", () {
|
| + expect(set.toList(), equals(["foo", "bar"]));
|
| + expect(() => set.toList(growable: false).add("baz"),
|
| + throwsUnsupportedError);
|
| + expect(set.toList()..add("baz"), equals(["foo", "bar", "baz"]));
|
| + });
|
| +
|
| + test(".toSet", () {
|
| + expect(set.toSet(), equals(new Set.from(["foo", "bar"])));
|
| + });
|
| +
|
| + test(".where", () {
|
| + expect(set.where((element) => element.startsWith("f")),
|
| + equals(["foo"]));
|
| + expect(set.where((element) => element.startsWith("z")), equals([]));
|
| + expect(set.where((element) => element is String),
|
| + equals(["foo", "bar"]));
|
| + });
|
| +
|
| + test(".containsAll", () {
|
| + expect(set.containsAll(["foo", "bar"]), isTrue);
|
| + expect(set.containsAll(["foo"]), isTrue);
|
| + expect(set.containsAll(["foo", "bar", "qux"]), isFalse);
|
| + });
|
| +
|
| + test(".difference", () {
|
| + expect(set.difference(new Set.from(["foo", "baz"])),
|
| + equals(new Set.from(["bar"])));
|
| + });
|
| +
|
| + test(".intersection", () {
|
| + expect(set.intersection(new Set.from(["foo", "baz"])),
|
| + equals(new Set.from(["foo"])));
|
| + });
|
| +
|
| + test(".union", () {
|
| + expect(set.union(new Set.from(["foo", "baz"])),
|
| + equals(new Set.from(["foo", "bar", "baz"])));
|
| + });
|
| + });
|
| + }
|
| +
|
| + test("Iterable", () {
|
| + testIterable(new IterableExpector());
|
| + });
|
| +
|
| + test("List", () {
|
| + testList(new ListExpector());
|
| + });
|
| +
|
| + test("Set", () {
|
| + testSet(new SetExpector());
|
| + });
|
| +
|
| + test("Queue", () {
|
| + testQueue(new QueueExpector());
|
| + });
|
| +
|
| + test("Map", () {
|
| + testMap(new MapExpector());
|
| + });
|
| +
|
| + group("MapKeySet", () {
|
| + var map;
|
| + var set;
|
| +
|
| + setUp(() {
|
| + map = new Map<String, int>();
|
| + set = new MapKeySet<String>(map);
|
| + });
|
| +
|
| + testTwoElementSet(() {
|
| + map["foo"] = 1;
|
| + map["bar"] = 2;
|
| + return set;
|
| + });
|
| +
|
| + test(".single", () {
|
| + expect(() => set.single, throwsStateError);
|
| + map["foo"] = 1;
|
| + expect(set.single, equals("foo"));
|
| + map["bar"] = 1;
|
| + expect(() => set.single, throwsStateError);
|
| + });
|
| +
|
| + test(".toString", () {
|
| + expect(set.toString(), equals("{}"));
|
| + map["foo"] = 1;
|
| + map["bar"] = 2;
|
| + expect(set.toString(), equals("{foo, bar}"));
|
| + });
|
| +
|
| + test(".contains", () {
|
| + expect(set.contains("foo"), isFalse);
|
| + map["foo"] = 1;
|
| + expect(set.contains("foo"), isTrue);
|
| + });
|
| +
|
| + test(".isEmpty", () {
|
| + expect(set.isEmpty, isTrue);
|
| + map["foo"] = 1;
|
| + expect(set.isEmpty, isFalse);
|
| + });
|
| +
|
| + test(".isNotEmpty", () {
|
| + expect(set.isNotEmpty, isFalse);
|
| + map["foo"] = 1;
|
| + expect(set.isNotEmpty, isTrue);
|
| + });
|
| +
|
| + test(".length", () {
|
| + expect(set, hasLength(0));
|
| + map["foo"] = 1;
|
| + expect(set, hasLength(1));
|
| + map["bar"] = 2;
|
| + expect(set, hasLength(2));
|
| + });
|
| +
|
| + test("is unmodifiable", () {
|
| + expect(() => set.add("baz"), throwsUnsupportedError);
|
| + expect(() => set.addAll(["baz", "bang"]), throwsUnsupportedError);
|
| + expect(() => set.remove("foo"), throwsUnsupportedError);
|
| + expect(() => set.removeAll(["baz", "bang"]), throwsUnsupportedError);
|
| + expect(() => set.retainAll(["foo"]), throwsUnsupportedError);
|
| + expect(() => set.removeWhere((_) => true), throwsUnsupportedError);
|
| + expect(() => set.retainWhere((_) => true), throwsUnsupportedError);
|
| + expect(() => set.clear(), throwsUnsupportedError);
|
| + });
|
| + });
|
| +
|
| + group("MapValueSet", () {
|
| + var map;
|
| + var set;
|
| +
|
| + setUp(() {
|
| + map = new Map<String, String>();
|
| + set = new MapValueSet<String, String>(map,
|
| + (string) => string.substring(0, 1));
|
| + });
|
| +
|
| + testTwoElementSet(() {
|
| + map["f"] = "foo";
|
| + map["b"] = "bar";
|
| + return set;
|
| + });
|
| +
|
| + test(".single", () {
|
| + expect(() => set.single, throwsStateError);
|
| + map["f"] = "foo";
|
| + expect(set.single, equals("foo"));
|
| + map["b"] = "bar";
|
| + expect(() => set.single, throwsStateError);
|
| + });
|
| +
|
| + test(".toString", () {
|
| + expect(set.toString(), equals("{}"));
|
| + map["f"] = "foo";
|
| + map["b"] = "bar";
|
| + expect(set.toString(), equals("{foo, bar}"));
|
| + });
|
| +
|
| + test(".contains", () {
|
| + expect(set.contains("foo"), isFalse);
|
| + map["f"] = "foo";
|
| + expect(set.contains("foo"), isTrue);
|
| + expect(set.contains("fblthp"), isTrue);
|
| + });
|
| +
|
| + test(".isEmpty", () {
|
| + expect(set.isEmpty, isTrue);
|
| + map["f"] = "foo";
|
| + expect(set.isEmpty, isFalse);
|
| + });
|
| +
|
| + test(".isNotEmpty", () {
|
| + expect(set.isNotEmpty, isFalse);
|
| + map["f"] = "foo";
|
| + expect(set.isNotEmpty, isTrue);
|
| + });
|
| +
|
| + test(".length", () {
|
| + expect(set, hasLength(0));
|
| + map["f"] = "foo";
|
| + expect(set, hasLength(1));
|
| + map["b"] = "bar";
|
| + expect(set, hasLength(2));
|
| + });
|
| +
|
| + test(".lookup", () {
|
| + map["f"] = "foo";
|
| + expect(set.lookup("fblthp"), equals("foo"));
|
| + expect(set.lookup("bar"), isNull);
|
| + });
|
| +
|
| + test(".add", () {
|
| + set.add("foo");
|
| + set.add("bar");
|
| + expect(map, equals({"f": "foo", "b": "bar"}));
|
| + });
|
| +
|
| + test(".addAll", () {
|
| + set.addAll(["foo", "bar"]);
|
| + expect(map, equals({"f": "foo", "b": "bar"}));
|
| + });
|
| +
|
| + test(".clear", () {
|
| + map["f"] = "foo";
|
| + map["b"] = "bar";
|
| + set.clear();
|
| + expect(map, isEmpty);
|
| + });
|
| +
|
| + test(".remove", () {
|
| + map["f"] = "foo";
|
| + map["b"] = "bar";
|
| + set.remove("fblthp");
|
| + expect(map, equals({"b": "bar"}));
|
| + });
|
| +
|
| + test(".removeAll", () {
|
| + map["f"] = "foo";
|
| + map["b"] = "bar";
|
| + map["q"] = "qux";
|
| + set.removeAll(["fblthp", "qux"]);
|
| + expect(map, equals({"b": "bar"}));
|
| + });
|
| +
|
| + test(".removeWhere", () {
|
| + map["f"] = "foo";
|
| + map["b"] = "bar";
|
| + map["q"] = "qoo";
|
| + set.removeWhere((element) => element.endsWith("o"));
|
| + expect(map, equals({"b": "bar"}));
|
| + });
|
| +
|
| + test(".retainAll", () {
|
| + map["f"] = "foo";
|
| + map["b"] = "bar";
|
| + map["q"] = "qux";
|
| + set.retainAll(["fblthp", "qux"]);
|
| + expect(map, equals({"f": "foo", "q": "qux"}));
|
| + });
|
| +
|
| + test(".retainAll respects an unusual notion of equality", () {
|
| + map = new HashMap<String, String>(
|
| + equals: (value1, value2) =>
|
| + value1.toLowerCase() == value2.toLowerCase(),
|
| + hashCode: (value) => value.toLowerCase().hashCode);
|
| + set = new MapValueSet<String, String>(map,
|
| + (string) => string.substring(0, 1));
|
| +
|
| + map["f"] = "foo";
|
| + map["B"] = "bar";
|
| + map["Q"] = "qux";
|
| + set.retainAll(["fblthp", "qux"]);
|
| + expect(map, equals({"f": "foo", "Q": "qux"}));
|
| + });
|
| +
|
| + test(".retainWhere", () {
|
| + map["f"] = "foo";
|
| + map["b"] = "bar";
|
| + map["q"] = "qoo";
|
| + set.retainWhere((element) => element.endsWith("o"));
|
| + expect(map, equals({"f": "foo", "q": "qoo"}));
|
| + });
|
| + });
|
| +}
|
|
|