Add android workflow test (#14260)
Adds unit tests for AndroidWorkflow.runLicenseManager().
diff --git a/packages/flutter_tools/test/android/android_workflow_test.dart b/packages/flutter_tools/test/android/android_workflow_test.dart
new file mode 100644
index 0000000..b2113ea
--- /dev/null
+++ b/packages/flutter_tools/test/android/android_workflow_test.dart
@@ -0,0 +1,76 @@
+// Copyright 2018 The Chromium 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/memory.dart';
+import 'package:flutter_tools/src/base/file_system.dart';
+import 'package:flutter_tools/src/base/io.dart';
+import 'package:flutter_tools/src/android/android_sdk.dart';
+import 'package:flutter_tools/src/android/android_workflow.dart';
+import 'package:mockito/mockito.dart';
+import 'package:platform/platform.dart';
+import 'package:process/process.dart';
+import 'package:test/test.dart';
+
+import '../src/common.dart';
+import '../src/context.dart';
+import '../src/mocks.dart' show MockAndroidSdk, MockProcessManager, MockStdio;
+
+void main() {
+ AndroidSdk sdk;
+ MemoryFileSystem fs;
+ MockProcessManager processManager;
+ MockStdio stdio;
+
+ setUp(() {
+ sdk = new MockAndroidSdk();
+ fs = new MemoryFileSystem();
+ processManager = new MockProcessManager();
+ stdio = new MockStdio();
+ });
+
+ testUsingContext('runLicenseManager succeeds for version >= 26', () async {
+ fs.directory('/home/me').createSync(recursive: true);
+ MockAndroidSdk.createSdkDirectory();
+ when(sdk.sdkManagerPath).thenReturn('/foo/bar/sdkmanager');
+ when(sdk.sdkManagerVersion).thenReturn('26.0.0');
+
+ expect(await AndroidWorkflow.runLicenseManager(), isTrue);
+ }, overrides: <Type, Generator>{
+ AndroidSdk: () => sdk,
+ FileSystem: () => fs,
+ Platform: () => new FakePlatform()..environment = <String, String>{'HOME': '/home/me'},
+ ProcessManager: () => processManager,
+ Stdio: () => stdio,
+ });
+
+ testUsingContext('runLicenseManager errors for version < 26', () async {
+ fs.directory('/home/me').createSync(recursive: true);
+ MockAndroidSdk.createSdkDirectory();
+ when(sdk.sdkManagerPath).thenReturn('/foo/bar/sdkmanager');
+ when(sdk.sdkManagerVersion).thenReturn('25.0.0');
+
+ expect(AndroidWorkflow.runLicenseManager(), throwsToolExit());
+ }, overrides: <Type, Generator>{
+ AndroidSdk: () => sdk,
+ FileSystem: () => fs,
+ Platform: () => new FakePlatform()..environment = <String, String>{'HOME': '/home/me'},
+ ProcessManager: () => processManager,
+ Stdio: () => stdio,
+ });
+
+ testUsingContext('runLicenseManager errors when sdkmanager is not found', () async {
+ fs.directory('/home/me').createSync(recursive: true);
+ MockAndroidSdk.createSdkDirectory();
+ when(sdk.sdkManagerPath).thenReturn('/foo/bar/sdkmanager');
+ processManager.succeed = false;
+
+ expect(AndroidWorkflow.runLicenseManager(), throwsToolExit());
+ }, overrides: <Type, Generator>{
+ AndroidSdk: () => sdk,
+ FileSystem: () => fs,
+ Platform: () => new FakePlatform()..environment = <String, String>{'HOME': '/home/me'},
+ ProcessManager: () => processManager,
+ Stdio: () => stdio,
+ });
+}
diff --git a/packages/flutter_tools/test/src/mocks.dart b/packages/flutter_tools/test/src/mocks.dart
index d6c0217..6c29a5e 100644
--- a/packages/flutter_tools/test/src/mocks.dart
+++ b/packages/flutter_tools/test/src/mocks.dart
@@ -109,9 +109,13 @@
/// A ProcessManager that starts Processes by delegating to a ProcessFactory.
class MockProcessManager implements ProcessManager {
ProcessFactory processFactory = (List<String> commands) => new MockProcess();
+ bool succeed = true;
List<String> commands;
@override
+ bool canRun(dynamic command, { String workingDirectory }) => succeed;
+
+ @override
Future<Process> start(
List<dynamic> command, {
String workingDirectory,
@@ -120,6 +124,12 @@
bool runInShell: false,
ProcessStartMode mode: ProcessStartMode.NORMAL,
}) {
+ if (!succeed) {
+ final String executable = command[0];
+ final List<String> arguments = command.length > 1 ? command.sublist(1) : <String>[];
+ throw new ProcessException(executable, arguments);
+ }
+
commands = command;
return new Future<Process>.value(processFactory(command));
}