Skip to content

Commit d3705f3

Browse files
authored
Add android workflow test (flutter#14260)
Adds unit tests for AndroidWorkflow.runLicenseManager().
1 parent 74478d1 commit d3705f3

File tree

2 files changed

+86
-0
lines changed

2 files changed

+86
-0
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
// Copyright 2018 The Chromium Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'package:file/memory.dart';
6+
import 'package:flutter_tools/src/base/file_system.dart';
7+
import 'package:flutter_tools/src/base/io.dart';
8+
import 'package:flutter_tools/src/android/android_sdk.dart';
9+
import 'package:flutter_tools/src/android/android_workflow.dart';
10+
import 'package:mockito/mockito.dart';
11+
import 'package:platform/platform.dart';
12+
import 'package:process/process.dart';
13+
import 'package:test/test.dart';
14+
15+
import '../src/common.dart';
16+
import '../src/context.dart';
17+
import '../src/mocks.dart' show MockAndroidSdk, MockProcessManager, MockStdio;
18+
19+
void main() {
20+
AndroidSdk sdk;
21+
MemoryFileSystem fs;
22+
MockProcessManager processManager;
23+
MockStdio stdio;
24+
25+
setUp(() {
26+
sdk = new MockAndroidSdk();
27+
fs = new MemoryFileSystem();
28+
processManager = new MockProcessManager();
29+
stdio = new MockStdio();
30+
});
31+
32+
testUsingContext('runLicenseManager succeeds for version >= 26', () async {
33+
fs.directory('/home/me').createSync(recursive: true);
34+
MockAndroidSdk.createSdkDirectory();
35+
when(sdk.sdkManagerPath).thenReturn('/foo/bar/sdkmanager');
36+
when(sdk.sdkManagerVersion).thenReturn('26.0.0');
37+
38+
expect(await AndroidWorkflow.runLicenseManager(), isTrue);
39+
}, overrides: <Type, Generator>{
40+
AndroidSdk: () => sdk,
41+
FileSystem: () => fs,
42+
Platform: () => new FakePlatform()..environment = <String, String>{'HOME': '/home/me'},
43+
ProcessManager: () => processManager,
44+
Stdio: () => stdio,
45+
});
46+
47+
testUsingContext('runLicenseManager errors for version < 26', () async {
48+
fs.directory('/home/me').createSync(recursive: true);
49+
MockAndroidSdk.createSdkDirectory();
50+
when(sdk.sdkManagerPath).thenReturn('/foo/bar/sdkmanager');
51+
when(sdk.sdkManagerVersion).thenReturn('25.0.0');
52+
53+
expect(AndroidWorkflow.runLicenseManager(), throwsToolExit());
54+
}, overrides: <Type, Generator>{
55+
AndroidSdk: () => sdk,
56+
FileSystem: () => fs,
57+
Platform: () => new FakePlatform()..environment = <String, String>{'HOME': '/home/me'},
58+
ProcessManager: () => processManager,
59+
Stdio: () => stdio,
60+
});
61+
62+
testUsingContext('runLicenseManager errors when sdkmanager is not found', () async {
63+
fs.directory('/home/me').createSync(recursive: true);
64+
MockAndroidSdk.createSdkDirectory();
65+
when(sdk.sdkManagerPath).thenReturn('/foo/bar/sdkmanager');
66+
processManager.succeed = false;
67+
68+
expect(AndroidWorkflow.runLicenseManager(), throwsToolExit());
69+
}, overrides: <Type, Generator>{
70+
AndroidSdk: () => sdk,
71+
FileSystem: () => fs,
72+
Platform: () => new FakePlatform()..environment = <String, String>{'HOME': '/home/me'},
73+
ProcessManager: () => processManager,
74+
Stdio: () => stdio,
75+
});
76+
}

packages/flutter_tools/test/src/mocks.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,12 @@ typedef Process ProcessFactory(List<String> command);
109109
/// A ProcessManager that starts Processes by delegating to a ProcessFactory.
110110
class MockProcessManager implements ProcessManager {
111111
ProcessFactory processFactory = (List<String> commands) => new MockProcess();
112+
bool succeed = true;
112113
List<String> commands;
113114

115+
@override
116+
bool canRun(dynamic command, { String workingDirectory }) => succeed;
117+
114118
@override
115119
Future<Process> start(
116120
List<dynamic> command, {
@@ -120,6 +124,12 @@ class MockProcessManager implements ProcessManager {
120124
bool runInShell: false,
121125
ProcessStartMode mode: ProcessStartMode.NORMAL,
122126
}) {
127+
if (!succeed) {
128+
final String executable = command[0];
129+
final List<String> arguments = command.length > 1 ? command.sublist(1) : <String>[];
130+
throw new ProcessException(executable, arguments);
131+
}
132+
123133
commands = command;
124134
return new Future<Process>.value(processFactory(command));
125135
}

0 commit comments

Comments
 (0)