Merge branch 'master' into fix-selection-background-domrenderer
This commit is contained in:
@@ -17,6 +17,7 @@
|
|||||||
"addons/xterm-addon-attach/src/tsconfig.json",
|
"addons/xterm-addon-attach/src/tsconfig.json",
|
||||||
"addons/xterm-addon-attach/test/tsconfig.json",
|
"addons/xterm-addon-attach/test/tsconfig.json",
|
||||||
"addons/xterm-addon-canvas/src/tsconfig.json",
|
"addons/xterm-addon-canvas/src/tsconfig.json",
|
||||||
|
"addons/xterm-addon-canvas/test/tsconfig.json",
|
||||||
"addons/xterm-addon-fit/src/tsconfig.json",
|
"addons/xterm-addon-fit/src/tsconfig.json",
|
||||||
"addons/xterm-addon-fit/test/tsconfig.json",
|
"addons/xterm-addon-fit/test/tsconfig.json",
|
||||||
"addons/xterm-addon-image/src/tsconfig.json",
|
"addons/xterm-addon-image/src/tsconfig.json",
|
||||||
|
|||||||
@@ -259,8 +259,12 @@ jobs:
|
|||||||
ls -R
|
ls -R
|
||||||
- name: Build demo
|
- name: Build demo
|
||||||
run: yarn build-demo
|
run: yarn build-demo
|
||||||
- name: Integration tests
|
- name: Integration tests (core)
|
||||||
run: yarn test-playwright-${{ matrix.browser }} --forbid-only
|
run: yarn test-playwright-${{ matrix.browser }} --forbid-only --workers 4 --suite=core
|
||||||
|
- name: Integration tests (xterm-addon-canvas)
|
||||||
|
run: yarn test-playwright-${{ matrix.browser }} --forbid-only --workers 4 --suite=xterm-addon-canvas
|
||||||
|
- name: Integration tests (xterm-addon-webgl)
|
||||||
|
run: yarn test-playwright-${{ matrix.browser }} --forbid-only --workers 4 --suite=xterm-addon-webgl
|
||||||
|
|
||||||
test-api:
|
test-api:
|
||||||
needs: build
|
needs: build
|
||||||
|
|||||||
@@ -19,7 +19,8 @@
|
|||||||
"build": "../../node_modules/.bin/tsc -p .",
|
"build": "../../node_modules/.bin/tsc -p .",
|
||||||
"prepackage": "npm run build",
|
"prepackage": "npm run build",
|
||||||
"package": "../../node_modules/.bin/webpack",
|
"package": "../../node_modules/.bin/webpack",
|
||||||
"prepublishOnly": "npm run package"
|
"prepublishOnly": "npm run package",
|
||||||
|
"start-server-only": "node ../../demo/start-server-only"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"xterm": "^5.0.0"
|
"xterm": "^5.0.0"
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2019 The xterm.js authors. All rights reserved.
|
||||||
|
* @license MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
import test from '@playwright/test';
|
||||||
|
import { ISharedRendererTestContext, injectSharedRendererTests } from '../../../out-test/playwright/SharedRendererTests';
|
||||||
|
import { ITestContext, createTestContext, openTerminal } from '../../../out-test/playwright/TestUtils';
|
||||||
|
|
||||||
|
let ctx: ITestContext;
|
||||||
|
const ctxWrapper: ISharedRendererTestContext = {
|
||||||
|
value: undefined,
|
||||||
|
skipCanvasExceptions: true
|
||||||
|
} as any;
|
||||||
|
test.beforeAll(async ({ browser }) => {
|
||||||
|
ctx = await createTestContext(browser);
|
||||||
|
await openTerminal(ctx);
|
||||||
|
ctxWrapper.value = ctx;
|
||||||
|
await ctx.page.evaluate(`
|
||||||
|
window.addon = new window.CanvasAddon(true);
|
||||||
|
window.term.loadAddon(window.addon);
|
||||||
|
`);
|
||||||
|
});
|
||||||
|
test.afterAll(async () => await ctx.page.close());
|
||||||
|
|
||||||
|
test.describe('Canvas Renderer Integration Tests', () => {
|
||||||
|
// HACK: The tests fail for an unknown reason
|
||||||
|
test.skip(({ browserName }) => browserName === 'webkit');
|
||||||
|
|
||||||
|
injectSharedRendererTests(ctxWrapper);
|
||||||
|
});
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
import { PlaywrightTestConfig } from '@playwright/test';
|
||||||
|
|
||||||
|
const config: PlaywrightTestConfig = {
|
||||||
|
testDir: '.',
|
||||||
|
timeout: 10000,
|
||||||
|
projects: [
|
||||||
|
{
|
||||||
|
name: 'Chrome Stable',
|
||||||
|
use: {
|
||||||
|
browserName: 'chromium',
|
||||||
|
channel: 'chrome'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Firefox Stable',
|
||||||
|
use: {
|
||||||
|
browserName: 'firefox'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'WebKit',
|
||||||
|
use: {
|
||||||
|
browserName: 'webkit'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
reporter: 'list',
|
||||||
|
webServer: {
|
||||||
|
command: 'npm run start-server-only',
|
||||||
|
port: 3000,
|
||||||
|
timeout: 120000,
|
||||||
|
reuseExistingServer: !process.env.CI
|
||||||
|
}
|
||||||
|
};
|
||||||
|
export default config;
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"module": "commonjs",
|
||||||
|
"target": "es2015",
|
||||||
|
"lib": [
|
||||||
|
"es6",
|
||||||
|
],
|
||||||
|
"rootDir": ".",
|
||||||
|
"outDir": "../out-test",
|
||||||
|
"sourceMap": true,
|
||||||
|
"removeComments": true,
|
||||||
|
"baseUrl": ".",
|
||||||
|
"paths": {
|
||||||
|
"common/*": [
|
||||||
|
"../../../src/common/*"
|
||||||
|
],
|
||||||
|
"browser/*": [
|
||||||
|
"../../../src/browser/*"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"strict": true,
|
||||||
|
"types": [
|
||||||
|
"../../../node_modules/@types/node",
|
||||||
|
"../../../node_modules/@lunapaint/png-codec",
|
||||||
|
"../../../out-test/playwright/TestUtils",
|
||||||
|
"../../../out-test/playwright/SharedRendererTests"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"./**/*",
|
||||||
|
"../../../typings/xterm.d.ts"
|
||||||
|
],
|
||||||
|
"references": [
|
||||||
|
{
|
||||||
|
"path": "../../../src/common"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "../../../src/browser"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
"files": [],
|
"files": [],
|
||||||
"include": [],
|
"include": [],
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "./src" }
|
{ "path": "./src" },
|
||||||
|
{ "path": "./test" }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,8 @@
|
|||||||
"build": "../../node_modules/.bin/tsc -p .",
|
"build": "../../node_modules/.bin/tsc -p .",
|
||||||
"prepackage": "npm run build",
|
"prepackage": "npm run build",
|
||||||
"package": "../../node_modules/.bin/webpack",
|
"package": "../../node_modules/.bin/webpack",
|
||||||
"prepublishOnly": "npm run package"
|
"prepublishOnly": "npm run package",
|
||||||
|
"start-server-only": "node ../../demo/start-server-only"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"xterm": "^5.0.0"
|
"xterm": "^5.0.0"
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,32 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2019 The xterm.js authors. All rights reserved.
|
||||||
|
* @license MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
import test from '@playwright/test';
|
||||||
|
import { ISharedRendererTestContext, injectSharedRendererTests } from '../../../out-test/playwright/SharedRendererTests';
|
||||||
|
import { ITestContext, createTestContext, openTerminal } from '../../../out-test/playwright/TestUtils';
|
||||||
|
import { platform } from 'os';
|
||||||
|
|
||||||
|
let ctx: ITestContext;
|
||||||
|
const ctxWrapper: ISharedRendererTestContext = { value: undefined } as any;
|
||||||
|
test.beforeAll(async ({ browser }) => {
|
||||||
|
ctx = await createTestContext(browser);
|
||||||
|
await openTerminal(ctx);
|
||||||
|
ctxWrapper.value = ctx;
|
||||||
|
await ctx.page.evaluate(`
|
||||||
|
window.addon = new window.WebglAddon(true);
|
||||||
|
window.term.loadAddon(window.addon);
|
||||||
|
`);
|
||||||
|
});
|
||||||
|
test.afterAll(async () => await ctx.page.close());
|
||||||
|
|
||||||
|
test.describe('WebGL Renderer Integration Tests', async () => {
|
||||||
|
// HACK: webgl2 is often not supported in headless firefox on Linux
|
||||||
|
// https://github.com/microsoft/playwright/issues/11566
|
||||||
|
if (platform() === 'linux') {
|
||||||
|
test.skip(({ browserName }) => browserName === 'firefox');
|
||||||
|
}
|
||||||
|
|
||||||
|
injectSharedRendererTests(ctxWrapper);
|
||||||
|
});
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
import { PlaywrightTestConfig } from '@playwright/test';
|
||||||
|
|
||||||
|
const config: PlaywrightTestConfig = {
|
||||||
|
testDir: '.',
|
||||||
|
timeout: 10000,
|
||||||
|
projects: [
|
||||||
|
{
|
||||||
|
name: 'Chrome Stable',
|
||||||
|
use: {
|
||||||
|
browserName: 'chromium',
|
||||||
|
channel: 'chrome'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Firefox Stable',
|
||||||
|
use: {
|
||||||
|
browserName: 'firefox'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'WebKit',
|
||||||
|
use: {
|
||||||
|
browserName: 'webkit'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
reporter: 'list',
|
||||||
|
webServer: {
|
||||||
|
command: 'npm run start-server-only',
|
||||||
|
port: 3000,
|
||||||
|
timeout: 120000,
|
||||||
|
reuseExistingServer: !process.env.CI
|
||||||
|
}
|
||||||
|
};
|
||||||
|
export default config;
|
||||||
@@ -20,9 +20,10 @@
|
|||||||
},
|
},
|
||||||
"strict": true,
|
"strict": true,
|
||||||
"types": [
|
"types": [
|
||||||
"../../../node_modules/@types/mocha",
|
|
||||||
"../../../node_modules/@types/node",
|
"../../../node_modules/@types/node",
|
||||||
"../../../out-test/api/TestUtils"
|
"../../../node_modules/@lunapaint/png-codec",
|
||||||
|
"../../../out-test/playwright/TestUtils",
|
||||||
|
"../../../out-test/playwright/SharedRendererTests"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2019 The xterm.js authors. All rights reserved.
|
||||||
|
* @license MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @ts-check
|
||||||
|
|
||||||
|
const cp = require('child_process');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
let argv = process.argv.slice(2);
|
||||||
|
let suiteFilter = undefined;
|
||||||
|
while (argv.some(e => e.startsWith('--suite='))) {
|
||||||
|
const i = argv.findIndex(e => e.startsWith('--suite='));
|
||||||
|
const match = argv[i].match(/--suite=(?<suitename>.+)/)
|
||||||
|
suiteFilter = match?.groups?.suitename ?? undefined;
|
||||||
|
argv.splice(i, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
let configs = [
|
||||||
|
{ name: 'core', path: 'out-test/playwright/playwright.config.js' },
|
||||||
|
{ name: 'xterm-addon-canvas', path: 'addons/xterm-addon-canvas/out-test/playwright.config.js' },
|
||||||
|
{ name: 'xterm-addon-webgl', path: 'addons/xterm-addon-webgl/out-test/playwright.config.js' }
|
||||||
|
];
|
||||||
|
|
||||||
|
if (suiteFilter) {
|
||||||
|
configs = configs.filter(e => e.name === suiteFilter);
|
||||||
|
}
|
||||||
|
|
||||||
|
function npmBinScript(script) {
|
||||||
|
return path.resolve(__dirname, `../node_modules/.bin/` + (process.platform === 'win32' ?
|
||||||
|
`${script}.cmd` : script));
|
||||||
|
}
|
||||||
|
|
||||||
|
async function run() {
|
||||||
|
for (const config of configs) {
|
||||||
|
const command = npmBinScript('playwright');
|
||||||
|
const args = ['test', '-c', config.path, ...argv.slice(2)];
|
||||||
|
console.log(`Running suite \x1b[1;34m${config.name}...\x1b[0m`);
|
||||||
|
console.log(`\n\x1b[32m${command}\x1b[0m`, args);
|
||||||
|
const run = cp.spawnSync(command, args, {
|
||||||
|
cwd: path.resolve(__dirname, '..'),
|
||||||
|
stdio: 'inherit'
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if (run.status) {
|
||||||
|
process.exit(run.status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
run();
|
||||||
@@ -48,6 +48,7 @@ export interface IWindowWithTerminal extends Window {
|
|||||||
term: TerminalType;
|
term: TerminalType;
|
||||||
Terminal?: typeof TerminalType; // eslint-disable-line @typescript-eslint/naming-convention
|
Terminal?: typeof TerminalType; // eslint-disable-line @typescript-eslint/naming-convention
|
||||||
AttachAddon?: typeof AttachAddon; // eslint-disable-line @typescript-eslint/naming-convention
|
AttachAddon?: typeof AttachAddon; // eslint-disable-line @typescript-eslint/naming-convention
|
||||||
|
CanvasAddon?: typeof CanvasAddon; // eslint-disable-line @typescript-eslint/naming-convention
|
||||||
FitAddon?: typeof FitAddon; // eslint-disable-line @typescript-eslint/naming-convention
|
FitAddon?: typeof FitAddon; // eslint-disable-line @typescript-eslint/naming-convention
|
||||||
ImageAddon?: typeof ImageAddonType; // eslint-disable-line @typescript-eslint/naming-convention
|
ImageAddon?: typeof ImageAddonType; // eslint-disable-line @typescript-eslint/naming-convention
|
||||||
SearchAddon?: typeof SearchAddon; // eslint-disable-line @typescript-eslint/naming-convention
|
SearchAddon?: typeof SearchAddon; // eslint-disable-line @typescript-eslint/naming-convention
|
||||||
@@ -232,6 +233,7 @@ const createNewWindowButtonHandler: () => void = () => {
|
|||||||
if (document.location.pathname === '/test') {
|
if (document.location.pathname === '/test') {
|
||||||
window.Terminal = Terminal;
|
window.Terminal = Terminal;
|
||||||
window.AttachAddon = AttachAddon;
|
window.AttachAddon = AttachAddon;
|
||||||
|
window.CanvasAddon = CanvasAddon;
|
||||||
window.FitAddon = FitAddon;
|
window.FitAddon = FitAddon;
|
||||||
window.ImageAddon = ImageAddon;
|
window.ImageAddon = ImageAddon;
|
||||||
window.SearchAddon = SearchAddon;
|
window.SearchAddon = SearchAddon;
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2018 The xterm.js authors. All rights reserved.
|
||||||
|
* @license MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @ts-check
|
||||||
|
|
||||||
|
const startServer = require('./server.js');
|
||||||
|
|
||||||
|
startServer();
|
||||||
+7
-5
@@ -28,6 +28,7 @@
|
|||||||
"package-headless": "webpack --config ./webpack.config.headless.js",
|
"package-headless": "webpack --config ./webpack.config.headless.js",
|
||||||
"postpackage-headless": "node ./bin/package_headless.js",
|
"postpackage-headless": "node ./bin/package_headless.js",
|
||||||
"start": "node demo/start",
|
"start": "node demo/start",
|
||||||
|
"start-server-only": "node demo/start-server-only",
|
||||||
"build-demo": "webpack --config ./demo/webpack.config.js",
|
"build-demo": "webpack --config ./demo/webpack.config.js",
|
||||||
"start-debug": "node --inspect-brk demo/start",
|
"start-debug": "node --inspect-brk demo/start",
|
||||||
"lint": "eslint -c .eslintrc.json --max-warnings 0 --ext .ts src/ addons/",
|
"lint": "eslint -c .eslintrc.json --max-warnings 0 --ext .ts src/ addons/",
|
||||||
@@ -38,11 +39,11 @@
|
|||||||
"test-api-chromium": "node ./bin/test_api.js --browser=chromium --timeout=20000",
|
"test-api-chromium": "node ./bin/test_api.js --browser=chromium --timeout=20000",
|
||||||
"test-api-firefox": "node ./bin/test_api.js --browser=firefox --timeout=20000",
|
"test-api-firefox": "node ./bin/test_api.js --browser=firefox --timeout=20000",
|
||||||
"test-api-webkit": "node ./bin/test_api.js --browser=webkit --timeout=20000",
|
"test-api-webkit": "node ./bin/test_api.js --browser=webkit --timeout=20000",
|
||||||
"test-playwright": "playwright test -c ./out-test/playwright/playwright.config.js --workers 4",
|
"test-playwright": "node ./bin/test_playwright.js --workers 4",
|
||||||
"test-playwright-chromium": "playwright test -c ./out-test/playwright/playwright.config.js --workers 4 --project='Chrome Stable'",
|
"test-playwright-chromium": "node ./bin/test_playwright.js --workers 4 \"--project=Chrome Stable\"",
|
||||||
"test-playwright-firefox": "playwright test -c ./out-test/playwright/playwright.config.js --workers 4 --project='Firefox Stable'",
|
"test-playwright-firefox": "node ./bin/test_playwright.js --workers 4 \"--project=Firefox Stable\"",
|
||||||
"test-playwright-webkit": "playwright test -c ./out-test/playwright/playwright.config.js --workers 4 --project='WebKit'",
|
"test-playwright-webkit": "node ./bin/test_playwright.js --workers 4 \"--project=WebKit\"",
|
||||||
"test-playwright-debug": "playwright test -c ./out-test/playwright/playwright.config.js --headed --workers 1 --timeout 30000",
|
"test-playwright-debug": "node ./bin/test_playwright.js --headed --workers 1 --timeout 30000",
|
||||||
"test-unit": "node ./bin/test.js",
|
"test-unit": "node ./bin/test.js",
|
||||||
"test-unit-coverage": "node ./bin/test.js --coverage",
|
"test-unit-coverage": "node ./bin/test.js --coverage",
|
||||||
"test-unit-dev": "cross-env NODE_PATH='./out' mocha",
|
"test-unit-dev": "cross-env NODE_PATH='./out' mocha",
|
||||||
@@ -59,6 +60,7 @@
|
|||||||
"vtfeatures": "node bin/extract_vtfeatures.js src/**/*.ts src/*.ts"
|
"vtfeatures": "node bin/extract_vtfeatures.js src/**/*.ts src/*.ts"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@lunapaint/png-codec": "^0.2.0",
|
||||||
"@playwright/test": "^1.37.1",
|
"@playwright/test": "^1.37.1",
|
||||||
"@types/chai": "^4.2.22",
|
"@types/chai": "^4.2.22",
|
||||||
"@types/debug": "^4.1.7",
|
"@types/debug": "^4.1.7",
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2019 The xterm.js authors. All rights reserved.
|
||||||
|
* @license MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { test } from '@playwright/test';
|
||||||
|
import { ITestContext, createTestContext, openTerminal } from './TestUtils';
|
||||||
|
import { ISharedRendererTestContext, injectSharedRendererTests } from './SharedRendererTests';
|
||||||
|
|
||||||
|
let ctx: ITestContext;
|
||||||
|
const ctxWrapper: ISharedRendererTestContext = { value: undefined } as any;
|
||||||
|
test.beforeAll(async ({ browser }) => {
|
||||||
|
ctx = await createTestContext(browser);
|
||||||
|
ctxWrapper.value = ctx;
|
||||||
|
await openTerminal(ctx);
|
||||||
|
});
|
||||||
|
test.afterAll(async () => await ctx.page.close());
|
||||||
|
|
||||||
|
test.describe('DOM Renderer Integration Tests', () => {
|
||||||
|
injectSharedRendererTests(ctxWrapper);
|
||||||
|
});
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -12,8 +12,6 @@ import * as playwright from '@playwright/test';
|
|||||||
import { PageFunction } from 'playwright-core/types/structs';
|
import { PageFunction } from 'playwright-core/types/structs';
|
||||||
import { IBuffer, IBufferCell, IBufferLine, IBufferNamespace, IBufferRange, IDecoration, IDecorationOptions, IModes, ITerminalInitOnlyOptions, ITerminalOptions, Terminal } from 'xterm';
|
import { IBuffer, IBufferCell, IBufferLine, IBufferNamespace, IBufferRange, IDecoration, IDecorationOptions, IModes, ITerminalInitOnlyOptions, ITerminalOptions, Terminal } from 'xterm';
|
||||||
import { EventEmitter } from '../../out/common/EventEmitter';
|
import { EventEmitter } from '../../out/common/EventEmitter';
|
||||||
// TODO: We could avoid needing this
|
|
||||||
import deepEqual = require('deep-equal');
|
|
||||||
|
|
||||||
export interface ITestContext {
|
export interface ITestContext {
|
||||||
browser: Browser;
|
browser: Browser;
|
||||||
@@ -365,7 +363,7 @@ export async function openTerminal(ctx: ITestContext, options: ITerminalOptions
|
|||||||
// assertion catches this case early.
|
// assertion catches this case early.
|
||||||
strictEqual(await ctx.page.evaluate(`document.querySelector('#terminal-container').children.length`), 0, 'there must be no terminals on the page');
|
strictEqual(await ctx.page.evaluate(`document.querySelector('#terminal-container').children.length`), 0, 'there must be no terminals on the page');
|
||||||
await ctx.page.evaluate(`
|
await ctx.page.evaluate(`
|
||||||
window.term = new Terminal(${JSON.stringify({ allowProposedApi: true, ...options })});
|
window.term = new window.Terminal(${JSON.stringify({ allowProposedApi: true, ...options })});
|
||||||
window.term.open(document.querySelector('#terminal-container'));
|
window.term.open(document.querySelector('#terminal-container'));
|
||||||
`);
|
`);
|
||||||
await ctx.page.waitForSelector('.xterm-rows');
|
await ctx.page.waitForSelector('.xterm-rows');
|
||||||
@@ -374,8 +372,9 @@ export async function openTerminal(ctx: ITestContext, options: ITerminalOptions
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export type MaybeAsync<T> = Promise<T> | T;
|
||||||
|
|
||||||
export async function pollFor<T>(page: playwright.Page, evalOrFn: string | (() => Promise<T>), val: T, preFn?: () => Promise<void>, maxDuration?: number, stack?: string): Promise<void> {
|
export async function pollFor<T>(page: playwright.Page, evalOrFn: string | (() => MaybeAsync<T>), val: T, preFn?: () => Promise<void>, maxDuration?: number, stack?: string): Promise<void> {
|
||||||
stack ??= new Error().stack;
|
stack ??= new Error().stack;
|
||||||
if (preFn) {
|
if (preFn) {
|
||||||
await preFn();
|
await preFn();
|
||||||
@@ -383,10 +382,17 @@ export async function pollFor<T>(page: playwright.Page, evalOrFn: string | (() =
|
|||||||
const result = typeof evalOrFn === 'string' ? await page.evaluate(evalOrFn) : await evalOrFn();
|
const result = typeof evalOrFn === 'string' ? await page.evaluate(evalOrFn) : await evalOrFn();
|
||||||
|
|
||||||
if (process.env.DEBUG) {
|
if (process.env.DEBUG) {
|
||||||
console.log('pollFor result: ', JSON.stringify(result));
|
console.log('pollFor\n actual: ', JSON.stringify(result), ' expected: ', JSON.stringify(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!deepEqual(result, val)) {
|
let equalityCheck = true;
|
||||||
|
try {
|
||||||
|
deepStrictEqual(result, val);
|
||||||
|
} catch (e) {
|
||||||
|
equalityCheck = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!equalityCheck) {
|
||||||
if (maxDuration === undefined) {
|
if (maxDuration === undefined) {
|
||||||
maxDuration = 2000;
|
maxDuration = 2000;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,8 @@
|
|||||||
"rootDir": ".",
|
"rootDir": ".",
|
||||||
"outDir": "../../out-test/playwright",
|
"outDir": "../../out-test/playwright",
|
||||||
"types": [
|
"types": [
|
||||||
"../../node_modules/@types/node"
|
"../../node_modules/@types/node",
|
||||||
|
"../../node_modules/@lunapaint/png-codec"
|
||||||
],
|
],
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
"removeComments": true,
|
"removeComments": true,
|
||||||
|
|||||||
@@ -326,6 +326,13 @@
|
|||||||
"@jridgewell/resolve-uri" "3.1.0"
|
"@jridgewell/resolve-uri" "3.1.0"
|
||||||
"@jridgewell/sourcemap-codec" "1.4.14"
|
"@jridgewell/sourcemap-codec" "1.4.14"
|
||||||
|
|
||||||
|
"@lunapaint/png-codec@^0.2.0":
|
||||||
|
version "0.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@lunapaint/png-codec/-/png-codec-0.2.0.tgz#b9fe0a0728889af280c31239b061eb3f8c848816"
|
||||||
|
integrity sha512-S2Fk8+I27j8ZL585PlEK9hhljZcp6j+JWB5ZHAeePdufJMYHxXD2zlatLRaiy5riXRFqkCi/gong7yP9kSsEZg==
|
||||||
|
dependencies:
|
||||||
|
pako "^2.0.4"
|
||||||
|
|
||||||
"@nodelib/fs.scandir@2.1.5":
|
"@nodelib/fs.scandir@2.1.5":
|
||||||
version "2.1.5"
|
version "2.1.5"
|
||||||
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
|
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
|
||||||
@@ -3002,6 +3009,11 @@ package-hash@^4.0.0:
|
|||||||
lodash.flattendeep "^4.4.0"
|
lodash.flattendeep "^4.4.0"
|
||||||
release-zalgo "^1.0.0"
|
release-zalgo "^1.0.0"
|
||||||
|
|
||||||
|
pako@^2.0.4:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86"
|
||||||
|
integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==
|
||||||
|
|
||||||
parent-module@^1.0.0:
|
parent-module@^1.0.0:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
|
resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
|
||||||
|
|||||||
Reference in New Issue
Block a user