install_test.dart 3.78 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
Ian Fischer's avatar
Ian Fischer committed
2 3 4
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

5 6
// @dart = 2.8

7
import 'package:file/file.dart';
8
import 'package:flutter_tools/src/android/android_device.dart';
9
import 'package:flutter_tools/src/android/application_package.dart';
10
import 'package:flutter_tools/src/application_package.dart';
11
import 'package:flutter_tools/src/base/file_system.dart';
12
import 'package:flutter_tools/src/build_info.dart';
13
import 'package:flutter_tools/src/cache.dart';
14
import 'package:flutter_tools/src/commands/install.dart';
15
import 'package:flutter_tools/src/ios/application_package.dart';
16 17
import 'package:flutter_tools/src/ios/devices.dart';
import 'package:test/fake.dart';
Ian Fischer's avatar
Ian Fischer committed
18

19 20
import '../../src/common.dart';
import '../../src/context.dart';
21
import '../../src/test_flutter_command_runner.dart';
22

23
void main() {
Ian Fischer's avatar
Ian Fischer committed
24
  group('install', () {
25 26 27 28
    setUpAll(() {
      Cache.disableLocking();
    });

29
    testUsingContext('returns 0 when Android is connected and ready for an install', () async {
30
      final InstallCommand command = InstallCommand();
31
      command.applicationPackages = FakeApplicationPackageFactory(FakeAndroidApk());
32

33
      final FakeAndroidDevice device = FakeAndroidDevice();
34
      testDeviceManager.addDevice(device);
35

36
      await createTestCommandRunner(command).run(<String>['install']);
37
    }, overrides: <Type, Generator>{
38
      Cache: () => Cache.test(processManager: FakeProcessManager.any()),
39 40
    });

41 42
    testUsingContext('returns 1 when targeted device is not Android with --device-user', () async {
      final InstallCommand command = InstallCommand();
43
      command.applicationPackages = FakeApplicationPackageFactory(FakeAndroidApk());
44

45
      final FakeIOSDevice device = FakeIOSDevice();
46 47
      testDeviceManager.addDevice(device);

48
      expect(() async => createTestCommandRunner(command).run(<String>['install', '--device-user', '10']),
49 50
        throwsToolExit(message: '--device-user is only supported for Android'));
    }, overrides: <Type, Generator>{
51
      Cache: () => Cache.test(processManager: FakeProcessManager.any()),
52 53
    });

54
    testUsingContext('returns 0 when iOS is connected and ready for an install', () async {
55
      final InstallCommand command = InstallCommand();
56
      command.applicationPackages = FakeApplicationPackageFactory(FakeIOSApp());
57

58
      final FakeIOSDevice device = FakeIOSDevice();
59
      testDeviceManager.addDevice(device);
60

61
      await createTestCommandRunner(command).run(<String>['install']);
62
    }, overrides: <Type, Generator>{
63
      Cache: () => Cache.test(processManager: FakeProcessManager.any()),
Ian Fischer's avatar
Ian Fischer committed
64 65 66
    });
  });
}
67 68 69 70 71 72 73 74 75 76 77 78 79

class FakeApplicationPackageFactory extends Fake implements ApplicationPackageFactory {
  FakeApplicationPackageFactory(this.app);

  final ApplicationPackage app;

  @override
  Future<ApplicationPackage> getPackageForPlatform(TargetPlatform platform, {BuildInfo buildInfo, File applicationBinary}) async {
    return app;
  }
}
class FakeIOSApp extends Fake implements IOSApp {}
class FakeAndroidApk extends Fake implements AndroidApk {}
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113

class FakeIOSDevice extends Fake implements IOSDevice {
  @override
  Future<TargetPlatform> get targetPlatform async => TargetPlatform.ios;

  @override
  Future<bool> isAppInstalled(
    IOSApp app, {
    String userIdentifier,
  }) async => false;

  @override
  Future<bool> installApp(
    IOSApp app, {
    String userIdentifier,
  }) async => true;
}

class FakeAndroidDevice extends Fake implements AndroidDevice {
  @override
  Future<TargetPlatform> get targetPlatform async => TargetPlatform.android_arm;

  @override
  Future<bool> isAppInstalled(
    AndroidApk app, {
    String userIdentifier,
  }) async => false;

  @override
  Future<bool> installApp(
    AndroidApk app, {
    String userIdentifier,
  }) async => true;
}