Skip to content

Commit

Permalink
test: migrate pseudo_tty tests to use assertSnapshot
Browse files Browse the repository at this point in the history
  • Loading branch information
MoLow committed May 1, 2023
1 parent d225d95 commit 5580260
Show file tree
Hide file tree
Showing 7 changed files with 73 additions and 66 deletions.
9 changes: 6 additions & 3 deletions test/common/assertSnapshot.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ const fs = require('node:fs/promises');
const assert = require('node:assert/strict');


const stackFramesRegexp = /(\s+)((.+?)\s+\()?(?:\(?(.+?):(\d+)(?::(\d+))?)\)?(\s+\{)?(\n|$)/g;
// eslint-disable-next-line no-control-regex
const stackFramesRegexp = /(\s+)((.+?)\s+\()?(?:\(?(.+?):(\d+)(?::(\d+))?)\)?(\s+\{)?(\u001b\[\d+m)?(\n|$)/g;
const windowNewlineRegexp = /\r/g;

function replaceStackTrace(str, replacement = '$1*$7\n') {
Expand Down Expand Up @@ -53,9 +54,11 @@ async function assertSnapshot(actual, filename = process.argv[1]) {
* @param {function(string): string} [transform]
* @returns {Promise<void>}
*/
async function spawnAndAssert(filename, transform = (x) => x) {
async function spawnAndAssert(filename, transform = (x) => x, { tty = false }) {
const flags = common.parseTestFlags(filename);
const { stdout, stderr } = await common.spawnPromisified(process.execPath, [...flags, filename]);
const executable = tty ? 'tools/pseudo-tty.py' : process.execPath;
const args = tty ? [process.execPath, ...flags, filename] : [...flags, filename];
const { stdout, stderr } = await common.spawnPromisified(executable, args);
await assertSnapshot(transform(`${stdout}${stderr}`), filename);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ process.env.FORCE_COLOR = '1';
delete process.env.NODE_DISABLE_COLORS;
delete process.env.NO_COLOR;

require('../common');
require('../../../common');
const test = require('node:test');

test('should pass', () => {});
Expand Down
57 changes: 57 additions & 0 deletions test/fixtures/test-runner/output/default_output.snapshot
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
[32m✔ should pass [90m(*ms)[39m[39m
[31m✖ should fail [90m(*ms)[39m[39m
Error: fail
at TestContext.<anonymous> [90m(/Users/moshe/repos/node/[39mtest/fixtures/test-runner/output/default_output.js:10:35[90m)[39m
[90m at Test.runInAsyncScope (node:async_hooks:206:9)[39m
[90m at Test.run (node:internal/test_runner/test:568:25)[39m
[90m at Test.processPendingSubtests (node:internal/test_runner/test:315:27)[39m
[90m at Test.postRun (node:internal/test_runner/test:637:19)[39m
[90m at Test.run (node:internal/test_runner/test:596:10)[39m
[90m at async startSubtest (node:internal/test_runner/harness:203:3)[39m

[90m﹣ should skip [90m(*ms)[39m # SKIP[39m
▶ parent
[31m✖ should fail [90m(*ms)[39m[39m
Error: fail
at TestContext.<anonymous> [90m(/Users/moshe/repos/node/[39mtest/fixtures/test-runner/output/default_output.js:13:37[90m)[39m
[90m at Test.runInAsyncScope (node:async_hooks:206:9)[39m
[90m at Test.run (node:internal/test_runner/test:568:25)[39m
[90m at Test.start (node:internal/test_runner/test:481:17)[39m
[90m at startSubtest (node:internal/test_runner/harness:203:17)[39m

[31m✖ should pass but parent fail [90m(*ms)[39m[39m
[32m'test did not finish before its parent and was cancelled'[39m

[31m▶ [39mparent [90m(*ms)[39m

[34mℹ tests 6[39m
[34mℹ suites 0[39m
[34mℹ pass 1[39m
[34mℹ fail 3[39m
[34mℹ cancelled 1[39m
[34mℹ skipped 1[39m
[34mℹ todo 0[39m
[34mℹ duration_ms *[39m

[31m✖ failing tests:[39m

[31m✖ should fail [90m(*ms)[39m[39m
Error: fail
at TestContext.<anonymous> [90m(/Users/moshe/repos/node/[39mtest/fixtures/test-runner/output/default_output.js:10:35[90m)[39m
[90m at Test.runInAsyncScope (node:async_hooks:206:9)[39m
[90m at Test.run (node:internal/test_runner/test:568:25)[39m
[90m at Test.processPendingSubtests (node:internal/test_runner/test:315:27)[39m
[90m at Test.postRun (node:internal/test_runner/test:637:19)[39m
[90m at Test.run (node:internal/test_runner/test:596:10)[39m
[90m at async startSubtest (node:internal/test_runner/harness:203:3)[39m

[31m✖ should fail [90m(*ms)[39m[39m
Error: fail
at TestContext.<anonymous> [90m(/Users/moshe/repos/node/[39mtest/fixtures/test-runner/output/default_output.js:13:37[90m)[39m
[90m at Test.runInAsyncScope (node:async_hooks:206:9)[39m
[90m at Test.run (node:internal/test_runner/test:568:25)[39m
[90m at Test.start (node:internal/test_runner/test:481:17)[39m
[90m at startSubtest (node:internal/test_runner/harness:203:17)[39m

[31m✖ should pass but parent fail [90m(*ms)[39m[39m
[32m'test did not finish before its parent and was cancelled'[39m
10 changes: 6 additions & 4 deletions test/parallel/test-runner-output.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,13 @@ function replaceSpecDuration(str) {
return str
.replaceAll(/\(0(\r?\n)ms\)/g, '(ZEROms)')
.replaceAll(/[0-9.]+ms/g, '*ms')
.replaceAll(/duration_ms [0-9.]+/g, 'duration_ms *');
.replaceAll(/duration_ms [0-9.]+/g, 'duration_ms *')
.replace(new RegExp(`(\\u001b\\[\\d+m)\\(${process.cwd()}/?(\\u001b\\[\\d+m)(.*)(\\u001b\\[\\d+m)\\)`, 'g'), '$3');
}
const defaultTransform = snapshot
.transform(snapshot.replaceWindowsLineEndings, snapshot.replaceStackTrace, replaceTestDuration);
const specTransform = snapshot
.transform(snapshot.replaceWindowsLineEndings, snapshot.replaceStackTrace, replaceSpecDuration);
.transform(replaceSpecDuration, snapshot.replaceWindowsLineEndings, snapshot.replaceStackTrace);


const tests = [
Expand All @@ -40,10 +41,11 @@ const tests = [
{ name: 'test-runner/output/name_pattern.js' },
{ name: 'test-runner/output/name_pattern_with_only.js' },
{ name: 'test-runner/output/unresolved_promise.js' },
].map(({ name, transform }) => ({
{ name: 'test-runner/output/default_output.js', transform: specTransform, tty: true },
].map(({ name, tty, transform }) => ({
name,
fn: common.mustCall(async () => {
await snapshot.spawnAndAssert(fixtures.path(name), transform ?? defaultTransform);
await snapshot.spawnAndAssert(fixtures.path(name), transform ?? defaultTransform, { tty });
}),
}));

Expand Down
57 changes: 0 additions & 57 deletions test/pseudo-tty/test_runner_default_reporter.out

This file was deleted.

2 changes: 1 addition & 1 deletion test/pseudo-tty/testcfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
from functools import reduce

FLAGS_PATTERN = re.compile(r"//\s+Flags:(.*)")
PTY_HELPER = join(dirname(__file__), 'pty_helper.py')
PTY_HELPER = join(dirname(__file__), '../../tools/pseudo-tty.py')

class TTYTestCase(test.TestCase):

Expand Down
2 changes: 2 additions & 0 deletions test/pseudo-tty/pty_helper.py → tools/pseudo-tty.py
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#!/usr/bin/env python3

import errno
import os
import pty
Expand Down

0 comments on commit 5580260

Please sign in to comment.