blob: 74cfdcba84a5e3ec8ea01cf5d808c1d83553020a [file] [log] [blame]
// Copyright 2018 Dart Mockito authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ignore_for_file: strong_mode_implicit_dynamic_function
@deprecated
library mockito.test.deprecated_apis.verify_test;
import 'package:mockito/mockito.dart';
import 'package:test/test.dart';
class _RealClass {
_RealClass innerObj;
String methodWithoutArgs() => 'Real';
String methodWithNormalArgs(int x) => 'Real';
String methodWithListArgs(List<int> x) => 'Real';
String methodWithOptionalArg([int x]) => 'Real';
String methodWithPositionalArgs(int x, [int y]) => 'Real';
String methodWithNamedArgs(int x, {int y}) => 'Real';
String methodWithOnlyNamedArgs({int y, int z}) => 'Real';
String methodWithObjArgs(_RealClass x) => 'Real';
String get getter => 'Real';
set setter(String arg) {
throw StateError('I must be mocked');
}
String methodWithLongArgs(LongToString a, LongToString b,
{LongToString c, LongToString d}) =>
'Real';
}
class LongToString {
final List aList;
final Map aMap;
final String aString;
LongToString(this.aList, this.aMap, this.aString);
@override
String toString() => 'LongToString<\n'
' aList: $aList\n'
' aMap: $aMap\n'
' aString: $aString\n'
'>';
}
class _MockedClass extends Mock implements _RealClass {}
void expectFail(String expectedMessage, void Function() expectedToFail) {
try {
expectedToFail();
fail('It was expected to fail!');
} catch (e) {
if (!(e is TestFailure)) {
rethrow;
} else {
if (expectedMessage != e.message) {
throw TestFailure('Failed, but with wrong message: ${e.message}');
}
}
}
}
String noMatchingCallsFooter = '(If you called `verify(...).called(0);`, '
'please instead use `verifyNever(...);`.)';
void main() {
_MockedClass mock;
setUp(() {
mock = _MockedClass();
});
tearDown(() {
// In some of the tests that expect an Error to be thrown, Mockito's
// global state can become invalid. Reset it.
resetMockitoState();
});
group('verify', () {
test('should mock method with argument matcher', () {
mock.methodWithNormalArgs(100);
expectFail(
'No matching calls. All calls: '
'_MockedClass.methodWithNormalArgs(100)\n'
'$noMatchingCallsFooter', () {
verify(mock.methodWithNormalArgs(typed(argThat(greaterThan(100)))));
});
verify(
mock.methodWithNormalArgs(typed(argThat(greaterThanOrEqualTo(100)))));
});
test('should mock method with mix of argument matchers and real things',
() {
mock.methodWithPositionalArgs(100, 17);
expectFail(
'No matching calls. All calls: '
'_MockedClass.methodWithPositionalArgs(100, 17)\n'
'$noMatchingCallsFooter', () {
verify(mock.methodWithPositionalArgs(
typed(argThat(greaterThanOrEqualTo(100))), 18));
});
expectFail(
'No matching calls. All calls: '
'_MockedClass.methodWithPositionalArgs(100, 17)\n'
'$noMatchingCallsFooter', () {
verify(mock.methodWithPositionalArgs(
typed(argThat(greaterThan(100))), 17));
});
verify(mock.methodWithPositionalArgs(
typed(argThat(greaterThanOrEqualTo(100))), 17));
});
test('should mock method with mock args', () {
var m1 = named(_MockedClass(), name: 'm1');
mock.methodWithObjArgs(m1);
expectFail(
'No matching calls. All calls: _MockedClass.methodWithObjArgs(m1)\n'
'$noMatchingCallsFooter', () {
verify(mock.methodWithObjArgs(_MockedClass()));
});
verify(mock.methodWithObjArgs(m1));
});
});
}