Socket
Socket
Sign inDemoInstall

@zondax/zemu

Package Overview
Dependencies
Maintainers
1
Versions
166
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@zondax/zemu - npm Package Compare versions

Comparing version 0.12.1 to 0.12.2

2

dist/src/constants.d.ts
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()
})
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc