| Index: test/typed_wrapper/map_test.dart
|
| diff --git a/test/typed_wrapper/map_test.dart b/test/typed_wrapper/map_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3546ae8f337291de415b535397de838fe5d1b68e
|
| --- /dev/null
|
| +++ b/test/typed_wrapper/map_test.dart
|
| @@ -0,0 +1,315 @@
|
| +// Copyright (c) 2016, 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.
|
| +
|
| +import "package:collection/collection.dart";
|
| +import "package:test/test.dart";
|
| +
|
| +import '../utils.dart';
|
| +
|
| +void main() {
|
| + group("with valid types, forwards", () {
|
| + var wrapper;
|
| + var emptyWrapper;
|
| + setUp(() {
|
| + wrapper = DelegatingMap.typed/*<String, int>*/(
|
| + <Object, Object>{"foo": 1, "bar": 2, "baz": 3, "bang": 4});
|
| + emptyWrapper = DelegatingMap.typed/*<String, int>*/(<Object, Object>{});
|
| + });
|
| +
|
| + test("[]", () {
|
| + expect(wrapper["foo"], equals(1));
|
| + expect(wrapper["bar"], equals(2));
|
| + expect(wrapper["qux"], isNull);
|
| + expect(wrapper[1], isNull);
|
| + });
|
| +
|
| + test("[]=", () {
|
| + wrapper["foo"] = 5;
|
| + expect(wrapper, equals({"foo": 5, "bar": 2, "baz": 3, "bang": 4}));
|
| +
|
| + wrapper["qux"] = 6;
|
| + expect(wrapper,
|
| + equals({"foo": 5, "bar": 2, "baz": 3, "bang": 4, "qux": 6}));
|
| + });
|
| +
|
| + test("addAll()", () {
|
| + wrapper.addAll({"bar": 5, "qux": 6});
|
| + expect(wrapper,
|
| + equals({"foo": 1, "bar": 5, "baz": 3, "bang": 4, "qux": 6}));
|
| + });
|
| +
|
| + test("clear()", () {
|
| + wrapper.clear();
|
| + expect(wrapper, isEmpty);
|
| + });
|
| +
|
| + test("containsKey()", () {
|
| + expect(wrapper.containsKey("foo"), isTrue);
|
| + expect(wrapper.containsKey("qux"), isFalse);
|
| + expect(wrapper.containsKey(1), isFalse);
|
| + });
|
| +
|
| + test("containsValue()", () {
|
| + expect(wrapper.containsValue(1), isTrue);
|
| + expect(wrapper.containsValue(7), isFalse);
|
| + expect(wrapper.containsValue("foo"), isFalse);
|
| + });
|
| +
|
| + test("forEach()", () {
|
| + var results = [];
|
| + wrapper.forEach((key, value) => results.add([key, value]));
|
| + expect(results,
|
| + unorderedEquals([["foo", 1], ["bar", 2], ["baz", 3], ["bang", 4]]));
|
| +
|
| + emptyWrapper.forEach(expectAsync((_, __) {}, count: 0));
|
| + });
|
| +
|
| + test("isEmpty", () {
|
| + expect(wrapper.isEmpty, isFalse);
|
| + expect(emptyWrapper.isEmpty, isTrue);
|
| + });
|
| +
|
| + test("isNotEmpty", () {
|
| + expect(wrapper.isNotEmpty, isTrue);
|
| + expect(emptyWrapper.isNotEmpty, isFalse);
|
| + });
|
| +
|
| + test("keys", () {
|
| + expect(wrapper.keys, unorderedEquals(["foo", "bar", "baz", "bang"]));
|
| + expect(emptyWrapper.keys, isEmpty);
|
| + });
|
| +
|
| + test("length", () {
|
| + expect(wrapper.length, equals(4));
|
| + expect(emptyWrapper.length, equals(0));
|
| + });
|
| +
|
| + test("putIfAbsent()", () {
|
| + expect(wrapper.putIfAbsent("foo", expectAsync(() => null, count: 0)),
|
| + equals(1));
|
| +
|
| + expect(wrapper.putIfAbsent("qux", () => 6), equals(6));
|
| + expect(wrapper,
|
| + equals({"foo": 1, "bar": 2, "baz": 3, "bang": 4, "qux": 6}));
|
| + });
|
| +
|
| + test("remove()", () {
|
| + expect(wrapper.remove("foo"), equals(1));
|
| + expect(wrapper, equals({"bar": 2, "baz": 3, "bang": 4}));
|
| +
|
| + expect(wrapper.remove("foo"), isNull);
|
| + expect(wrapper.remove(3), isNull);
|
| + });
|
| +
|
| + test("values", () {
|
| + expect(wrapper.values, unorderedEquals([1, 2, 3, 4]));
|
| + expect(emptyWrapper.values, isEmpty);
|
| + });
|
| +
|
| + test("toString()", () {
|
| + expect(wrapper.toString(), allOf([
|
| + startsWith("{"),
|
| + contains("foo: 1"),
|
| + contains("bar: 2"),
|
| + contains("baz: 3"),
|
| + contains("bang: 4"),
|
| + endsWith("}")
|
| + ]));
|
| + });
|
| + });
|
| +
|
| + group("with invalid key types", () {
|
| + var inner;
|
| + var wrapper;
|
| + setUp(() {
|
| + inner = <Object, Object>{1: 1, 2: 2, 3: 3, 4: 4};
|
| + wrapper = DelegatingMap.typed/*<String, int>*/(inner);
|
| + });
|
| +
|
| + group("throws a CastError for", () {
|
| + test("forEach()", () {
|
| + expect(() => wrapper.forEach(expectAsync((_, __) {}, count: 0)),
|
| + throwsCastError);
|
| + });
|
| +
|
| + test("keys", () {
|
| + var lazy = wrapper.keys;
|
| + expect(() => lazy.first, throwsCastError);
|
| + });
|
| + });
|
| +
|
| + group("doesn't throw a CastError for", () {
|
| + test("[]", () {
|
| + expect(wrapper["foo"], isNull);
|
| + expect(wrapper[1], equals(1));
|
| + expect(wrapper[7], isNull);
|
| + });
|
| +
|
| + test("[]=", () {
|
| + wrapper["foo"] = 5;
|
| + expect(inner, equals({"foo": 5, 1: 1, 2: 2, 3: 3, 4: 4}));
|
| + });
|
| +
|
| + test("addAll()", () {
|
| + wrapper.addAll({"foo": 1, "bar": 2});
|
| + expect(inner, equals({"foo": 1, "bar": 2, 1: 1, 2: 2, 3: 3, 4: 4}));
|
| + });
|
| +
|
| + test("clear()", () {
|
| + wrapper.clear();
|
| + expect(wrapper, isEmpty);
|
| + });
|
| +
|
| + test("containsKey()", () {
|
| + expect(wrapper.containsKey(1), isTrue);
|
| + expect(wrapper.containsKey(7), isFalse);
|
| + expect(wrapper.containsKey("foo"), isFalse);
|
| + });
|
| +
|
| + test("containsValue()", () {
|
| + expect(wrapper.containsValue(1), isTrue);
|
| + expect(wrapper.containsValue(7), isFalse);
|
| + expect(wrapper.containsValue("foo"), isFalse);
|
| + });
|
| +
|
| + test("isEmpty", () {
|
| + expect(wrapper.isEmpty, isFalse);
|
| + });
|
| +
|
| + test("isNotEmpty", () {
|
| + expect(wrapper.isNotEmpty, isTrue);
|
| + });
|
| +
|
| + test("length", () {
|
| + expect(wrapper.length, equals(4));
|
| + });
|
| +
|
| + test("putIfAbsent()", () {
|
| + expect(wrapper.putIfAbsent("foo", () => 1), equals(1));
|
| + expect(inner, equals({"foo": 1, 1: 1, 2: 2, 3: 3, 4: 4}));
|
| + });
|
| +
|
| + test("remove()", () {
|
| + expect(wrapper.remove(1), equals(1));
|
| + expect(inner, equals({2: 2, 3: 3, 4: 4}));
|
| +
|
| + expect(wrapper.remove("foo"), isNull);
|
| + expect(wrapper.remove(7), isNull);
|
| + });
|
| +
|
| + test("values", () {
|
| + expect(wrapper.values, unorderedEquals([1, 2, 3, 4]));
|
| + });
|
| +
|
| + test("toString()", () {
|
| + expect(wrapper.toString(), allOf([
|
| + startsWith("{"),
|
| + contains("1: 1"),
|
| + contains("2: 2"),
|
| + contains("3: 3"),
|
| + contains("4: 4"),
|
| + endsWith("}")
|
| + ]));
|
| + });
|
| + });
|
| + }, skip: "Re-enable this when test can run DDC (test#414).");
|
| +
|
| + group("with invalid value types", () {
|
| + var inner;
|
| + var wrapper;
|
| + setUp(() {
|
| + inner = <Object, Object>{"foo": "bar", "baz": "bang"};
|
| + wrapper = DelegatingMap.typed/*<String, int>*/(inner);
|
| + });
|
| +
|
| + group("throws a CastError for", () {
|
| + test("forEach()", () {
|
| + expect(() => wrapper.forEach(expectAsync((_, __) {}, count: 0)),
|
| + throwsCastError);
|
| + });
|
| +
|
| + test("[]", () {
|
| + expect(() => wrapper["foo"], throwsCastError);
|
| + expect(wrapper["qux"], isNull);
|
| + });
|
| +
|
| + test("putIfAbsent()", () {
|
| + expect(() => wrapper.putIfAbsent("foo", () => 1), throwsCastError);
|
| + });
|
| +
|
| + test("remove()", () {
|
| + expect(() => wrapper.remove("foo"), throwsCastError);
|
| + });
|
| +
|
| + test("values", () {
|
| + var lazy = wrapper.values;
|
| + expect(() => lazy.first, throwsCastError);
|
| + });
|
| + });
|
| +
|
| + group("doesn't throw a CastError for", () {
|
| + test("[]=", () {
|
| + wrapper["foo"] = 5;
|
| + expect(inner, equals({"foo": 5, "baz": "bang"}));
|
| + });
|
| +
|
| + test("addAll()", () {
|
| + wrapper.addAll({"foo": 1, "qux": 2});
|
| + expect(inner, equals({"foo": 1, "baz": "bang", "qux": 2}));
|
| + });
|
| +
|
| + test("clear()", () {
|
| + wrapper.clear();
|
| + expect(wrapper, isEmpty);
|
| + });
|
| +
|
| + test("containsKey()", () {
|
| + expect(wrapper.containsKey("foo"), isTrue);
|
| + expect(wrapper.containsKey(1), isFalse);
|
| + expect(wrapper.containsKey("qux"), isFalse);
|
| + });
|
| +
|
| + test("containsValue()", () {
|
| + expect(wrapper.containsValue("bar"), isTrue);
|
| + expect(wrapper.containsValue(1), isFalse);
|
| + expect(wrapper.containsValue("foo"), isFalse);
|
| + });
|
| +
|
| + test("isEmpty", () {
|
| + expect(wrapper.isEmpty, isFalse);
|
| + });
|
| +
|
| + test("isNotEmpty", () {
|
| + expect(wrapper.isNotEmpty, isTrue);
|
| + });
|
| +
|
| + test("keys", () {
|
| + expect(wrapper.keys, unorderedEquals(["foo", "baz"]));
|
| + });
|
| +
|
| + test("length", () {
|
| + expect(wrapper.length, equals(2));
|
| + });
|
| +
|
| + test("putIfAbsent()", () {
|
| + expect(wrapper.putIfAbsent("qux", () => 1), equals(1));
|
| + expect(inner, equals({"foo": "bar", "baz": "bang", "qux": 1}));
|
| + });
|
| +
|
| + test("remove()", () {
|
| + expect(wrapper.remove("qux"), isNull);
|
| + expect(wrapper.remove(7), isNull);
|
| + });
|
| +
|
| + test("toString()", () {
|
| + expect(wrapper.toString(), allOf([
|
| + startsWith("{"),
|
| + contains("foo: bar"),
|
| + contains("baz: bang"),
|
| + endsWith("}")
|
| + ]));
|
| + });
|
| + });
|
| + }, skip: "Re-enable this when test can run DDC (test#414).");
|
| +}
|
|
|