| Index: lib/unittest/collection_matchers.dart
|
| ===================================================================
|
| --- lib/unittest/collection_matchers.dart (revision 10655)
|
| +++ lib/unittest/collection_matchers.dart (working copy)
|
| @@ -1,199 +0,0 @@
|
| -// Copyright (c) 2012, 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.
|
| -
|
| -/**
|
| - * Returns a matcher which matches [Collection]s in which all elements
|
| - * match the given [matcher].
|
| - */
|
| -Matcher everyElement(matcher) => new _EveryElement(wrapMatcher(matcher));
|
| -
|
| -class _EveryElement extends _CollectionMatcher {
|
| - Matcher _matcher;
|
| -
|
| - _EveryElement(Matcher this._matcher);
|
| -
|
| - bool matches(item, MatchState 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
|
| - };
|
| - return false;
|
| - }
|
| - ++i;
|
| - }
|
| - return true;
|
| - }
|
| -
|
| - Description describe(Description description) =>
|
| - description.add('every element ').addDescriptionOf(_matcher);
|
| -
|
| - Description describeMismatch(item, Description mismatchDescription,
|
| - MatchState matchState, bool verbose) {
|
| - if (matchState.state != null) {
|
| - var index = matchState.state['index'];
|
| - var element = matchState.state['element'];
|
| - return _matcher.describeMismatch(element, mismatchDescription,
|
| - matchState.state['state'], verbose).add(' at position $index');
|
| - }
|
| - return super.describeMismatch(item, mismatchDescription,
|
| - matchState, verbose);
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * Returns a matcher which matches [Collection]s in which at least one
|
| - * element matches the given [matcher].
|
| - */
|
| -Matcher someElement(matcher) => new _SomeElement(wrapMatcher(matcher));
|
| -
|
| -class _SomeElement extends _CollectionMatcher {
|
| - Matcher _matcher;
|
| -
|
| - _SomeElement(this._matcher);
|
| -
|
| - bool matches(item, MatchState matchState) {
|
| - return item.some( (e) => _matcher.matches(e, matchState) );
|
| - }
|
| -
|
| - Description describe(Description description) =>
|
| - description.add('some element ').addDescriptionOf(_matcher);
|
| -}
|
| -
|
| -/**
|
| - * Returns a matcher which matches [Iterable]s that have the same
|
| - * length and the same elements as [expected], and in the same order.
|
| - * This is equivalent to equals but does not recurse.
|
| - */
|
| -
|
| -Matcher orderedEquals(Iterable expected) => new _OrderedEquals(expected);
|
| -
|
| -class _OrderedEquals extends BaseMatcher {
|
| - final Iterable _expected;
|
| - Matcher _matcher;
|
| -
|
| - _OrderedEquals(this._expected) {
|
| - _matcher = equals(_expected, 1);
|
| - }
|
| -
|
| - bool matches(item, MatchState 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) {
|
| - if (item is !Iterable) {
|
| - return mismatchDescription.add('not an Iterable');
|
| - } else {
|
| - return _matcher.describeMismatch(item, mismatchDescription,
|
| - matchState, verbose);
|
| - }
|
| - }
|
| -}
|
| -/**
|
| - * Returns a matcher which matches [Iterable]s that have the same
|
| - * length and the same elements as [expected], but not necessarily in
|
| - * the same order. Note that this is O(n^2) so should only be used on
|
| - * small objects.
|
| - */
|
| -Matcher unorderedEquals(Iterable expected) =>
|
| - new _UnorderedEquals(expected);
|
| -
|
| -class _UnorderedEquals extends BaseMatcher {
|
| - Iterable _expected;
|
| -
|
| - _UnorderedEquals(Iterable this._expected);
|
| -
|
| - String _test(item) {
|
| - if (item is !Iterable) {
|
| - return 'not iterable';
|
| - }
|
| - // Check the lengths are the same.
|
| - var expectedLength = 0;
|
| - if (_expected is Collection) {
|
| - Collection cast = _expected; // "_expected as Collection"
|
| - expectedLength = cast.length;
|
| - } else {
|
| - for (var element in _expected) {
|
| - ++expectedLength;
|
| - }
|
| - }
|
| - var actualLength = 0;
|
| - if (item is Collection) {
|
| - actualLength = item.length;
|
| - } else {
|
| - for (var element in item) {
|
| - ++actualLength;
|
| - }
|
| - }
|
| - if (expectedLength > actualLength) {
|
| - return 'has too few elements (${actualLength} < ${expectedLength})';
|
| - } else if (expectedLength < actualLength) {
|
| - return 'has too many elements (${actualLength} > ${expectedLength})';
|
| - }
|
| - List<bool> matched = new List<bool>(actualLength);
|
| - for (var i = 0; i < actualLength; i++) {
|
| - matched[i] = false;
|
| - }
|
| - var expectedPosition = 0;
|
| - for (var expectedElement in _expected) {
|
| - var actualPosition = 0;
|
| - var gotMatch = false;
|
| - for (var actualElement in item) {
|
| - if (!matched[actualPosition]) {
|
| - if (expectedElement == actualElement) {
|
| - matched[actualPosition] = gotMatch = true;
|
| - break;
|
| - }
|
| - }
|
| - ++actualPosition;
|
| - }
|
| - if (!gotMatch) {
|
| - Description reason = new StringDescription();
|
| - reason.add('has no match for element ').
|
| - addDescriptionOf(expectedElement).
|
| - add(' at position ${expectedPosition}');
|
| - return reason.toString();
|
| - }
|
| - ++expectedPosition;
|
| - }
|
| - return null;
|
| - }
|
| -
|
| - bool matches(item, MatchState mismatchState) => (_test(item) == null);
|
| -
|
| - Description describe(Description description) =>
|
| - description.add('equals ').addDescriptionOf(_expected).add(' unordered');
|
| -
|
| - Description describeMismatch(item, Description mismatchDescription,
|
| - MatchState matchState, bool verbose) =>
|
| - mismatchDescription.add(_test(item));
|
| -}
|
| -
|
| -/**
|
| - * Collection matchers match against [Collection]s. We add this intermediate
|
| - * class to give better mismatch error messages than the base Matcher class.
|
| - */
|
| -/* abstract */ class _CollectionMatcher extends BaseMatcher {
|
| - const _CollectionMatcher();
|
| - Description describeMismatch(item, Description mismatchDescription,
|
| - MatchState matchState, bool verbose) {
|
| - if (item is !Collection) {
|
| - return mismatchDescription.
|
| - addDescriptionOf(item).
|
| - add(' not a collection');
|
| - } else {
|
| - return super.describeMismatch(item, mismatchDescription, matchState,
|
| - verbose);
|
| - }
|
| - }
|
| -}
|
|
|