// 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.

// @dart=2.9

// This file explicitly does _not_ end in `_test.dart`, so that it is not picked
// up by `pub run test`. It is here for coveralls.

import 'builder/auto_mocks_test.dart' as builder_auto_mocks_test;
import 'builder/custom_mocks_test.dart' as builder_custom_mocks_test;
import 'capture_test.dart' as capture_test;
import 'invocation_matcher_test.dart' as invocation_matcher_test;
import 'mockito_test.dart' as mockito_test;
import 'until_called_test.dart' as until_called_test;
import 'verify_test.dart' as verify_test;

void main() {
  builder_auto_mocks_test.main();
  builder_custom_mocks_test.main();
  capture_test.main();
  invocation_matcher_test.main();
  mockito_test.main();
  until_called_test.main();
  verify_test.main();
}
