* fix: Combined Hotkeys for special characters * add record method to hotkey manager * fix record plugin * remove unused component * add record to modal props * rename record method * replace handlers to use hotkeyRecord * fix combined keys * change expected result count from 18 to 17 * autoformat * Remove duplicate test, that was testing the wrong things; fix label; update configs * Revert "Remove duplicate test, that was testing the wrong things; fix label; update configs" This reverts commit 4292f4fe67351962d61cae623b920dcbd87dd71d. * Fix the record plugin's registration * fix exposed record method usage * adding logging for info level items * Hotkey definitions don't need to be globally reactive; use localstorage/appconfig as sources of truth; not redux * Tidy up test * Remove unused code from UserPreferencesForm * Log info when we run a command * fix hotkey preference restore * use application configured hotkeys if there are no user preferred * Avoid logging circular ref * Fix callouts * Fix small issue with array * Fix langua issue after refactor and merge * Refactor on recordCurrentCombo as Rodrigo did before * Separating components in 2 files * WIP Refactor to simplify the user preferences and move into each form the save and controll functionalities * Remove context * Remove unused import * Initial work on Field treatment * Refactor General preferences * Small refactor removing type from HotkeyField * small update on style * Refactor and layout fixed * Make hotkeys preferences working with old hotkeys row * Move error handling out of hotkey row/input component * WIP custom form * Moving validation function to component * Exposing hotkeyRecord as it does not depend on HotkeyManager Class * Making hotkeyField as much detached possible from parent component * Small refactors * Refactor on user preferences * Clean up into the changes * Small fix to let save working * Style finish * move about docs into about folder * Fix double tap on single keys * Style refactor * Remove log * Fix log issues on unit tests * Fix unit test breaking on ohif/core index * Fixing hotkeys unpause unit test issue * Rename file to adopt lowercase * Rename file to adopt lowercase * Fixing callouts * Big refactor miving some of the components into viewer and creating small components into ohif/ui * Typo on folder name * Updating ohif ui docs * Remove comments * Fix binding of combo keys * Fix some cypress tests failures * Fixing onCancel button * Fixing e2e tests * Small style update * Fixing unit tests failing after fix issue * Remove some not used code * Remove left over after debug * Adding prevent default on hotkeys events * Fixinf existing hotkeys validator with 3 keys pressed * Exposing hotkeys as root level on ohif-core * Clean up * Exposing all availableLanguages with labels and fixing an issue on language switcher * Fixing e2e cypress tests * Preveinting some simple errors * Treating error once we try to set hotkey definitions * Adding ui notification on setHotkeys errors * Implementing a service queue request to hold until functions are implemented * Making sure toFixed is only called on Numbers Co-authored-by: Danny Brown <danny.ri.brown@gmail.com> Co-authored-by: Gustavo André Lelis <galelis@gmail.com>
201 lines
6.1 KiB
JavaScript
201 lines
6.1 KiB
JavaScript
import CommandsManager from './CommandsManager.js';
|
|
import HotkeysManager from './HotkeysManager.js';
|
|
import hotkeys from './../utils/hotkeys';
|
|
import log from './../log.js';
|
|
|
|
jest.mock('./CommandsManager.js');
|
|
jest.mock('./../utils/hotkeys');
|
|
jest.mock('./../log.js');
|
|
|
|
describe('HotkeysManager', () => {
|
|
let hotkeysManager, commandsManager;
|
|
|
|
beforeEach(() => {
|
|
commandsManager = new CommandsManager();
|
|
hotkeysManager = new HotkeysManager(commandsManager);
|
|
CommandsManager.mockClear();
|
|
hotkeys.mockClear();
|
|
log.warn.mockClear();
|
|
jest.clearAllMocks();
|
|
});
|
|
|
|
it('has expected properties', () => {
|
|
const allProperties = Object.keys(hotkeysManager);
|
|
const expectedProprties = [
|
|
'hotkeyDefinitions',
|
|
'hotkeyDefaults',
|
|
'isEnabled',
|
|
];
|
|
|
|
const containsAllExpectedProperties = expectedProprties.every(expected =>
|
|
allProperties.includes(expected)
|
|
);
|
|
|
|
expect(containsAllExpectedProperties).toBe(true);
|
|
});
|
|
|
|
it('logs a warning if instantiated without a commandsManager', () => {
|
|
new HotkeysManager();
|
|
|
|
expect(log.warn.mock.calls.length).toBe(1);
|
|
expect(log.warn.mock.calls[0][0]).toEqual(
|
|
'HotkeysManager instantiated without a commandsManager. Hotkeys will be unable to find and run commands.'
|
|
);
|
|
});
|
|
|
|
describe('disable()', () => {
|
|
beforeEach(() => hotkeys.pause.mockClear());
|
|
|
|
it('sets isEnabled property to false', () => {
|
|
hotkeysManager.disable();
|
|
|
|
expect(hotkeysManager.isEnabled).toBe(false);
|
|
});
|
|
|
|
it('calls hotkeys.pause()', () => {
|
|
hotkeysManager.disable();
|
|
|
|
expect(hotkeys.pause.mock.calls.length).toBe(1);
|
|
});
|
|
});
|
|
|
|
describe('enable()', () => {
|
|
beforeEach(() => {
|
|
hotkeys.unpause = jest.fn();
|
|
hotkeys.unpause.mockClear();
|
|
});
|
|
|
|
it('sets isEnabled property to true', () => {
|
|
hotkeysManager.disable();
|
|
hotkeysManager.enable();
|
|
|
|
expect(hotkeysManager.isEnabled).toBe(true);
|
|
});
|
|
|
|
it('calls hotkeys.unpause()', () => {
|
|
hotkeysManager.enable();
|
|
|
|
expect(hotkeys.unpause.mock.calls.length).toBe(1);
|
|
});
|
|
});
|
|
|
|
describe('setHotkeys()', () => {
|
|
it('calls registerHotkeys for each hotkeyDefinition', () => {
|
|
const hotkeyDefinitions = [
|
|
{ commandName: 'dance', label: 'dance dance', keys: '+' },
|
|
{ commandName: 'celebrate', label: 'celebrate everything', keys: 'q' },
|
|
];
|
|
|
|
hotkeysManager.registerHotkeys = jest.fn();
|
|
hotkeysManager.setHotkeys(hotkeyDefinitions);
|
|
|
|
const numberOfCalls = hotkeysManager.registerHotkeys.mock.calls.length;
|
|
const firstCallArgs = hotkeysManager.registerHotkeys.mock.calls[0][0];
|
|
const secondCallArgs = hotkeysManager.registerHotkeys.mock.calls[1][0];
|
|
|
|
expect(numberOfCalls).toBe(2);
|
|
expect(firstCallArgs).toEqual(hotkeyDefinitions[0]);
|
|
expect(secondCallArgs).toEqual(hotkeyDefinitions[1]);
|
|
});
|
|
it('does not set this.hotkeyDefaults when calling setHotKeys', () => {
|
|
const hotkeyDefinitions = [{ commandName: 'dance', keys: '+' }];
|
|
|
|
hotkeysManager.setHotkeys(hotkeyDefinitions);
|
|
|
|
expect(hotkeysManager.hotkeyDefaults).toEqual([]);
|
|
});
|
|
});
|
|
|
|
describe('setDefaultHotKeys()', () => {
|
|
it('it sets default hotkeys', () => {
|
|
const hotkeyDefinitions = [{ commandName: 'dance', keys: '+' }];
|
|
|
|
hotkeysManager.setDefaultHotKeys(hotkeyDefinitions);
|
|
|
|
expect(hotkeysManager.hotkeyDefaults).toEqual(hotkeyDefinitions);
|
|
});
|
|
});
|
|
|
|
describe('registerHotkeys()', () => {
|
|
it('logs a warning and returns undefined if a commandName is not provided', () => {
|
|
const definition = { commandName: undefined, keys: '+' };
|
|
|
|
const result = hotkeysManager.registerHotkeys(definition);
|
|
|
|
expect(result).toBe(undefined);
|
|
expect(log.warn.mock.calls.length).toBe(1);
|
|
});
|
|
it('updates hotkeyDefinitions property with registered keys', () => {
|
|
const definition = { commandName: 'dance', label: 'hello', keys: '+' };
|
|
const expectedHotkeyDefinition = { label: 'hello', keys: '+' };
|
|
|
|
hotkeysManager.registerHotkeys(definition);
|
|
|
|
const numOfHotkeyDefinitions = Object.keys(
|
|
hotkeysManager.hotkeyDefinitions
|
|
).length;
|
|
const hotkeyDefinitionForRegisteredCommand =
|
|
hotkeysManager.hotkeyDefinitions[definition.commandName];
|
|
|
|
expect(numOfHotkeyDefinitions).toBe(1);
|
|
expect(hotkeyDefinitionForRegisteredCommand).toEqual(
|
|
expectedHotkeyDefinition
|
|
);
|
|
});
|
|
it('calls hotkeys.bind for the group of keys', () => {
|
|
const definition = { commandName: 'dance', keys: ['shift', 'e'] };
|
|
|
|
hotkeysManager.registerHotkeys(definition);
|
|
|
|
expect(hotkeys.bind.mock.calls.length).toBe(1);
|
|
expect(hotkeys.bind.mock.calls[0][0]).toBe('shift+e');
|
|
});
|
|
it('calls hotkeys.unbind if commandName was previously registered, for each previously registered set of keys', () => {
|
|
const firstDefinition = {
|
|
commandName: 'dance',
|
|
keys: ['alt', 'e'],
|
|
};
|
|
const secondDefinition = { commandName: 'dance', keys: 'a' };
|
|
|
|
// First call
|
|
hotkeysManager.registerHotkeys(firstDefinition);
|
|
// Second call
|
|
hotkeysManager.registerHotkeys(secondDefinition);
|
|
|
|
expect(hotkeys.unbind.mock.calls.length).toBe(1);
|
|
expect(hotkeys.unbind.mock.calls[0][0]).toBe('alt+e');
|
|
});
|
|
});
|
|
|
|
describe('restoreDefaults()', () => {
|
|
it('calls setHotkeys with hotkey defaults', () => {
|
|
hotkeysManager.setHotkeys = jest.fn();
|
|
|
|
hotkeysManager.restoreDefaultBindings();
|
|
|
|
expect(hotkeysManager.setHotkeys.mock.calls[0][0]).toEqual(
|
|
hotkeysManager.hotkeyDefaults
|
|
);
|
|
});
|
|
});
|
|
|
|
describe('destroy()', () => {
|
|
it('clears default and definition properties', () => {
|
|
hotkeysManager.hotkeyDefaults = ['hotdog', 'jeremy', 'qasar'];
|
|
hotkeysManager.hotkeyDefinitions = {
|
|
hello: 'world',
|
|
};
|
|
|
|
hotkeysManager.destroy();
|
|
|
|
expect(hotkeysManager.hotkeyDefaults).toEqual([]);
|
|
expect(hotkeysManager.hotkeyDefinitions).toEqual({});
|
|
});
|
|
it('resets all hotkey bindings', () => {
|
|
hotkeysManager.destroy();
|
|
|
|
expect(hotkeys.reset.mock.calls.length).toEqual(1);
|
|
});
|
|
});
|
|
});
|