From 51d4e5b0ff4c0054bf5012464414ec0657d09963 Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Sat, 19 Sep 2020 19:04:28 -0400 Subject: 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 --- test/dictionary-validate.js | 118 -------------------------------------------- 1 file changed, 118 deletions(-) delete mode 100644 test/dictionary-validate.js (limited to 'test/dictionary-validate.js') 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 . - */ - -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 ...' - ].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 -}; -- cgit v1.2.3