@zondax/zemu
Advanced tools
Comparing version 0.12.1 to 0.12.2
export declare const DEFAULT_EMU_IMG = "zondax/builder-zemu@sha256:139044b41e5d747b1e6146d8a54de04e3b34920106b2ecac3d8d23b1388bcb06"; | ||
export declare const TIMEOUT = 1000; | ||
export declare const DEFAULT_MODEL = "nanos"; | ||
export declare const DEFAULT_START_DELAY = 2000; | ||
@@ -7,3 +8,2 @@ export declare const DEFAULT_KEY_DELAY = 350; | ||
export declare const DEFAULT_VNC_PORT = 8001; | ||
export declare const DEFAULT_MODEL = "nanos"; | ||
export declare const DEFAULT_TRANSPORT_PORT = 9998; | ||
@@ -10,0 +10,0 @@ export declare const BASE_NAME = "zemu-656d75-"; |
"use strict"; | ||
exports.__esModule = true; | ||
exports.WINDOW_X = exports.WINDOW_S = exports.KEYS = exports.KILL_TIMEOUT = exports.BASE_NAME = exports.DEFAULT_TRANSPORT_PORT = exports.DEFAULT_MODEL = exports.DEFAULT_VNC_PORT = exports.DEFAULT_HOST = exports.DEFAULT_KEY_DELAY = exports.DEFAULT_START_DELAY = exports.TIMEOUT = exports.DEFAULT_EMU_IMG = void 0; | ||
exports.WINDOW_X = exports.WINDOW_S = exports.KEYS = exports.KILL_TIMEOUT = exports.BASE_NAME = exports.DEFAULT_TRANSPORT_PORT = exports.DEFAULT_VNC_PORT = exports.DEFAULT_HOST = exports.DEFAULT_KEY_DELAY = exports.DEFAULT_START_DELAY = exports.DEFAULT_MODEL = exports.TIMEOUT = exports.DEFAULT_EMU_IMG = void 0; | ||
exports.DEFAULT_EMU_IMG = 'zondax/builder-zemu@sha256:139044b41e5d747b1e6146d8a54de04e3b34920106b2ecac3d8d23b1388bcb06'; | ||
exports.TIMEOUT = 1000; | ||
exports.DEFAULT_MODEL = 'nanos'; | ||
exports.DEFAULT_START_DELAY = 2000; | ||
@@ -10,3 +11,2 @@ exports.DEFAULT_KEY_DELAY = 350; | ||
exports.DEFAULT_VNC_PORT = 8001; | ||
exports.DEFAULT_MODEL = 'nanos'; | ||
exports.DEFAULT_TRANSPORT_PORT = 9998; | ||
@@ -13,0 +13,0 @@ exports.BASE_NAME = 'zemu-656d75-'; |
@@ -18,3 +18,3 @@ /// <reference types="node" /> | ||
import PNG from 'pngjs'; | ||
export declare class StartParams { | ||
export declare const DEFAULT_START_OPTIONS: { | ||
model: string; | ||
@@ -26,2 +26,10 @@ logging: boolean; | ||
pressDelay: number; | ||
}; | ||
export declare class StartOptions { | ||
model: string; | ||
logging: boolean; | ||
X11: boolean; | ||
custom: string; | ||
startDelay: number; | ||
pressDelay: number; | ||
} | ||
@@ -65,3 +73,3 @@ export interface Snapshot { | ||
static checkElf(model: string, elfPath: string): void; | ||
start(options: StartParams): Promise<void>; | ||
start(options: StartOptions): Promise<void>; | ||
connect(): Promise<void>; | ||
@@ -68,0 +76,0 @@ log(message: string): void; |
@@ -42,3 +42,3 @@ "use strict"; | ||
exports.__esModule = true; | ||
exports.DeviceModel = exports.StartParams = void 0; | ||
exports.DeviceModel = exports.StartOptions = exports.DEFAULT_START_OPTIONS = void 0; | ||
/** ****************************************************************************** | ||
@@ -74,4 +74,12 @@ * (c) 2020 Zondax GmbH | ||
var rndstr = require('randomstring'); | ||
var StartParams = /** @class */ (function () { | ||
function StartParams() { | ||
exports.DEFAULT_START_OPTIONS = { | ||
model: constants_1.DEFAULT_MODEL, | ||
logging: false, | ||
X11: false, | ||
custom: '', | ||
startDelay: constants_1.DEFAULT_START_DELAY, | ||
pressDelay: constants_1.DEFAULT_KEY_DELAY | ||
}; | ||
var StartOptions = /** @class */ (function () { | ||
function StartOptions() { | ||
this.model = 'nanos'; | ||
@@ -84,5 +92,5 @@ this.logging = false; | ||
} | ||
return StartParams; | ||
return StartOptions; | ||
}()); | ||
exports.StartParams = StartParams; | ||
exports.StartOptions = StartOptions; | ||
var DeviceModel = /** @class */ (function () { | ||
@@ -89,0 +97,0 @@ function DeviceModel() { |
@@ -79,126 +79,240 @@ "use strict"; | ||
}; | ||
// test('File-Missing', () => { | ||
// expect(() => { | ||
// new Zemu('it_does_not_exist') | ||
// }).toThrow(/Did you compile/) | ||
// }) | ||
// | ||
// test('Trying to run in nano S mode with a nano X elf', () => { | ||
// const t = () => { | ||
// Zemu.checkElf('nanos', DEMO_APP_PATH_X) | ||
// } | ||
// expect(t).toThrow("Zemu model is set to 'nanos' but elf file doesn't seem to be nano s build. Did you pass the right elf ?") | ||
// }) | ||
// | ||
// test('Start&Close-NanoS', async () => { | ||
// const sim = new Zemu(DEMO_APP_PATH_S) | ||
// expect(sim).not.toBeNull() | ||
// try { | ||
// await sim.start(ZEMU_OPTIONS_S) | ||
// } finally { | ||
// await sim.close() | ||
// } | ||
// }) | ||
// | ||
// test('Start&Close-NanoX', async () => { | ||
// const sim = new Zemu(DEMO_APP_PATH_X) | ||
// expect(sim).not.toBeNull() | ||
// try { | ||
// await sim.start(ZEMU_OPTIONS_X) | ||
// } finally { | ||
// await sim.close() | ||
// } | ||
// }) | ||
// | ||
// test('Snapshot', async () => { | ||
// const sim = new Zemu(DEMO_APP_PATH_S) | ||
// try { | ||
// await sim.start(ZEMU_OPTIONS_S) | ||
// | ||
// const session = sim.getSession() | ||
// expect(session.title).toEqual('LibVNCServer') | ||
// expect(session.width).toEqual(128) | ||
// expect(session.height).toEqual(32) | ||
// | ||
// const snapshot = await sim.snapshot() | ||
// expect(snapshot.width).toEqual(128) | ||
// expect(snapshot.height).toEqual(32) | ||
// } finally { | ||
// await sim.close() | ||
// } | ||
// }) | ||
// | ||
// test('Basic Control - S', async () => { | ||
// const sim = new Zemu(DEMO_APP_PATH_S) | ||
// try { | ||
// await sim.start(ZEMU_OPTIONS_S) | ||
// | ||
// await sim.clickLeft() | ||
// await sim.clickLeft() | ||
// await sim.clickLeft() | ||
// | ||
// // Move up and down and check screens | ||
// const view0 = await sim.snapshot('tests/tmp/00000.png') | ||
// const view1 = await sim.clickRight('tests/tmp/00001.png') | ||
// const view2 = await sim.clickLeft('tests/tmp/00002.png') | ||
// | ||
// // compare to check that it went back to the same view | ||
// expect(view2).toEqual(view0) | ||
// expect(view1).not.toEqual(view0) | ||
// } finally { | ||
// await sim.close() | ||
// } | ||
// }) | ||
// | ||
// test('Basic Control - X', async () => { | ||
// const sim = new Zemu(DEMO_APP_PATH_X) | ||
// try { | ||
// await sim.start(ZEMU_OPTIONS_X) | ||
// | ||
// await sim.clickLeft() | ||
// await sim.clickLeft() | ||
// await sim.clickLeft() | ||
// | ||
// // Move up and down and check screens | ||
// const view0 = await sim.snapshot('tests/tmpX/00000.png') | ||
// const view1 = await sim.clickRight('tests/tmpX/00001.png') | ||
// const view2 = await sim.clickLeft('tests/tmpX/00002.png') | ||
// | ||
// // compare to check that it went back to the same view | ||
// expect(view2).toEqual(view0) | ||
// expect(view1).not.toEqual(view0) | ||
// } finally { | ||
// await sim.close() | ||
// } | ||
// }) | ||
// | ||
// test('Load/Compare Snapshots', async () => { | ||
// const image1A = Zemu.LoadPng2RGB('tests/snapshots/image1A.png') | ||
// const image1B = Zemu.LoadPng2RGB('tests/snapshots/image1B.png') | ||
// const image2A = Zemu.LoadPng2RGB('tests/snapshots/image2A.png') | ||
// | ||
// expect(image1A).toEqual(image1B) | ||
// expect(image1A).not.toEqual(image2A) | ||
// }) | ||
// | ||
// test('Wait for change / timeout', async () => { | ||
// const sim = new Zemu(DEMO_APP_PATH_S) | ||
// try { | ||
// await sim.start(ZEMU_OPTIONS_S) | ||
// const result = sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot(), 2000) | ||
// await expect(result).rejects.toEqual('Timeout waiting for screen to change (2000 ms)') | ||
// } finally { | ||
// await sim.close() | ||
// } | ||
// }) | ||
// | ||
// test('Snapshot and compare', async () => { | ||
// const sim = new Zemu(DEMO_APP_PATH_S) | ||
// try { | ||
// await sim.start(ZEMU_OPTIONS_S) | ||
// expect(await sim.compareSnapshotsAndAccept('tests', 'compare_test', 1)).toBeTruthy() | ||
// } finally { | ||
// await sim.close() | ||
// } | ||
// }) | ||
test('File-Missing', function () { | ||
expect(function () { | ||
new src_1["default"]('it_does_not_exist'); | ||
}).toThrow(/Did you compile/); | ||
}); | ||
test('Trying to run in nano S mode with a nano X elf', function () { | ||
var t = function () { | ||
src_1["default"].checkElf('nanos', DEMO_APP_PATH_X); | ||
}; | ||
expect(t).toThrow("Zemu model is set to 'nanos' but elf file doesn't seem to be nano s build. Did you pass the right elf ?"); | ||
}); | ||
test('Start&Close-NanoS', function () { return __awaiter(void 0, void 0, void 0, function () { | ||
var sim; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: | ||
sim = new src_1["default"](DEMO_APP_PATH_S); | ||
expect(sim).not.toBeNull(); | ||
_a.label = 1; | ||
case 1: | ||
_a.trys.push([1, , 3, 5]); | ||
return [4 /*yield*/, sim.start(ZEMU_OPTIONS_S)]; | ||
case 2: | ||
_a.sent(); | ||
return [3 /*break*/, 5]; | ||
case 3: return [4 /*yield*/, sim.close()]; | ||
case 4: | ||
_a.sent(); | ||
return [7 /*endfinally*/]; | ||
case 5: return [2 /*return*/]; | ||
} | ||
}); | ||
}); }); | ||
test('Start&Close-NanoX', function () { return __awaiter(void 0, void 0, void 0, function () { | ||
var sim; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: | ||
sim = new src_1["default"](DEMO_APP_PATH_X); | ||
expect(sim).not.toBeNull(); | ||
_a.label = 1; | ||
case 1: | ||
_a.trys.push([1, , 3, 5]); | ||
return [4 /*yield*/, sim.start(ZEMU_OPTIONS_X)]; | ||
case 2: | ||
_a.sent(); | ||
return [3 /*break*/, 5]; | ||
case 3: return [4 /*yield*/, sim.close()]; | ||
case 4: | ||
_a.sent(); | ||
return [7 /*endfinally*/]; | ||
case 5: return [2 /*return*/]; | ||
} | ||
}); | ||
}); }); | ||
test('Snapshot', function () { return __awaiter(void 0, void 0, void 0, function () { | ||
var sim, session, snapshot; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: | ||
sim = new src_1["default"](DEMO_APP_PATH_S); | ||
_a.label = 1; | ||
case 1: | ||
_a.trys.push([1, , 4, 6]); | ||
return [4 /*yield*/, sim.start(ZEMU_OPTIONS_S)]; | ||
case 2: | ||
_a.sent(); | ||
session = sim.getSession(); | ||
expect(session.title).toEqual('LibVNCServer'); | ||
expect(session.width).toEqual(128); | ||
expect(session.height).toEqual(32); | ||
return [4 /*yield*/, sim.snapshot()]; | ||
case 3: | ||
snapshot = _a.sent(); | ||
expect(snapshot.width).toEqual(128); | ||
expect(snapshot.height).toEqual(32); | ||
return [3 /*break*/, 6]; | ||
case 4: return [4 /*yield*/, sim.close()]; | ||
case 5: | ||
_a.sent(); | ||
return [7 /*endfinally*/]; | ||
case 6: return [2 /*return*/]; | ||
} | ||
}); | ||
}); }); | ||
test('Basic Control - S', function () { return __awaiter(void 0, void 0, void 0, function () { | ||
var sim, view0, view1, view2; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: | ||
sim = new src_1["default"](DEMO_APP_PATH_S); | ||
_a.label = 1; | ||
case 1: | ||
_a.trys.push([1, , 9, 11]); | ||
return [4 /*yield*/, sim.start(ZEMU_OPTIONS_S)]; | ||
case 2: | ||
_a.sent(); | ||
return [4 /*yield*/, sim.clickLeft()]; | ||
case 3: | ||
_a.sent(); | ||
return [4 /*yield*/, sim.clickLeft()]; | ||
case 4: | ||
_a.sent(); | ||
return [4 /*yield*/, sim.clickLeft() | ||
// Move up and down and check screens | ||
]; | ||
case 5: | ||
_a.sent(); | ||
return [4 /*yield*/, sim.snapshot('tests/tmp/00000.png')]; | ||
case 6: | ||
view0 = _a.sent(); | ||
return [4 /*yield*/, sim.clickRight('tests/tmp/00001.png')]; | ||
case 7: | ||
view1 = _a.sent(); | ||
return [4 /*yield*/, sim.clickLeft('tests/tmp/00002.png') | ||
// compare to check that it went back to the same view | ||
]; | ||
case 8: | ||
view2 = _a.sent(); | ||
// compare to check that it went back to the same view | ||
expect(view2).toEqual(view0); | ||
expect(view1).not.toEqual(view0); | ||
return [3 /*break*/, 11]; | ||
case 9: return [4 /*yield*/, sim.close()]; | ||
case 10: | ||
_a.sent(); | ||
return [7 /*endfinally*/]; | ||
case 11: return [2 /*return*/]; | ||
} | ||
}); | ||
}); }); | ||
test('Basic Control - X', function () { return __awaiter(void 0, void 0, void 0, function () { | ||
var sim, view0, view1, view2; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: | ||
sim = new src_1["default"](DEMO_APP_PATH_X); | ||
_a.label = 1; | ||
case 1: | ||
_a.trys.push([1, , 9, 11]); | ||
return [4 /*yield*/, sim.start(ZEMU_OPTIONS_X)]; | ||
case 2: | ||
_a.sent(); | ||
return [4 /*yield*/, sim.clickLeft()]; | ||
case 3: | ||
_a.sent(); | ||
return [4 /*yield*/, sim.clickLeft()]; | ||
case 4: | ||
_a.sent(); | ||
return [4 /*yield*/, sim.clickLeft() | ||
// Move up and down and check screens | ||
]; | ||
case 5: | ||
_a.sent(); | ||
return [4 /*yield*/, sim.snapshot('tests/tmpX/00000.png')]; | ||
case 6: | ||
view0 = _a.sent(); | ||
return [4 /*yield*/, sim.clickRight('tests/tmpX/00001.png')]; | ||
case 7: | ||
view1 = _a.sent(); | ||
return [4 /*yield*/, sim.clickLeft('tests/tmpX/00002.png') | ||
// compare to check that it went back to the same view | ||
]; | ||
case 8: | ||
view2 = _a.sent(); | ||
// compare to check that it went back to the same view | ||
expect(view2).toEqual(view0); | ||
expect(view1).not.toEqual(view0); | ||
return [3 /*break*/, 11]; | ||
case 9: return [4 /*yield*/, sim.close()]; | ||
case 10: | ||
_a.sent(); | ||
return [7 /*endfinally*/]; | ||
case 11: return [2 /*return*/]; | ||
} | ||
}); | ||
}); }); | ||
test('Load/Compare Snapshots', function () { return __awaiter(void 0, void 0, void 0, function () { | ||
var image1A, image1B, image2A; | ||
return __generator(this, function (_a) { | ||
image1A = src_1["default"].LoadPng2RGB('tests/snapshots/image1A.png'); | ||
image1B = src_1["default"].LoadPng2RGB('tests/snapshots/image1B.png'); | ||
image2A = src_1["default"].LoadPng2RGB('tests/snapshots/image2A.png'); | ||
expect(image1A).toEqual(image1B); | ||
expect(image1A).not.toEqual(image2A); | ||
return [2 /*return*/]; | ||
}); | ||
}); }); | ||
test('Wait for change / timeout', function () { return __awaiter(void 0, void 0, void 0, function () { | ||
var sim, result; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: | ||
sim = new src_1["default"](DEMO_APP_PATH_S); | ||
_a.label = 1; | ||
case 1: | ||
_a.trys.push([1, , 4, 6]); | ||
return [4 /*yield*/, sim.start(ZEMU_OPTIONS_S)]; | ||
case 2: | ||
_a.sent(); | ||
result = sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot(), 2000); | ||
return [4 /*yield*/, expect(result).rejects.toEqual('Timeout waiting for screen to change (2000 ms)')]; | ||
case 3: | ||
_a.sent(); | ||
return [3 /*break*/, 6]; | ||
case 4: return [4 /*yield*/, sim.close()]; | ||
case 5: | ||
_a.sent(); | ||
return [7 /*endfinally*/]; | ||
case 6: return [2 /*return*/]; | ||
} | ||
}); | ||
}); }); | ||
test('Snapshot and compare', function () { return __awaiter(void 0, void 0, void 0, function () { | ||
var sim, _a; | ||
return __generator(this, function (_b) { | ||
switch (_b.label) { | ||
case 0: | ||
sim = new src_1["default"](DEMO_APP_PATH_S); | ||
_b.label = 1; | ||
case 1: | ||
_b.trys.push([1, , 4, 6]); | ||
return [4 /*yield*/, sim.start(ZEMU_OPTIONS_S)]; | ||
case 2: | ||
_b.sent(); | ||
_a = expect; | ||
return [4 /*yield*/, sim.compareSnapshotsAndAccept('tests', 'compare_test', 1)]; | ||
case 3: | ||
_a.apply(void 0, [_b.sent()]).toBeTruthy(); | ||
return [3 /*break*/, 6]; | ||
case 4: return [4 /*yield*/, sim.close()]; | ||
case 5: | ||
_b.sent(); | ||
return [7 /*endfinally*/]; | ||
case 6: return [2 /*return*/]; | ||
} | ||
}); | ||
}); }); | ||
test('Snapshot and compare 2', function () { return __awaiter(void 0, void 0, void 0, function () { | ||
@@ -229,25 +343,54 @@ var sim, _a; | ||
}); }); | ||
// test('Load and run a library', async () => { | ||
// const LITECOIN_PATH = Resolve('bin/litecoin.elf') | ||
// const BITCOIN_LIB = { Bitcoin: Resolve('bin/bitcoin.elf') } | ||
// const sim = new Zemu(LITECOIN_PATH, BITCOIN_LIB) | ||
// try { | ||
// await sim.start(ZEMU_OPTIONS_S) | ||
// | ||
// // If we can see the main screen, then the library has been loaded with success | ||
// await sim.snapshot('tests/tmp/libWelcome.png') | ||
// const testLibWelcome = Zemu.LoadPng2RGB('tests/tmp/libWelcome.png') | ||
// const goldenLibWelcome = Zemu.LoadPng2RGB('tests/snapshots/libWelcome.png') | ||
// expect(testLibWelcome).toEqual(goldenLibWelcome) | ||
// } finally { | ||
// await sim.close() | ||
// } | ||
// }) | ||
// | ||
// test('GRPC Server start-stop', async () => { | ||
// const sim = new Zemu(DEMO_APP_PATH_S) | ||
// await sim.start(ZEMU_OPTIONS_S) | ||
// sim.startGRPCServer('localhost', 3002) | ||
// await Zemu.sleep(3000) | ||
// await sim.close() | ||
// }) | ||
test('Load and run a library', function () { return __awaiter(void 0, void 0, void 0, function () { | ||
var LITECOIN_PATH, BITCOIN_LIB, sim, testLibWelcome, goldenLibWelcome; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: | ||
LITECOIN_PATH = Resolve('bin/litecoin.elf'); | ||
BITCOIN_LIB = { Bitcoin: Resolve('bin/bitcoin.elf') }; | ||
sim = new src_1["default"](LITECOIN_PATH, BITCOIN_LIB); | ||
_a.label = 1; | ||
case 1: | ||
_a.trys.push([1, , 4, 6]); | ||
return [4 /*yield*/, sim.start(ZEMU_OPTIONS_S) | ||
// If we can see the main screen, then the library has been loaded with success | ||
]; | ||
case 2: | ||
_a.sent(); | ||
// If we can see the main screen, then the library has been loaded with success | ||
return [4 /*yield*/, sim.snapshot('tests/tmp/libWelcome.png')]; | ||
case 3: | ||
// If we can see the main screen, then the library has been loaded with success | ||
_a.sent(); | ||
testLibWelcome = src_1["default"].LoadPng2RGB('tests/tmp/libWelcome.png'); | ||
goldenLibWelcome = src_1["default"].LoadPng2RGB('tests/snapshots/libWelcome.png'); | ||
expect(testLibWelcome).toEqual(goldenLibWelcome); | ||
return [3 /*break*/, 6]; | ||
case 4: return [4 /*yield*/, sim.close()]; | ||
case 5: | ||
_a.sent(); | ||
return [7 /*endfinally*/]; | ||
case 6: return [2 /*return*/]; | ||
} | ||
}); | ||
}); }); | ||
test('GRPC Server start-stop', function () { return __awaiter(void 0, void 0, void 0, function () { | ||
var sim; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: | ||
sim = new src_1["default"](DEMO_APP_PATH_S); | ||
return [4 /*yield*/, sim.start(ZEMU_OPTIONS_S)]; | ||
case 1: | ||
_a.sent(); | ||
sim.startGRPCServer('localhost', 3002); | ||
return [4 /*yield*/, src_1["default"].sleep(3000)]; | ||
case 2: | ||
_a.sent(); | ||
return [4 /*yield*/, sim.close()]; | ||
case 3: | ||
_a.sent(); | ||
return [2 /*return*/]; | ||
} | ||
}); | ||
}); }); |
@@ -5,3 +5,3 @@ { | ||
"license": "Apache-2.0", | ||
"version": "0.12.1", | ||
"version": "0.12.2", | ||
"description": "Zemu Testing Framework", | ||
@@ -8,0 +8,0 @@ "main": "./dist/src/index.js", |
export const DEFAULT_EMU_IMG = 'zondax/builder-zemu@sha256:139044b41e5d747b1e6146d8a54de04e3b34920106b2ecac3d8d23b1388bcb06' | ||
export const TIMEOUT = 1000 | ||
export const DEFAULT_MODEL = 'nanos' | ||
export const DEFAULT_START_DELAY = 2000 | ||
@@ -8,3 +9,2 @@ export const DEFAULT_KEY_DELAY = 350 | ||
export const DEFAULT_VNC_PORT = 8001 | ||
export const DEFAULT_MODEL = 'nanos' | ||
export const DEFAULT_TRANSPORT_PORT = 9998 | ||
@@ -11,0 +11,0 @@ export const BASE_NAME = 'zemu-656d75-' |
@@ -29,3 +29,2 @@ /** ****************************************************************************** | ||
import GRPCRouter from './grpc' | ||
import assert from 'assert' | ||
import { | ||
@@ -50,3 +49,12 @@ BASE_NAME, | ||
export class StartParams { | ||
export const DEFAULT_START_OPTIONS = { | ||
model: DEFAULT_MODEL, | ||
logging: false, | ||
X11: false, | ||
custom: '', | ||
startDelay: DEFAULT_START_DELAY, | ||
pressDelay: DEFAULT_KEY_DELAY, | ||
} | ||
export class StartOptions { | ||
model = 'nanos' | ||
@@ -72,3 +80,3 @@ logging = false | ||
export default class Zemu { | ||
private startOptions: StartParams | undefined | ||
private startOptions: StartOptions | undefined | ||
private host: string | ||
@@ -191,3 +199,3 @@ private vncPort: number | ||
async start(options: StartParams) { | ||
async start(options: StartOptions) { | ||
await Zemu.checkAndPullImage() | ||
@@ -194,0 +202,0 @@ |
@@ -16,3 +16,3 @@ /** ****************************************************************************** | ||
******************************************************************************* */ | ||
import Zemu, { StartParams } from '../src' | ||
import Zemu, { StartOptions } from '../src' | ||
@@ -27,3 +27,3 @@ const Resolve = require('path').resolve | ||
const ZEMU_OPTIONS_S: StartParams = { | ||
const ZEMU_OPTIONS_S: StartOptions = { | ||
X11: true, | ||
@@ -37,3 +37,3 @@ logging: true, | ||
const ZEMU_OPTIONS_X: StartParams = { | ||
const ZEMU_OPTIONS_X: StartOptions = { | ||
X11: true, | ||
@@ -47,127 +47,127 @@ logging: true, | ||
// test('File-Missing', () => { | ||
// expect(() => { | ||
// new Zemu('it_does_not_exist') | ||
// }).toThrow(/Did you compile/) | ||
// }) | ||
// | ||
// test('Trying to run in nano S mode with a nano X elf', () => { | ||
// const t = () => { | ||
// Zemu.checkElf('nanos', DEMO_APP_PATH_X) | ||
// } | ||
// expect(t).toThrow("Zemu model is set to 'nanos' but elf file doesn't seem to be nano s build. Did you pass the right elf ?") | ||
// }) | ||
// | ||
// test('Start&Close-NanoS', async () => { | ||
// const sim = new Zemu(DEMO_APP_PATH_S) | ||
// expect(sim).not.toBeNull() | ||
// try { | ||
// await sim.start(ZEMU_OPTIONS_S) | ||
// } finally { | ||
// await sim.close() | ||
// } | ||
// }) | ||
// | ||
// test('Start&Close-NanoX', async () => { | ||
// const sim = new Zemu(DEMO_APP_PATH_X) | ||
// expect(sim).not.toBeNull() | ||
// try { | ||
// await sim.start(ZEMU_OPTIONS_X) | ||
// } finally { | ||
// await sim.close() | ||
// } | ||
// }) | ||
// | ||
// test('Snapshot', async () => { | ||
// const sim = new Zemu(DEMO_APP_PATH_S) | ||
// try { | ||
// await sim.start(ZEMU_OPTIONS_S) | ||
// | ||
// const session = sim.getSession() | ||
// expect(session.title).toEqual('LibVNCServer') | ||
// expect(session.width).toEqual(128) | ||
// expect(session.height).toEqual(32) | ||
// | ||
// const snapshot = await sim.snapshot() | ||
// expect(snapshot.width).toEqual(128) | ||
// expect(snapshot.height).toEqual(32) | ||
// } finally { | ||
// await sim.close() | ||
// } | ||
// }) | ||
// | ||
// test('Basic Control - S', async () => { | ||
// const sim = new Zemu(DEMO_APP_PATH_S) | ||
// try { | ||
// await sim.start(ZEMU_OPTIONS_S) | ||
// | ||
// await sim.clickLeft() | ||
// await sim.clickLeft() | ||
// await sim.clickLeft() | ||
// | ||
// // Move up and down and check screens | ||
// const view0 = await sim.snapshot('tests/tmp/00000.png') | ||
// const view1 = await sim.clickRight('tests/tmp/00001.png') | ||
// const view2 = await sim.clickLeft('tests/tmp/00002.png') | ||
// | ||
// // compare to check that it went back to the same view | ||
// expect(view2).toEqual(view0) | ||
// expect(view1).not.toEqual(view0) | ||
// } finally { | ||
// await sim.close() | ||
// } | ||
// }) | ||
// | ||
// test('Basic Control - X', async () => { | ||
// const sim = new Zemu(DEMO_APP_PATH_X) | ||
// try { | ||
// await sim.start(ZEMU_OPTIONS_X) | ||
// | ||
// await sim.clickLeft() | ||
// await sim.clickLeft() | ||
// await sim.clickLeft() | ||
// | ||
// // Move up and down and check screens | ||
// const view0 = await sim.snapshot('tests/tmpX/00000.png') | ||
// const view1 = await sim.clickRight('tests/tmpX/00001.png') | ||
// const view2 = await sim.clickLeft('tests/tmpX/00002.png') | ||
// | ||
// // compare to check that it went back to the same view | ||
// expect(view2).toEqual(view0) | ||
// expect(view1).not.toEqual(view0) | ||
// } finally { | ||
// await sim.close() | ||
// } | ||
// }) | ||
// | ||
// test('Load/Compare Snapshots', async () => { | ||
// const image1A = Zemu.LoadPng2RGB('tests/snapshots/image1A.png') | ||
// const image1B = Zemu.LoadPng2RGB('tests/snapshots/image1B.png') | ||
// const image2A = Zemu.LoadPng2RGB('tests/snapshots/image2A.png') | ||
// | ||
// expect(image1A).toEqual(image1B) | ||
// expect(image1A).not.toEqual(image2A) | ||
// }) | ||
// | ||
// test('Wait for change / timeout', async () => { | ||
// const sim = new Zemu(DEMO_APP_PATH_S) | ||
// try { | ||
// await sim.start(ZEMU_OPTIONS_S) | ||
// const result = sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot(), 2000) | ||
// await expect(result).rejects.toEqual('Timeout waiting for screen to change (2000 ms)') | ||
// } finally { | ||
// await sim.close() | ||
// } | ||
// }) | ||
// | ||
// test('Snapshot and compare', async () => { | ||
// const sim = new Zemu(DEMO_APP_PATH_S) | ||
// try { | ||
// await sim.start(ZEMU_OPTIONS_S) | ||
// expect(await sim.compareSnapshotsAndAccept('tests', 'compare_test', 1)).toBeTruthy() | ||
// } finally { | ||
// await sim.close() | ||
// } | ||
// }) | ||
test('File-Missing', () => { | ||
expect(() => { | ||
new Zemu('it_does_not_exist') | ||
}).toThrow(/Did you compile/) | ||
}) | ||
test('Trying to run in nano S mode with a nano X elf', () => { | ||
const t = () => { | ||
Zemu.checkElf('nanos', DEMO_APP_PATH_X) | ||
} | ||
expect(t).toThrow("Zemu model is set to 'nanos' but elf file doesn't seem to be nano s build. Did you pass the right elf ?") | ||
}) | ||
test('Start&Close-NanoS', async () => { | ||
const sim = new Zemu(DEMO_APP_PATH_S) | ||
expect(sim).not.toBeNull() | ||
try { | ||
await sim.start(ZEMU_OPTIONS_S) | ||
} finally { | ||
await sim.close() | ||
} | ||
}) | ||
test('Start&Close-NanoX', async () => { | ||
const sim = new Zemu(DEMO_APP_PATH_X) | ||
expect(sim).not.toBeNull() | ||
try { | ||
await sim.start(ZEMU_OPTIONS_X) | ||
} finally { | ||
await sim.close() | ||
} | ||
}) | ||
test('Snapshot', async () => { | ||
const sim = new Zemu(DEMO_APP_PATH_S) | ||
try { | ||
await sim.start(ZEMU_OPTIONS_S) | ||
const session = sim.getSession() | ||
expect(session.title).toEqual('LibVNCServer') | ||
expect(session.width).toEqual(128) | ||
expect(session.height).toEqual(32) | ||
const snapshot = await sim.snapshot() | ||
expect(snapshot.width).toEqual(128) | ||
expect(snapshot.height).toEqual(32) | ||
} finally { | ||
await sim.close() | ||
} | ||
}) | ||
test('Basic Control - S', async () => { | ||
const sim = new Zemu(DEMO_APP_PATH_S) | ||
try { | ||
await sim.start(ZEMU_OPTIONS_S) | ||
await sim.clickLeft() | ||
await sim.clickLeft() | ||
await sim.clickLeft() | ||
// Move up and down and check screens | ||
const view0 = await sim.snapshot('tests/tmp/00000.png') | ||
const view1 = await sim.clickRight('tests/tmp/00001.png') | ||
const view2 = await sim.clickLeft('tests/tmp/00002.png') | ||
// compare to check that it went back to the same view | ||
expect(view2).toEqual(view0) | ||
expect(view1).not.toEqual(view0) | ||
} finally { | ||
await sim.close() | ||
} | ||
}) | ||
test('Basic Control - X', async () => { | ||
const sim = new Zemu(DEMO_APP_PATH_X) | ||
try { | ||
await sim.start(ZEMU_OPTIONS_X) | ||
await sim.clickLeft() | ||
await sim.clickLeft() | ||
await sim.clickLeft() | ||
// Move up and down and check screens | ||
const view0 = await sim.snapshot('tests/tmpX/00000.png') | ||
const view1 = await sim.clickRight('tests/tmpX/00001.png') | ||
const view2 = await sim.clickLeft('tests/tmpX/00002.png') | ||
// compare to check that it went back to the same view | ||
expect(view2).toEqual(view0) | ||
expect(view1).not.toEqual(view0) | ||
} finally { | ||
await sim.close() | ||
} | ||
}) | ||
test('Load/Compare Snapshots', async () => { | ||
const image1A = Zemu.LoadPng2RGB('tests/snapshots/image1A.png') | ||
const image1B = Zemu.LoadPng2RGB('tests/snapshots/image1B.png') | ||
const image2A = Zemu.LoadPng2RGB('tests/snapshots/image2A.png') | ||
expect(image1A).toEqual(image1B) | ||
expect(image1A).not.toEqual(image2A) | ||
}) | ||
test('Wait for change / timeout', async () => { | ||
const sim = new Zemu(DEMO_APP_PATH_S) | ||
try { | ||
await sim.start(ZEMU_OPTIONS_S) | ||
const result = sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot(), 2000) | ||
await expect(result).rejects.toEqual('Timeout waiting for screen to change (2000 ms)') | ||
} finally { | ||
await sim.close() | ||
} | ||
}) | ||
test('Snapshot and compare', async () => { | ||
const sim = new Zemu(DEMO_APP_PATH_S) | ||
try { | ||
await sim.start(ZEMU_OPTIONS_S) | ||
expect(await sim.compareSnapshotsAndAccept('tests', 'compare_test', 1)).toBeTruthy() | ||
} finally { | ||
await sim.close() | ||
} | ||
}) | ||
test('Snapshot and compare 2', async () => { | ||
@@ -184,25 +184,25 @@ const sim = new Zemu(DEMO_APP_PATH_S) | ||
// test('Load and run a library', async () => { | ||
// const LITECOIN_PATH = Resolve('bin/litecoin.elf') | ||
// const BITCOIN_LIB = { Bitcoin: Resolve('bin/bitcoin.elf') } | ||
// const sim = new Zemu(LITECOIN_PATH, BITCOIN_LIB) | ||
// try { | ||
// await sim.start(ZEMU_OPTIONS_S) | ||
// | ||
// // If we can see the main screen, then the library has been loaded with success | ||
// await sim.snapshot('tests/tmp/libWelcome.png') | ||
// const testLibWelcome = Zemu.LoadPng2RGB('tests/tmp/libWelcome.png') | ||
// const goldenLibWelcome = Zemu.LoadPng2RGB('tests/snapshots/libWelcome.png') | ||
// expect(testLibWelcome).toEqual(goldenLibWelcome) | ||
// } finally { | ||
// await sim.close() | ||
// } | ||
// }) | ||
// | ||
// test('GRPC Server start-stop', async () => { | ||
// const sim = new Zemu(DEMO_APP_PATH_S) | ||
// await sim.start(ZEMU_OPTIONS_S) | ||
// sim.startGRPCServer('localhost', 3002) | ||
// await Zemu.sleep(3000) | ||
// await sim.close() | ||
// }) | ||
test('Load and run a library', async () => { | ||
const LITECOIN_PATH = Resolve('bin/litecoin.elf') | ||
const BITCOIN_LIB = { Bitcoin: Resolve('bin/bitcoin.elf') } | ||
const sim = new Zemu(LITECOIN_PATH, BITCOIN_LIB) | ||
try { | ||
await sim.start(ZEMU_OPTIONS_S) | ||
// If we can see the main screen, then the library has been loaded with success | ||
await sim.snapshot('tests/tmp/libWelcome.png') | ||
const testLibWelcome = Zemu.LoadPng2RGB('tests/tmp/libWelcome.png') | ||
const goldenLibWelcome = Zemu.LoadPng2RGB('tests/snapshots/libWelcome.png') | ||
expect(testLibWelcome).toEqual(goldenLibWelcome) | ||
} finally { | ||
await sim.close() | ||
} | ||
}) | ||
test('GRPC Server start-stop', async () => { | ||
const sim = new Zemu(DEMO_APP_PATH_S) | ||
await sim.start(ZEMU_OPTIONS_S) | ||
sim.startGRPCServer('localhost', 3002) | ||
await Zemu.sleep(3000) | ||
await sim.close() | ||
}) |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
2983511
2400