mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-05-26 00:55:16 -07:00
104 lines
3.1 KiB
TypeScript
104 lines
3.1 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import type { Config } from '../../types';
|
|
import { resolveConfiguredShortcuts } from './shortcut-config';
|
|
|
|
test('forces Anki-dependent shortcuts to null when AnkiConnect is explicitly disabled', () => {
|
|
const config: Config = {
|
|
ankiConnect: { enabled: false },
|
|
shortcuts: {
|
|
copySubtitle: 'Ctrl+KeyC',
|
|
updateLastCardFromClipboard: 'Ctrl+KeyU',
|
|
triggerFieldGrouping: 'Alt+KeyG',
|
|
mineSentence: 'Ctrl+Digit1',
|
|
mineSentenceMultiple: 'Ctrl+Digit2',
|
|
markAudioCard: 'Alt+KeyM',
|
|
},
|
|
};
|
|
const defaults: Config = {
|
|
shortcuts: {
|
|
updateLastCardFromClipboard: 'Alt+KeyL',
|
|
triggerFieldGrouping: 'Alt+KeyF',
|
|
mineSentence: 'KeyQ',
|
|
mineSentenceMultiple: 'KeyW',
|
|
markAudioCard: 'KeyE',
|
|
},
|
|
};
|
|
|
|
const resolved = resolveConfiguredShortcuts(config, defaults);
|
|
|
|
assert.equal(resolved.updateLastCardFromClipboard, null);
|
|
assert.equal(resolved.triggerFieldGrouping, null);
|
|
assert.equal(resolved.mineSentence, null);
|
|
assert.equal(resolved.mineSentenceMultiple, null);
|
|
assert.equal(resolved.markAudioCard, null);
|
|
assert.equal(resolved.copySubtitle, 'Ctrl+C');
|
|
});
|
|
|
|
test('keeps Anki-dependent shortcuts enabled and normalized when AnkiConnect is enabled', () => {
|
|
const config: Config = {
|
|
ankiConnect: { enabled: true },
|
|
shortcuts: {
|
|
updateLastCardFromClipboard: 'Ctrl+KeyU',
|
|
mineSentence: 'Ctrl+Digit1',
|
|
mineSentenceMultiple: 'Ctrl+Digit2',
|
|
},
|
|
};
|
|
const defaults: Config = {
|
|
shortcuts: {
|
|
triggerFieldGrouping: 'Alt+KeyG',
|
|
markAudioCard: 'Alt+KeyM',
|
|
},
|
|
};
|
|
|
|
const resolved = resolveConfiguredShortcuts(config, defaults);
|
|
|
|
assert.equal(resolved.updateLastCardFromClipboard, 'Ctrl+U');
|
|
assert.equal(resolved.triggerFieldGrouping, 'Alt+G');
|
|
assert.equal(resolved.mineSentence, 'Ctrl+1');
|
|
assert.equal(resolved.mineSentenceMultiple, 'Ctrl+2');
|
|
assert.equal(resolved.markAudioCard, 'Alt+M');
|
|
});
|
|
|
|
test('normalizes fallback shortcuts when AnkiConnect flag is unset', () => {
|
|
const config: Config = {};
|
|
const defaults: Config = {
|
|
shortcuts: {
|
|
mineSentence: 'KeyQ',
|
|
openRuntimeOptions: 'Digit9',
|
|
openCharacterDictionaryManager: 'Ctrl+KeyD',
|
|
},
|
|
};
|
|
|
|
const resolved = resolveConfiguredShortcuts(config, defaults);
|
|
|
|
assert.equal(resolved.mineSentence, 'Q');
|
|
assert.equal(resolved.openRuntimeOptions, '9');
|
|
assert.equal(resolved.openCharacterDictionaryManager, 'Ctrl+D');
|
|
});
|
|
|
|
test('preserves null shortcut overrides so defaults can be disabled', () => {
|
|
const config: Config = {
|
|
shortcuts: {
|
|
copySubtitle: null,
|
|
openJimaku: null,
|
|
toggleSubtitleSidebar: null,
|
|
},
|
|
};
|
|
const defaults: Config = {
|
|
shortcuts: {
|
|
copySubtitle: 'Ctrl+KeyC',
|
|
openJimaku: 'Ctrl+Shift+KeyJ',
|
|
toggleSubtitleSidebar: 'Backslash',
|
|
openRuntimeOptions: 'Digit9',
|
|
},
|
|
};
|
|
|
|
const resolved = resolveConfiguredShortcuts(config, defaults);
|
|
|
|
assert.equal(resolved.copySubtitle, null);
|
|
assert.equal(resolved.openJimaku, null);
|
|
assert.equal(resolved.toggleSubtitleSidebar, null);
|
|
assert.equal(resolved.openRuntimeOptions, '9');
|
|
});
|