diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2021-07-31 14:36:14 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-31 14:36:14 -0400 |
commit | 992c8bcf75b9477e1652cf2a458418e375903cc0 (patch) | |
tree | efa833fb86bc023ab2a99773e1c3a98767435b9e /test/test-sw.js | |
parent | 11f210375ef64ccf969f1ad3da10dbed00a18fef (diff) |
test-workers (#1863)
* Add getImportedScripts utility function to test-sw.js
* Move functionality to testServiceWorker
* Rename file
* Add loadEslint utility function
* Add filterScriptPaths utility
Diffstat (limited to 'test/test-sw.js')
-rw-r--r-- | test/test-sw.js | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/test/test-sw.js b/test/test-sw.js deleted file mode 100644 index 498a0a32..00000000 --- a/test/test-sw.js +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (C) 2020-2021 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 {JSDOM} = require('jsdom'); -const {VM} = require('../dev/vm'); -const assert = require('assert'); - - -function getAllHtmlScriptPaths(fileName) { - const domSource = fs.readFileSync(fileName, {encoding: 'utf8'}); - const dom = new JSDOM(domSource); - const {window} = dom; - const {document} = window; - try { - const scripts = document.querySelectorAll('script'); - return [...scripts].map(({src}) => src); - } finally { - window.close(); - } -} - -function convertBackgroundScriptsToServiceWorkerScripts(scripts) { - // Use parse5-based SimpleDOMParser - scripts.splice(0, 0, '/lib/parse5.js'); - const index = scripts.indexOf('/js/dom/native-simple-dom-parser.js'); - assert.ok(index >= 0); - scripts[index] = '/js/dom/simple-dom-parser.js'; -} - -function main() { - try { - // Verify that sw.js scripts match background.html scripts - const rootDir = path.join(__dirname, '..'); - const extDirName = 'ext'; - const extDir = path.join(rootDir, extDirName); - - const scripts = getAllHtmlScriptPaths(path.join(extDir, 'background.html')); - convertBackgroundScriptsToServiceWorkerScripts(scripts); - const importedScripts = []; - - const importScripts = (...scripts2) => { - importedScripts.push(...scripts2); - }; - - const vm = new VM({importScripts}); - vm.context.self = vm.context; - vm.execute(['sw.js']); - - vm.assert.deepStrictEqual(scripts, importedScripts); - - // Verify that eslint config lists files correctly - const expectedSwRulesFiles = scripts.filter((src) => !src.startsWith('/lib/')).map((src) => `${extDirName}${src}`); - const eslintConfig = JSON.parse(fs.readFileSync(path.join(rootDir, '.eslintrc.json'), {encoding: 'utf8'})); - const swRules = eslintConfig.overrides.find((item) => ( - typeof item.env === 'object' && - item.env !== null && - item.env.serviceworker === true - )); - assert.ok(typeof swRules !== 'undefined'); - assert.ok(Array.isArray(swRules.files)); - assert.deepStrictEqual(swRules.files, expectedSwRulesFiles); - } catch (e) { - console.error(e); - process.exit(-1); - return; - } - process.exit(0); -} - - -if (require.main === module) { main(); } |