diff options
author | Darius Jahandarie <djahandarie@gmail.com> | 2023-11-08 03:11:35 +0900 |
---|---|---|
committer | Darius Jahandarie <djahandarie@gmail.com> | 2023-11-08 03:23:17 +0900 |
commit | 0f4d36938fd0d844f548aa5a7f7e7842df8dfb41 (patch) | |
tree | 5b6be3620a557d0b9177047003f6d742d9d2a32d /dev/translator-vm.js | |
parent | ef79eab44bfd000792c610b968b5ceefd41e76a0 (diff) |
Switch to vitest for ESM support; other fixes
Diffstat (limited to 'dev/translator-vm.js')
-rw-r--r-- | dev/translator-vm.js | 84 |
1 files changed, 33 insertions, 51 deletions
diff --git a/dev/translator-vm.js b/dev/translator-vm.js index 2a51ab8c..9f14523e 100644 --- a/dev/translator-vm.js +++ b/dev/translator-vm.js @@ -16,19 +16,32 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -const fs = require('fs'); -const path = require('path'); -const assert = require('assert'); -const {DatabaseVM, DatabaseVMDictionaryImporterMediaLoader} = require('./database-vm'); -const {createDictionaryArchive} = require('./util'); - -function clone(value) { - return JSON.parse(JSON.stringify(value)); -} +import fs from 'fs'; +import url, {fileURLToPath} from 'node:url'; +import path from 'path'; +import {expect, vi} from 'vitest'; +import {AnkiNoteDataCreator} from '../ext/js/data/sandbox/anki-note-data-creator.js'; +import {DictionaryDatabase} from '../ext/js/language/dictionary-database.js'; +import {DictionaryImporterMediaLoader} from '../ext/js/language/dictionary-importer-media-loader.js'; +import {DictionaryImporter} from '../ext/js/language/dictionary-importer.js'; +import {JapaneseUtil} from '../ext/js/language/sandbox/japanese-util.js'; +import {Translator} from '../ext/js/language/translator.js'; +import {createDictionaryArchive} from './util.js'; + +vi.mock('../ext/js/language/dictionary-importer-media-loader.js'); + +const dirname = path.dirname(fileURLToPath(import.meta.url)); + +export class TranslatorVM { + constructor() { + global.chrome = { + runtime: { + getURL: (path2) => { + return url.pathToFileURL(path.join(dirname, '..', 'ext', path2.replace(/^\//, ''))).href; + } + } + }; -class TranslatorVM extends DatabaseVM { - constructor(globals) { - super(globals); this._japaneseUtil = null; this._translator = null; this._ankiNoteDataCreator = null; @@ -40,43 +53,14 @@ class TranslatorVM extends DatabaseVM { } async prepare(dictionaryDirectory, dictionaryName) { - this.execute([ - 'js/core.js', - 'js/data/sandbox/anki-note-data-creator.js', - 'js/data/database.js', - 'js/data/json-schema.js', - 'js/general/cache-map.js', - 'js/general/regex-util.js', - 'js/general/text-source-map.js', - 'js/language/deinflector.js', - 'js/language/sandbox/dictionary-data-util.js', - 'js/language/dictionary-importer.js', - 'js/language/dictionary-database.js', - 'js/language/sandbox/japanese-util.js', - 'js/language/translator.js', - 'js/media/media-util.js' - ]); - const [ - DictionaryImporter, - DictionaryDatabase, - JapaneseUtil, - Translator, - AnkiNoteDataCreator - ] = this.get([ - 'DictionaryImporter', - 'DictionaryDatabase', - 'JapaneseUtil', - 'Translator', - 'AnkiNoteDataCreator' - ]); - // Dictionary this._dictionaryName = dictionaryName; const testDictionary = createDictionaryArchive(dictionaryDirectory, dictionaryName); + // const testDictionaryContent = await testDictionary.arrayBuffer(); const testDictionaryContent = await testDictionary.generateAsync({type: 'arraybuffer'}); // Setup database - const dictionaryImporterMediaLoader = new DatabaseVMDictionaryImporterMediaLoader(); + const dictionaryImporterMediaLoader = new DictionaryImporterMediaLoader(); const dictionaryImporter = new DictionaryImporter(dictionaryImporterMediaLoader, null); const dictionaryDatabase = new DictionaryDatabase(); await dictionaryDatabase.prepare(); @@ -87,7 +71,9 @@ class TranslatorVM extends DatabaseVM { {prefixWildcardsSupported: true} ); - assert.deepStrictEqual(errors.length, 0); + expect(errors.length).toEqual(0); + + const myDirname = path.dirname(fileURLToPath(import.meta.url)); // Setup translator this._japaneseUtil = new JapaneseUtil(null); @@ -95,7 +81,7 @@ class TranslatorVM extends DatabaseVM { japaneseUtil: this._japaneseUtil, database: dictionaryDatabase }); - const deinflectionReasons = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'ext', 'data/deinflect.json'))); + const deinflectionReasons = JSON.parse(fs.readFileSync(path.join(myDirname, '..', 'ext', 'data/deinflect.json'))); this._translator.prepare(deinflectionReasons); // Assign properties @@ -132,10 +118,10 @@ class TranslatorVM extends DatabaseVM { if (!Object.prototype.hasOwnProperty.call(optionsPresets, entry)) { throw new Error('Invalid options preset'); } - Object.assign(options, clone(optionsPresets[entry])); + Object.assign(options, structuredClone(optionsPresets[entry])); break; case 'object': - Object.assign(options, clone(entry)); + Object.assign(options, structuredClone(entry)); break; default: throw new Error('Invalid options type'); @@ -177,7 +163,3 @@ class TranslatorVM extends DatabaseVM { return options; } } - -module.exports = { - TranslatorVM -}; |