blob: 520e441927c217762375b8c72cb2eed5ab6972bc [file] [log] [blame]
// Copyright (c) 2018, 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 'interfaces.dart';
import 'type_matcher.dart';
/// A package-private [TypeMatcher] implementation that makes it easy for
/// subclasses to validate aspects of specific types while providing consistent
/// type checking.
abstract class FeatureMatcher<T> extends TypeMatcher<T> {
const FeatureMatcher();
bool matches(item, Map matchState) =>
super.matches(item, matchState) && typedMatches(item, matchState);
bool typedMatches(T item, Map matchState);
Description describeMismatch(
item, Description mismatchDescription, Map matchState, bool verbose) {
if (item is T) {
return describeTypedMismatch(
item, mismatchDescription, matchState, verbose);
}
return super.describe(mismatchDescription.add('not an '));
}
Description describeTypedMismatch(T item, Description mismatchDescription,
Map matchState, bool verbose) =>
mismatchDescription;
}