diff --git a/addons/xterm-addon-serialize/src/SerializeAddon.api.ts b/addons/xterm-addon-serialize/src/SerializeAddon.api.ts index eec5b6fc..79343fbe 100644 --- a/addons/xterm-addon-serialize/src/SerializeAddon.api.ts +++ b/addons/xterm-addon-serialize/src/SerializeAddon.api.ts @@ -41,7 +41,6 @@ describe('SerializeAddon', () => { this.timeout(20000); const rows = 10; const cols = 10; - const lines = newArray('', rows); await openTerminal({ rows: rows, cols: cols, rendererType: 'dom' }); await page.evaluate(` @@ -49,7 +48,35 @@ describe('SerializeAddon', () => { window.term.loadAddon(window.serializeAddon); `); - assert.equal(await page.evaluate(`serializeAddon.serialize();`), lines.join('\r\n')); + assert.equal(await page.evaluate(`serializeAddon.serialize();`), ''); + }); + + it('trim last empty lines', async function (): Promise { + this.timeout(20000); + const cols = 10; + const lines = [ + '', + '', + digitsString(cols), + digitsString(cols), + '', + '', + digitsString(cols), + digitsString(cols), + '', + '', + '' + ]; + const rows = lines.length; + + await openTerminal({ rows: rows, cols: cols, rendererType: 'dom' }); + await page.evaluate(` + window.serializeAddon = new SerializeAddon(); + window.term.loadAddon(window.serializeAddon); + window.term.write(${util.inspect(lines.join('\r\n'))}); + `); + + assert.equal(await page.evaluate(`serializeAddon.serialize();`), lines.slice(0, 8).join('\r\n')); }); it('digits content', async function (): Promise { diff --git a/addons/xterm-addon-serialize/src/SerializeAddon.ts b/addons/xterm-addon-serialize/src/SerializeAddon.ts index 88ea852f..564bbddc 100644 --- a/addons/xterm-addon-serialize/src/SerializeAddon.ts +++ b/addons/xterm-addon-serialize/src/SerializeAddon.ts @@ -193,7 +193,15 @@ class StringSerializeHandler extends BaseSerializeHandler { } protected _serializeFinished(): string { - return this._allRows.join('\r\n'); + let rowEnd = this._allRows.length; + + for (; rowEnd > 0; rowEnd--) { + if (this._allRows[rowEnd - 1]) { + break; + } + } + + return this._allRows.slice(0, rowEnd).join('\r\n'); } }