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

Unified Diff: test/typed_wrapper/map_test.dart

Issue 1840573002: Add type-asserting wrapper constructors. (Closed) Base URL: git@github.com:dart-lang/collection@master
Patch Set: Code review changes Created 4 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/typed_wrapper/list_test.dart ('k') | test/typed_wrapper/queue_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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).");
+}
« no previous file with comments | « test/typed_wrapper/list_test.dart ('k') | test/typed_wrapper/queue_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698