Index: test/test_utils.dart |
diff --git a/test/test_utils.dart b/test/test_utils.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d0adda297d978934055c035217c2cde55b891654 |
--- /dev/null |
+++ b/test/test_utils.dart |
@@ -0,0 +1,83 @@ |
+// 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. |
+ |
+library unittest.matcher.test_utils; |
+ |
+import 'dart:async'; |
+ |
+import 'package:unittest/unittest.dart'; |
+ |
+int _errorCount; |
+String _errorString; |
+FailureHandler _testHandler = null; |
+ |
+class MyFailureHandler extends DefaultFailureHandler { |
+ void fail(String reason) { |
+ ++_errorCount; |
+ _errorString = reason; |
+ } |
+} |
+ |
+void initUtils() { |
+ if (_testHandler == null) { |
+ _testHandler = new MyFailureHandler(); |
+ } |
+} |
+ |
+void shouldFail(value, Matcher matcher, expected, {bool isAsync: false}) { |
+ configureExpectFailureHandler(_testHandler); |
+ _errorCount = 0; |
+ _errorString = ''; |
+ expect(value, matcher); |
+ afterTest() { |
+ configureExpectFailureHandler(null); |
+ expect(_errorCount, equals(1)); |
+ if (expected is String) { |
+ expect(_errorString, equalsIgnoringWhitespace(expected)); |
+ } else { |
+ expect(_errorString.replaceAll('\n', ''), expected); |
+ } |
+ } |
+ |
+ if (isAsync) { |
+ Timer.run(expectAsync(afterTest)); |
+ } else { |
+ afterTest(); |
+ } |
+} |
+ |
+void shouldPass(value, Matcher matcher, {bool isAsync: false}) { |
+ configureExpectFailureHandler(_testHandler); |
+ _errorCount = 0; |
+ _errorString = ''; |
+ expect(value, matcher); |
+ afterTest() { |
+ configureExpectFailureHandler(null); |
+ expect(_errorCount, equals(0)); |
+ } |
+ if (isAsync) { |
+ Timer.run(expectAsync(afterTest)); |
+ } else { |
+ afterTest(); |
+ } |
+} |
+ |
+doesNotThrow() {} |
+doesThrow() { |
+ throw 'X'; |
+} |
+ |
+class PrefixMatcher extends Matcher { |
+ final String _prefix; |
+ const PrefixMatcher(this._prefix); |
+ bool matches(item, Map matchState) { |
+ return item is String && |
+ (collapseWhitespace(item)).startsWith(collapseWhitespace(_prefix)); |
+ } |
+ |
+ Description describe(Description description) => description |
+ .add('a string starting with ') |
+ .addDescriptionOf(collapseWhitespace(_prefix)) |
+ .add(' ignoring whitespace'); |
+} |