Summary: Adds tests for flipper import and export. Also fixed few edge cases which was discovered through tests. The edge case was that it didn't export device plugin states. Reviewed By: danielbuechele Differential Revision: D13828357 fbshipit-source-id: ddc4352b729ca7f05c5875f2f3fbdd2c7f4e2186
117 lines
2.3 KiB
JavaScript
117 lines
2.3 KiB
JavaScript
/**
|
|
* Copyright 2018-present Facebook.
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
* @format
|
|
*/
|
|
|
|
import type stream from 'stream';
|
|
|
|
export type LogLevel =
|
|
| 'unknown'
|
|
| 'verbose'
|
|
| 'debug'
|
|
| 'info'
|
|
| 'warn'
|
|
| 'error'
|
|
| 'fatal';
|
|
|
|
export type DeviceLogEntry = {|
|
|
date: Date,
|
|
pid: number,
|
|
tid: number,
|
|
app?: string,
|
|
type: LogLevel,
|
|
tag: string,
|
|
message: string,
|
|
|};
|
|
|
|
export type DeviceShell = {
|
|
stdout: stream.Readable,
|
|
stderr: stream.Readable,
|
|
stdin: stream.Writable,
|
|
};
|
|
|
|
export type DeviceLogListener = (entry: DeviceLogEntry) => void;
|
|
|
|
export type DeviceType = 'emulator' | 'physical';
|
|
|
|
export type DeviceExport = {|
|
|
os: string,
|
|
title: string,
|
|
deviceType: DeviceType,
|
|
serial: string,
|
|
|};
|
|
|
|
export type OS = 'iOS' | 'Android' | 'Windows';
|
|
|
|
export default class BaseDevice {
|
|
constructor(serial: string, deviceType: DeviceType, title: string) {
|
|
this.serial = serial;
|
|
this.title = title;
|
|
this.deviceType = deviceType;
|
|
}
|
|
|
|
// operating system of this device
|
|
os: OS;
|
|
|
|
// human readable name for this device
|
|
title: string;
|
|
|
|
// type of this device
|
|
deviceType: DeviceType;
|
|
|
|
// serial number for this device
|
|
serial: string;
|
|
|
|
// possible src of icon to display next to the device title
|
|
icon: ?string;
|
|
|
|
logListeners: Map<Symbol, DeviceLogListener> = new Map();
|
|
logEntries: Array<DeviceLogEntry> = [];
|
|
|
|
supportsOS(os: OS) {
|
|
return os.toLowerCase() === this.os.toLowerCase();
|
|
}
|
|
|
|
toJSON(): DeviceExport {
|
|
return {
|
|
os: this.os,
|
|
title: this.title,
|
|
deviceType: this.deviceType,
|
|
serial: this.serial,
|
|
};
|
|
}
|
|
|
|
teardown() {}
|
|
|
|
supportedColumns(): Array<string> {
|
|
throw new Error('unimplemented');
|
|
}
|
|
|
|
addLogListener(callback: DeviceLogListener): Symbol {
|
|
const id = Symbol();
|
|
this.logListeners.set(id, callback);
|
|
return id;
|
|
}
|
|
|
|
notifyLogListeners(entry: DeviceLogEntry) {
|
|
this.logEntries.push(entry);
|
|
if (this.logListeners.size > 0) {
|
|
this.logListeners.forEach(listener => listener(entry));
|
|
}
|
|
}
|
|
|
|
getLogs() {
|
|
return this.logEntries;
|
|
}
|
|
|
|
removeLogListener(id: Symbol) {
|
|
this.logListeners.delete(id);
|
|
}
|
|
|
|
spawnShell(): DeviceShell {
|
|
throw new Error('unimplemented');
|
|
}
|
|
}
|