summaryrefslogtreecommitdiff
path: root/test/dictionary-validate.js
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2020-09-19 19:04:28 -0400
committerGitHub <noreply@github.com>2020-09-19 19:04:28 -0400
commit51d4e5b0ff4c0054bf5012464414ec0657d09963 (patch)
tree9920d1a9c84bf968ca8105700450792d78ac0088 /test/dictionary-validate.js
parent4293f731537906785da3b1f20535ddd18a4edd21 (diff)
Dev/test script organization (#846)
* Move lint scripts * Move dictionary-validate.js * Move schema-validate.js * Move createTestDictionaryArchive, remove yomichan-test.js * Rename yomichan-util.js to util.js * Move test/yomichan-vm.js to dev/vm.js * Move getArgs into util.js (and fix name) * Create test-all.js * Update test-code script
Diffstat (limited to 'test/dictionary-validate.js')
-rw-r--r--test/dictionary-validate.js118
1 files changed, 0 insertions, 118 deletions
diff --git a/test/dictionary-validate.js b/test/dictionary-validate.js
deleted file mode 100644
index a669a542..00000000
--- a/test/dictionary-validate.js
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (C) 2020 Yomichan Authors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
-
-const fs = require('fs');
-const path = require('path');
-const {JSZip} = require('../dev/yomichan-util');
-const {VM} = require('./yomichan-vm');
-
-const vm = new VM();
-vm.execute([
- 'mixed/js/core.js',
- 'mixed/js/cache-map.js',
- 'bg/js/json-schema.js'
-]);
-const JsonSchemaValidator = vm.get('JsonSchemaValidator');
-
-
-function readSchema(relativeFileName) {
- const fileName = path.join(__dirname, relativeFileName);
- const source = fs.readFileSync(fileName, {encoding: 'utf8'});
- return JSON.parse(source);
-}
-
-
-async function validateDictionaryBanks(zip, fileNameFormat, schema) {
- let index = 1;
- while (true) {
- const fileName = fileNameFormat.replace(/\?/, index);
-
- const file = zip.files[fileName];
- if (!file) { break; }
-
- const data = JSON.parse(await file.async('string'));
- new JsonSchemaValidator().validate(data, schema);
-
- ++index;
- }
-}
-
-async function validateDictionary(archive, schemas) {
- const indexFile = archive.files['index.json'];
- if (!indexFile) {
- throw new Error('No dictionary index found in archive');
- }
-
- const index = JSON.parse(await indexFile.async('string'));
- const version = index.format || index.version;
-
- new JsonSchemaValidator().validate(index, schemas.index);
-
- await validateDictionaryBanks(archive, 'term_bank_?.json', version === 1 ? schemas.termBankV1 : schemas.termBankV3);
- await validateDictionaryBanks(archive, 'term_meta_bank_?.json', schemas.termMetaBankV3);
- await validateDictionaryBanks(archive, 'kanji_bank_?.json', version === 1 ? schemas.kanjiBankV1 : schemas.kanjiBankV3);
- await validateDictionaryBanks(archive, 'kanji_meta_bank_?.json', schemas.kanjiMetaBankV3);
- await validateDictionaryBanks(archive, 'tag_bank_?.json', schemas.tagBankV3);
-}
-
-function getSchemas() {
- return {
- index: readSchema('../ext/bg/data/dictionary-index-schema.json'),
- kanjiBankV1: readSchema('../ext/bg/data/dictionary-kanji-bank-v1-schema.json'),
- kanjiBankV3: readSchema('../ext/bg/data/dictionary-kanji-bank-v3-schema.json'),
- kanjiMetaBankV3: readSchema('../ext/bg/data/dictionary-kanji-meta-bank-v3-schema.json'),
- tagBankV3: readSchema('../ext/bg/data/dictionary-tag-bank-v3-schema.json'),
- termBankV1: readSchema('../ext/bg/data/dictionary-term-bank-v1-schema.json'),
- termBankV3: readSchema('../ext/bg/data/dictionary-term-bank-v3-schema.json'),
- termMetaBankV3: readSchema('../ext/bg/data/dictionary-term-meta-bank-v3-schema.json')
- };
-}
-
-
-async function main() {
- const dictionaryFileNames = process.argv.slice(2);
- if (dictionaryFileNames.length === 0) {
- console.log([
- 'Usage:',
- ' node dictionary-validate <dictionary-file-names>...'
- ].join('\n'));
- return;
- }
-
- const schemas = getSchemas();
-
- for (const dictionaryFileName of dictionaryFileNames) {
- try {
- console.log(`Validating ${dictionaryFileName}...`);
- const source = fs.readFileSync(dictionaryFileName);
- const archive = await JSZip.loadAsync(source);
- await validateDictionary(archive, schemas);
- console.log('No issues found');
- } catch (e) {
- console.warn(e);
- }
- }
-}
-
-
-if (require.main === module) { main(); }
-
-
-module.exports = {
- getSchemas,
- validateDictionary
-};