mirror of
https://github.com/wavetermdev/xterm.js.git
synced 2026-08-05 13:43:48 -07:00
Add more test cases
This commit is contained in:
@@ -286,5 +286,331 @@ describe('Win32InputMode', () => {
|
||||
assert.strictEqual(parts.length, 6);
|
||||
});
|
||||
});
|
||||
|
||||
describe('standalone modifier keys', () => {
|
||||
it('should encode ShiftLeft alone', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({
|
||||
code: 'ShiftLeft',
|
||||
key: 'Shift',
|
||||
keyCode: 16,
|
||||
shiftKey: true
|
||||
}), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x10);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.SHIFT_PRESSED);
|
||||
});
|
||||
|
||||
it('should encode ShiftRight alone', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({
|
||||
code: 'ShiftRight',
|
||||
key: 'Shift',
|
||||
keyCode: 16,
|
||||
shiftKey: true
|
||||
}), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x10);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.SHIFT_PRESSED);
|
||||
});
|
||||
|
||||
it('should encode ControlLeft alone', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({
|
||||
code: 'ControlLeft',
|
||||
key: 'Control',
|
||||
keyCode: 17,
|
||||
ctrlKey: true
|
||||
}), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x11);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.LEFT_CTRL_PRESSED);
|
||||
});
|
||||
|
||||
it('should encode ControlRight alone', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({
|
||||
code: 'ControlRight',
|
||||
key: 'Control',
|
||||
keyCode: 17,
|
||||
ctrlKey: true
|
||||
}), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x11);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.RIGHT_CTRL_PRESSED);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.ENHANCED_KEY);
|
||||
});
|
||||
|
||||
it('should encode AltLeft alone', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({
|
||||
code: 'AltLeft',
|
||||
key: 'Alt',
|
||||
keyCode: 18,
|
||||
altKey: true
|
||||
}), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x12);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.LEFT_ALT_PRESSED);
|
||||
});
|
||||
|
||||
it('should encode AltRight alone', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({
|
||||
code: 'AltRight',
|
||||
key: 'Alt',
|
||||
keyCode: 18,
|
||||
altKey: true
|
||||
}), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x12);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.RIGHT_ALT_PRESSED);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.ENHANCED_KEY);
|
||||
});
|
||||
|
||||
it('should encode modifier key release', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({
|
||||
code: 'ShiftLeft',
|
||||
key: 'Shift',
|
||||
keyCode: 16,
|
||||
shiftKey: false
|
||||
}), false);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.kd, 0);
|
||||
});
|
||||
});
|
||||
|
||||
describe('problem keys from spec', () => {
|
||||
it('should encode Ctrl+Space', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({
|
||||
code: 'Space',
|
||||
key: ' ',
|
||||
keyCode: 32,
|
||||
ctrlKey: true
|
||||
}), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x20);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.LEFT_CTRL_PRESSED);
|
||||
});
|
||||
|
||||
it('should encode Shift+Enter', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({
|
||||
code: 'Enter',
|
||||
key: 'Enter',
|
||||
keyCode: 13,
|
||||
shiftKey: true
|
||||
}), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x0D);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.SHIFT_PRESSED);
|
||||
});
|
||||
|
||||
it('should encode Ctrl+Break', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({
|
||||
code: 'Pause',
|
||||
key: 'Pause',
|
||||
keyCode: 19,
|
||||
ctrlKey: true
|
||||
}), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x13);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.LEFT_CTRL_PRESSED);
|
||||
});
|
||||
|
||||
it('should encode Ctrl+Alt+/', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({
|
||||
code: 'Slash',
|
||||
key: '/',
|
||||
keyCode: 191,
|
||||
ctrlKey: true,
|
||||
altKey: true
|
||||
}), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.LEFT_CTRL_PRESSED);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.LEFT_ALT_PRESSED);
|
||||
});
|
||||
});
|
||||
|
||||
describe('additional navigation keys', () => {
|
||||
it('should encode Tab', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({ code: 'Tab', key: 'Tab', keyCode: 9 }), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x09);
|
||||
});
|
||||
|
||||
it('should encode Backspace', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({ code: 'Backspace', key: 'Backspace', keyCode: 8 }), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x08);
|
||||
});
|
||||
|
||||
it('should encode PageUp with ENHANCED_KEY flag', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({ code: 'PageUp', key: 'PageUp', keyCode: 33 }), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x21);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.ENHANCED_KEY);
|
||||
});
|
||||
|
||||
it('should encode PageDown with ENHANCED_KEY flag', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({ code: 'PageDown', key: 'PageDown', keyCode: 34 }), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x22);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.ENHANCED_KEY);
|
||||
});
|
||||
|
||||
it('should encode End with ENHANCED_KEY flag', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({ code: 'End', key: 'End', keyCode: 35 }), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x23);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.ENHANCED_KEY);
|
||||
});
|
||||
|
||||
it('should encode ArrowDown with ENHANCED_KEY flag', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({ code: 'ArrowDown', key: 'ArrowDown', keyCode: 40 }), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x28);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.ENHANCED_KEY);
|
||||
});
|
||||
|
||||
it('should encode ArrowLeft with ENHANCED_KEY flag', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({ code: 'ArrowLeft', key: 'ArrowLeft', keyCode: 37 }), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x25);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.ENHANCED_KEY);
|
||||
});
|
||||
|
||||
it('should encode ArrowRight with ENHANCED_KEY flag', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({ code: 'ArrowRight', key: 'ArrowRight', keyCode: 39 }), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x27);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.ENHANCED_KEY);
|
||||
});
|
||||
});
|
||||
|
||||
describe('additional numpad keys', () => {
|
||||
it('should encode NumpadAdd', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({ code: 'NumpadAdd', key: '+', keyCode: 107 }), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x6B);
|
||||
});
|
||||
|
||||
it('should encode NumpadSubtract', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({ code: 'NumpadSubtract', key: '-', keyCode: 109 }), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x6D);
|
||||
});
|
||||
|
||||
it('should encode NumpadMultiply', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({ code: 'NumpadMultiply', key: '*', keyCode: 106 }), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x6A);
|
||||
});
|
||||
|
||||
it('should encode NumpadDivide with ENHANCED_KEY', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({ code: 'NumpadDivide', key: '/', keyCode: 111 }), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x6F);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.ENHANCED_KEY);
|
||||
});
|
||||
|
||||
it('should encode NumpadDecimal', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({ code: 'NumpadDecimal', key: '.', keyCode: 110 }), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x6E);
|
||||
});
|
||||
});
|
||||
|
||||
describe('meta key', () => {
|
||||
it('should encode MetaLeft', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({
|
||||
code: 'MetaLeft',
|
||||
key: 'Meta',
|
||||
keyCode: 91,
|
||||
metaKey: true
|
||||
}), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x5B);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.ENHANCED_KEY);
|
||||
});
|
||||
|
||||
it('should encode MetaRight', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({
|
||||
code: 'MetaRight',
|
||||
key: 'Meta',
|
||||
keyCode: 92,
|
||||
metaKey: true
|
||||
}), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x5C);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.ENHANCED_KEY);
|
||||
});
|
||||
});
|
||||
|
||||
describe('unicode characters', () => {
|
||||
it('should encode extended ASCII character', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({
|
||||
code: 'KeyE',
|
||||
key: 'é',
|
||||
keyCode: 69
|
||||
}), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.uc, 233);
|
||||
});
|
||||
|
||||
it('should encode symbol character', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({
|
||||
code: 'Digit4',
|
||||
key: '$',
|
||||
keyCode: 52,
|
||||
shiftKey: true
|
||||
}), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.uc, 36);
|
||||
});
|
||||
});
|
||||
|
||||
describe('function key range', () => {
|
||||
it('should encode F5', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({ code: 'F5', key: 'F5', keyCode: 116 }), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x74);
|
||||
});
|
||||
|
||||
it('should encode Ctrl+F1', () => {
|
||||
const result = evaluateKeyboardEventWin32(createEvent({
|
||||
code: 'F1',
|
||||
key: 'F1',
|
||||
keyCode: 112,
|
||||
ctrlKey: true
|
||||
}), true);
|
||||
const parsed = parseWin32Sequence(result.key!);
|
||||
assert.ok(parsed);
|
||||
assert.strictEqual(parsed.vk, 0x70);
|
||||
assert.ok(parsed.cs & Win32ControlKeyState.LEFT_CTRL_PRESSED);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user