5
5
import 'package:file/memory.dart' ;
6
6
import 'package:flutter_tools/src/android/android_sdk.dart' ;
7
7
import 'package:flutter_tools/src/base/file_system.dart' ;
8
+ import 'package:flutter_tools/src/base/io.dart' show ProcessResult;
8
9
import 'package:flutter_tools/src/base/platform.dart' ;
9
10
import 'package:flutter_tools/src/base/config.dart' ;
11
+ import 'package:mockito/mockito.dart' ;
12
+ import 'package:process/process.dart' ;
10
13
import 'package:test/test.dart' ;
11
14
15
+ import '../src/common.dart' ;
12
16
import '../src/context.dart' ;
13
17
18
+ class MockProcessManager extends Mock implements ProcessManager {}
19
+
14
20
void main () {
15
21
MemoryFileSystem fs;
22
+ MockProcessManager processManager;
16
23
17
24
setUp (() {
18
25
fs = new MemoryFileSystem ();
26
+ processManager = new MockProcessManager ();
19
27
});
20
28
21
29
group ('android_sdk AndroidSdk' , () {
@@ -48,6 +56,56 @@ void main() {
48
56
FileSystem : () => fs,
49
57
});
50
58
59
+ testUsingContext ('returns sdkmanager path' , () {
60
+ sdkDir = _createSdkDirectory ();
61
+ Config .instance.setValue ('android-sdk' , sdkDir.path);
62
+
63
+ final AndroidSdk sdk = AndroidSdk .locateAndroidSdk ();
64
+ expect (sdk.sdkManagerPath, fs.path.join (sdk.directory, 'tools' , 'bin' , 'sdkmanager' ));
65
+ }, overrides: < Type , Generator > {
66
+ FileSystem : () => fs,
67
+ });
68
+
69
+ testUsingContext ('returns sdkmanager version' , () {
70
+ sdkDir = _createSdkDirectory ();
71
+ Config .instance.setValue ('android-sdk' , sdkDir.path);
72
+
73
+ final AndroidSdk sdk = AndroidSdk .locateAndroidSdk ();
74
+ when (processManager.canRun (sdk.sdkManagerPath)).thenReturn (true );
75
+ when (processManager.runSync (< String > [sdk.sdkManagerPath, '--version' ]))
76
+ .thenReturn (new ProcessResult (1 , 0 , '26.1.1\n ' , '' ));
77
+ expect (sdk.sdkManagerVersion, '26.1.1' );
78
+ }, overrides: < Type , Generator > {
79
+ FileSystem : () => fs,
80
+ ProcessManager : () => processManager,
81
+ });
82
+
83
+ testUsingContext ('throws on sdkmanager version check failure' , () {
84
+ sdkDir = _createSdkDirectory ();
85
+ Config .instance.setValue ('android-sdk' , sdkDir.path);
86
+
87
+ final AndroidSdk sdk = AndroidSdk .locateAndroidSdk ();
88
+ when (processManager.canRun (sdk.sdkManagerPath)).thenReturn (true );
89
+ when (processManager.runSync (< String > [sdk.sdkManagerPath, '--version' ]))
90
+ .thenReturn (new ProcessResult (1 , 1 , '26.1.1\n ' , 'Mystery error' ));
91
+ expect (() => sdk.sdkManagerVersion, throwsToolExit (exitCode: 1 ));
92
+ }, overrides: < Type , Generator > {
93
+ FileSystem : () => fs,
94
+ ProcessManager : () => processManager,
95
+ });
96
+
97
+ testUsingContext ('throws on sdkmanager version check if sdkmanager not found' , () {
98
+ sdkDir = _createSdkDirectory (withSdkManager: false );
99
+ Config .instance.setValue ('android-sdk' , sdkDir.path);
100
+
101
+ final AndroidSdk sdk = AndroidSdk .locateAndroidSdk ();
102
+ when (processManager.canRun (sdk.sdkManagerPath)).thenReturn (false );
103
+ expect (() => sdk.sdkManagerVersion, throwsToolExit ());
104
+ }, overrides: < Type , Generator > {
105
+ FileSystem : () => fs,
106
+ ProcessManager : () => processManager,
107
+ });
108
+
51
109
group ('ndk' , () {
52
110
const < String , String > {
53
111
'linux' : 'linux-x86_64' ,
@@ -102,8 +160,12 @@ void main() {
102
160
});
103
161
}
104
162
105
- Directory _createSdkDirectory (
106
- {bool withAndroidN: false , String withNdkDir, bool withNdkSysroot: false }) {
163
+ Directory _createSdkDirectory ({
164
+ bool withAndroidN: false ,
165
+ String withNdkDir,
166
+ bool withNdkSysroot: false ,
167
+ bool withSdkManager: true ,
168
+ }) {
107
169
final Directory dir = fs.systemTempDirectory.createTempSync ('android-sdk' );
108
170
109
171
_createSdkFile (dir, 'platform-tools/adb' );
@@ -121,6 +183,9 @@ Directory _createSdkDirectory(
121
183
_createSdkFile (dir, 'platforms/android-N/build.prop' , contents: _buildProp);
122
184
}
123
185
186
+ if (withSdkManager)
187
+ _createSdkFile (dir, 'tools/bin/sdkmanager' );
188
+
124
189
if (withNdkDir != null ) {
125
190
final String ndkCompiler = fs.path.join (
126
191
'ndk-bundle' ,
0 commit comments