Chromium Code Reviews| Index: pkg/unittest/lib/src/iterable_matchers.dart |
| =================================================================== |
| --- pkg/unittest/lib/src/iterable_matchers.dart (revision 24002) |
| +++ pkg/unittest/lib/src/iterable_matchers.dart (working copy) |
| @@ -15,18 +15,14 @@ |
| _EveryElement(Matcher this._matcher); |
| - bool matches(item, MatchState matchState) { |
| + bool matches(item, Map matchState) { |
| if (item is! Iterable) { |
| return false; |
| } |
| var i = 0; |
| for (var element in item) { |
| if (!_matcher.matches(element, matchState)) { |
| - matchState.state = { |
| - 'index': i, |
| - 'element': element, |
| - 'state': matchState.state |
| - }; |
| + addStateInfo(matchState, {'index': i, 'element': element}); |
| return false; |
| } |
| ++i; |
| @@ -35,16 +31,26 @@ |
| } |
| Description describe(Description description) => |
| - description.add('every element ').addDescriptionOf(_matcher); |
| + description.add('every element(').addDescriptionOf(_matcher).add(')'); |
| Description describeMismatch(item, Description mismatchDescription, |
| - MatchState matchState, bool verbose) { |
| - if (matchState.state != null) { |
| - var index = matchState.state['index']; |
| - var element = matchState.state['element']; |
| - mismatchDescription.add('position $index '); |
| - return _matcher.describeMismatch(element, mismatchDescription, |
| - matchState.state['state'], verbose); |
| + Map matchState, bool verbose) { |
| + if (matchState['index'] != null) { |
| + var index = matchState['index']; |
| + var element = matchState['element']; |
| + mismatchDescription.add('has value ').addDescriptionOf(element). |
| + add(' which '); |
| + var subDescription = new StringDescription(); |
| + _matcher.describeMismatch(element, subDescription, |
| + matchState['state'], verbose); |
| + if (subDescription.length > 0) { |
| + mismatchDescription.add(subDescription); |
| + } else { |
| + mismatchDescription.add("doesn't match "); |
| + _matcher.describe(mismatchDescription); |
| + } |
| + mismatchDescription.add(' at index $index'); |
| + return mismatchDescription; |
| } |
| return super.describeMismatch(item, mismatchDescription, |
| matchState, verbose); |
| @@ -62,7 +68,7 @@ |
| _SomeElement(this._matcher); |
| - bool matches(item, MatchState matchState) { |
| + bool matches(item, Map matchState) { |
| return item.any((e) => _matcher.matches(e, matchState)); |
| } |
| @@ -86,16 +92,16 @@ |
| _matcher = equals(_expected, 1); |
| } |
| - bool matches(item, MatchState matchState) => |
| + bool matches(item, Map matchState) => |
| (item is Iterable) && _matcher.matches(item, matchState); |
| Description describe(Description description) => |
| description.add('equals ').addDescriptionOf(_expected).add(' ordered'); |
| Description describeMismatch(item, Description mismatchDescription, |
| - MatchState matchState, bool verbose) { |
| + Map matchState, bool verbose) { |
| if (item is !Iterable) { |
| - return mismatchDescription.add('not an Iterable'); |
| + return mismatchDescription.add('is not an Iterable'); |
| } else { |
| return _matcher.describeMismatch(item, mismatchDescription, |
| matchState, verbose); |
| @@ -149,7 +155,7 @@ |
| Description reason = new StringDescription(); |
| reason.add('has no match for element '). |
| addDescriptionOf(expectedElement). |
| - add(' at position ${expectedPosition}'); |
| + add(' at index ${expectedPosition}'); |
| return reason.toString(); |
| } |
| ++expectedPosition; |
| @@ -157,13 +163,13 @@ |
| return null; |
| } |
| - bool matches(item, MatchState mismatchState) => (_test(item) == null); |
| + bool matches(item, Map mismatchState) => (_test(item) == null); |
| Description describe(Description description) => |
| description.add('equals ').addDescriptionOf(_expected).add(' unordered'); |
| Description describeMismatch(item, Description mismatchDescription, |
| - MatchState matchState, bool verbose) => |
| + Map matchState, bool verbose) => |
| mismatchDescription.add(_test(item)); |
| } |
| @@ -174,7 +180,7 @@ |
| abstract class _IterableMatcher extends BaseMatcher { |
| const _IterableMatcher(); |
| Description describeMismatch(item, Description mismatchDescription, |
| - MatchState matchState, bool verbose) { |
| + Map matchState, bool verbose) { |
| if (item is! Iterable) { |
| return mismatchDescription. |
| addDescriptionOf(item). |
| @@ -203,7 +209,7 @@ |
| _PairwiseCompare(this._expected, this._comparator, this._description); |
| - bool matches(item, MatchState matchState) { |
| + bool matches(item, Map matchState) { |
| if (item is! Iterable) return false; |
| if (item.length != _expected.length) return false; |
| var iterator = item.iterator; |
| @@ -211,12 +217,8 @@ |
| for (var e in _expected) { |
| iterator.moveNext(); |
| if (!_comparator(e, iterator.current)) { |
| - matchState.state = { |
| - 'index': i, |
| - 'expected': e, |
| - 'actual' : iterator.current, |
| - 'state': matchState.state |
| - }; |
| + addStateInfo(matchState, {'index': i, 'expected': e, 'actual': |
|
Siggi Cherem (dart-lang)
2013/06/14 01:20:56
nit: move the last key to the next line, so key/va
|
| + iterator.current}); |
| return false; |
| } |
| i++; |
| @@ -228,18 +230,19 @@ |
| description.add('pairwise $_description ').addDescriptionOf(_expected); |
| Description describeMismatch(item, Description mismatchDescription, |
| - MatchState matchState, bool verbose) { |
| + Map matchState, bool verbose) { |
| if (item is !Iterable) { |
| - return mismatchDescription.add('not an Iterable'); |
| + return mismatchDescription.add('is not an Iterable'); |
| } else if (item.length != _expected.length) { |
| return mismatchDescription. |
| - add('length was ${item.length} instead of ${_expected.length}'); |
| + add('has length ${item.length} instead of ${_expected.length}'); |
| } else { |
| return mismatchDescription. |
| - addDescriptionOf(matchState.state["actual"]). |
| - add(' not $_description '). |
| - addDescriptionOf(matchState.state["expected"]). |
| - add(' at position ${matchState.state["index"]}'); |
| + add('has '). |
| + addDescriptionOf(matchState["actual"]). |
| + add(' which is not $_description '). |
| + addDescriptionOf(matchState["expected"]). |
| + add(' at index ${matchState["index"]}'); |
| } |
| } |
| } |