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

Side by Side Diff: lib/unittest/map_matchers.dart

Issue 10441104: New expectation functions plus convert old tests to use these. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 6 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
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.
4
5 /**
6 * Returns a matcher that matches empty maps.
7 */
8 IMatcher emptyMap() => new _EmptyMap();
Bob Nystrom 2012/05/30 23:23:51 Can we just have a single isEmpty matcher? Why als
gram 2012/06/01 17:33:15 I combined the matchers for string, map and collec
Bob Nystrom 2012/06/01 18:22:22 Agreed. We do lots of other type tests in this lib
9
10 class _EmptyMap extends _MapMatcher {
11 bool matches(item) => item is Map && item.isEmpty();
12 IDescription describe(IDescription description) =>
13 description.append('empty');
14 }
15
16 /**
17 * Returns a matcher that matches maps containing the given [key]
18 */
19 IMatcher mapContainsKey(key) => new _MapContainsKey(key);
20
21 class _MapContainsKey extends _MapMatcher {
22 var _key;
23
24 _MapContainsKey(this._key);
25
26 bool matches(item) => item is Map && item.containsKey(_key);
Bob Nystrom 2012/05/30 23:23:51 Does it add value to test the type here, or should
gram 2012/06/01 17:33:15 Done.
27
28 IDescription describe(IDescription description) =>
29 description.append('contains key ').appendDescriptionOf(_key);
30 }
31
32 /**
33 * Returns a matcher which matches maps containing the given [value].
34 */
35 IMatcher mapContainsValue(value) => new _MapContainsValue(value);
36
37 class _MapContainsValue extends _MapMatcher {
38 var _value;
39
40 _MapContainsValue(this._value);
41
42 bool matches(item) => item is Map && item.containsValue(_value);
43 IDescription describe(IDescription description) =>
44 description.append('contains value ').appendDescriptionOf(_value);
45 }
46
47 /**
48 * Returns a matcher which matches maps containing the key-value pair
49 * with [key] => [value].
50 */
51 IMatcher mapContains(key, value) =>
52 new _MapContainsMapping(key, wrapMatcher(value));
53
54 class _MapContainsMapping extends _MapMatcher {
55 var _key;
56 IMatcher _valueMatcher;
57
58 _MapContainsMapping(this._key, IMatcher this._valueMatcher);
59
60 bool matches(item) =>
61 item is Map &&
62 item.containsKey(_key) &&
63 _valueMatcher.matches(item[_key]);
64
65 IDescription describe(IDescription description) =>
Bob Nystrom 2012/05/30 23:23:51 I would use a full {} body for this since it's mul
gram 2012/06/01 17:33:15 Done.
66 description.append('contains pair ').
67 appendDescriptionOf(_key).
68 append(' => ').
69 appendDescriptionOf(_valueMatcher);
70
71 IDescription describeMismatch(item, IDescription mismatchDescription) {
72 if (item is Map) {
73 if (!item.containsKey(_key)) {
74 return mismatchDescription.
75 appendDescriptionOf(item).
Bob Nystrom 2012/05/30 23:23:51 Indent another 2.
gram 2012/06/01 17:33:15 Done.
76 append("' doesn't contain key '").
77 appendDescriptionOf(_key);
78 } else {
79 return mismatchDescription.
80 append(' contains key ').
Bob Nystrom 2012/05/30 23:23:51 Ditto.
gram 2012/06/01 17:33:15 Done.
81 appendDescriptionOf(_key).
82 append(' but with value ');
83 _valueMatcher.describeMismatch(item[_key], mismatchDescription);
84 return mismatchDescription;
85 }
86 } else {
87 return super.describeMismatch(item, mismatchDescription);
88 }
89 }
90 }
91
92 /**
93 * Returns a matcher which matches maps whose length matches
94 * the given [matcher]. This is different from hasLength(), which
95 * works on any types that have length properties.
96 */
97 IMatcher mapLength(matcher) => new _MapLength(wrapMatcher(matcher));
Bob Nystrom 2012/05/30 23:23:51 This feels unnecessary to me. Can we remove it?
gram 2012/06/01 17:33:15 Done.
98
99 class _MapLength extends _MapMatcher {
100 IMatcher _matcher;
101
102 _MapLength(this._matcher);
103
104 bool matches(item) => item is Map && _matcher.matches(item.length);
105
106 IDescription describe(IDescription description) =>
107 description.append('map length ').
108 appendDescriptionOf(_matcher);
109 }
110
111 // Map matchers match against a Map. We add this intermediate
Bob Nystrom 2012/05/30 23:23:51 Make this a doc comment.
gram 2012/06/01 17:33:15 Removed.
112 // class to give better mismatch error messages than the base Matcher class.
113
114 class _MapMatcher extends Matcher {
115 IDescription describeMismatch(item, IDescription mismatchDescription) {
116 if (!(item is Map)) {
117 return mismatchDescription.
118 appendDescriptionOf(item).
119 append(' not a map');
120 } else {
121 return super.describeMismatch(item, mismatchDescription);
122 }
123 }
124 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698