@@ -3,100 +3,23 @@ import * as common from '../common/index.mjs';
33import * as fixtures from '../common/fixtures.mjs' ;
44import * as snapshot from '../common/assertSnapshot.js' ;
55import { describe , it } from 'node:test' ;
6- import { hostname } from 'node:os' ;
7- import { chdir , cwd } from 'node:process' ;
8- import { fileURLToPath } from 'node:url' ;
6+
7+ const {
8+ defaultTransform,
9+ specTransform,
10+ junitTransform,
11+ lcovTransform,
12+ replaceTestDuration,
13+ ensureCwdIsProjectRoot,
14+ canColorize,
15+ } = snapshot ;
16+
17+ ensureCwdIsProjectRoot ( ) ;
918
1019const skipForceColors =
1120 process . config . variables . icu_gyp_path !== 'tools/icu/icu-generic.gyp' ||
1221 process . config . variables . node_shared_openssl ;
1322
14- // We're using dynamic import here to not break `NODE_REGENERATE_SNAPSHOTS`.
15- const canColorize = ( await import ( 'internal/tty' ) ) . default . getColorDepth ( ) > 2 ;
16- const skipCoverageColors = ! canColorize ;
17-
18- function replaceTestDuration ( str ) {
19- return str
20- . replaceAll ( / d u r a t i o n _ m s : [ 0 - 9 . ] + / g, 'duration_ms: *' )
21- . replaceAll ( / d u r a t i o n _ m s [ 0 - 9 . ] + / g, 'duration_ms *' ) ;
22- }
23-
24- const root = fileURLToPath ( new URL ( '../..' , import . meta. url ) ) . slice ( 0 , - 1 ) ;
25-
26- const color = '(\\[\\d+m)' ;
27- const stackTraceBasePath = new RegExp ( `${ color } \\(${ root . replaceAll ( / [ \\ ^ $ * + ? . ( ) | [ \] { } ] / g, '\\$&' ) } /?${ color } (.*)${ color } \\)` , 'g' ) ;
28-
29- function replaceSpecDuration ( str ) {
30- return str
31- . replaceAll ( / [ 0 - 9 . ] + m s / g, '*ms' )
32- . replaceAll ( / d u r a t i o n _ m s [ 0 - 9 . ] + / g, 'duration_ms *' )
33- . replace ( stackTraceBasePath , '$3' ) ;
34- }
35-
36- function replaceJunitDuration ( str ) {
37- return str
38- . replaceAll ( / t i m e = " [ 0 - 9 . ] + " / g, 'time="*"' )
39- . replaceAll ( / d u r a t i o n _ m s [ 0 - 9 . ] + / g, 'duration_ms *' )
40- . replaceAll ( `hostname="${ hostname ( ) } "` , 'hostname="HOSTNAME"' )
41- . replaceAll ( / f i l e = " [ ^ " ] * " / g, 'file="*"' )
42- . replace ( stackTraceBasePath , '$3' ) ;
43- }
44-
45- function removeWindowsPathEscaping ( str ) {
46- return common . isWindows ? str . replaceAll ( / \\ \\ / g, '\\' ) : str ;
47- }
48-
49- function replaceTestLocationLine ( str ) {
50- return str . replaceAll ( / ( j s : ) ( \d + ) ( : \d + ) / g, '$1(LINE)$3' ) ;
51- }
52-
53- // The Node test coverage returns results for all files called by the test. This
54- // will make the output file change if files like test/common/index.js change.
55- // This transform picks only the first line and then the lines from the test
56- // file.
57- function pickTestFileFromLcov ( str ) {
58- const lines = str . split ( / \n / ) ;
59- const firstLineOfTestFile = lines . findIndex (
60- ( line ) => line . startsWith ( 'SF:' ) && line . trim ( ) . endsWith ( 'output.js' )
61- ) ;
62- const lastLineOfTestFile = lines . findIndex (
63- ( line , index ) => index > firstLineOfTestFile && line . trim ( ) === 'end_of_record'
64- ) ;
65- return (
66- lines [ 0 ] + '\n' + lines . slice ( firstLineOfTestFile , lastLineOfTestFile + 1 ) . join ( '\n' ) + '\n'
67- ) ;
68- }
69-
70- const defaultTransform = snapshot . transform (
71- snapshot . replaceWindowsLineEndings ,
72- snapshot . replaceStackTrace ,
73- removeWindowsPathEscaping ,
74- snapshot . transformProjectRoot ( ) ,
75- snapshot . replaceWindowsPaths ,
76- replaceTestDuration ,
77- replaceTestLocationLine ,
78- ) ;
79- const specTransform = snapshot . transform (
80- replaceSpecDuration ,
81- snapshot . replaceWindowsLineEndings ,
82- snapshot . replaceStackTrace ,
83- snapshot . replaceWindowsPaths ,
84- ) ;
85- const junitTransform = snapshot . transform (
86- replaceJunitDuration ,
87- snapshot . replaceWindowsLineEndings ,
88- snapshot . replaceStackTrace ,
89- snapshot . replaceWindowsPaths ,
90- ) ;
91- const lcovTransform = snapshot . transform (
92- snapshot . replaceWindowsLineEndings ,
93- snapshot . replaceStackTrace ,
94- snapshot . transformProjectRoot ( ) ,
95- snapshot . replaceWindowsPaths ,
96- pickTestFileFromLcov
97- ) ;
98-
99-
10023const tests = [
10124 { name : 'test-runner/output/abort.js' , flags : [ '--test-reporter=tap' ] } ,
10225 {
@@ -225,7 +148,7 @@ const tests = [
225148 name : 'test-runner/output/non-tty-forced-color-output.js' ,
226149 transform : specTransform ,
227150 } ,
228- canColorize ? {
151+ canColorize ( ) ? {
229152 name : 'test-runner/output/assertion-color-tty.mjs' ,
230153 flags : [ '--test' , '--stack-trace-limit=0' ] ,
231154 transform : specTransform ,
@@ -276,7 +199,7 @@ const tests = [
276199 name : 'test-runner/output/coverage-width-80.mjs' ,
277200 flags : [ '--test-reporter=tap' , '--test-coverage-exclude=!test/**' ] ,
278201 } : false ,
279- process . features . inspector && ! skipCoverageColors ? {
202+ process . features . inspector && canColorize ( ) ? {
280203 name : 'test-runner/output/coverage-width-80-color.mjs' ,
281204 flags : [ '--test-coverage-exclude=!test/**' ] ,
282205 transform : specTransform ,
@@ -302,7 +225,7 @@ const tests = [
302225 name : 'test-runner/output/coverage-width-100-uncovered-lines.mjs' ,
303226 flags : [ '--test-reporter=tap' , '--test-coverage-exclude=!test/**' ] ,
304227 } : false ,
305- process . features . inspector && ! skipCoverageColors ? {
228+ process . features . inspector && canColorize ( ) ? {
306229 name : 'test-runner/output/coverage-width-80-uncovered-lines-color.mjs' ,
307230 flags : [ '--test-coverage-exclude=!test/**' ] ,
308231 transform : specTransform ,
@@ -348,9 +271,6 @@ const tests = [
348271 } ) ,
349272} ) ) ;
350273
351- if ( cwd ( ) !== root ) {
352- chdir ( root ) ;
353- }
354274describe ( 'test runner output' , { concurrency : true } , ( ) => {
355275 for ( const { name, fn } of tests ) {
356276 it ( name , fn ) ;
0 commit comments