Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions integration/test-runner/index.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { BrowserLauncher, TestRunnerCoreConfig } from '@web/test-runner-core';
import { runBasicTest } from './tests/basic/runBasicTest.js';
import { runConfigGroupsTest } from './tests/config-groups/runConfigGroupsTest.js';
import { runParallelTest } from './tests/parallel/runParallelTest.js';
import { runTestFailureTest } from './tests/test-failure/runTestFailureTest.js';
import { runLocationChangeTest } from './tests/location-change/runLocationChangeTest.js';
import { runFocusTest } from './tests/focus/runFocusTest.js';
import { runManyTests } from './tests/many/runManyTests.js';
import type { BrowserLauncher, TestRunnerCoreConfig } from '@web/test-runner-core';
import { runBasicTest } from './tests/basic/runBasicTest.ts';
import { runConfigGroupsTest } from './tests/config-groups/runConfigGroupsTest.ts';
import { runParallelTest } from './tests/parallel/runParallelTest.ts';
import { runTestFailureTest } from './tests/test-failure/runTestFailureTest.ts';
import { runLocationChangeTest } from './tests/location-change/runLocationChangeTest.ts';
import { runFocusTest } from './tests/focus/runFocusTest.ts';
import { runManyTests } from './tests/many/runManyTests.ts';

export interface Tests {
basic: boolean;
Expand Down
5 changes: 3 additions & 2 deletions integration/test-runner/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@
"homepage": "https://github.com/modernweb-dev/web/tree/master/packages/test-runner-integration-tests",
"main": "index.js",
"scripts": {
"test": "mocha test/**/*.test.ts --require ts-node/register --reporter dot",
"test:watch": "mocha test/**/*.test.ts --require ts-node/register --watch --watch-files src,test --reporter dot"
"test": "node --experimental-strip-types --test --test-force-exit \"test/**/*.test.ts\"",
"test:node": "node --experimental-strip-types --test --test-force-exit \"test/**/*.test.ts\"",
"test:watch": "node --experimental-strip-types --test --test-force-exit --watch \"test/**/*.test.ts\""
},
"dependencies": {
"@web/dev-server-legacy": "^2.1.0",
Expand Down
92 changes: 54 additions & 38 deletions integration/test-runner/tests/basic/runBasicTest.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { BrowserLauncher, TestRunnerCoreConfig, TestSession } from '@web/test-runner-core';
import assert from 'node:assert/strict';
import { describe, before, it } from 'node:test';
import type { BrowserLauncher, TestRunnerCoreConfig, TestSession } from '@web/test-runner-core';
import { runTests } from '@web/test-runner-core/test-helpers';
import { legacyPlugin } from '@web/dev-server-legacy';
import { resolve } from 'path';
import { expect } from 'chai';

export function runBasicTest(
config: Partial<TestRunnerCoreConfig> & { browsers: BrowserLauncher[] },
Expand All @@ -14,78 +15,93 @@ export function runBasicTest(
before(async () => {
const result = await runTests({
...config,
files: [...(config.files ?? []), resolve(__dirname, 'browser-tests', '*.test.js')],
files: [
...(config.files ?? []),
resolve(import.meta.dirname, 'browser-tests', '*.test.js'),
],
plugins: [...(config.plugins ?? []), legacyPlugin()],
});
allSessions = result.sessions;

expect(allSessions.every(s => s.passed)).to.equal(true, 'All sessions should have passed');
assert.equal(
allSessions.every(s => s.passed),
true,
'All sessions should have passed',
);
});

it('passes basic test', () => {
const sessions = allSessions.filter(s => s.testFile.endsWith('basic.test.js'));
expect(sessions.length === browserCount).to.equal(
true,
'Each browser should run basic.test.js',
);
assert.equal(sessions.length === browserCount, true, 'Each browser should run basic.test.js');
for (const session of sessions) {
expect(session.testResults!.tests.length).to.equal(0);
expect(session.testResults!.suites.length).to.equal(1);
expect(session.testResults!.suites[0].tests.length).to.equal(1);
expect(session.testResults!.suites[0].tests.map(t => t.name)).to.eql(['works']);
assert.equal(session.testResults!.tests.length, 0);
assert.equal(session.testResults!.suites.length, 1);
assert.equal(session.testResults!.suites[0].tests.length, 1);
assert.deepEqual(
session.testResults!.suites[0].tests.map(t => t.name),
['works'],
);
}
});

it('passes js-syntax test', () => {
const sessions = allSessions.filter(s => s.testFile.endsWith('js-syntax.test.js'));
expect(sessions.length === browserCount).to.equal(
assert.equal(
sessions.length === browserCount,
true,
'Each browser should run js-syntax.test.js',
);
for (const session of sessions) {
expect(session.testResults!.tests.map(t => t.name)).to.eql([
'supports object spread',
'supports async functions',
'supports exponentiation',
'supports classes',
'supports template literals',
'supports optional chaining',
'supports nullish coalescing',
]);
assert.deepEqual(
session.testResults!.tests.map(t => t.name),
[
'supports object spread',
'supports async functions',
'supports exponentiation',
'supports classes',
'supports template literals',
'supports optional chaining',
'supports nullish coalescing',
],
);
}
});

it('passes module-features test', () => {
const sessions = allSessions.filter(s => s.testFile.endsWith('module-features.test.js'));
expect(sessions.length === browserCount).to.equal(
assert.equal(
sessions.length === browserCount,
true,
'Each browser should run module-features.test.js',
);
for (const session of sessions) {
expect(session.testResults!.tests.map(t => t.name)).to.eql([
'supports static imports',
'supports dynamic imports',
'supports import meta',
]);
assert.deepEqual(
session.testResults!.tests.map(t => t.name),
['supports static imports', 'supports dynamic imports', 'supports import meta'],
);
}
});

it('passes timers test', () => {
const sessions = allSessions.filter(s => s.testFile.endsWith('timers.test.js'));
expect(sessions.length === browserCount).to.equal(
assert.equal(
sessions.length === browserCount,
true,
'Each browser should run timers.test.js',
);
for (const session of sessions) {
expect(session.testResults!.tests.length).to.equal(0);
expect(session.testResults!.suites.length).to.equal(1);
expect(session.testResults!.suites[0].tests.map(t => t.name)).to.eql([
'can call setTimeout',
'can cancel setTimeout',
'can call and cancel setInterval',
'can call requestAnimationFrame',
'can cancel requestAnimationFrame',
]);
assert.equal(session.testResults!.tests.length, 0);
assert.equal(session.testResults!.suites.length, 1);
assert.deepEqual(
session.testResults!.suites[0].tests.map(t => t.name),
[
'can call setTimeout',
'can cancel setTimeout',
'can call and cancel setInterval',
'can call requestAnimationFrame',
'can cancel requestAnimationFrame',
],
);
}
});
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import {
import assert from 'node:assert/strict';
import { describe, it } from 'node:test';
import type {
BrowserLauncher,
TestRunnerCoreConfig,
TestRunnerGroupConfig,
} from '@web/test-runner-core';
import { runTests } from '@web/test-runner-core/test-helpers';
import { legacyPlugin } from '@web/dev-server-legacy';
import { resolve } from 'path';
import { expect } from 'chai';

export function runConfigGroupsTest(
config: Partial<TestRunnerCoreConfig> & { browsers: BrowserLauncher[] },
Expand All @@ -18,13 +19,13 @@ export function runConfigGroupsTest(
name: 'a',
testRunnerHtml: path =>
`<html><body><script>window.__group__ = "a";</script><script type="module" src=${path}></script></body></html>`,
files: [resolve(__dirname, 'browser-tests', 'test-runner-html-a.test.js')],
files: [resolve(import.meta.dirname, 'browser-tests', 'test-runner-html-a.test.js')],
},
{
name: 'b',
testRunnerHtml: path =>
`<html><body><script>window.__group__ = "b";</script><script type="module" src=${path}></script></body></html>`,
files: [resolve(__dirname, 'browser-tests', 'test-runner-html-b.test.js')],
files: [resolve(import.meta.dirname, 'browser-tests', 'test-runner-html-b.test.js')],
},
];
const result = await runTests(
Expand All @@ -35,7 +36,8 @@ export function runConfigGroupsTest(
groupConfigs,
);

expect(result.sessions.every(s => s.passed)).to.equal(
assert.equal(
result.sessions.every(s => s.passed),
true,
'All sessions should have passed',
);
Expand Down
17 changes: 12 additions & 5 deletions integration/test-runner/tests/focus/runFocusTest.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { BrowserLauncher, TestRunnerCoreConfig, TestSession } from '@web/test-runner-core';
import assert from 'node:assert/strict';
import { describe, before, it } from 'node:test';
import type { BrowserLauncher, TestRunnerCoreConfig, TestSession } from '@web/test-runner-core';
import { runTests } from '@web/test-runner-core/test-helpers';
import { legacyPlugin } from '@web/dev-server-legacy';
import { resolve } from 'path';
import { expect } from 'chai';

export function runFocusTest(
config: Partial<TestRunnerCoreConfig> & { browsers: BrowserLauncher[] },
Expand All @@ -13,16 +14,22 @@ export function runFocusTest(
before(async () => {
const result = await runTests({
...config,
// 2 means some are executed concurrently, and some sequentially
concurrency: 2,
files: [...(config.files ?? []), resolve(__dirname, 'browser-tests', '*.test.js')],
files: [
...(config.files ?? []),
resolve(import.meta.dirname, 'browser-tests', '*.test.js'),
],
plugins: [...(config.plugins ?? []), legacyPlugin()],
});
allSessions = result.sessions;
});

it.skip('can run tests with focus, concurrently and sequentially', () => {
expect(allSessions.every(s => s.passed)).to.equal(true, 'All sessions should have passed');
assert.equal(
allSessions.every(s => s.passed),
true,
'All sessions should have passed',
);
});
});
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { BrowserLauncher, TestRunnerCoreConfig, TestSession } from '@web/test-runner-core';
import assert from 'node:assert/strict';
import { describe, before, it } from 'node:test';
import type { BrowserLauncher, TestRunnerCoreConfig, TestSession } from '@web/test-runner-core';
import { runTests } from '@web/test-runner-core/test-helpers';
import { legacyPlugin } from '@web/dev-server-legacy';
import { resolve } from 'path';
import { expect } from 'chai';

export function runLocationChangeTest(
config: Partial<TestRunnerCoreConfig> & { browsers: BrowserLauncher[] },
Expand All @@ -15,40 +16,51 @@ export function runLocationChangeTest(
const result = await runTests(
{
...config,
files: [...(config.files ?? []), resolve(__dirname, 'browser-tests', '*.test.js')],
files: [
...(config.files ?? []),
resolve(import.meta.dirname, 'browser-tests', '*.test.js'),
],
plugins: [...(config.plugins ?? []), legacyPlugin()],
},
undefined,
{ allowFailure: true, reportErrors: false },
);
allSessions = result.sessions;

expect(allSessions.every(s => s.passed)).to.equal(false, 'All sessions should have failed');
assert.equal(
allSessions.every(s => s.passed),
false,
'All sessions should have failed',
);
});

it('handles tests which assign to window.location.href', () => {
const sessions = allSessions.filter(s => s.testFile.endsWith('fail-location-href.test.js'));
expect(sessions.length === browserCount).to.equal(true);
assert.equal(sessions.length === browserCount, true);
for (const session of sessions) {
expect(session.testResults).to.equal(undefined);
expect(session.logs).to.eql([]);
expect(session.errors.length).to.equal(1);
expect(session.errors[0].message).to.include(
'Tests were interrupted because the page navigated to',
assert.equal(session.testResults, undefined);
assert.deepEqual(session.logs, []);
assert.equal(session.errors.length, 1);
assert.ok(
session.errors[0].message.includes(
'Tests were interrupted because the page navigated to',
),
);
expect(session.errors[0].message).to.include(
'This can happen when clicking a link, submitting a form or interacting with window.location.',
assert.ok(
session.errors[0].message.includes(
'This can happen when clicking a link, submitting a form or interacting with window.location.',
),
);
}
});

it('handles tests which call window.location.reload()', () => {
const sessions = allSessions.filter(s => s.testFile.endsWith('fail-location-reload.test.js'));
expect(sessions.length === browserCount).to.equal(true);
assert.equal(sessions.length === browserCount, true);
for (const session of sessions) {
expect(session.testResults).to.equal(undefined);
expect(session.logs).to.eql([]);
expect(session.errors).to.eql([
assert.equal(session.testResults, undefined);
assert.deepEqual(session.logs, []);
assert.deepEqual(session.errors, [
{
message:
'Tests were interrupted because the page was reloaded. This can happen when clicking a link, submitting a form or interacting with window.location.',
Expand All @@ -61,17 +73,21 @@ export function runLocationChangeTest(
const sessions = allSessions.filter(s =>
s.testFile.endsWith('fail-location-replace.test.js'),
);
expect(sessions.length === browserCount).to.equal(true);
assert.equal(sessions.length === browserCount, true);
for (const session of sessions) {
expect(session.testResults).to.equal(undefined);
expect(session.logs).to.eql([]);
expect(session.errors.length).to.equal(1);
expect(session.errors[0].message).to.include(
'Tests were interrupted because the page navigated to',
assert.equal(session.testResults, undefined);
assert.deepEqual(session.logs, []);
assert.equal(session.errors.length, 1);
assert.ok(
session.errors[0].message.includes(
'Tests were interrupted because the page navigated to',
),
);
expect(session.errors[0].message).to.include('/new-page/');
expect(session.errors[0].message).to.include(
'This can happen when clicking a link, submitting a form or interacting with window.location.',
assert.ok(session.errors[0].message.includes('/new-page/'));
assert.ok(
session.errors[0].message.includes(
'This can happen when clicking a link, submitting a form or interacting with window.location.',
),
);
}
});
Expand Down
8 changes: 6 additions & 2 deletions integration/test-runner/tests/many/runManyTests.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { BrowserLauncher, TestRunnerCoreConfig } from '@web/test-runner-core';
import { describe, it } from 'node:test';
import type { BrowserLauncher, TestRunnerCoreConfig } from '@web/test-runner-core';
import { runTests } from '@web/test-runner-core/test-helpers';
import { legacyPlugin } from '@web/dev-server-legacy';
import { resolve } from 'path';
Expand All @@ -11,7 +12,10 @@ export function runManyTests(
await Promise.all([
runTests({
...config,
files: [...(config.files ?? []), resolve(__dirname, 'browser-tests', '*.test.js')],
files: [
...(config.files ?? []),
resolve(import.meta.dirname, 'browser-tests', '*.test.js'),
],
plugins: [...(config.plugins ?? []), legacyPlugin()],
}),
]);
Expand Down
Loading
Loading