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(); |
+} |