blob: 4df8e2ef6c742b79c37adc1972af3c1f11c90447 [file] [log] [blame]
// 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 matcher.test_utils;
import 'dart:async';
import 'package:matcher/matcher.dart';
import 'package:unittest/unittest.dart' show test, expectAsync;
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');
}