blob: 99d44596f925fbe85f76b5cb6990e6665f36a5ea [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.
// ignore_for_file: deprecated_member_use_from_same_package
import 'package:matcher/matcher.dart';
import 'package:test/test.dart' show test, group;
import 'test_utils.dart';
void main() {
_test(isMap, {}, name: 'Map');
_test(isList, [], name: 'List');
_test(isArgumentError, ArgumentError());
_test(isCastError, TypeError());
_test<Exception>(isException, const FormatException());
_test(isFormatException, const FormatException());
_test(isStateError, StateError('oops'));
_test(isRangeError, RangeError('oops'));
_test(isUnimplementedError, UnimplementedError('oops'));
_test(isUnsupportedError, UnsupportedError('oops'));
_test(isConcurrentModificationError, ConcurrentModificationError());
_test(isCyclicInitializationError, Error());
_test<NoSuchMethodError?>(isNoSuchMethodError, null,
name: 'NoSuchMethodError');
_test(isNullThrownError, TypeError());
group('custom `TypeMatcher`', () {
_test(const isInstanceOf<String>(), 'hello');
_test(const _StringMatcher(), 'hello');
_test(const TypeMatcher<String>(), 'hello');
_test(isA<String>(), 'hello');
});
}
void _test<T>(Matcher typeMatcher, T matchingInstance, {String? name}) {
name ??= T.toString();
group('for `$name`', () {
if (matchingInstance != null) {
test('succeeds', () {
shouldPass(matchingInstance, typeMatcher);
});
}
test('fails', () {
shouldFail(
const _TestType(),
typeMatcher,
"Expected: <Instance of '$name'> Actual: <Instance of '_TestType'>"
" Which: is not an instance of '$name'",
);
});
});
}
// Validate that existing implementations continue to work.
class _StringMatcher extends TypeMatcher {
const _StringMatcher() : super('String');
@override
bool matches(dynamic item, Map matchState) => item is String;
}
class _TestType {
const _TestType();
}