diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2021-03-15 20:55:26 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-15 20:55:26 -0400 |
commit | cba45b5e304afe0623e1d032d65e5efc2fc3929b (patch) | |
tree | 0b8475f8dcf84198619dbda7d5ef793443d52564 /test/test-translator.js | |
parent | 9ad9961ca81d2ee41c26d2c2bc2a399abad1bac5 (diff) |
Improve translator test data (#1531)
* Organize files
* Split translator test data into two files
* Add test for AnkiNoteData
Diffstat (limited to 'test/test-translator.js')
-rw-r--r-- | test/test-translator.js | 96 |
1 files changed, 66 insertions, 30 deletions
diff --git a/test/test-translator.js b/test/test-translator.js index 307329d0..ef431c46 100644 --- a/test/test-translator.js +++ b/test/test-translator.js @@ -37,28 +37,32 @@ async function createVM() { const vm = new DatabaseVM(); vm.execute([ 'js/core.js', - 'js/general/cache-map.js', - 'js/language/japanese-util.js', - 'js/data/json-schema.js', - 'js/media/media-util.js', - 'js/language/dictionary-importer.js', + 'js/data/anki-note-data.js', 'js/data/database.js', - 'js/language/dictionary-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/translator.js' + 'js/language/dictionary-data-util.js', + 'js/language/dictionary-importer.js', + 'js/language/dictionary-database.js', + 'js/language/japanese-util.js', + 'js/language/translator.js', + 'js/media/media-util.js' ]); const [ DictionaryImporter, DictionaryDatabase, JapaneseUtil, - Translator + Translator, + AnkiNoteData ] = vm.get([ 'DictionaryImporter', 'DictionaryDatabase', 'JapaneseUtil', - 'Translator' + 'Translator', + 'AnkiNoteData' ]); // Dictionary @@ -85,8 +89,11 @@ async function createVM() { const deinflectionReasions = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'ext', 'data/deinflect.json'))); translator.prepare(deinflectionReasions); + // Note data creation + const createPublicAnkiNoteData = (marker, data) => new AnkiNoteData(japaneseUtil, marker, data).createPublic(); + // Done - return {vm, translator, dictionary: result}; + return {vm, translator, dictionary: result, createPublicAnkiNoteData}; } function buildOptions(optionsPresets, optionsArray, dictionaryTitle) { @@ -140,37 +147,64 @@ function buildOptions(optionsPresets, optionsArray, dictionaryTitle) { async function main() { const write = (process.argv[2] === '--write'); - const {translator, dictionary: {title}} = await createVM(); - - const dataFilePath = path.join(__dirname, 'data', 'test-translator-data.json'); - const data = JSON.parse(fs.readFileSync(dataFilePath, {encoding: 'utf8'})); - const {optionsPresets, tests} = data; - for (const test of tests) { + const {translator, dictionary: {title}, createPublicAnkiNoteData} = await createVM(); + + const createTestAnkiNoteData = (definition, mode) => createPublicAnkiNoteData('{marker}', { + definition, + resultOutputMode: mode, + mode: 'mode', + glossaryLayoutMode: 'default', + compactTags: false, + context: { + url: 'url:', + sentence: {text: '', offset: 0}, + documentTitle: 'title' + }, + injectedMedia: null + }); + + const testInputsFilePath = path.join(__dirname, 'data', 'translator-test-inputs.json'); + const {optionsPresets, tests} = JSON.parse(fs.readFileSync(testInputsFilePath, {encoding: 'utf8'})); + + const testResults1FilePath = path.join(__dirname, 'data', 'translator-test-results.json'); + const expectedResults1 = JSON.parse(fs.readFileSync(testResults1FilePath, {encoding: 'utf8'})); + const actualResults1 = []; + + const testResults2FilePath = path.join(__dirname, 'data', 'translator-test-results-note-data1.json'); + const expectedResults2 = JSON.parse(fs.readFileSync(testResults2FilePath, {encoding: 'utf8'})); + const actualResults2 = []; + + for (let i = 0, ii = tests.length; i < ii; ++i) { + const test = tests[i]; + const expected1 = expectedResults1[i]; + const expected2 = expectedResults2[i]; switch (test.func) { case 'findTerms': { - const {mode, text} = test; + const {name, mode, text} = test; const options = buildOptions(optionsPresets, test.options, title); const [definitions, length] = clone(await translator.findTerms(mode, text, options)); - if (write) { - test.expected = {length, definitions}; - } else { - const {expected} = test; - assert.deepStrictEqual(length, expected.length); - assert.deepStrictEqual(definitions, expected.definitions); + const noteDataList = clone(definitions.map((definition) => createTestAnkiNoteData(clone(definition), null))); + actualResults1.push({name, length, definitions}); + actualResults2.push({name, noteDataList}); + if (!write) { + assert.deepStrictEqual(length, expected1.length); + assert.deepStrictEqual(definitions, expected1.definitions); + assert.deepStrictEqual(noteDataList, expected2.noteDataList); } } break; case 'findKanji': { - const {text} = test; + const {name, text} = test; const options = buildOptions(optionsPresets, test.options, title); const definitions = clone(await translator.findKanji(text, options)); - if (write) { - test.expected = {definitions}; - } else { - const {expected} = test; - assert.deepStrictEqual(definitions, expected.definitions); + const noteDataList = clone(definitions.map((definition) => createTestAnkiNoteData(clone(definition), null))); + actualResults1.push({name, definitions}); + actualResults2.push({name, noteDataList}); + if (!write) { + assert.deepStrictEqual(definitions, expected1.definitions); + assert.deepStrictEqual(noteDataList, expected2.noteDataList); } } break; @@ -178,7 +212,9 @@ async function main() { } if (write) { - fs.writeFileSync(dataFilePath, JSON.stringify(data, null, 4), {encoding: 'utf8'}); + // Use 2 indent instead of 4 to save a bit of file size + fs.writeFileSync(testResults1FilePath, JSON.stringify(actualResults1, null, 2), {encoding: 'utf8'}); + fs.writeFileSync(testResults2FilePath, JSON.stringify(actualResults2, null, 2), {encoding: 'utf8'}); } } |