terminal: add custom key handler for xterm.js
Bug: b/236205389
Change-Id: I43f690614ccf98d265a29935533c1b39b38b8837
Reviewed-on: https://chromium-review.googlesource.com/c/apps/libapps/+/3864725
Reviewed-by: Joel Hockey <joelhockey@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
diff --git a/terminal/js/terminal_emulator_tests.js b/terminal/js/terminal_emulator_tests.js
index 04b1b8d..1ad1794 100644
--- a/terminal/js/terminal_emulator_tests.js
+++ b/terminal/js/terminal_emulator_tests.js
@@ -7,8 +7,9 @@
*/
import {sleep} from './terminal_common.js';
-import {XtermTerminal, XtermTerminalTestParams} from './terminal_emulator.js';
-import {MockObject} from './terminal_test_mocks.js';
+import {encodeKeyCombo, Modifier, XtermTerminal, XtermTerminalTestParams}
+ from './terminal_emulator.js';
+import {MockFunction, MockObject} from './terminal_test_mocks.js';
describe('terminal_emulator_tests.js', function() {
describe('XtermTerminal', function() {
@@ -84,5 +85,36 @@
assert.deepEqual(this.mocks.fitAddon.getMethodHistory('fit'), []);
});
});
+
+ it('customKeyEventHandler_', async function() {
+ const mockHandler = new MockFunction();
+ const fakeEvent = {
+ type: 'keydown',
+ keyCode: 65,
+ ctrlKey: true,
+ };
+ this.terminal.keyDownHandlers_.set(encodeKeyCombo(Modifier.Ctrl, 65),
+ mockHandler.proxy);
+ assert.isFalse(this.terminal.customKeyEventHandler_(fakeEvent));
+ const history = mockHandler.popHistory();
+ assert.equal(history.length, 1);
+ assert.equal(history[0][0], fakeEvent);
+
+ assert.isFalse(this.terminal.customKeyEventHandler_({...fakeEvent,
+ type: 'keypress'}));
+ assert.isEmpty(mockHandler.popHistory());
+
+ assert.isTrue(this.terminal.customKeyEventHandler_({...fakeEvent,
+ shiftKey: true}));
+ assert.isEmpty(mockHandler.popHistory());
+
+ assert.isTrue(this.terminal.customKeyEventHandler_({...fakeEvent,
+ keyCode: 66}));
+ assert.isEmpty(mockHandler.popHistory());
+
+ assert.isTrue(this.terminal.customKeyEventHandler_({...fakeEvent,
+ ctrlKey: false}));
+ assert.isEmpty(mockHandler.popHistory());
+ });
});
});