| Index: pkg/analysis_server/test/integration/integration_tests.dart
|
| diff --git a/pkg/analysis_server/test/integration/integration_tests.dart b/pkg/analysis_server/test/integration/integration_tests.dart
|
| index 798e7432e68fb4cdb80ceb0b0e9c1ed9f35788ba..d7112737a4daf9247eece4d0570c78dde3119f06 100644
|
| --- a/pkg/analysis_server/test/integration/integration_tests.dart
|
| +++ b/pkg/analysis_server/test/integration/integration_tests.dart
|
| @@ -456,6 +456,50 @@ class _ListOf extends Matcher {
|
| Matcher isListOf(Matcher elementMatcher) => new _ListOf(elementMatcher);
|
|
|
| /**
|
| + * Matcher that matches a union of different types, each of which is described
|
| + * by a matcher.
|
| + */
|
| +class _OneOf extends Matcher {
|
| + /**
|
| + * Matchers for the individual choices.
|
| + */
|
| + final List<Matcher> choiceMatchers;
|
| +
|
| + _OneOf(this.choiceMatchers);
|
| +
|
| + @override
|
| + bool matches(item, Map matchState) {
|
| + for (Matcher choiceMatcher in choiceMatchers) {
|
| + Map subState = {};
|
| + if (choiceMatcher.matches(item, subState)) {
|
| + return true;
|
| + }
|
| + }
|
| + return false;
|
| + }
|
| +
|
| + @override
|
| + Description describe(Description description) {
|
| + for (int i = 0; i < choiceMatchers.length; i++) {
|
| + if (i != 0) {
|
| + if (choiceMatchers.length == 2) {
|
| + description = description.add(' or ');
|
| + } else {
|
| + description = description.add(', ');
|
| + if (i == choiceMatchers.length - 1) {
|
| + description = description.add('or ');
|
| + }
|
| + }
|
| + }
|
| + description = description.addDescriptionOf(choiceMatchers[i]);
|
| + }
|
| + return description;
|
| + }
|
| +}
|
| +
|
| +Matcher isOneOf(List<Matcher> choiceMatchers) => new _OneOf(choiceMatchers);
|
| +
|
| +/**
|
| * Matcher that matches a map of objects, where each key/value pair in the
|
| * map satisies the given key and value matchers.
|
| */
|
|
|