implement 14, 16, 18, 20, 21, 22, 23; restrict DECCOLM to 24
This commit is contained in:
@@ -1266,4 +1266,151 @@ describe('InputHandler', () => {
|
||||
[131072, 131072], [131072, 131072], [131072, 300000 - 131072 - 131072]
|
||||
]);
|
||||
});
|
||||
describe('windowOps', () => {
|
||||
it('all should be disabled by default and not report', () => {
|
||||
const term = new TestTerminal({cols: 10, rows: 10});
|
||||
assert.deepEqual(term.options.allowedWindowOps, []);
|
||||
const stack: string[] = [];
|
||||
term.onData(data => stack.push(data));
|
||||
term.writeSync('\x1b[14t');
|
||||
term.writeSync('\x1b[16t');
|
||||
term.writeSync('\x1b[18t');
|
||||
term.writeSync('\x1b[20t');
|
||||
term.writeSync('\x1b[21t');
|
||||
assert.deepEqual(stack, []);
|
||||
});
|
||||
it('14 - GetWinSizePixels', () => {
|
||||
const term = new TestTerminal({cols: 10, rows: 10, allowedWindowOps: [14]});
|
||||
assert.deepEqual(term.options.allowedWindowOps, [14]);
|
||||
const stack: string[] = [];
|
||||
term.onData(data => stack.push(data));
|
||||
term.writeSync('\x1b[14t');
|
||||
// does not report in test terminal due to missing renderer
|
||||
assert.deepEqual(stack, []);
|
||||
});
|
||||
it('16 - GetCellSizePixels', () => {
|
||||
const term = new TestTerminal({cols: 10, rows: 10, allowedWindowOps: [16]});
|
||||
assert.deepEqual(term.options.allowedWindowOps, [16]);
|
||||
const stack: string[] = [];
|
||||
term.onData(data => stack.push(data));
|
||||
term.writeSync('\x1b[16t');
|
||||
// does not report in test terminal due to missing renderer
|
||||
assert.deepEqual(stack, []);
|
||||
});
|
||||
it('18 - GetWinSizeChars', () => {
|
||||
const term = new TestTerminal({cols: 10, rows: 10, allowedWindowOps: [18]});
|
||||
assert.deepEqual(term.options.allowedWindowOps, [18]);
|
||||
const stack: string[] = [];
|
||||
term.onData(data => stack.push(data));
|
||||
term.writeSync('\x1b[18t');
|
||||
assert.deepEqual(stack, ['\x1b[8;10;10t']);
|
||||
term.resize(50, 20);
|
||||
term.writeSync('\x1b[18t');
|
||||
assert.deepEqual(stack, ['\x1b[8;10;10t', '\x1b[8;20;50t']);
|
||||
});
|
||||
it('20 - GetIconTitle', () => {
|
||||
const term = new TestTerminal({cols: 10, rows: 10, allowedWindowOps: [20]});
|
||||
assert.deepEqual(term.options.allowedWindowOps, [20]);
|
||||
const stack: string[] = [];
|
||||
term.onData(data => stack.push(data));
|
||||
term.writeSync('\x1b]1;hello world!\x07');
|
||||
term.writeSync('\x1b[20t');
|
||||
assert.deepEqual(stack, ['\x1b]Lhello world!\x1b\\']);
|
||||
term.writeSync('\x1b]1;some other\x07');
|
||||
term.writeSync('\x1b[20t');
|
||||
assert.deepEqual(stack, ['\x1b]Lhello world!\x1b\\', '\x1b]Lsome other\x1b\\']);
|
||||
});
|
||||
it('21 - GetWinTitle', () => {
|
||||
const term = new TestTerminal({cols: 10, rows: 10, allowedWindowOps: [21]});
|
||||
assert.deepEqual(term.options.allowedWindowOps, [21]);
|
||||
const stack: string[] = [];
|
||||
term.onData(data => stack.push(data));
|
||||
term.writeSync('\x1b]2;hello world!\x07');
|
||||
term.writeSync('\x1b[21t');
|
||||
assert.deepEqual(stack, ['\x1b]lhello world!\x1b\\']);
|
||||
term.writeSync('\x1b]2;some other\x07');
|
||||
term.writeSync('\x1b[21t');
|
||||
assert.deepEqual(stack, ['\x1b]lhello world!\x1b\\', '\x1b]lsome other\x1b\\']);
|
||||
});
|
||||
it('22/23 - PushTitle/PopTitle', () => {
|
||||
const term = new TestTerminal({cols: 10, rows: 10, allowedWindowOps: [22, 23]});
|
||||
assert.deepEqual(term.options.allowedWindowOps, [22, 23]);
|
||||
const stack: string[] = [];
|
||||
term.onTitleChange(data => stack.push(data));
|
||||
term.writeSync('\x1b]0;1\x07');
|
||||
term.writeSync('\x1b[22t');
|
||||
term.writeSync('\x1b]0;2\x07');
|
||||
term.writeSync('\x1b[22t');
|
||||
term.writeSync('\x1b]0;3\x07');
|
||||
term.writeSync('\x1b[22t');
|
||||
assert.deepEqual((term as any)._inputHandler._windowTitleStack, ['1', '2', '3']);
|
||||
assert.deepEqual((term as any)._inputHandler._iconNameStack, ['1', '2', '3']);
|
||||
assert.deepEqual(stack, ['1', '2', '3']);
|
||||
term.writeSync('\x1b[23t');
|
||||
term.writeSync('\x1b[23t');
|
||||
term.writeSync('\x1b[23t');
|
||||
term.writeSync('\x1b[23t'); // one more to test "overflow"
|
||||
assert.deepEqual((term as any)._inputHandler._windowTitleStack, []);
|
||||
assert.deepEqual((term as any)._inputHandler._iconNameStack, []);
|
||||
assert.deepEqual(stack, ['1', '2', '3', '3', '2', '1']);
|
||||
});
|
||||
it('22/23 - PushTitle/PopTitle with ;1', () => {
|
||||
const term = new TestTerminal({cols: 10, rows: 10, allowedWindowOps: [22, 23]});
|
||||
assert.deepEqual(term.options.allowedWindowOps, [22, 23]);
|
||||
const stack: string[] = [];
|
||||
term.onTitleChange(data => stack.push(data));
|
||||
term.writeSync('\x1b]0;1\x07');
|
||||
term.writeSync('\x1b[22;1t');
|
||||
term.writeSync('\x1b]0;2\x07');
|
||||
term.writeSync('\x1b[22;1t');
|
||||
term.writeSync('\x1b]0;3\x07');
|
||||
term.writeSync('\x1b[22;1t');
|
||||
assert.deepEqual((term as any)._inputHandler._windowTitleStack, []);
|
||||
assert.deepEqual((term as any)._inputHandler._iconNameStack, ['1', '2', '3']);
|
||||
assert.deepEqual(stack, ['1', '2', '3']);
|
||||
term.writeSync('\x1b[23;1t');
|
||||
term.writeSync('\x1b[23;1t');
|
||||
term.writeSync('\x1b[23;1t');
|
||||
term.writeSync('\x1b[23;1t'); // one more to test "overflow"
|
||||
assert.deepEqual((term as any)._inputHandler._windowTitleStack, []);
|
||||
assert.deepEqual((term as any)._inputHandler._iconNameStack, []);
|
||||
assert.deepEqual(stack, ['1', '2', '3']);
|
||||
});
|
||||
it('22/23 - PushTitle/PopTitle with ;2', () => {
|
||||
const term = new TestTerminal({cols: 10, rows: 10, allowedWindowOps: [22, 23]});
|
||||
assert.deepEqual(term.options.allowedWindowOps, [22, 23]);
|
||||
const stack: string[] = [];
|
||||
term.onTitleChange(data => stack.push(data));
|
||||
term.writeSync('\x1b]0;1\x07');
|
||||
term.writeSync('\x1b[22;2t');
|
||||
term.writeSync('\x1b]0;2\x07');
|
||||
term.writeSync('\x1b[22;2t');
|
||||
term.writeSync('\x1b]0;3\x07');
|
||||
term.writeSync('\x1b[22;2t');
|
||||
assert.deepEqual((term as any)._inputHandler._windowTitleStack, ['1', '2', '3']);
|
||||
assert.deepEqual((term as any)._inputHandler._iconNameStack, []);
|
||||
assert.deepEqual(stack, ['1', '2', '3']);
|
||||
term.writeSync('\x1b[23;2t');
|
||||
term.writeSync('\x1b[23;2t');
|
||||
term.writeSync('\x1b[23;2t');
|
||||
term.writeSync('\x1b[23;2t'); // one more to test "overflow"
|
||||
assert.deepEqual((term as any)._inputHandler._windowTitleStack, []);
|
||||
assert.deepEqual((term as any)._inputHandler._iconNameStack, []);
|
||||
assert.deepEqual(stack, ['1', '2', '3', '3', '2', '1']);
|
||||
});
|
||||
it('DECCOLM - should only work with "SetWinLines" (24) enabled', () => {
|
||||
// disabled
|
||||
const term = new TestTerminal({cols: 10, rows: 10});
|
||||
term.writeSync('\x1b[?3l');
|
||||
assert.equal((term as any)._bufferService.cols, 10);
|
||||
term.writeSync('\x1b[?3h');
|
||||
assert.equal((term as any)._bufferService.cols, 10);
|
||||
// enabled
|
||||
const term2 = new TestTerminal({cols: 10, rows: 10, allowedWindowOps: [24]});
|
||||
term2.writeSync('\x1b[?3l');
|
||||
assert.equal((term2 as any)._bufferService.cols, 80);
|
||||
term2.writeSync('\x1b[?3h');
|
||||
assert.equal((term2 as any)._bufferService.cols, 132);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user