[flutter_tools] Reorganize android_studio_test.dart (#124834)
[flutter_tools] Reorganize android_studio_test.dart
This commit is contained in:
parent
fd7d2d272b
commit
2cd768b893
@ -15,132 +15,88 @@ import '../../src/common.dart';
|
||||
import '../../src/context.dart';
|
||||
import '../../src/fake_process_manager.dart';
|
||||
|
||||
const String homeLinux = '/home/me';
|
||||
const String homeMac = '/Users/me';
|
||||
|
||||
const Map<String, Object> macStudioInfoPlist = <String, Object>{
|
||||
'CFBundleGetInfoString': 'Android Studio 3.3, build AI-182.5107.16.33.5199772. Copyright JetBrains s.r.o., (c) 2000-2018',
|
||||
'CFBundleShortVersionString': '3.3',
|
||||
'CFBundleVersion': 'AI-182.5107.16.33.5199772',
|
||||
'JVMOptions': <String, Object>{
|
||||
'Properties': <String, Object>{
|
||||
'idea.paths.selector': 'AndroidStudio3.3',
|
||||
'idea.platform.prefix': 'AndroidStudio',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const Map<String, Object> macStudioInfoPlist4_1 = <String, Object>{
|
||||
'CFBundleGetInfoString': 'Android Studio 4.1, build AI-201.8743.12.41.6858069. Copyright JetBrains s.r.o., (c) 2000-2020',
|
||||
'CFBundleShortVersionString': '4.1',
|
||||
'CFBundleVersion': 'AI-201.8743.12.41.6858069',
|
||||
'JVMOptions': <String, Object>{
|
||||
'Properties': <String, Object>{
|
||||
'idea.vendor.name' : 'Google',
|
||||
'idea.paths.selector': 'AndroidStudio4.1',
|
||||
'idea.platform.prefix': 'AndroidStudio',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const Map<String, Object> macStudioInfoPlist2020_3 = <String, Object>{
|
||||
'CFBundleGetInfoString': 'Android Studio 2020.3, build AI-203.7717.56.2031.7583922. Copyright JetBrains s.r.o., (c) 2000-2021',
|
||||
'CFBundleShortVersionString': '2020.3',
|
||||
'CFBundleVersion': 'AI-203.7717.56.2031.7583922',
|
||||
'JVMOptions': <String, Object>{
|
||||
'Properties': <String, Object>{
|
||||
'idea.vendor.name' : 'Google',
|
||||
'idea.paths.selector': 'AndroidStudio2020.3',
|
||||
'idea.platform.prefix': 'AndroidStudio',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const Map<String, Object> macStudioInfoPlist2022_1 = <String, Object>{
|
||||
'CFBundleGetInfoString': 'Android Studio 2022.1, build AI-221.6008.13.2211.9477386. Copyright JetBrains s.r.o., (c) 2000-2023',
|
||||
'CFBundleShortVersionString': '2022.1',
|
||||
'CFBundleVersion': 'AI-221.6008.13.2211.9477386',
|
||||
'JVMOptions': <String, Object>{
|
||||
'Properties': <String, Object>{
|
||||
'idea.vendor.name' : 'Google',
|
||||
'idea.paths.selector': 'AndroidStudio2022.1',
|
||||
'idea.platform.prefix': 'AndroidStudio',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const Map<String, Object> macStudioInfoPlistEAP = <String, Object>{
|
||||
'CFBundleGetInfoString': 'Android Studio EAP AI-212.5712.43.2112.8233820, build AI-212.5712.43.2112.8233820. Copyright JetBrains s.r.o., (c) 2000-2022',
|
||||
'CFBundleShortVersionString': 'EAP AI-212.5712.43.2112.8233820',
|
||||
'CFBundleVersion': 'AI-212.5712.43.2112.8233820',
|
||||
'JVMOptions': <String, Object>{
|
||||
'Properties': <String, Object>{
|
||||
'idea.vendor.name' : 'Google',
|
||||
'idea.paths.selector': 'AndroidStudio2021.2',
|
||||
'idea.platform.prefix': 'AndroidStudio',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
final Platform linuxPlatform = FakePlatform(
|
||||
environment: <String, String>{'HOME': homeLinux},
|
||||
);
|
||||
|
||||
final Platform windowsPlatform = FakePlatform(
|
||||
operatingSystem: 'windows',
|
||||
environment: <String, String>{
|
||||
'LOCALAPPDATA': r'C:\Users\Dash\AppData\Local',
|
||||
}
|
||||
);
|
||||
|
||||
Platform macPlatform() {
|
||||
return FakePlatform(
|
||||
operatingSystem: 'macos',
|
||||
environment: <String, String>{'HOME': homeMac},
|
||||
);
|
||||
}
|
||||
|
||||
void main() {
|
||||
late FileSystem fileSystem;
|
||||
|
||||
setUp(() {
|
||||
fileSystem = MemoryFileSystem.test();
|
||||
});
|
||||
group('installation detection on MacOS', () {
|
||||
const String homeMac = '/Users/me';
|
||||
|
||||
testUsingContext('pluginsPath on Linux extracts custom paths from home dir', () {
|
||||
const String installPath = '/opt/android-studio-with-cheese-5.0';
|
||||
const String studioHome = '$homeLinux/.AndroidStudioWithCheese5.0';
|
||||
const String homeFile = '$studioHome/system/.home';
|
||||
globals.fs.directory(installPath).createSync(recursive: true);
|
||||
globals.fs.file(homeFile).createSync(recursive: true);
|
||||
globals.fs.file(homeFile).writeAsStringSync(installPath);
|
||||
const Map<String, Object> macStudioInfoPlist3_3 = <String, Object>{
|
||||
'CFBundleGetInfoString': 'Android Studio 3.3, build AI-182.5107.16.33.5199772. Copyright JetBrains s.r.o., (c) 2000-2018',
|
||||
'CFBundleShortVersionString': '3.3',
|
||||
'CFBundleVersion': 'AI-182.5107.16.33.5199772',
|
||||
'JVMOptions': <String, Object>{
|
||||
'Properties': <String, Object>{
|
||||
'idea.paths.selector': 'AndroidStudio3.3',
|
||||
'idea.platform.prefix': 'AndroidStudio',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
final AndroidStudio studio =
|
||||
AndroidStudio.fromHomeDot(globals.fs.directory(studioHome))!;
|
||||
expect(studio, isNotNull);
|
||||
expect(studio.pluginsPath,
|
||||
equals('/home/me/.AndroidStudioWithCheese5.0/config/plugins'));
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
// Custom home paths are not supported on macOS nor Windows yet,
|
||||
// so we force the platform to fake Linux here.
|
||||
Platform: () => linuxPlatform,
|
||||
FileSystemUtils: () => FileSystemUtils(
|
||||
fileSystem: fileSystem,
|
||||
platform: linuxPlatform,
|
||||
),
|
||||
});
|
||||
const Map<String, Object> macStudioInfoPlist4_1 = <String, Object>{
|
||||
'CFBundleGetInfoString': 'Android Studio 4.1, build AI-201.8743.12.41.6858069. Copyright JetBrains s.r.o., (c) 2000-2020',
|
||||
'CFBundleShortVersionString': '4.1',
|
||||
'CFBundleVersion': 'AI-201.8743.12.41.6858069',
|
||||
'JVMOptions': <String, Object>{
|
||||
'Properties': <String, Object>{
|
||||
'idea.vendor.name' : 'Google',
|
||||
'idea.paths.selector': 'AndroidStudio4.1',
|
||||
'idea.platform.prefix': 'AndroidStudio',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
group('pluginsPath on Mac', () {
|
||||
const Map<String, Object> macStudioInfoPlist2020_3 = <String, Object>{
|
||||
'CFBundleGetInfoString': 'Android Studio 2020.3, build AI-203.7717.56.2031.7583922. Copyright JetBrains s.r.o., (c) 2000-2021',
|
||||
'CFBundleShortVersionString': '2020.3',
|
||||
'CFBundleVersion': 'AI-203.7717.56.2031.7583922',
|
||||
'JVMOptions': <String, Object>{
|
||||
'Properties': <String, Object>{
|
||||
'idea.vendor.name' : 'Google',
|
||||
'idea.paths.selector': 'AndroidStudio2020.3',
|
||||
'idea.platform.prefix': 'AndroidStudio',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const Map<String, Object> macStudioInfoPlist2022_1 = <String, Object>{
|
||||
'CFBundleGetInfoString': 'Android Studio 2022.1, build AI-221.6008.13.2211.9477386. Copyright JetBrains s.r.o., (c) 2000-2023',
|
||||
'CFBundleShortVersionString': '2022.1',
|
||||
'CFBundleVersion': 'AI-221.6008.13.2211.9477386',
|
||||
'JVMOptions': <String, Object>{
|
||||
'Properties': <String, Object>{
|
||||
'idea.vendor.name' : 'Google',
|
||||
'idea.paths.selector': 'AndroidStudio2022.1',
|
||||
'idea.platform.prefix': 'AndroidStudio',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const Map<String, Object> macStudioInfoPlistEAP = <String, Object>{
|
||||
'CFBundleGetInfoString': 'Android Studio EAP AI-212.5712.43.2112.8233820, build AI-212.5712.43.2112.8233820. Copyright JetBrains s.r.o., (c) 2000-2022',
|
||||
'CFBundleShortVersionString': 'EAP AI-212.5712.43.2112.8233820',
|
||||
'CFBundleVersion': 'AI-212.5712.43.2112.8233820',
|
||||
'JVMOptions': <String, Object>{
|
||||
'Properties': <String, Object>{
|
||||
'idea.vendor.name' : 'Google',
|
||||
'idea.paths.selector': 'AndroidStudio2021.2',
|
||||
'idea.platform.prefix': 'AndroidStudio',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
late FileSystem fileSystem;
|
||||
late FileSystemUtils fsUtils;
|
||||
late Platform platform;
|
||||
late FakePlistUtils plistUtils;
|
||||
late FakeProcessManager processManager;
|
||||
|
||||
setUp(() {
|
||||
fileSystem = MemoryFileSystem.test();
|
||||
plistUtils = FakePlistUtils();
|
||||
platform = macPlatform();
|
||||
platform = FakePlatform(
|
||||
operatingSystem: 'macos',
|
||||
environment: <String, String>{'HOME': homeMac},
|
||||
);
|
||||
fsUtils = FileSystemUtils(
|
||||
fileSystem: fileSystem,
|
||||
platform: platform,
|
||||
@ -148,7 +104,7 @@ void main() {
|
||||
processManager = FakeProcessManager.empty();
|
||||
});
|
||||
|
||||
testUsingContext('Can discover Android Studio >=4.1 location on Mac', () {
|
||||
testUsingContext('discovers Android Studio >=4.1 location', () {
|
||||
final String studioInApplicationPlistFolder = globals.fs.path.join(
|
||||
'/',
|
||||
'Application',
|
||||
@ -190,7 +146,7 @@ void main() {
|
||||
PlistParser: () => plistUtils,
|
||||
});
|
||||
|
||||
testUsingContext('Can discover Android Studio >=2020.3 location on Mac', () {
|
||||
testUsingContext('discovers Android Studio >=2020.3 location', () {
|
||||
final String studioInApplicationPlistFolder = globals.fs.path.join(
|
||||
'/',
|
||||
'Application',
|
||||
@ -232,7 +188,7 @@ void main() {
|
||||
PlistParser: () => plistUtils,
|
||||
});
|
||||
|
||||
testUsingContext('Can discover Android Studio <4.1 location on Mac', () {
|
||||
testUsingContext('discovers Android Studio <4.1 location', () {
|
||||
final String studioInApplicationPlistFolder = globals.fs.path.join(
|
||||
'/',
|
||||
'Application',
|
||||
@ -242,7 +198,7 @@ void main() {
|
||||
globals.fs.directory(studioInApplicationPlistFolder).createSync(recursive: true);
|
||||
|
||||
final String plistFilePath = globals.fs.path.join(studioInApplicationPlistFolder, 'Info.plist');
|
||||
plistUtils.fileContents[plistFilePath] = macStudioInfoPlist;
|
||||
plistUtils.fileContents[plistFilePath] = macStudioInfoPlist3_3;
|
||||
processManager.addCommand(FakeCommand(
|
||||
command: <String>[
|
||||
globals.fs.path.join(studioInApplicationPlistFolder, 'jre', 'jdk', 'Contents', 'Home', 'bin', 'java'),
|
||||
@ -273,7 +229,7 @@ void main() {
|
||||
PlistParser: () => plistUtils,
|
||||
});
|
||||
|
||||
testUsingContext('Can discover Android Studio EAP location on Mac', () {
|
||||
testUsingContext('discovers Android Studio EAP location', () {
|
||||
final String studioInApplicationPlistFolder = globals.fs.path.join(
|
||||
'/',
|
||||
'Application',
|
||||
@ -314,7 +270,7 @@ void main() {
|
||||
PlistParser: () => plistUtils,
|
||||
});
|
||||
|
||||
testUsingContext('Does not discover Android Studio with JetBrainsToolboxApp wrapper', () {
|
||||
testUsingContext('does not discover Android Studio with JetBrainsToolboxApp wrapper', () {
|
||||
final String applicationPlistFolder = globals.fs.path.join(
|
||||
'/',
|
||||
'Applications',
|
||||
@ -351,7 +307,7 @@ void main() {
|
||||
PlistParser: () => plistUtils,
|
||||
});
|
||||
|
||||
testUsingContext('Can discover installation from Spotlight query', () {
|
||||
testUsingContext('discovers installation from Spotlight query', () {
|
||||
// One in expected location.
|
||||
final String studioInApplication = fileSystem.path.join(
|
||||
'/',
|
||||
@ -446,7 +402,7 @@ void main() {
|
||||
globals.fs.directory(applicationPlistFolder).createSync(recursive: true);
|
||||
|
||||
final String applicationsPlistFilePath = globals.fs.path.join(applicationPlistFolder, 'Info.plist');
|
||||
plistUtils.fileContents[applicationsPlistFilePath] = macStudioInfoPlist;
|
||||
plistUtils.fileContents[applicationsPlistFilePath] = macStudioInfoPlist3_3;
|
||||
|
||||
final String homeDirectoryPlistFolder = globals.fs.path.join(
|
||||
globals.fsUtils.homeDirPath!,
|
||||
@ -469,7 +425,7 @@ void main() {
|
||||
PlistParser: () => plistUtils,
|
||||
});
|
||||
|
||||
testUsingContext('extracts custom paths for directly downloaded Android Studio on Mac', () {
|
||||
testUsingContext('extracts custom paths for directly downloaded Android Studio', () {
|
||||
final String studioInApplicationPlistFolder = globals.fs.path.join(
|
||||
'/',
|
||||
'Application',
|
||||
@ -479,7 +435,7 @@ void main() {
|
||||
globals.fs.directory(studioInApplicationPlistFolder).createSync(recursive: true);
|
||||
|
||||
final String plistFilePath = globals.fs.path.join(studioInApplicationPlistFolder, 'Info.plist');
|
||||
plistUtils.fileContents[plistFilePath] = macStudioInfoPlist;
|
||||
plistUtils.fileContents[plistFilePath] = macStudioInfoPlist3_3;
|
||||
final AndroidStudio studio = AndroidStudio.fromMacOSBundle(
|
||||
globals.fs.directory(studioInApplicationPlistFolder).parent.path,
|
||||
)!;
|
||||
@ -500,7 +456,7 @@ void main() {
|
||||
PlistParser: () => plistUtils,
|
||||
});
|
||||
|
||||
testUsingContext('Can find Android Studio 2020.3 bundled Java version on Mac', () {
|
||||
testUsingContext('finds Android Studio 2020.3 bundled Java version', () {
|
||||
final String studioInApplicationPlistFolder = globals.fs.path.join(
|
||||
'/',
|
||||
'Application',
|
||||
@ -539,7 +495,7 @@ void main() {
|
||||
PlistParser: () => plistUtils,
|
||||
});
|
||||
|
||||
testUsingContext('Can find Android Studio 2022.1 bundled Java version on Mac', () {
|
||||
testUsingContext('finds Android Studio 2022.1 bundled Java version', () {
|
||||
final String studioInApplicationPlistFolder = globals.fs.path.join(
|
||||
'/',
|
||||
'Application',
|
||||
@ -579,157 +535,174 @@ void main() {
|
||||
});
|
||||
});
|
||||
|
||||
late FileSystem windowsFileSystem;
|
||||
|
||||
setUp(() {
|
||||
windowsFileSystem = MemoryFileSystem.test(style: FileSystemStyle.windows);
|
||||
});
|
||||
|
||||
testUsingContext('Can discover Android Studio 4.1 location on Windows', () {
|
||||
windowsFileSystem.file(r'C:\Users\Dash\AppData\Local\Google\AndroidStudio4.1\.home')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(r'C:\Program Files\AndroidStudio');
|
||||
windowsFileSystem.directory(r'C:\Program Files\AndroidStudio')
|
||||
.createSync(recursive: true);
|
||||
|
||||
final AndroidStudio studio = AndroidStudio.allInstalled().single;
|
||||
|
||||
expect(studio.version, Version(4, 1, 0));
|
||||
expect(studio.studioAppName, 'Android Studio');
|
||||
}, overrides: <Type, Generator>{
|
||||
Platform: () => windowsPlatform,
|
||||
FileSystem: () => windowsFileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('Can discover Android Studio 4.2 location on Windows', () {
|
||||
windowsFileSystem.file(r'C:\Users\Dash\AppData\Local\Google\AndroidStudio4.2\.home')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(r'C:\Program Files\AndroidStudio');
|
||||
windowsFileSystem.directory(r'C:\Program Files\AndroidStudio')
|
||||
.createSync(recursive: true);
|
||||
|
||||
final AndroidStudio studio = AndroidStudio.allInstalled().single;
|
||||
|
||||
expect(studio.version, Version(4, 2, 0));
|
||||
expect(studio.studioAppName, 'Android Studio');
|
||||
}, overrides: <Type, Generator>{
|
||||
Platform: () => windowsPlatform,
|
||||
FileSystem: () => windowsFileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('Can discover Android Studio 2020.3 location on Windows', () {
|
||||
windowsFileSystem.file(r'C:\Users\Dash\AppData\Local\Google\AndroidStudio2020.3\.home')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(r'C:\Program Files\AndroidStudio');
|
||||
windowsFileSystem.directory(r'C:\Program Files\AndroidStudio')
|
||||
.createSync(recursive: true);
|
||||
|
||||
final AndroidStudio studio = AndroidStudio.allInstalled().single;
|
||||
|
||||
expect(studio.version, Version(2020, 3, 0));
|
||||
expect(studio.studioAppName, 'Android Studio');
|
||||
}, overrides: <Type, Generator>{
|
||||
Platform: () => windowsPlatform,
|
||||
FileSystem: () => windowsFileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('Does not discover Android Studio 4.1 location on Windows if LOCALAPPDATA is null', () {
|
||||
windowsFileSystem.file(r'C:\Users\Dash\AppData\Local\Google\AndroidStudio4.1\.home')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(r'C:\Program Files\AndroidStudio');
|
||||
windowsFileSystem.directory(r'C:\Program Files\AndroidStudio')
|
||||
.createSync(recursive: true);
|
||||
|
||||
expect(AndroidStudio.allInstalled(), isEmpty);
|
||||
}, overrides: <Type, Generator>{
|
||||
Platform: () => FakePlatform(
|
||||
operatingSystem: 'windows',
|
||||
environment: <String, String>{}, // Does not include LOCALAPPDATA
|
||||
),
|
||||
FileSystem: () => windowsFileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('Does not discover Android Studio 4.2 location on Windows if LOCALAPPDATA is null', () {
|
||||
windowsFileSystem.file(r'C:\Users\Dash\AppData\Local\Google\AndroidStudio4.2\.home')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(r'C:\Program Files\AndroidStudio');
|
||||
windowsFileSystem.directory(r'C:\Program Files\AndroidStudio')
|
||||
.createSync(recursive: true);
|
||||
|
||||
expect(AndroidStudio.allInstalled(), isEmpty);
|
||||
}, overrides: <Type, Generator>{
|
||||
Platform: () => FakePlatform(
|
||||
operatingSystem: 'windows',
|
||||
environment: <String, String>{}, // Does not include LOCALAPPDATA
|
||||
),
|
||||
FileSystem: () => windowsFileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('Does not discover Android Studio 2020.3 location on Windows if LOCALAPPDATA is null', () {
|
||||
windowsFileSystem.file(r'C:\Users\Dash\AppData\Local\Google\AndroidStudio2020.3\.home')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(r'C:\Program Files\AndroidStudio');
|
||||
windowsFileSystem.directory(r'C:\Program Files\AndroidStudio')
|
||||
.createSync(recursive: true);
|
||||
|
||||
expect(AndroidStudio.allInstalled(), isEmpty);
|
||||
}, overrides: <Type, Generator>{
|
||||
Platform: () => FakePlatform(
|
||||
operatingSystem: 'windows',
|
||||
environment: <String, String>{}, // Does not include LOCALAPPDATA
|
||||
),
|
||||
FileSystem: () => windowsFileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('Can find Android Studio 2020.3 bundled Java version on Windows', () {
|
||||
windowsFileSystem.file(r'C:\Users\Dash\AppData\Local\Google\AndroidStudio2020.3\.home')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(r'C:\Program Files\AndroidStudio');
|
||||
windowsFileSystem.directory(r'C:\Program Files\AndroidStudio')
|
||||
.createSync(recursive: true);
|
||||
|
||||
final AndroidStudio studio = AndroidStudio.allInstalled().single;
|
||||
|
||||
expect(studio.javaPath, equals(r'C:\Program Files\AndroidStudio\jre'));
|
||||
}, overrides: <Type, Generator>{
|
||||
Platform: () => windowsPlatform,
|
||||
FileSystem: () => windowsFileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('Can find Android Studio 2022.1 bundled Java version on Windows', () {
|
||||
windowsFileSystem.file(r'C:\Users\Dash\AppData\Local\Google\AndroidStudio2022.1\.home')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(r'C:\Program Files\AndroidStudio');
|
||||
windowsFileSystem.directory(r'C:\Program Files\AndroidStudio')
|
||||
.createSync(recursive: true);
|
||||
|
||||
final AndroidStudio studio = AndroidStudio.allInstalled().single;
|
||||
|
||||
expect(studio.javaPath, equals(r'C:\Program Files\AndroidStudio\jbr'));
|
||||
}, overrides: <Type, Generator>{
|
||||
Platform: () => windowsPlatform,
|
||||
FileSystem: () => windowsFileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
group('Installation detection on Linux', () {
|
||||
late FileSystemUtils fsUtils;
|
||||
group('installation detection on Windows', () {
|
||||
late Platform platform;
|
||||
late FileSystem fileSystem;
|
||||
|
||||
setUp(() {
|
||||
platform = FakePlatform(
|
||||
operatingSystem: 'windows',
|
||||
environment: <String, String>{
|
||||
'LOCALAPPDATA': r'C:\Users\Dash\AppData\Local',
|
||||
}
|
||||
);
|
||||
fileSystem = MemoryFileSystem.test(style: FileSystemStyle.windows);
|
||||
});
|
||||
|
||||
testUsingContext('discovers Android Studio 4.1 location', () {
|
||||
fileSystem.file(r'C:\Users\Dash\AppData\Local\Google\AndroidStudio4.1\.home')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(r'C:\Program Files\AndroidStudio');
|
||||
fileSystem.directory(r'C:\Program Files\AndroidStudio')
|
||||
.createSync(recursive: true);
|
||||
|
||||
final AndroidStudio studio = AndroidStudio.allInstalled().single;
|
||||
|
||||
expect(studio.version, Version(4, 1, 0));
|
||||
expect(studio.studioAppName, 'Android Studio');
|
||||
}, overrides: <Type, Generator>{
|
||||
Platform: () => platform,
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('discovers Android Studio 4.2 location', () {
|
||||
fileSystem.file(r'C:\Users\Dash\AppData\Local\Google\AndroidStudio4.2\.home')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(r'C:\Program Files\AndroidStudio');
|
||||
fileSystem.directory(r'C:\Program Files\AndroidStudio')
|
||||
.createSync(recursive: true);
|
||||
|
||||
final AndroidStudio studio = AndroidStudio.allInstalled().single;
|
||||
|
||||
expect(studio.version, Version(4, 2, 0));
|
||||
expect(studio.studioAppName, 'Android Studio');
|
||||
}, overrides: <Type, Generator>{
|
||||
Platform: () => platform,
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('discovers Android Studio 2020.3 location', () {
|
||||
fileSystem.file(r'C:\Users\Dash\AppData\Local\Google\AndroidStudio2020.3\.home')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(r'C:\Program Files\AndroidStudio');
|
||||
fileSystem.directory(r'C:\Program Files\AndroidStudio')
|
||||
.createSync(recursive: true);
|
||||
|
||||
final AndroidStudio studio = AndroidStudio.allInstalled().single;
|
||||
|
||||
expect(studio.version, Version(2020, 3, 0));
|
||||
expect(studio.studioAppName, 'Android Studio');
|
||||
}, overrides: <Type, Generator>{
|
||||
Platform: () => platform,
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('does not discover Android Studio 4.1 location if LOCALAPPDATA is null', () {
|
||||
fileSystem.file(r'C:\Users\Dash\AppData\Local\Google\AndroidStudio4.1\.home')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(r'C:\Program Files\AndroidStudio');
|
||||
fileSystem.directory(r'C:\Program Files\AndroidStudio')
|
||||
.createSync(recursive: true);
|
||||
|
||||
expect(AndroidStudio.allInstalled(), isEmpty);
|
||||
}, overrides: <Type, Generator>{
|
||||
Platform: () => FakePlatform(
|
||||
operatingSystem: 'windows',
|
||||
environment: <String, String>{}, // Does not include LOCALAPPDATA
|
||||
),
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('does not discover Android Studio 4.2 location if LOCALAPPDATA is null', () {
|
||||
fileSystem.file(r'C:\Users\Dash\AppData\Local\Google\AndroidStudio4.2\.home')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(r'C:\Program Files\AndroidStudio');
|
||||
fileSystem.directory(r'C:\Program Files\AndroidStudio')
|
||||
.createSync(recursive: true);
|
||||
|
||||
expect(AndroidStudio.allInstalled(), isEmpty);
|
||||
}, overrides: <Type, Generator>{
|
||||
Platform: () => FakePlatform(
|
||||
operatingSystem: 'windows',
|
||||
environment: <String, String>{}, // Does not include LOCALAPPDATA
|
||||
),
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('does not discover Android Studio 2020.3 location if LOCALAPPDATA is null', () {
|
||||
fileSystem.file(r'C:\Users\Dash\AppData\Local\Google\AndroidStudio2020.3\.home')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(r'C:\Program Files\AndroidStudio');
|
||||
fileSystem.directory(r'C:\Program Files\AndroidStudio')
|
||||
.createSync(recursive: true);
|
||||
|
||||
expect(AndroidStudio.allInstalled(), isEmpty);
|
||||
}, overrides: <Type, Generator>{
|
||||
Platform: () => FakePlatform(
|
||||
operatingSystem: 'windows',
|
||||
environment: <String, String>{}, // Does not include LOCALAPPDATA
|
||||
),
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('finds Android Studio 2020.3 bundled Java version', () {
|
||||
fileSystem.file(r'C:\Users\Dash\AppData\Local\Google\AndroidStudio2020.3\.home')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(r'C:\Program Files\AndroidStudio');
|
||||
fileSystem.directory(r'C:\Program Files\AndroidStudio')
|
||||
.createSync(recursive: true);
|
||||
|
||||
final AndroidStudio studio = AndroidStudio.allInstalled().single;
|
||||
|
||||
expect(studio.javaPath, equals(r'C:\Program Files\AndroidStudio\jre'));
|
||||
}, overrides: <Type, Generator>{
|
||||
Platform: () => platform,
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('finds Android Studio 2022.1 bundled Java version', () {
|
||||
fileSystem.file(r'C:\Users\Dash\AppData\Local\Google\AndroidStudio2022.1\.home')
|
||||
..createSync(recursive: true)
|
||||
..writeAsStringSync(r'C:\Program Files\AndroidStudio');
|
||||
fileSystem.directory(r'C:\Program Files\AndroidStudio')
|
||||
.createSync(recursive: true);
|
||||
|
||||
final AndroidStudio studio = AndroidStudio.allInstalled().single;
|
||||
|
||||
expect(studio.javaPath, equals(r'C:\Program Files\AndroidStudio\jbr'));
|
||||
}, overrides: <Type, Generator>{
|
||||
Platform: () => platform,
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
});
|
||||
|
||||
group('installation detection on Linux', () {
|
||||
const String homeLinux = '/home/me';
|
||||
|
||||
late FileSystem fileSystem;
|
||||
late FileSystemUtils fsUtils;
|
||||
late Platform platform;
|
||||
|
||||
setUp(() {
|
||||
platform = FakePlatform(
|
||||
environment: <String, String>{'HOME': homeLinux},
|
||||
);
|
||||
fileSystem = MemoryFileSystem.test();
|
||||
fsUtils = FileSystemUtils(
|
||||
fileSystem: fileSystem,
|
||||
platform: linuxPlatform,
|
||||
platform: platform,
|
||||
);
|
||||
});
|
||||
|
||||
testUsingContext('Discover Android Studio <4.1', () {
|
||||
testUsingContext('discovers Android Studio <4.1', () {
|
||||
const String studioHomeFilePath =
|
||||
'$homeLinux/.AndroidStudio4.0/system/.home';
|
||||
const String studioInstallPath = '$homeLinux/AndroidStudio';
|
||||
@ -751,11 +724,11 @@ void main() {
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
FileSystemUtils: () => fsUtils,
|
||||
Platform: () => linuxPlatform,
|
||||
Platform: () => platform,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('Discover Android Studio >=4.1', () {
|
||||
testUsingContext('discovers Android Studio >=4.1', () {
|
||||
const String studioHomeFilePath =
|
||||
'$homeLinux/.cache/Google/AndroidStudio4.1/.home';
|
||||
const String studioInstallPath = '$homeLinux/AndroidStudio';
|
||||
@ -777,11 +750,11 @@ void main() {
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
FileSystemUtils: () => fsUtils,
|
||||
Platform: () => linuxPlatform,
|
||||
Platform: () => platform,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('Discover when installed with Toolbox', () {
|
||||
testUsingContext('discovers when installed with Toolbox', () {
|
||||
const String studioHomeFilePath =
|
||||
'$homeLinux/.cache/Google/AndroidStudio4.1/.home';
|
||||
const String studioInstallPath =
|
||||
@ -806,11 +779,11 @@ void main() {
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
FileSystemUtils: () => fsUtils,
|
||||
Platform: () => linuxPlatform,
|
||||
Platform: () => platform,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('Can find Android Studio 2020.3 bundled Java version on Linux', () {
|
||||
testUsingContext('finds Android Studio 2020.3 bundled Java version', () {
|
||||
const String studioHomeFilePath = '$homeLinux/.cache/Google/AndroidStudio2020.3/.home';
|
||||
const String studioInstallPath = '$homeLinux/AndroidStudio';
|
||||
|
||||
@ -826,11 +799,11 @@ void main() {
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
FileSystemUtils: () => fsUtils,
|
||||
Platform: () => linuxPlatform,
|
||||
Platform: () => platform,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('Can find Android Studio 2022.1 bundled Java version on Linux', () {
|
||||
testUsingContext('finds Android Studio 2022.1 bundled Java version', () {
|
||||
const String studioHomeFilePath =
|
||||
'$homeLinux/.cache/Google/AndroidStudio2022.1/.home';
|
||||
const String studioInstallPath = '$homeLinux/AndroidStudio';
|
||||
@ -847,9 +820,34 @@ void main() {
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
FileSystemUtils: () => fsUtils,
|
||||
Platform: () => linuxPlatform,
|
||||
Platform: () => platform,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
});
|
||||
|
||||
testUsingContext('pluginsPath extracts custom paths from home dir', () {
|
||||
const String installPath = '/opt/android-studio-with-cheese-5.0';
|
||||
const String studioHome = '$homeLinux/.AndroidStudioWithCheese5.0';
|
||||
const String homeFile = '$studioHome/system/.home';
|
||||
globals.fs.directory(installPath).createSync(recursive: true);
|
||||
globals.fs.file(homeFile).createSync(recursive: true);
|
||||
globals.fs.file(homeFile).writeAsStringSync(installPath);
|
||||
|
||||
final AndroidStudio studio =
|
||||
AndroidStudio.fromHomeDot(globals.fs.directory(studioHome))!;
|
||||
expect(studio, isNotNull);
|
||||
expect(studio.pluginsPath,
|
||||
equals('/home/me/.AndroidStudioWithCheese5.0/config/plugins'));
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
// Custom home paths are not supported on macOS nor Windows yet,
|
||||
// so we force the platform to fake Linux here.
|
||||
Platform: () => platform,
|
||||
FileSystemUtils: () => FileSystemUtils(
|
||||
fileSystem: fileSystem,
|
||||
platform: platform,
|
||||
),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user