Test updates (#1763)

* Allow passing of globals to custom VMs

* Add _serializeError

* Expose document to VM
This commit is contained in:
toasted-nutbread 2021-06-26 17:05:59 -04:00 committed by GitHub
parent f9167c8fdd
commit 73caeac0fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 6 deletions

View File

@ -101,8 +101,8 @@ function atob(data) {
} }
class DatabaseVM extends VM { class DatabaseVM extends VM {
constructor() { constructor(globals={}) {
super({ super(Object.assign({
chrome, chrome,
Image, Image,
Blob, Blob,
@ -111,7 +111,7 @@ class DatabaseVM extends VM {
IDBKeyRange: global.IDBKeyRange, IDBKeyRange: global.IDBKeyRange,
JSZip, JSZip,
atob atob
}); }, globals));
this.context.window = this.context; this.context.window = this.context;
this.indexedDB = global.indexedDB; this.indexedDB = global.indexedDB;
} }

View File

@ -26,8 +26,8 @@ function clone(value) {
} }
class TranslatorVM extends DatabaseVM { class TranslatorVM extends DatabaseVM {
constructor() { constructor(globals) {
super(); super(globals);
this._japaneseUtil = null; this._japaneseUtil = null;
this._translator = null; this._translator = null;
this._ankiNoteDataCreator = null; this._ankiNoteDataCreator = null;

View File

@ -18,6 +18,7 @@
const fs = require('fs'); const fs = require('fs');
const path = require('path'); const path = require('path');
const assert = require('assert'); const assert = require('assert');
const {JSDOM} = require('jsdom');
const {testMain} = require('../dev/util'); const {testMain} = require('../dev/util');
const {TranslatorVM} = require('../dev/translator-vm'); const {TranslatorVM} = require('../dev/translator-vm');
@ -27,7 +28,10 @@ function clone(value) {
} }
async function createVM() { async function createVM() {
const vm = new TranslatorVM(); const dom = new JSDOM();
const {document} = dom.window;
const vm = new TranslatorVM({document});
const dictionaryDirectory = path.join(__dirname, 'data', 'dictionaries', 'valid-dictionary1'); const dictionaryDirectory = path.join(__dirname, 'data', 'dictionaries', 'valid-dictionary1');
await vm.prepare(dictionaryDirectory, 'Test Dictionary 2'); await vm.prepare(dictionaryDirectory, 'Test Dictionary 2');
@ -68,6 +72,25 @@ async function createVM() {
return this._serializeMulti(this._templateRenderer.renderMulti(items)); return this._serializeMulti(this._templateRenderer.renderMulti(items));
} }
_serializeError(error) {
try {
if (typeof error === 'object' && error !== null) {
return {
name: error.name,
message: error.message,
stack: error.stack,
data: error.data
};
}
} catch (e) {
// NOP
}
return {
value: error,
hasValue: true
};
}
_serializeMulti(array) { _serializeMulti(array) {
for (let i = 0, ii = array.length; i < ii; ++i) { for (let i = 0, ii = array.length; i < ii; ++i) {
const value = array[i]; const value = array[i];