blob: ac16e1ee9ba87364303f34f6dabc1bdce494a075 [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.
import 'package:matcher/matcher.dart';
import 'package:test/test.dart' show test;
import 'test_utils.dart';
class _BadCustomMatcher extends CustomMatcher {
_BadCustomMatcher() : super('feature', 'description', {1: 'a'});
@override
Object featureValueOf(actual) => throw Exception('bang');
}
class _HasPrice extends CustomMatcher {
_HasPrice(matcher) : super('Widget with a price that is', 'price', matcher);
@override
Object featureValueOf(actual) => (actual as Widget).price;
}
void main() {
test('Feature Matcher', () {
var w = Widget();
w.price = 10;
shouldPass(w, _HasPrice(10));
shouldPass(w, _HasPrice(greaterThan(0)));
shouldFail(
w,
_HasPrice(greaterThan(10)),
'Expected: Widget with a price that is a value greater than <10> '
"Actual: <Instance of 'Widget'> "
'Which: has price with value <10> which is not '
'a value greater than <10>');
});
test('Custom Matcher Exception', () {
shouldFail(
'a',
_BadCustomMatcher(),
allOf([
contains("Expected: feature {1: 'a'} "),
contains("Actual: 'a' "),
contains("Which: threw 'Exception: bang' "),
]));
});
}