diff --git a/src/browser/Terminal.test.ts b/src/browser/Terminal.test.ts index 729c0d0f..f192b031 100644 --- a/src/browser/Terminal.test.ts +++ b/src/browser/Terminal.test.ts @@ -1484,6 +1484,54 @@ describe('Terminal', () => { assert.deepEqual(getLines(term, term.rows + 1), ['12345', '125', '125', '125', '125', '125']); }); }); + + describe('BS with reverseWraparound set/unset', () => { + const ttyBS = '\x08 \x08'; // tty ICANON sends on pressing BS + + beforeEach(() => { + term = new TestTerminal({cols: 5, rows: 5, scrollback: 1}); + }); + + describe('reverseWraparound set', () => { + it('should not reverse outside of scroll margins', () => { + // prepare buffer content + term.writeSync('#####abcdefghijklmnopqrstuvwxy'); + assert.deepEqual(getLines(term, 6), ['#####', 'abcde', 'fghij', 'klmno', 'pqrst', 'uvwxy']); + assert.equal(term.buffer.ydisp, 1); + assert.equal(term.buffer.x, 5); + assert.equal(term.buffer.y, 4); + term.writeSync(ttyBS.repeat(100)); + assert.deepEqual(getLines(term, 6), ['#####', 'abcde', 'fghij', 'klmno', 'pqrst', ' y']); + + term.writeSync('\x1b[?45h'); + term.writeSync('uvwxy'); + + // set top/bottom to 1/3 (0-based) + term.writeSync('\x1b[2;4r'); + // place cursor below scroll bottom + term.buffer.x = 5; + term.buffer.y = 4; + term.writeSync(ttyBS.repeat(100)); + assert.deepEqual(getLines(term, 6), ['#####', 'abcde', 'fghij', 'klmno', 'pqrst', ' ']); + + term.writeSync('uvwxy'); + // place cursor within scroll margins + term.buffer.x = 5; + term.buffer.y = 3; + term.writeSync(ttyBS.repeat(100)); + assert.deepEqual(getLines(term, 6), ['#####', 'abcde', ' ', ' ', ' ', 'uvwxy']); + assert.equal(term.buffer.x, 0); + assert.equal(term.buffer.y, term.buffer.scrollTop); // stops at 0, scrollTop + + term.writeSync('fghijklmnopqrst'); + // place cursor above scroll top + term.buffer.x = 5; + term.buffer.y = 0; + term.writeSync(ttyBS.repeat(100)); + assert.deepEqual(getLines(term, 6), ['#####', ' ', 'fghij', 'klmno', 'pqrst', 'uvwxy']); + }); + }); + }); }); }); diff --git a/src/common/InputHandler.test.ts b/src/common/InputHandler.test.ts index d94b9d86..61188590 100644 --- a/src/common/InputHandler.test.ts +++ b/src/common/InputHandler.test.ts @@ -1465,45 +1465,6 @@ describe('InputHandler', () => { assert.deepEqual(getLines(bufferService, 2), [' ', ' ']); assert.equal(bufferService.buffer.x, 0); }); - /* - it.only('should not reverse outside of scroll margins', () => { - // prepare buffer content - inputHandler.parse('#####abcdefghijklmnopqrstuvwxy'); - assert.deepEqual(getLines(bufferService, 6), ['#####', 'abcde', 'fghij', 'klmno', 'pqrst', 'uvwxy']); - assert.equal(bufferService.buffer.ydisp, 1); - assert.equal(bufferService.buffer.x, 5); - assert.equal(bufferService.buffer.y, 4); - inputHandler.parse(ttyBS.repeat(100)); - assert.deepEqual(getLines(bufferService, 6), ['#####', 'abcde', 'fghij', 'klmno', 'pqrst', ' y']); - - inputHandler.parse('\x1b[?45h'); - inputHandler.parse('uvwxy'); - - // set top/bottom to 1/3 (0-based) - inputHandler.parse('\x1b[2;4r'); - // place cursor below scroll bottom - bufferService.buffer.x = 5; - bufferService.buffer.y = 4; - inputHandler.parse(ttyBS.repeat(100)); - assert.deepEqual(getLines(bufferService, 6), ['#####', 'abcde', 'fghij', 'klmno', 'pqrst', ' ']); - - inputHandler.parse('uvwxy'); - // place cursor within scroll margins - bufferService.buffer.x = 5; - bufferService.buffer.y = 3; - inputHandler.parse(ttyBS.repeat(100)); - assert.deepEqual(getLines(bufferService, 6), ['#####', 'abcde', ' ', ' ', ' ', 'uvwxy']); - assert.equal(bufferService.buffer.x, 0); - assert.equal(bufferService.buffer.y, bufferService.buffer.scrollTop); // stops at 0, scrollTop - - inputHandler.parse('fghijklmnopqrst'); - // place cursor above scroll top - bufferService.buffer.x = 5; - bufferService.buffer.y = 0; - inputHandler.parse(ttyBS.repeat(100)); - assert.deepEqual(getLines(bufferService, 6), ['#####', ' ', 'fghij', 'klmno', 'pqrst', 'uvwxy']); - }); - */ }); });