From 7b2e8a6ce1ea98d47c636e0e0af686307c65e488 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Fri, 5 Jul 2024 06:51:00 -0700 Subject: [PATCH 1/2] Remove src dts files and correct exports Esbuild doesn't appear to play nice with dts files and when they are regular ts files they require the exports --- .../addon-canvas/src/{Types.d.ts => Types.ts} | 0 addons/addon-image/src/{Types.d.ts => Types.ts} | 0 addons/addon-image/test/ImageAddon.test.ts | 17 ++++++++++++++++- .../src/{Types.d.ts => Types.ts} | 0 addons/addon-webgl/src/{Types.d.ts => Types.ts} | 0 src/browser/{Types.d.ts => Types.ts} | 8 ++++---- .../renderer/shared/{Types.d.ts => Types.ts} | 0 src/browser/selection/{Types.d.ts => Types.ts} | 0 src/common/InputHandler.test.ts | 2 +- src/common/InputHandler.ts | 2 +- src/common/{Types.d.ts => Types.ts} | 4 ++-- src/common/buffer/{Types.d.ts => Types.ts} | 0 src/common/parser/{Types.d.ts => Types.ts} | 0 13 files changed, 24 insertions(+), 9 deletions(-) rename addons/addon-canvas/src/{Types.d.ts => Types.ts} (100%) rename addons/addon-image/src/{Types.d.ts => Types.ts} (100%) rename addons/addon-ligatures/src/{Types.d.ts => Types.ts} (100%) rename addons/addon-webgl/src/{Types.d.ts => Types.ts} (100%) rename src/browser/{Types.d.ts => Types.ts} (97%) rename src/browser/renderer/shared/{Types.d.ts => Types.ts} (100%) rename src/browser/selection/{Types.d.ts => Types.ts} (100%) rename src/common/{Types.d.ts => Types.ts} (99%) rename src/common/buffer/{Types.d.ts => Types.ts} (100%) rename src/common/parser/{Types.d.ts => Types.ts} (100%) diff --git a/addons/addon-canvas/src/Types.d.ts b/addons/addon-canvas/src/Types.ts similarity index 100% rename from addons/addon-canvas/src/Types.d.ts rename to addons/addon-canvas/src/Types.ts diff --git a/addons/addon-image/src/Types.d.ts b/addons/addon-image/src/Types.ts similarity index 100% rename from addons/addon-image/src/Types.d.ts rename to addons/addon-image/src/Types.ts diff --git a/addons/addon-image/test/ImageAddon.test.ts b/addons/addon-image/test/ImageAddon.test.ts index 64d4fa22..c6f16d8c 100644 --- a/addons/addon-image/test/ImageAddon.test.ts +++ b/addons/addon-image/test/ImageAddon.test.ts @@ -7,9 +7,24 @@ import test from '@playwright/test'; import { readFileSync } from 'fs'; import { FINALIZER, introducer, sixelEncode } from 'sixel'; import { ITestContext, createTestContext, openTerminal, pollFor } from '../../../out-test/playwright/TestUtils'; -import { IImageAddonOptions } from '../src/Types'; import { deepStrictEqual, ok, strictEqual } from 'assert'; +/** + * Plugin ctor options. + */ +export interface IImageAddonOptions { + enableSizeReports: boolean; + pixelLimit: number; + storageLimit: number; + showPlaceholder: boolean; + sixelSupport: boolean; + sixelScrolling: boolean; + sixelPaletteLimit: number; + sixelSizeLimit: number; + iipSupport: boolean; + iipSizeLimit: number; +} + // eslint-disable-next-line declare const ImageAddon: { new(options?: Partial): any; diff --git a/addons/addon-ligatures/src/Types.d.ts b/addons/addon-ligatures/src/Types.ts similarity index 100% rename from addons/addon-ligatures/src/Types.d.ts rename to addons/addon-ligatures/src/Types.ts diff --git a/addons/addon-webgl/src/Types.d.ts b/addons/addon-webgl/src/Types.ts similarity index 100% rename from addons/addon-webgl/src/Types.d.ts rename to addons/addon-webgl/src/Types.ts diff --git a/src/browser/Types.d.ts b/src/browser/Types.ts similarity index 97% rename from src/browser/Types.d.ts rename to src/browser/Types.ts index 9ebc55d9..24f008a1 100644 --- a/src/browser/Types.d.ts +++ b/src/browser/Types.ts @@ -129,7 +129,7 @@ export interface ILinkifier2 extends IDisposable { readonly currentLink: ILinkWithState | undefined; } -interface ILink { +export interface ILink { range: IBufferRange; text: string; decorations?: ILinkDecorations; @@ -139,17 +139,17 @@ interface ILink { dispose?(): void; } -interface ILinkDecorations { +export interface ILinkDecorations { pointerCursor: boolean; underline: boolean; } -interface IBufferRange { +export interface IBufferRange { start: IBufferCellPosition; end: IBufferCellPosition; } -interface IBufferCellPosition { +export interface IBufferCellPosition { x: number; y: number; } diff --git a/src/browser/renderer/shared/Types.d.ts b/src/browser/renderer/shared/Types.ts similarity index 100% rename from src/browser/renderer/shared/Types.d.ts rename to src/browser/renderer/shared/Types.ts diff --git a/src/browser/selection/Types.d.ts b/src/browser/selection/Types.ts similarity index 100% rename from src/browser/selection/Types.d.ts rename to src/browser/selection/Types.ts diff --git a/src/common/InputHandler.test.ts b/src/common/InputHandler.test.ts index 0f17a3e6..baae735c 100644 --- a/src/common/InputHandler.test.ts +++ b/src/common/InputHandler.test.ts @@ -5,7 +5,7 @@ import { assert } from 'chai'; import { InputHandler } from 'common/InputHandler'; -import { IBufferLine, IAttributeData, IColorEvent, ColorIndex, ColorRequestType, SpecialColorIndex } from 'common/Types'; +import { IBufferLine, IAttributeData, IColorEvent, ColorRequestType, SpecialColorIndex } from 'common/Types'; import { DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine'; import { CellData } from 'common/buffer/CellData'; import { Attributes, BgFlags, UnderlineStyle } from 'common/buffer/Constants'; diff --git a/src/common/InputHandler.ts b/src/common/InputHandler.ts index 6db8751e..bef0eaa7 100644 --- a/src/common/InputHandler.ts +++ b/src/common/InputHandler.ts @@ -3456,6 +3456,6 @@ class DirtyRowTracker implements IDirtyRowTracker { } } -function isValidColorIndex(value: number): value is ColorIndex { +export function isValidColorIndex(value: number): value is ColorIndex { return 0 <= value && value < 256; } diff --git a/src/common/Types.d.ts b/src/common/Types.ts similarity index 99% rename from src/common/Types.d.ts rename to src/common/Types.ts index 17c7231a..8b32067e 100644 --- a/src/common/Types.d.ts +++ b/src/common/Types.ts @@ -425,8 +425,8 @@ type Enumerate = Acc['length'] exte : Enumerate; type IntRange = Exclude, Enumerate>; -type ColorIndex = IntRange<0, 256>; // number from 0 to 255 -type AllColorIndex = ColorIndex | SpecialColorIndex; +export type ColorIndex = IntRange<0, 256>; // number from 0 to 255 +export type AllColorIndex = ColorIndex | SpecialColorIndex; export const enum SpecialColorIndex { FOREGROUND = 256, BACKGROUND = 257, diff --git a/src/common/buffer/Types.d.ts b/src/common/buffer/Types.ts similarity index 100% rename from src/common/buffer/Types.d.ts rename to src/common/buffer/Types.ts diff --git a/src/common/parser/Types.d.ts b/src/common/parser/Types.ts similarity index 100% rename from src/common/parser/Types.d.ts rename to src/common/parser/Types.ts From a7b248ea9b0c8dcac69a7b6e288b68e5a97f28a4 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Fri, 5 Jul 2024 08:13:03 -0700 Subject: [PATCH 2/2] Fix flakes in fit addon integration tests --- addons/addon-fit/test/FitAddon.test.ts | 37 +++++++++++--------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/addons/addon-fit/test/FitAddon.test.ts b/addons/addon-fit/test/FitAddon.test.ts index 8c186b43..f780e2f5 100644 --- a/addons/addon-fit/test/FitAddon.test.ts +++ b/addons/addon-fit/test/FitAddon.test.ts @@ -10,12 +10,14 @@ import { ITestContext, createTestContext, openTerminal, timeout } from '../../.. let ctx: ITestContext; test.beforeAll(async ({ browser }) => { ctx = await createTestContext(browser); + ctx.page.setViewportSize({ width: 1024, height: 768 }); await openTerminal(ctx); }); test.afterAll(async () => await ctx.page.close()); test.describe('FitAddon', () => { test.beforeEach(async function(): Promise { + await ctx.page.evaluate(`document.querySelector('#terminal-container').style.display=''`); await ctx.page.evaluate(` window.term.reset() window.fit?.dispose(); @@ -38,15 +40,14 @@ test.describe('FitAddon', () => { // }); test('no terminal', async function(): Promise { - await ctx.page.evaluate(`window.fit = new FitAddon();`); - strictEqual(await ctx.page.evaluate(`window.fit.proposeDimensions()`), undefined); + await ctx.page.evaluate(`window.fit2 = new FitAddon();`); + strictEqual(await ctx.page.evaluate(`window.fit2.proposeDimensions()`), undefined); + await ctx.page.evaluate(`window.fit2.dispose();`); }); test.describe('proposeDimensions', () => { - // test.afterEach(() => unloadFit()); - test('default', async function(): Promise { - await loadFit(); + await setDimensions(); const dimensions: {cols: number, rows: number} = await ctx.page.evaluate(`window.fit.proposeDimensions()`); ok(dimensions.cols > 85); ok(dimensions.cols < 88); @@ -55,7 +56,7 @@ test.describe('FitAddon', () => { }); test('width', async function(): Promise { - await loadFit(1008); + await setDimensions(1008); const dimensions: {cols: number, rows: number} = await ctx.page.evaluate(`window.fit.proposeDimensions()`); ok(dimensions.cols > 108); ok(dimensions.cols < 111); @@ -64,7 +65,7 @@ test.describe('FitAddon', () => { }); test('small', async function(): Promise { - await loadFit(1, 1); + await setDimensions(1, 1); deepEqual(await ctx.page.evaluate(`window.fit.proposeDimensions()`), { cols: 2, rows: 1 @@ -76,7 +77,7 @@ test.describe('FitAddon', () => { await ctx.page.evaluate(`document.querySelector('#terminal-container').style.display='none'`); await ctx.page.evaluate(`window.term = new Terminal()`); await ctx.page.evaluate(`window.term.open(document.querySelector('#terminal-container'))`); - await loadFit(); + await setDimensions(); const dimensions: { cols: number, rows: number } | undefined = await ctx.page.evaluate(`window.fit.proposeDimensions()`); // The value of dims will be undefined if the char measure strategy falls back to the DOM // method, so only assert if it's not undefined. @@ -86,15 +87,12 @@ test.describe('FitAddon', () => { ok(dimensions.rows > 24); ok(dimensions.rows < 29); } - await ctx.page.evaluate(`document.querySelector('#terminal-container').style.display='block'`); }); }); test.describe('fit', () => { - test.afterEach(() => unloadFit()); - test('default', async function(): Promise { - await loadFit(); + await setDimensions(); await ctx.page.evaluate(`window.fit.fit()`); const cols: number = await ctx.proxy.cols; const rows: number = await ctx.proxy.rows; @@ -105,7 +103,7 @@ test.describe('FitAddon', () => { }); test('width', async function(): Promise { - await loadFit(1008); + await setDimensions(1008); await ctx.page.evaluate(`window.fit.fit()`); const cols: number = await ctx.proxy.cols; const rows: number = await ctx.proxy.rows; @@ -116,7 +114,7 @@ test.describe('FitAddon', () => { }); test('small', async function(): Promise { - await loadFit(1, 1); + await setDimensions(1, 1); await ctx.page.evaluate(`window.fit.fit()`); strictEqual(await ctx.proxy.cols, 2); strictEqual(await ctx.proxy.rows, 1); @@ -124,15 +122,12 @@ test.describe('FitAddon', () => { }); }); -async function loadFit(width: number = 800, height: number = 450): Promise { +async function setDimensions(width: number = 800, height: number = 450): Promise { await ctx.page.evaluate(` - window.fit = new FitAddon(); - window.term.loadAddon(window.fit); document.querySelector('#terminal-container').style.width='${width}px'; document.querySelector('#terminal-container').style.height='${height}px'; + document.querySelector('#terminal-container').style.display=''; `); -} - -async function unloadFit(): Promise { - await ctx.page.evaluate(`window.fit.dispose();`); + // HACK: Await a short period as hiding #terminal-container can mess with other tests + await timeout(500); }