82 lines
2.0 KiB
Dart
82 lines
2.0 KiB
Dart
// Copyright 2016 The Chromium Authors. 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';
|
|
|
|
/// Matches [value] against the [matcher].
|
|
MatchResult match(dynamic value, Matcher matcher) {
|
|
final Map<dynamic, dynamic> matchState = <dynamic, dynamic>{};
|
|
if (matcher.matches(value, matchState)) {
|
|
return new MatchResult._matched();
|
|
} else {
|
|
final Description description =
|
|
matcher.describeMismatch(value, new _TextDescription(), matchState, false);
|
|
return new MatchResult._mismatched(description.toString());
|
|
}
|
|
}
|
|
|
|
/// Result of matching a value against a matcher.
|
|
class MatchResult {
|
|
MatchResult._matched()
|
|
: hasMatched = true,
|
|
mismatchDescription = null;
|
|
|
|
MatchResult._mismatched(this.mismatchDescription)
|
|
: hasMatched = false;
|
|
|
|
/// Whether the match succeeded.
|
|
final bool hasMatched;
|
|
|
|
/// If the match did not succeed, this field contains the explanation.
|
|
final String mismatchDescription;
|
|
}
|
|
|
|
/// Writes description into a string.
|
|
class _TextDescription implements Description {
|
|
final StringBuffer _text = new StringBuffer();
|
|
|
|
@override
|
|
int get length => _text.length;
|
|
|
|
@override
|
|
Description add(String text) {
|
|
_text.write(text);
|
|
return this;
|
|
}
|
|
|
|
@override
|
|
Description replace(String text) {
|
|
_text.clear();
|
|
_text.write(text);
|
|
return this;
|
|
}
|
|
|
|
@override
|
|
Description addDescriptionOf(dynamic value) {
|
|
if (value is Matcher) {
|
|
value.describe(this);
|
|
return this;
|
|
} else {
|
|
return add('$value');
|
|
}
|
|
}
|
|
|
|
@override
|
|
Description addAll(String start, String separator, String end, Iterable<dynamic> list) {
|
|
add(start);
|
|
if (list.isNotEmpty) {
|
|
addDescriptionOf(list.first);
|
|
for (dynamic item in list.skip(1)) {
|
|
add(separator);
|
|
addDescriptionOf(item);
|
|
}
|
|
}
|
|
add(end);
|
|
return this;
|
|
}
|
|
|
|
@override
|
|
String toString() => '$_text';
|
|
}
|