| Index: lib/src/expect.dart
|
| diff --git a/lib/src/expect.dart b/lib/src/expect.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fd79527d698529141742e2baf1488e2b34b3f0da
|
| --- /dev/null
|
| +++ b/lib/src/expect.dart
|
| @@ -0,0 +1,71 @@
|
| +// Copyright (c) 2015, 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.
|
| +
|
| +library unittest.expect;
|
| +
|
| +import 'package:matcher/matcher.dart';
|
| +
|
| +/// An exception thrown when a test assertion fails.
|
| +class TestFailure {
|
| + final String message;
|
| +
|
| + TestFailure(this.message);
|
| +
|
| + String toString() => message;
|
| +}
|
| +
|
| +/// The type used for functions that can be used to build up error reports
|
| +/// upon failures in [expect].
|
| +typedef String ErrorFormatter(
|
| + actual, Matcher matcher, String reason, Map matchState, bool verbose);
|
| +
|
| +/// Assert that [actual] matches [matcher].
|
| +///
|
| +/// This is the main assertion function. [reason] is optional and is typically
|
| +/// not supplied, as a reason is generated from [matcher]; if [reason]
|
| +/// is included it is appended to the reason generated by the matcher.
|
| +///
|
| +/// [matcher] can be a value in which case it will be wrapped in an
|
| +/// [equals] matcher.
|
| +///
|
| +/// If the assertion fails a [TestFailure] is thrown.
|
| +///
|
| +/// In some cases extra diagnostic info can be produced on failure (for
|
| +/// example, stack traces on mismatched exceptions). To enable these,
|
| +/// [verbose] should be specified as `true`.
|
| +void expect(actual, matcher,
|
| + {String reason, bool verbose: false, ErrorFormatter formatter}) {
|
| + matcher = wrapMatcher(matcher);
|
| + var matchState = {};
|
| + try {
|
| + if (matcher.matches(actual, matchState)) return;
|
| + } catch (e, trace) {
|
| + if (reason == null) {
|
| + reason = '${(e is String) ? e : e.toString()} at $trace';
|
| + }
|
| + }
|
| + if (formatter == null) formatter = _defaultFailFormatter;
|
| + fail(formatter(actual, matcher, reason, matchState, verbose));
|
| +}
|
| +
|
| +/// Convenience method for throwing a new [TestFailure] with the provided
|
| +/// [message].
|
| +void fail(String message) => throw new TestFailure(message);
|
| +
|
| +// The default error formatter.
|
| +String _defaultFailFormatter(
|
| + actual, Matcher matcher, String reason, Map matchState, bool verbose) {
|
| + var description = new StringDescription();
|
| + description.add('Expected: ').addDescriptionOf(matcher).add('\n');
|
| + description.add(' Actual: ').addDescriptionOf(actual).add('\n');
|
| +
|
| + var mismatchDescription = new StringDescription();
|
| + matcher.describeMismatch(actual, mismatchDescription, matchState, verbose);
|
| +
|
| + if (mismatchDescription.length > 0) {
|
| + description.add(' Which: ${mismatchDescription}\n');
|
| + }
|
| + if (reason != null) description.add(reason).add('\n');
|
| + return description.toString();
|
| +}
|
|
|