From 1757f2733c9adad0b4cb91a3c55aa6e80c5a6128 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Mon, 19 Dec 2022 15:49:10 +0100 Subject: [PATCH] explicit type for link test data --- .../test/WebLinksAddon.api.ts | 48 ++++++++++++------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/addons/xterm-addon-web-links/test/WebLinksAddon.api.ts b/addons/xterm-addon-web-links/test/WebLinksAddon.api.ts index 44d09c95..8b6008a5 100644 --- a/addons/xterm-addon-web-links/test/WebLinksAddon.api.ts +++ b/addons/xterm-addon-web-links/test/WebLinksAddon.api.ts @@ -14,6 +14,22 @@ let page: Page; const width = 800; const height = 600; + +interface ILinkStateData { + uri?: string; + range?: { + start: { + x: number; + y: number; + }; + end: { + x: number; + y: number; + }; + }; +} + + describe('WebLinksAddon', () => { before(async function(): Promise { browser = await launchBrowser(); @@ -41,35 +57,35 @@ describe('WebLinksAddon', () => { setupCustom(); await writeSync(page, 'aaa http://example.com aaa http://example.com aaa'); await resetAndHover(5, 1); - await evalData('http://example.com', { start: { x: 5, y: 1 }, end: { x: 22, y: 1 } }); + await evalLinkStateData('http://example.com', { start: { x: 5, y: 1 }, end: { x: 22, y: 1 } }); await resetAndHover(1, 2); - await evalData('http://example.com', { start: { x: 28, y: 1 }, end: { x: 5, y: 2 } }); + await evalLinkStateData('http://example.com', { start: { x: 28, y: 1 }, end: { x: 5, y: 2 } }); }); it('url after full width', async () => { setupCustom(); await writeSync(page, '¥¥¥ http://example.com ¥¥¥ http://example.com aaa'); await resetAndHover(8, 1); - await evalData('http://example.com', { start: { x: 8, y: 1 }, end: { x: 25, y: 1 } }); + await evalLinkStateData('http://example.com', { start: { x: 8, y: 1 }, end: { x: 25, y: 1 } }); await resetAndHover(1, 2); - await evalData('http://example.com', { start: { x: 34, y: 1 }, end: { x: 11, y: 2 } }); + await evalLinkStateData('http://example.com', { start: { x: 34, y: 1 }, end: { x: 11, y: 2 } }); }); it('full width within url and before', async () => { setupCustom(); await writeSync(page, '¥¥¥ https://ko.wikipedia.org/wiki/위키백과:대문 aaa https://ko.wikipedia.org/wiki/위키백과:대문 ¥¥¥'); await resetAndHover(8, 1); - await evalData('https://ko.wikipedia.org/wiki/위키백과:대문', { start: { x: 8, y: 1 }, end: { x: 11, y: 2 } }); + await evalLinkStateData('https://ko.wikipedia.org/wiki/위키백과:대문', { start: { x: 8, y: 1 }, end: { x: 11, y: 2 } }); await resetAndHover(1, 2); - await evalData('https://ko.wikipedia.org/wiki/위키백과:대문', { start: { x: 8, y: 1 }, end: { x: 11, y: 2 } }); + await evalLinkStateData('https://ko.wikipedia.org/wiki/위키백과:대문', { start: { x: 8, y: 1 }, end: { x: 11, y: 2 } }); await resetAndHover(17, 2); - await evalData('https://ko.wikipedia.org/wiki/위키백과:대문', { start: { x: 17, y: 2 }, end: { x: 19, y: 3 } }); + await evalLinkStateData('https://ko.wikipedia.org/wiki/위키백과:대문', { start: { x: 17, y: 2 }, end: { x: 19, y: 3 } }); }); it('name + password url after full width and combining', async () => { setupCustom(); await writeSync(page, '¥¥¥cafe\u0301 http://test:password@example.com/some_path'); await resetAndHover(12, 1); - await evalData('http://test:password@example.com/some_path', { start: { x: 12, y: 1 }, end: { x: 13, y: 2 } }); + await evalLinkStateData('http://test:password@example.com/some_path', { start: { x: 12, y: 1 }, end: { x: 13, y: 2 } }); await resetAndHover(13, 2); - await evalData('http://test:password@example.com/some_path', { start: { x: 12, y: 1 }, end: { x: 13, y: 2 } }); + await evalLinkStateData('http://test:password@example.com/some_path', { start: { x: 12, y: 1 }, end: { x: 13, y: 2 } }); }); }); }); @@ -104,20 +120,20 @@ async function pollForLinkAtCell(col: number, row: number, value: string): Promi async function setupCustom(): Promise { await openTerminal(page, { cols: 40 }); - await page.evaluate(`window._customLinkData = []; + await page.evaluate(`window._linkStateData = {}; window._linkaddon = new window.WebLinksAddon(); -window._linkaddon._options.hover = (event, uri, range) => { window._customLinkData.push([uri, range]); }; +window._linkaddon._options.hover = (event, uri, range) => { window._linkStateData = { uri, range }; }; window.term.loadAddon(window._linkaddon);`); } async function resetAndHover(col: number, row: number): Promise { - await page.evaluate(`window._customLinkData = [];`); + await page.evaluate(`window._linkStateData = {};`); const rowSelector = `.xterm-rows > :nth-child(${row})`; await page.hover(`${rowSelector} > :nth-child(${col})`); } -async function evalData(uri: string, range: any): Promise { - const data: any[] = await page.evaluate(`window._customLinkData[0]`); - assert.equal(data[0], uri); - assert.deepEqual(data[1], range); +async function evalLinkStateData(uri: string, range: any): Promise { + const data: ILinkStateData = await page.evaluate(`window._linkStateData`); + assert.equal(data.uri, uri); + assert.deepEqual(data.range, range); }