// Mocks generated by Mockito 5.3.0 from annotations
// in camera_android_camerax/test/process_camera_provider_test.dart.
// Do not manually edit this file.

// ignore_for_file: no_leading_underscores_for_library_prefixes
import 'dart:async' as _i3;

import 'package:mockito/mockito.dart' as _i1;

import 'test_camerax_library.pigeon.dart' as _i2;

// ignore_for_file: type=lint
// ignore_for_file: avoid_redundant_argument_values
// ignore_for_file: avoid_setters_without_getters
// ignore_for_file: comment_references
// ignore_for_file: implementation_imports
// ignore_for_file: invalid_use_of_visible_for_testing_member
// ignore_for_file: prefer_const_constructors
// ignore_for_file: unnecessary_parenthesis
// ignore_for_file: camel_case_types
// ignore_for_file: subtype_of_sealed_class

/// A class which mocks [TestProcessCameraProviderHostApi].
///
/// See the documentation for Mockito's code generation for more information.
class MockTestProcessCameraProviderHostApi extends _i1.Mock
    implements _i2.TestProcessCameraProviderHostApi {
  MockTestProcessCameraProviderHostApi() {
    _i1.throwOnMissingStub(this);
  }

  @override
  _i3.Future<int> getInstance() =>
      (super.noSuchMethod(Invocation.method(#getInstance, []),
          returnValue: _i3.Future<int>.value(0)) as _i3.Future<int>);
  @override
  List<int?> getAvailableCameraInfos(int? identifier) => (super.noSuchMethod(
      Invocation.method(#getAvailableCameraInfos, [identifier]),
      returnValue: <int?>[]) as List<int?>);
}
