Skip to content

Commit d76e392

Browse files
feat: reboot emulator
1 parent e6532e9 commit d76e392

File tree

3 files changed

+16
-30
lines changed

3 files changed

+16
-30
lines changed

lib/android-controller.ts

Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
const OFFSET_DI_PIXELS = 16;
1616

1717
export class AndroidController {
18+
private static DEFAULT_BOOT_TIME = 180000;
1819
private static ANDROID_HOME = process.env["ANDROID_HOME"] || "";
1920
private static EMULATOR = resolve(AndroidController.ANDROID_HOME, "emulator", "emulator");
2021
private static ADB = resolve(AndroidController.ANDROID_HOME, "platform-tools", "adb");
@@ -52,7 +53,7 @@ export class AndroidController {
5253
}
5354

5455
emulator = await AndroidController.startEmulatorProcess(emulator, options);
55-
const result = await AndroidController.waitUntilEmulatorBoot(emulator.token, parseInt(process.env.BOOT_ANDROID_EMULATOR_MAX_TIME) || 180000) === true ? Status.BOOTED : Status.SHUTDOWN;
56+
const result = await AndroidController.waitUntilEmulatorBoot(emulator.token, parseInt(process.env.BOOT_ANDROID_EMULATOR_MAX_TIME) || AndroidController.DEFAULT_BOOT_TIME) === true ? Status.BOOTED : Status.SHUTDOWN;
5657

5758
if (result === Status.BOOTED) {
5859
emulator.status = Status.BOOTED;
@@ -69,6 +70,11 @@ export class AndroidController {
6970
return emulator;
7071
}
7172

73+
public static reboot(emulator: IDevice) {
74+
AndroidController.executeAdbCommand(emulator, 'reboot bootloader');
75+
AndroidController.waitUntilEmulatorBoot(emulator, AndroidController.DEFAULT_BOOT_TIME);
76+
}
77+
7278
public static unlock(token, password = undefined) {
7379
let result = "";
7480
if (password) {
@@ -215,7 +221,7 @@ export class AndroidController {
215221
}
216222

217223
public static async recordVideo(device: IDevice, dir, fileName, callback: () => Promise<any>) {
218-
const { pathToVideo, devicePath , videoRecoringProcess} = AndroidController.startRecordingVideo(device, dir, fileName);
224+
const { pathToVideo, devicePath, videoRecoringProcess } = AndroidController.startRecordingVideo(device, dir, fileName);
219225
new Promise(async (res, reject) => {
220226
callback().then((result) => {
221227
videoRecoringProcess.kill("SIGINT");
@@ -366,20 +372,20 @@ export class AndroidController {
366372
return emulator;
367373
}
368374

369-
private static waitUntilEmulatorBoot(deviceId, timeOut: number): boolean {
375+
private static waitUntilEmulatorBoot(deviceId, timeOutInMiliseconds: number): boolean {
370376
const startTime = new Date().getTime();
371377
let currentTime = new Date().getTime();
372378
let found = false;
373379

374380
console.log("Booting emulator ...");
375381

376-
while ((currentTime - startTime) < timeOut * 1000 && !found) {
382+
while ((currentTime - startTime) < timeOutInMiliseconds && !found) {
377383
currentTime = new Date().getTime();
378384
found = AndroidController.checkIfEmulatorIsRunning(DeviceType.EMULATOR + "-" + deviceId);
379385
}
380386

381387
if (!found) {
382-
let error = deviceId + " failed to boot in " + timeOut + " seconds.";
388+
let error = deviceId + " failed to boot in " + timeOutInMiliseconds + " seconds.";
383389
console.log(error, true);
384390
} else {
385391
console.log("Emilator is booted!");
@@ -549,28 +555,6 @@ export class AndroidController {
549555
return AndroidController._emulatorIds.get(platformVersion.toString());
550556
}
551557

552-
// private static loadEmulatorsIds() {
553-
// AndroidController._emulatorIds.set("4.2", "5554");
554-
// AndroidController._emulatorIds.set("4.3", "5556");
555-
// AndroidController._emulatorIds.set("4.4", "5558");
556-
// AndroidController._emulatorIds.set("5.0", "5560");
557-
// AndroidController._emulatorIds.set("5.1", "5562");
558-
// AndroidController._emulatorIds.set("6", "5564");
559-
// AndroidController._emulatorIds.set("6.", "5564");
560-
// AndroidController._emulatorIds.set("6.0", "5564");
561-
// AndroidController._emulatorIds.set("7", "5566");
562-
// AndroidController._emulatorIds.set("7.", "5566");
563-
// AndroidController._emulatorIds.set("7.0", "5566");
564-
// AndroidController._emulatorIds.set("7.1", "5568");
565-
// AndroidController._emulatorIds.set("7.1.1", "5570");
566-
// AndroidController._emulatorIds.set("8", "5572");
567-
// AndroidController._emulatorIds.set("8.", "5572");
568-
// AndroidController._emulatorIds.set("8.0", "5572");
569-
// AndroidController._emulatorIds.set("26", "5572");
570-
// AndroidController._emulatorIds.set("27", "5574");
571-
// AndroidController._emulatorIds.set("8.1", "5574");
572-
// }
573-
574558
private static sendKeyCommand = (token, key) => {
575559
return `${AndroidController.ADB} -s ${token} shell input keyevent ${key}`;
576560
}

lib/ios-controller.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ export class IOSController {
2323
private static OSASCRIPT_QUIT_SIMULATOR_COMMAND = "osascript -e 'tell application \"Simulator\" to quit'";
2424
private static IOS_DEVICE = "ios-device";
2525
private static devicesScreenInfo = new Map<string, IOSDeviceScreenInfo>();
26+
private static DEVICE_BOOT_TIME = 180000;
27+
private static WAIT_DEVICE_TO_RESPONCE = 180000;
2628

2729
public static getAllDevices(verbose: boolean = false): Promise<Map<string, Array<IDevice>>> {
2830
if (IOSController.devicesScreenInfo.size === 0) {
@@ -42,9 +44,9 @@ export class IOSController {
4244
executeCommand(IOSController.SIMCTL + " erase " + udid);
4345
const process = IOSController.startSimulatorProcess(udid);
4446

45-
let responce: boolean = await waitForOutput(process, /Instruments Trace Complete:/ig, /Failed to load/ig, 180000);
47+
let responce: boolean = await waitForOutput(process, /Instruments Trace Complete:/ig, /Failed to load/ig, IOSController.DEVICE_BOOT_TIME);
4648
if (responce === true) {
47-
responce = IOSController.checkIfSimulatorIsBooted(udid, 180000);
49+
responce = IOSController.checkIfSimulatorIsBooted(udid, IOSController.WAIT_DEVICE_TO_RESPONCE);
4850
if (responce) {
4951
simulator.type = DeviceType.SIMULATOR;
5052
simulator.status = Status.BOOTED;

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "mobile-devices-controller",
3-
"version": "2.0.7",
3+
"version": "2.0.8",
44
"description": "Manage simulators, emulators and devices",
55
"main": "index.js",
66
"scripts": {

0 commit comments

Comments
 (0)