aboutsummaryrefslogtreecommitdiff
path: root/dev/translator-vm.js
diff options
context:
space:
mode:
authorDarius Jahandarie <djahandarie@gmail.com>2023-11-08 03:11:35 +0900
committerDarius Jahandarie <djahandarie@gmail.com>2023-11-08 03:23:17 +0900
commit0f4d36938fd0d844f548aa5a7f7e7842df8dfb41 (patch)
tree5b6be3620a557d0b9177047003f6d742d9d2a32d /dev/translator-vm.js
parentef79eab44bfd000792c610b968b5ceefd41e76a0 (diff)
Switch to vitest for ESM support; other fixes
Diffstat (limited to 'dev/translator-vm.js')
-rw-r--r--dev/translator-vm.js84
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
-};