mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-09-23 05:16:23 -07:00
Hachidori's overlay-mode first-install options turn off "Highlight the word on the page" because GSM-style hosts screenshot the see-through viewport. SubMiner captures media from mpv, and without the highlight the subtitle sidebar gave no sign of which word was looked up or where the match ended. The staged copy now seeds the highlight on; the fork source is unchanged.
46 lines
2.0 KiB
TypeScript
46 lines
2.0 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import { execFileSync } from 'node:child_process';
|
|
import { readFileSync } from 'node:fs';
|
|
import { fileURLToPath } from 'node:url';
|
|
import test from 'node:test';
|
|
|
|
test('Hachidori staging configures Electron without changing the fork source', async () => {
|
|
const files = ['overlay-mode.js', 'setup-state.js', 'manifest.json'];
|
|
const source = (file: string) =>
|
|
new URL(`../vendor/hachidori/extension/${file}`, import.meta.url);
|
|
const before = files.map((file) => readFileSync(source(file), 'utf8'));
|
|
|
|
execFileSync(process.execPath, [
|
|
fileURLToPath(new URL('./build-hachidori.mjs', import.meta.url)),
|
|
]);
|
|
|
|
assert.deepEqual(
|
|
files.map((file) => readFileSync(source(file), 'utf8')),
|
|
before,
|
|
);
|
|
const staged = await import(new URL('../build/hachidori/overlay-mode.js', import.meta.url).href);
|
|
assert.equal(staged.OVERLAY_MODE, true);
|
|
assert.equal(staged.HOST_CAPABILITIES.customJavaScript, false);
|
|
const original = await import(source('overlay-mode.js').href);
|
|
assert.equal(original.OVERLAY_MODE, false);
|
|
assert.equal(original.HOST_CAPABILITIES.customJavaScript, true);
|
|
// SubMiner mines media from mpv, not the overlay viewport, so the lookup
|
|
// highlight stays on for a first install.
|
|
const stagedSetup = await import(
|
|
new URL('../build/hachidori/setup-state.js', import.meta.url).href
|
|
);
|
|
assert.equal(stagedSetup.OVERLAY_MODE_OPTIONS.sourceHighlightEnabled, true);
|
|
const originalSetup = await import(source('setup-state.js').href);
|
|
assert.equal(originalSetup.OVERLAY_MODE_OPTIONS.sourceHighlightEnabled, false);
|
|
const manifest = JSON.parse(
|
|
readFileSync(new URL('../build/hachidori/manifest.json', import.meta.url), 'utf8'),
|
|
);
|
|
const originalManifest = JSON.parse(readFileSync(source('manifest.json'), 'utf8'));
|
|
assert.deepEqual(manifest, {
|
|
...originalManifest,
|
|
permissions: originalManifest.permissions.filter(
|
|
(permission: string) => permission !== 'userScripts',
|
|
),
|
|
});
|
|
});
|