From 55571a1ae86b61a79f379be468f1248e84343163 Mon Sep 17 00:00:00 2001 From: Tony Brix Date: Thu, 10 Sep 2020 11:32:44 -0500 Subject: [PATCH 1/2] fix: fit addon proposing infinite dimensions --- addons/xterm-addon-fit/src/FitAddon.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/addons/xterm-addon-fit/src/FitAddon.ts b/addons/xterm-addon-fit/src/FitAddon.ts index 8e963253..f4e5c772 100644 --- a/addons/xterm-addon-fit/src/FitAddon.ts +++ b/addons/xterm-addon-fit/src/FitAddon.ts @@ -59,6 +59,10 @@ export class FitAddon implements ITerminalAddon { // TODO: Remove reliance on private API const core = (this._terminal as any)._core; + if (core._renderService.dimensions.actualCellWidth === 0 || core._renderService.dimensions.actualCellHeight === 0) { + return undefined; + } + const parentElementStyle = window.getComputedStyle(this._terminal.element.parentElement); const parentElementHeight = parseInt(parentElementStyle.getPropertyValue('height')); const parentElementWidth = Math.max(0, parseInt(parentElementStyle.getPropertyValue('width'))); From dd92161da5c7bd4c68c9d19b17d976f6910fe458 Mon Sep 17 00:00:00 2001 From: Tony Brix Date: Thu, 10 Sep 2020 18:27:07 -0500 Subject: [PATCH 2/2] test: test proposing dimensions on hidden terminal --- addons/xterm-addon-fit/test/FitAddon.api.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/addons/xterm-addon-fit/test/FitAddon.api.ts b/addons/xterm-addon-fit/test/FitAddon.api.ts index de66195a..1111dff0 100644 --- a/addons/xterm-addon-fit/test/FitAddon.api.ts +++ b/addons/xterm-addon-fit/test/FitAddon.api.ts @@ -23,6 +23,10 @@ describe('FitAddon', () => { page = await (await browser.newContext()).newPage(); await page.setViewportSize({ width, height }); await page.goto(APP); + }); + + beforeEach(async function(): Promise { + await page.evaluate(`document.querySelector('#terminal-container').style.display=''`); await openTerminal(page); }); @@ -30,6 +34,10 @@ describe('FitAddon', () => { await browser.close(); }); + afterEach(async function(): Promise { + await page.evaluate(`window.term.dispose()`); + }); + it('no terminal', async function(): Promise { await page.evaluate(`window.fit = new FitAddon();`); assert.equal(await page.evaluate(`window.fit.proposeDimensions()`), undefined); @@ -63,6 +71,15 @@ describe('FitAddon', () => { rows: 1 }); }); + + it('hidden', async function(): Promise { + await page.evaluate(`window.term.dispose()`); + await page.evaluate(`document.querySelector('#terminal-container').style.display='none'`); + await page.evaluate(`window.term = new Terminal()`); + await page.evaluate(`window.term.open(document.querySelector('#terminal-container'))`); + await loadFit(); + assert.equal(await page.evaluate(`window.fit.proposeDimensions()`), undefined); + }); }); describe('fit', () => {