mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00

This auto-formats all *.dart files in the repository outside of the `engine` subdirectory and enforces that these files stay formatted with a presubmit check. **Reviewers:** Please carefully review all the commits except for the one titled "formatted". The "formatted" commit was auto-generated by running `dev/tools/format.sh -a -f`. The other commits were hand-crafted to prepare the repo for the formatting change. I recommend reviewing the commits one-by-one via the "Commits" tab and avoiding Github's "Files changed" tab as it will likely slow down your browser because of the size of this PR. --------- Co-authored-by: Kate Lovett <katelovett@google.com> Co-authored-by: LongCatIsLooong <31859944+LongCatIsLooong@users.noreply.github.com>
213 lines
7.1 KiB
Dart
213 lines
7.1 KiB
Dart
// Copyright 2014 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'package:file/file.dart';
|
|
import 'package:file/memory.dart';
|
|
import 'package:flutter_tools/src/android/android_device.dart';
|
|
import 'package:flutter_tools/src/android/application_package.dart';
|
|
import 'package:flutter_tools/src/application_package.dart';
|
|
import 'package:flutter_tools/src/base/file_system.dart';
|
|
import 'package:flutter_tools/src/build_info.dart';
|
|
import 'package:flutter_tools/src/cache.dart';
|
|
import 'package:flutter_tools/src/commands/install.dart';
|
|
import 'package:flutter_tools/src/ios/application_package.dart';
|
|
import 'package:flutter_tools/src/ios/devices.dart';
|
|
import 'package:test/fake.dart';
|
|
|
|
import '../../src/common.dart';
|
|
import '../../src/context.dart';
|
|
import '../../src/test_flutter_command_runner.dart';
|
|
|
|
void main() {
|
|
group('install', () {
|
|
setUpAll(() {
|
|
Cache.disableLocking();
|
|
});
|
|
|
|
late FileSystem fileSystem;
|
|
setUp(() {
|
|
fileSystem = MemoryFileSystem.test();
|
|
fileSystem.file('pubspec.yaml').createSync(recursive: true);
|
|
});
|
|
|
|
testUsingContext(
|
|
'returns 0 when Android is connected and ready for an install',
|
|
() async {
|
|
final InstallCommand command = InstallCommand(verboseHelp: false);
|
|
command.applicationPackages = FakeApplicationPackageFactory(FakeAndroidApk());
|
|
|
|
final FakeAndroidDevice device = FakeAndroidDevice();
|
|
testDeviceManager.addAttachedDevice(device);
|
|
|
|
await createTestCommandRunner(command).run(<String>['install']);
|
|
},
|
|
overrides: <Type, Generator>{
|
|
Cache: () => Cache.test(processManager: FakeProcessManager.any()),
|
|
FileSystem: () => fileSystem,
|
|
ProcessManager: () => FakeProcessManager.any(),
|
|
},
|
|
);
|
|
|
|
testUsingContext(
|
|
'returns 1 when targeted device is not Android with --device-user',
|
|
() async {
|
|
final InstallCommand command = InstallCommand(verboseHelp: false);
|
|
command.applicationPackages = FakeApplicationPackageFactory(FakeAndroidApk());
|
|
|
|
final FakeIOSDevice device = FakeIOSDevice();
|
|
testDeviceManager.addAttachedDevice(device);
|
|
|
|
expect(
|
|
() async =>
|
|
createTestCommandRunner(command).run(<String>['install', '--device-user', '10']),
|
|
throwsToolExit(message: '--device-user is only supported for Android'),
|
|
);
|
|
},
|
|
overrides: <Type, Generator>{
|
|
Cache: () => Cache.test(processManager: FakeProcessManager.any()),
|
|
FileSystem: () => fileSystem,
|
|
ProcessManager: () => FakeProcessManager.any(),
|
|
},
|
|
);
|
|
|
|
testUsingContext(
|
|
'returns 0 when iOS is connected and ready for an install',
|
|
() async {
|
|
final InstallCommand command = InstallCommand(verboseHelp: false);
|
|
command.applicationPackages = FakeApplicationPackageFactory(FakeIOSApp());
|
|
|
|
final FakeIOSDevice device = FakeIOSDevice();
|
|
testDeviceManager.addAttachedDevice(device);
|
|
|
|
await createTestCommandRunner(command).run(<String>['install']);
|
|
},
|
|
overrides: <Type, Generator>{
|
|
Cache: () => Cache.test(processManager: FakeProcessManager.any()),
|
|
FileSystem: () => fileSystem,
|
|
ProcessManager: () => FakeProcessManager.any(),
|
|
},
|
|
);
|
|
|
|
testUsingContext(
|
|
'fails when prebuilt binary not found',
|
|
() async {
|
|
final InstallCommand command = InstallCommand(verboseHelp: false);
|
|
command.applicationPackages = FakeApplicationPackageFactory(FakeAndroidApk());
|
|
|
|
final FakeAndroidDevice device = FakeAndroidDevice();
|
|
testDeviceManager.addAttachedDevice(device);
|
|
|
|
expect(
|
|
() async => createTestCommandRunner(
|
|
command,
|
|
).run(<String>['install', '--use-application-binary', 'bogus']),
|
|
throwsToolExit(message: 'Prebuilt binary bogus does not exist'),
|
|
);
|
|
},
|
|
overrides: <Type, Generator>{
|
|
Cache: () => Cache.test(processManager: FakeProcessManager.any()),
|
|
FileSystem: () => fileSystem,
|
|
ProcessManager: () => FakeProcessManager.any(),
|
|
},
|
|
);
|
|
|
|
testUsingContext(
|
|
'succeeds using prebuilt binary',
|
|
() async {
|
|
final InstallCommand command = InstallCommand(verboseHelp: false);
|
|
command.applicationPackages = FakeApplicationPackageFactory(FakeAndroidApk());
|
|
|
|
final FakeAndroidDevice device = FakeAndroidDevice();
|
|
testDeviceManager.addAttachedDevice(device);
|
|
fileSystem.file('binary').createSync(recursive: true);
|
|
|
|
await createTestCommandRunner(
|
|
command,
|
|
).run(<String>['install', '--use-application-binary', 'binary']);
|
|
},
|
|
overrides: <Type, Generator>{
|
|
Cache: () => Cache.test(processManager: FakeProcessManager.any()),
|
|
FileSystem: () => fileSystem,
|
|
ProcessManager: () => FakeProcessManager.any(),
|
|
},
|
|
);
|
|
|
|
testUsingContext(
|
|
'Passes flavor to application package.',
|
|
() async {
|
|
const String flavor = 'free';
|
|
final InstallCommand command = InstallCommand(verboseHelp: false);
|
|
final FakeApplicationPackageFactory fakeAppFactory = FakeApplicationPackageFactory(
|
|
FakeIOSApp(),
|
|
);
|
|
command.applicationPackages = fakeAppFactory;
|
|
|
|
final FakeIOSDevice device = FakeIOSDevice();
|
|
testDeviceManager.addAttachedDevice(device);
|
|
|
|
await createTestCommandRunner(command).run(<String>['install', '--flavor', flavor]);
|
|
expect(fakeAppFactory.buildInfo, isNotNull);
|
|
expect(fakeAppFactory.buildInfo!.flavor, flavor);
|
|
},
|
|
overrides: <Type, Generator>{
|
|
Cache: () => Cache.test(processManager: FakeProcessManager.any()),
|
|
FileSystem: () => fileSystem,
|
|
ProcessManager: () => FakeProcessManager.any(),
|
|
},
|
|
);
|
|
});
|
|
}
|
|
|
|
class FakeApplicationPackageFactory extends Fake implements ApplicationPackageFactory {
|
|
FakeApplicationPackageFactory(this.app);
|
|
|
|
final ApplicationPackage app;
|
|
BuildInfo? buildInfo;
|
|
|
|
@override
|
|
Future<ApplicationPackage> getPackageForPlatform(
|
|
TargetPlatform platform, {
|
|
BuildInfo? buildInfo,
|
|
File? applicationBinary,
|
|
}) async {
|
|
this.buildInfo = buildInfo;
|
|
return app;
|
|
}
|
|
}
|
|
|
|
class FakeIOSApp extends Fake implements IOSApp {}
|
|
|
|
class FakeAndroidApk extends Fake implements AndroidApk {}
|
|
|
|
class FakeIOSDevice extends Fake implements IOSDevice {
|
|
@override
|
|
Future<TargetPlatform> get targetPlatform async => TargetPlatform.ios;
|
|
|
|
@override
|
|
Future<bool> isAppInstalled(ApplicationPackage app, {String? userIdentifier}) async => false;
|
|
|
|
@override
|
|
Future<bool> installApp(IOSApp app, {String? userIdentifier}) async => true;
|
|
|
|
@override
|
|
String get name => 'iOS';
|
|
}
|
|
|
|
class FakeAndroidDevice extends Fake implements AndroidDevice {
|
|
@override
|
|
Future<TargetPlatform> get targetPlatform async => TargetPlatform.android_arm;
|
|
|
|
@override
|
|
Future<bool> isAppInstalled(ApplicationPackage app, {String? userIdentifier}) async => false;
|
|
|
|
@override
|
|
Future<bool> installApp(AndroidApk app, {String? userIdentifier}) async => true;
|
|
|
|
@override
|
|
String get name => 'Android';
|
|
|
|
@override
|
|
bool get ephemeral => true;
|
|
}
|