From c153f077f33f0418e2ad6792c3abf3e179b706f8 Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Tue, 3 Oct 2023 09:13:12 +1100 Subject: [PATCH 01/14] test_runner: adds built in lcov reporter Fixes https://github.com/nodejs/node/issues/49626 --- doc/api/test.md | 16 + lib/internal/test_runner/reporter/lcov.js | 104 + lib/internal/test_runner/utils.js | 1 + lib/test/reporters.js | 10 + .../test-runner/output/lcov_reporter.js | 11 + .../test-runner/output/lcov_reporter.snapshot | 2040 +++++++++++++++++ test/parallel/test-runner-output.mjs | 1 + 7 files changed, 2183 insertions(+) create mode 100644 lib/internal/test_runner/reporter/lcov.js create mode 100644 test/fixtures/test-runner/output/lcov_reporter.js create mode 100644 test/fixtures/test-runner/output/lcov_reporter.snapshot diff --git a/doc/api/test.md b/doc/api/test.md index 715086cafd475a..f07a3234435858 100644 --- a/doc/api/test.md +++ b/doc/api/test.md @@ -403,6 +403,18 @@ if (anAlwaysFalseCondition) { } ``` +### Coverage reporters + +The tap and spec reporters will print a summary of the coverage statistics. +There is also an lcov reporter that will generate an lcov file which can be +used as an in depth coverage report. + +```bash +node --test --experimental-test-coverage --test-reporter=lcov --test-reporter-destination=lcov.info +``` + +### Limitations + The test runner's code coverage functionality has the following limitations, which will be addressed in a future Node.js release: @@ -850,6 +862,10 @@ The following built-reporters are supported: * `junit` The junit reporter outputs test results in a jUnit XML format +* `lcov` + The `lcov` reporter outputs test coverage when used with the + [`--experimental-test-coverage`][] flag. + When `stdout` is a [TTY][], the `spec` reporter is used by default. Otherwise, the `tap` reporter is used by default. diff --git a/lib/internal/test_runner/reporter/lcov.js b/lib/internal/test_runner/reporter/lcov.js new file mode 100644 index 00000000000000..0ea6c38dade146 --- /dev/null +++ b/lib/internal/test_runner/reporter/lcov.js @@ -0,0 +1,104 @@ +const Transform = require('internal/streams/transform'); + +// This reporter is based on the LCOV format, as described here: +// https://ltp.sourceforge.net/coverage/lcov/geninfo.1.php. Excerpts from this +// documentation are included in the comments that make up the _transform +// function below. +class LcovReporter extends Transform { + constructor(options) { + super({ ...options, writableObjectMode: true }); + } + + _transform(event, _encoding, callback) { + if (event.type === 'test:coverage') { + let lcov = ''; + // A tracefile is made up of several human-readable lines of text, divided + // into sections. If available, a tracefile begins with the testname which + // is stored in the following format: + // ## TN:\ + lcov += 'TN:\n'; + const { + data: { + summary: { workingDirectory }, + }, + } = event; + try { + for (let i = 0; i < event.data.summary.files.length; i++) { + const file = event.data.summary.files[i]; + // For each source file referenced in the .da file, there is a section + // containing filename and coverage data: + // ## SF:\ + lcov += `SF:${file.path.replace(workingDirectory + '/', '')}\n`; + + // Following is a list of line numbers for each function name found in + // the source file: + // ## FN:\,\ + // + // After, there is a list of execution counts for each instrumented + // function: + // ## FNDA:\,\ + // + // This loop adds the FN lines to the lcov variable as it goes and + // gathers the FNDA lines to be added later. This way we only loop + // through the list of functions once. + let fnda = ''; + for (let j = 0; j < file.functions.length; j++) { + const func = file.functions[j]; + const name = func.name || `anonymous_${j}`; + lcov += `FN:${func.line},${name}\n`; + fnda += `FNDA:${func.count},${name}\n`; + } + lcov += fnda; + + // This list is followed by two lines containing the number of + // functions found and hit: + // ## FNF:\ + // ## FNH:\ + lcov += `FNF:${file.totalFunctionCount}\n`; + lcov += `FNH:${file.coveredFunctionCount}\n`; + + // Branch coverage information is stored which one line per branch: + // ## BRDA:\,\,\,\ + // Block number and branch number are gcc internal IDs for the branch. + // Taken is either '-' if the basic block containing the branch was + // never executed or a number indicating how often that branch was + // taken. + for (let j = 0; j < file.branches.length; j++) { + lcov += `BRDA:${file.branches[j].line},${j},0,${file.branches[j].count}\n`; + } + + // Branch coverage summaries are stored in two lines: + // ## BRF:\ + // ## BRH:\ + lcov += `BRF:${file.totalBranchCount}\n`; + lcov += `BRH:${file.coveredBranchCount}\n`; + + // Then there is a list of execution counts for each instrumented line + // (i.e. a line which resulted in executable code): + // ## DA:\,\[,\] + const sortedLines = [...file.lines].sort((a, b) => a.line - b.line); + for (let j = 0; j < sortedLines.length; j++) { + lcov += `DA:${sortedLines[j].line},${sortedLines[j].count}\n`; + } + + // At the end of a section, there is a summary about how many lines + // were found and how many were actually instrumented: + // ## LH:\ + // ## LF:\ + lcov += `LH:${file.coveredLineCount}\n`; + lcov += `LF:${file.totalLineCount}\n`; + + // Each sections ends with: + // end_of_record + lcov += 'end_of_record\n'; + } + } catch (error) { + callback(error); + } + return callback(null, lcov); + } + callback(null); + } +} + +module.exports = LcovReporter; diff --git a/lib/internal/test_runner/utils.js b/lib/internal/test_runner/utils.js index b70ca649c8b8df..6b4663f14302c3 100644 --- a/lib/internal/test_runner/utils.js +++ b/lib/internal/test_runner/utils.js @@ -112,6 +112,7 @@ const kBuiltinReporters = new SafeMap([ ['dot', 'internal/test_runner/reporter/dot'], ['tap', 'internal/test_runner/reporter/tap'], ['junit', 'internal/test_runner/reporter/junit'], + ['lcov', 'internal/test_runner/reporter/lcov'], ]); const kDefaultReporter = process.stdout.isTTY ? 'spec' : 'tap'; diff --git a/lib/test/reporters.js b/lib/test/reporters.js index 06a0b27ee58275..943b2da9a5792b 100644 --- a/lib/test/reporters.js +++ b/lib/test/reporters.js @@ -6,6 +6,7 @@ let dot; let junit; let spec; let tap; +let lcov; ObjectDefineProperties(module.exports, { __proto__: null, @@ -45,4 +46,13 @@ ObjectDefineProperties(module.exports, { return tap; }, }, + lcov: { + __proto__: null, + configurable: true, + enumerable: true, + get() { + lcov ??= require('internal/test_runner/reporter/lcov'); + return lcov; + } + } }); diff --git a/test/fixtures/test-runner/output/lcov_reporter.js b/test/fixtures/test-runner/output/lcov_reporter.js new file mode 100644 index 00000000000000..b55a3e5d23e4d2 --- /dev/null +++ b/test/fixtures/test-runner/output/lcov_reporter.js @@ -0,0 +1,11 @@ +'use strict'; +require('../../../common'); +const fixtures = require('../../../common/fixtures'); +const spawn = require('node:child_process').spawn; + +const child = spawn(process.execPath, + ['--no-warnings', '--experimental-test-coverage', '--test-reporter', 'lcov', fixtures.path('test-runner/output/output.js')], + { stdio: 'pipe' }); +// eslint-disable-next-line no-control-regex +child.stdout.on('data', (d) => process.stdout.write(d.toString().replace(/[^\x00-\x7F]/g, '').replace(/\u001b\[\d+m/g, ''))); +child.stderr.pipe(process.stderr); diff --git a/test/fixtures/test-runner/output/lcov_reporter.snapshot b/test/fixtures/test-runner/output/lcov_reporter.snapshot new file mode 100644 index 00000000000000..1a0263a70cb941 --- /dev/null +++ b/test/fixtures/test-runner/output/lcov_reporter.snapshot @@ -0,0 +1,2040 @@ +TN: +SF:test/common/index.js +FN:54,noop +FN:67,parseTestFlags +FN:133,anonymous_2 +FN:169,anonymous_3 +FN:176,queueDestroyAsyncId +FN:187,init +FN:199,before +FN:200,after +FN:201,destroy +FN:230,anonymous_9 +FN:240,childShouldThrowAndAbort +FN:258,createZeroFilledFile +FN:270,platformTimeout +FN:377,allowGlobals +FN:387,leakedGlobals +FN:401,anonymous_15 +FN:411,runCallChecks +FN:434,mustCall +FN:438,mustSucceed +FN:446,mustCallAtLeast +FN:450,_mustCallInner +FN:499,hasMultiLocalhost +FN:508,skipIfEslintMissing +FN:516,canCreateSymLink +FN:538,getCallSite +FN:550,mustNotCall +FN:563,mustNotMutateObjectDeep +FN:607,printSkipMessage +FN:611,skip +FN:619,nodeProcessAborted +FN:652,isAlive +FN:661,_expectWarning +FN:695,expectWarning +FN:718,expectsError +FN:734,skipIfInspectorDisabled +FN:740,skipIf32Bits +FN:746,skipIfWorker +FN:752,getArrayBufferViews +FN:781,getBufferSources +FN:785,getTTYfd +FN:802,runWithInvalidFD +FN:816,invalidArgTypeHelper +FN:836,skipIfDumbTerminal +FN:842,gcUntil +FN:866,requireNoPackageJSONAbove +FN:880,spawnPromisified +FN:965,get enoughTestMem +FN:969,get hasFipsCrypto +FN:973,get hasIPv6 +FN:989,get inFreeBSDJail +FN:1003,get isIBMi +FN:1007,get isLinuxPPCBE +FN:1012,get localhostIPv4 +FN:1034,get opensslCli +FN:1055,get PORT +FN:1065,get checkoutEOL +FN:1072,get +FNDA:0,noop +FNDA:1,parseTestFlags +FNDA:1,anonymous_2 +FNDA:0,anonymous_3 +FNDA:0,queueDestroyAsyncId +FNDA:0,init +FNDA:0,before +FNDA:0,after +FNDA:0,destroy +FNDA:1,anonymous_9 +FNDA:0,childShouldThrowAndAbort +FNDA:0,createZeroFilledFile +FNDA:2,platformTimeout +FNDA:0,allowGlobals +FNDA:0,leakedGlobals +FNDA:0,anonymous_15 +FNDA:0,runCallChecks +FNDA:0,mustCall +FNDA:0,mustSucceed +FNDA:0,mustCallAtLeast +FNDA:0,_mustCallInner +FNDA:0,hasMultiLocalhost +FNDA:0,skipIfEslintMissing +FNDA:0,canCreateSymLink +FNDA:0,getCallSite +FNDA:0,mustNotCall +FNDA:0,mustNotMutateObjectDeep +FNDA:0,printSkipMessage +FNDA:0,skip +FNDA:0,nodeProcessAborted +FNDA:0,isAlive +FNDA:0,_expectWarning +FNDA:0,expectWarning +FNDA:0,expectsError +FNDA:0,skipIfInspectorDisabled +FNDA:0,skipIf32Bits +FNDA:0,skipIfWorker +FNDA:0,getArrayBufferViews +FNDA:0,getBufferSources +FNDA:0,getTTYfd +FNDA:0,runWithInvalidFD +FNDA:0,invalidArgTypeHelper +FNDA:0,skipIfDumbTerminal +FNDA:0,gcUntil +FNDA:0,requireNoPackageJSONAbove +FNDA:0,spawnPromisified +FNDA:0,get enoughTestMem +FNDA:0,get hasFipsCrypto +FNDA:0,get hasIPv6 +FNDA:0,get inFreeBSDJail +FNDA:0,get isIBMi +FNDA:0,get isLinuxPPCBE +FNDA:0,get localhostIPv4 +FNDA:0,get opensslCli +FNDA:0,get PORT +FNDA:0,get checkoutEOL +FNDA:0,get +FNF:57 +FNH:4 +BRDA:1,0,0,1 +BRDA:38,1,0,0 +BRDA:104,2,0,0 +BRDA:107,3,0,0 +BRDA:158,4,0,0 +BRDA:162,5,0,0 +BRDA:217,6,0,0 +BRDA:265,7,0,0 +BRDA:308,8,0,0 +BRDA:373,9,0,0 +BRDA:382,10,0,0 +BRDA:67,11,0,1 +BRDA:78,12,0,0 +BRDA:83,13,0,0 +BRDA:133,14,0,1 +BRDA:139,15,0,0 +BRDA:230,16,0,1 +BRDA:232,17,0,0 +BRDA:270,18,0,2 +BRDA:271,19,0,0 +BRDA:275,20,0,0 +BRDA:278,21,0,0 +BRDA:281,22,0,0 +BRF:23 +BRH:5 +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,1 +DA:25,1 +DA:26,1 +DA:27,1 +DA:28,1 +DA:29,1 +DA:30,1 +DA:31,1 +DA:32,1 +DA:33,1 +DA:34,1 +DA:35,1 +DA:36,1 +DA:37,1 +DA:38,1 +DA:39,1 +DA:40,1 +DA:41,1 +DA:42,1 +DA:43,1 +DA:44,1 +DA:45,1 +DA:46,1 +DA:47,1 +DA:48,1 +DA:49,1 +DA:50,1 +DA:51,1 +DA:52,1 +DA:53,1 +DA:54,1 +DA:55,1 +DA:56,1 +DA:57,1 +DA:58,1 +DA:59,1 +DA:60,1 +DA:61,1 +DA:62,1 +DA:63,1 +DA:64,1 +DA:65,1 +DA:66,1 +DA:67,1 +DA:68,1 +DA:69,1 +DA:70,1 +DA:71,1 +DA:72,1 +DA:73,1 +DA:74,1 +DA:75,1 +DA:76,1 +DA:77,1 +DA:78,1 +DA:79,0 +DA:80,0 +DA:81,1 +DA:82,1 +DA:83,1 +DA:84,0 +DA:85,0 +DA:86,1 +DA:87,1 +DA:88,1 +DA:89,1 +DA:90,1 +DA:91,1 +DA:92,1 +DA:93,1 +DA:94,1 +DA:95,1 +DA:96,1 +DA:97,1 +DA:98,1 +DA:99,1 +DA:100,1 +DA:101,1 +DA:102,1 +DA:103,1 +DA:104,1 +DA:105,0 +DA:106,0 +DA:107,1 +DA:108,0 +DA:109,0 +DA:110,0 +DA:111,0 +DA:112,0 +DA:113,0 +DA:114,0 +DA:115,0 +DA:116,0 +DA:117,0 +DA:118,0 +DA:119,0 +DA:120,0 +DA:121,0 +DA:122,1 +DA:123,1 +DA:124,1 +DA:125,1 +DA:126,1 +DA:127,1 +DA:128,1 +DA:129,1 +DA:130,1 +DA:131,1 +DA:132,1 +DA:133,1 +DA:134,1 +DA:135,1 +DA:136,1 +DA:137,1 +DA:138,1 +DA:139,1 +DA:140,1 +DA:141,1 +DA:142,1 +DA:143,1 +DA:144,1 +DA:145,1 +DA:146,1 +DA:147,1 +DA:148,1 +DA:149,1 +DA:150,1 +DA:151,1 +DA:152,1 +DA:153,1 +DA:154,1 +DA:155,1 +DA:156,1 +DA:157,1 +DA:158,1 +DA:159,1 +DA:160,1 +DA:161,1 +DA:162,1 +DA:163,0 +DA:164,0 +DA:165,0 +DA:166,0 +DA:167,0 +DA:168,0 +DA:169,0 +DA:170,0 +DA:171,0 +DA:172,0 +DA:173,0 +DA:174,0 +DA:175,0 +DA:176,0 +DA:177,0 +DA:178,0 +DA:179,0 +DA:180,0 +DA:181,0 +DA:182,0 +DA:183,0 +DA:184,0 +DA:185,0 +DA:186,0 +DA:187,0 +DA:188,0 +DA:189,0 +DA:190,0 +DA:191,0 +DA:192,0 +DA:193,0 +DA:194,0 +DA:195,0 +DA:196,0 +DA:197,0 +DA:198,0 +DA:199,0 +DA:200,0 +DA:201,0 +DA:202,0 +DA:203,0 +DA:204,0 +DA:205,0 +DA:206,0 +DA:207,0 +DA:208,0 +DA:209,0 +DA:210,0 +DA:211,1 +DA:212,1 +DA:213,1 +DA:214,1 +DA:215,1 +DA:216,1 +DA:217,1 +DA:218,0 +DA:219,0 +DA:220,0 +DA:221,0 +DA:222,0 +DA:223,0 +DA:224,0 +DA:225,0 +DA:226,0 +DA:227,0 +DA:228,1 +DA:229,1 +DA:230,1 +DA:231,1 +DA:232,1 +DA:233,1 +DA:234,1 +DA:235,1 +DA:236,1 +DA:237,1 +DA:238,1 +DA:239,1 +DA:240,0 +DA:241,0 +DA:242,0 +DA:243,0 +DA:244,0 +DA:245,0 +DA:246,0 +DA:247,0 +DA:248,0 +DA:249,0 +DA:250,0 +DA:251,0 +DA:252,0 +DA:253,0 +DA:254,0 +DA:255,0 +DA:256,0 +DA:257,1 +DA:258,0 +DA:259,0 +DA:260,0 +DA:261,0 +DA:262,0 +DA:263,1 +DA:264,1 +DA:265,1 +DA:266,1 +DA:267,1 +DA:268,1 +DA:269,1 +DA:270,2 +DA:271,2 +DA:272,2 +DA:273,2 +DA:274,2 +DA:275,2 +DA:276,2 +DA:277,2 +DA:278,2 +DA:279,2 +DA:280,2 +DA:281,2 +DA:282,2 +DA:283,2 +DA:284,2 +DA:285,1 +DA:286,1 +DA:287,1 +DA:288,1 +DA:289,1 +DA:290,1 +DA:291,1 +DA:292,1 +DA:293,1 +DA:294,1 +DA:295,1 +DA:296,1 +DA:297,1 +DA:298,1 +DA:299,1 +DA:300,1 +DA:301,1 +DA:302,1 +DA:303,1 +DA:304,1 +DA:305,1 +DA:306,1 +DA:307,1 +DA:308,1 +DA:309,0 +DA:310,0 +DA:311,1 +DA:312,1 +DA:313,1 +DA:314,1 +DA:315,1 +DA:316,1 +DA:317,1 +DA:318,1 +DA:319,1 +DA:320,1 +DA:321,1 +DA:322,1 +DA:323,1 +DA:324,1 +DA:325,1 +DA:326,1 +DA:327,1 +DA:328,1 +DA:329,1 +DA:330,1 +DA:331,1 +DA:332,1 +DA:333,1 +DA:334,1 +DA:335,1 +DA:336,1 +DA:337,1 +DA:338,1 +DA:339,1 +DA:340,1 +DA:341,1 +DA:342,1 +DA:343,1 +DA:344,1 +DA:345,1 +DA:346,1 +DA:347,1 +DA:348,1 +DA:349,1 +DA:350,1 +DA:351,1 +DA:352,1 +DA:353,1 +DA:354,1 +DA:355,1 +DA:356,1 +DA:357,1 +DA:358,1 +DA:359,1 +DA:360,1 +DA:361,1 +DA:362,1 +DA:363,1 +DA:364,1 +DA:365,1 +DA:366,1 +DA:367,1 +DA:368,1 +DA:369,1 +DA:370,1 +DA:371,1 +DA:372,1 +DA:373,1 +DA:374,0 +DA:375,0 +DA:376,1 +DA:377,0 +DA:378,0 +DA:379,0 +DA:380,1 +DA:381,1 +DA:382,1 +DA:383,0 +DA:384,0 +DA:385,0 +DA:386,1 +DA:387,1 +DA:388,0 +DA:389,0 +DA:390,0 +DA:391,0 +DA:392,0 +DA:393,0 +DA:394,0 +DA:395,0 +DA:396,0 +DA:397,0 +DA:398,0 +DA:399,0 +DA:400,1 +DA:401,1 +DA:402,0 +DA:403,0 +DA:404,0 +DA:405,0 +DA:406,1 +DA:407,1 +DA:408,1 +DA:409,1 +DA:410,1 +DA:411,0 +DA:412,0 +DA:413,0 +DA:414,0 +DA:415,0 +DA:416,0 +DA:417,0 +DA:418,0 +DA:419,0 +DA:420,0 +DA:421,0 +DA:422,0 +DA:423,0 +DA:424,0 +DA:425,0 +DA:426,0 +DA:427,0 +DA:428,0 +DA:429,0 +DA:430,0 +DA:431,0 +DA:432,0 +DA:433,1 +DA:434,0 +DA:435,0 +DA:436,0 +DA:437,1 +DA:438,0 +DA:439,0 +DA:440,0 +DA:441,0 +DA:442,0 +DA:443,0 +DA:444,0 +DA:445,1 +DA:446,0 +DA:447,0 +DA:448,0 +DA:449,1 +DA:450,0 +DA:451,0 +DA:452,0 +DA:453,0 +DA:454,0 +DA:455,0 +DA:456,0 +DA:457,0 +DA:458,0 +DA:459,0 +DA:460,0 +DA:461,0 +DA:462,0 +DA:463,0 +DA:464,0 +DA:465,0 +DA:466,0 +DA:467,0 +DA:468,0 +DA:469,0 +DA:470,0 +DA:471,0 +DA:472,0 +DA:473,0 +DA:474,0 +DA:475,0 +DA:476,0 +DA:477,0 +DA:478,0 +DA:479,0 +DA:480,0 +DA:481,0 +DA:482,0 +DA:483,0 +DA:484,0 +DA:485,0 +DA:486,0 +DA:487,0 +DA:488,0 +DA:489,0 +DA:490,0 +DA:491,0 +DA:492,0 +DA:493,0 +DA:494,0 +DA:495,0 +DA:496,0 +DA:497,0 +DA:498,1 +DA:499,0 +DA:500,0 +DA:501,0 +DA:502,0 +DA:503,0 +DA:504,0 +DA:505,0 +DA:506,0 +DA:507,1 +DA:508,0 +DA:509,0 +DA:510,0 +DA:511,0 +DA:512,0 +DA:513,0 +DA:514,0 +DA:515,1 +DA:516,0 +DA:517,0 +DA:518,0 +DA:519,0 +DA:520,0 +DA:521,0 +DA:522,0 +DA:523,0 +DA:524,0 +DA:525,0 +DA:526,0 +DA:527,0 +DA:528,0 +DA:529,0 +DA:530,0 +DA:531,0 +DA:532,0 +DA:533,0 +DA:534,0 +DA:535,0 +DA:536,0 +DA:537,1 +DA:538,0 +DA:539,0 +DA:540,0 +DA:541,0 +DA:542,0 +DA:543,0 +DA:544,0 +DA:545,0 +DA:546,0 +DA:547,0 +DA:548,0 +DA:549,1 +DA:550,0 +DA:551,0 +DA:552,0 +DA:553,0 +DA:554,0 +DA:555,0 +DA:556,0 +DA:557,0 +DA:558,0 +DA:559,0 +DA:560,1 +DA:561,1 +DA:562,1 +DA:563,0 +DA:564,0 +DA:565,0 +DA:566,0 +DA:567,0 +DA:568,0 +DA:569,0 +DA:570,0 +DA:571,0 +DA:572,0 +DA:573,0 +DA:574,0 +DA:575,0 +DA:576,0 +DA:577,0 +DA:578,0 +DA:579,0 +DA:580,0 +DA:581,0 +DA:582,0 +DA:583,0 +DA:584,0 +DA:585,0 +DA:586,0 +DA:587,0 +DA:588,0 +DA:589,0 +DA:590,0 +DA:591,0 +DA:592,0 +DA:593,0 +DA:594,0 +DA:595,0 +DA:596,0 +DA:597,0 +DA:598,0 +DA:599,0 +DA:600,0 +DA:601,0 +DA:602,0 +DA:603,0 +DA:604,0 +DA:605,0 +DA:606,1 +DA:607,0 +DA:608,0 +DA:609,0 +DA:610,1 +DA:611,0 +DA:612,0 +DA:613,0 +DA:614,0 +DA:615,1 +DA:616,1 +DA:617,1 +DA:618,1 +DA:619,0 +DA:620,0 +DA:621,0 +DA:622,0 +DA:623,0 +DA:624,0 +DA:625,0 +DA:626,0 +DA:627,0 +DA:628,0 +DA:629,0 +DA:630,0 +DA:631,0 +DA:632,0 +DA:633,0 +DA:634,0 +DA:635,0 +DA:636,0 +DA:637,0 +DA:638,0 +DA:639,0 +DA:640,0 +DA:641,0 +DA:642,0 +DA:643,0 +DA:644,0 +DA:645,0 +DA:646,0 +DA:647,0 +DA:648,0 +DA:649,0 +DA:650,0 +DA:651,1 +DA:652,0 +DA:653,0 +DA:654,0 +DA:655,0 +DA:656,0 +DA:657,0 +DA:658,0 +DA:659,0 +DA:660,1 +DA:661,0 +DA:662,0 +DA:663,0 +DA:664,0 +DA:665,0 +DA:666,0 +DA:667,0 +DA:668,0 +DA:669,0 +DA:670,0 +DA:671,0 +DA:672,0 +DA:673,0 +DA:674,0 +DA:675,0 +DA:676,0 +DA:677,0 +DA:678,0 +DA:679,0 +DA:680,0 +DA:681,0 +DA:682,0 +DA:683,0 +DA:684,0 +DA:685,0 +DA:686,0 +DA:687,0 +DA:688,1 +DA:689,1 +DA:690,1 +DA:691,1 +DA:692,1 +DA:693,1 +DA:694,1 +DA:695,0 +DA:696,0 +DA:697,0 +DA:698,0 +DA:699,0 +DA:700,0 +DA:701,0 +DA:702,0 +DA:703,0 +DA:704,0 +DA:705,0 +DA:706,0 +DA:707,0 +DA:708,0 +DA:709,0 +DA:710,0 +DA:711,0 +DA:712,0 +DA:713,0 +DA:714,0 +DA:715,0 +DA:716,1 +DA:717,1 +DA:718,0 +DA:719,0 +DA:720,0 +DA:721,0 +DA:722,0 +DA:723,0 +DA:724,0 +DA:725,0 +DA:726,0 +DA:727,0 +DA:728,0 +DA:729,0 +DA:730,0 +DA:731,0 +DA:732,0 +DA:733,1 +DA:734,0 +DA:735,0 +DA:736,0 +DA:737,0 +DA:738,0 +DA:739,1 +DA:740,0 +DA:741,0 +DA:742,0 +DA:743,0 +DA:744,0 +DA:745,1 +DA:746,0 +DA:747,0 +DA:748,0 +DA:749,0 +DA:750,0 +DA:751,1 +DA:752,0 +DA:753,0 +DA:754,0 +DA:755,0 +DA:756,0 +DA:757,0 +DA:758,0 +DA:759,0 +DA:760,0 +DA:761,0 +DA:762,0 +DA:763,0 +DA:764,0 +DA:765,0 +DA:766,0 +DA:767,0 +DA:768,0 +DA:769,0 +DA:770,0 +DA:771,0 +DA:772,0 +DA:773,0 +DA:774,0 +DA:775,0 +DA:776,0 +DA:777,0 +DA:778,0 +DA:779,0 +DA:780,1 +DA:781,0 +DA:782,0 +DA:783,0 +DA:784,1 +DA:785,0 +DA:786,0 +DA:787,0 +DA:788,0 +DA:789,0 +DA:790,0 +DA:791,0 +DA:792,0 +DA:793,0 +DA:794,0 +DA:795,0 +DA:796,0 +DA:797,0 +DA:798,0 +DA:799,0 +DA:800,0 +DA:801,1 +DA:802,0 +DA:803,0 +DA:804,0 +DA:805,0 +DA:806,0 +DA:807,0 +DA:808,0 +DA:809,0 +DA:810,0 +DA:811,0 +DA:812,0 +DA:813,0 +DA:814,1 +DA:815,1 +DA:816,0 +DA:817,0 +DA:818,0 +DA:819,0 +DA:820,0 +DA:821,0 +DA:822,0 +DA:823,0 +DA:824,0 +DA:825,0 +DA:826,0 +DA:827,0 +DA:828,0 +DA:829,0 +DA:830,0 +DA:831,0 +DA:832,0 +DA:833,0 +DA:834,0 +DA:835,1 +DA:836,0 +DA:837,0 +DA:838,0 +DA:839,0 +DA:840,0 +DA:841,1 +DA:842,0 +DA:843,0 +DA:844,0 +DA:845,0 +DA:846,0 +DA:847,0 +DA:848,0 +DA:849,0 +DA:850,0 +DA:851,0 +DA:852,0 +DA:853,0 +DA:854,0 +DA:855,0 +DA:856,0 +DA:857,0 +DA:858,0 +DA:859,0 +DA:860,0 +DA:861,0 +DA:862,0 +DA:863,0 +DA:864,0 +DA:865,1 +DA:866,0 +DA:867,0 +DA:868,0 +DA:869,0 +DA:870,0 +DA:871,0 +DA:872,0 +DA:873,0 +DA:874,0 +DA:875,0 +DA:876,0 +DA:877,0 +DA:878,0 +DA:879,1 +DA:880,0 +DA:881,0 +DA:882,0 +DA:883,0 +DA:884,0 +DA:885,0 +DA:886,0 +DA:887,0 +DA:888,0 +DA:889,0 +DA:890,0 +DA:891,0 +DA:892,0 +DA:893,0 +DA:894,0 +DA:895,0 +DA:896,0 +DA:897,0 +DA:898,0 +DA:899,0 +DA:900,0 +DA:901,0 +DA:902,0 +DA:903,0 +DA:904,0 +DA:905,0 +DA:906,0 +DA:907,0 +DA:908,0 +DA:909,1 +DA:910,1 +DA:911,1 +DA:912,1 +DA:913,1 +DA:914,1 +DA:915,1 +DA:916,1 +DA:917,1 +DA:918,1 +DA:919,1 +DA:920,1 +DA:921,1 +DA:922,1 +DA:923,1 +DA:924,1 +DA:925,1 +DA:926,1 +DA:927,1 +DA:928,1 +DA:929,1 +DA:930,1 +DA:931,1 +DA:932,1 +DA:933,1 +DA:934,1 +DA:935,1 +DA:936,1 +DA:937,1 +DA:938,1 +DA:939,1 +DA:940,1 +DA:941,1 +DA:942,1 +DA:943,1 +DA:944,1 +DA:945,1 +DA:946,1 +DA:947,1 +DA:948,1 +DA:949,1 +DA:950,1 +DA:951,1 +DA:952,1 +DA:953,1 +DA:954,1 +DA:955,1 +DA:956,1 +DA:957,1 +DA:958,1 +DA:959,1 +DA:960,1 +DA:961,1 +DA:962,1 +DA:963,1 +DA:964,1 +DA:965,1 +DA:966,0 +DA:967,1 +DA:968,1 +DA:969,1 +DA:970,0 +DA:971,1 +DA:972,1 +DA:973,1 +DA:974,0 +DA:975,0 +DA:976,0 +DA:977,0 +DA:978,0 +DA:979,0 +DA:980,0 +DA:981,0 +DA:982,0 +DA:983,0 +DA:984,0 +DA:985,0 +DA:986,0 +DA:987,1 +DA:988,1 +DA:989,1 +DA:990,0 +DA:991,0 +DA:992,0 +DA:993,0 +DA:994,0 +DA:995,0 +DA:996,0 +DA:997,0 +DA:998,0 +DA:999,1 +DA:1000,1 +DA:1001,1 +DA:1002,1 +DA:1003,1 +DA:1004,0 +DA:1005,1 +DA:1006,1 +DA:1007,1 +DA:1008,0 +DA:1009,0 +DA:1010,1 +DA:1011,1 +DA:1012,1 +DA:1013,0 +DA:1014,0 +DA:1015,0 +DA:1016,0 +DA:1017,0 +DA:1018,0 +DA:1019,0 +DA:1020,0 +DA:1021,0 +DA:1022,0 +DA:1023,0 +DA:1024,0 +DA:1025,0 +DA:1026,0 +DA:1027,0 +DA:1028,0 +DA:1029,0 +DA:1030,0 +DA:1031,1 +DA:1032,1 +DA:1033,1 +DA:1034,1 +DA:1035,0 +DA:1036,0 +DA:1037,0 +DA:1038,0 +DA:1039,0 +DA:1040,0 +DA:1041,0 +DA:1042,0 +DA:1043,0 +DA:1044,0 +DA:1045,0 +DA:1046,0 +DA:1047,0 +DA:1048,0 +DA:1049,0 +DA:1050,0 +DA:1051,0 +DA:1052,0 +DA:1053,1 +DA:1054,1 +DA:1055,1 +DA:1056,0 +DA:1057,0 +DA:1058,0 +DA:1059,0 +DA:1060,1 +DA:1061,1 +DA:1062,1 +DA:1063,1 +DA:1064,1 +DA:1065,1 +DA:1066,0 +DA:1067,1 +DA:1068,1 +DA:1069,1 +DA:1070,1 +DA:1071,1 +DA:1072,1 +DA:1073,0 +DA:1074,0 +DA:1075,0 +DA:1076,1 +DA:1077,1 +LH:424 +LF:1077 +end_of_record +SF:test/common/tmpdir.js +FN:9,rmSync +FN:34,refresh +FN:48,onexit +FN:73,resolve +FN:77,hasEnoughSpace +FN:82,fileURL +FNDA:0,rmSync +FNDA:0,refresh +FNDA:0,onexit +FNDA:0,resolve +FNDA:0,hasEnoughSpace +FNDA:0,fileURL +FNF:6 +FNH:0 +BRDA:1,0,0,1 +BRDA:24,1,0,0 +BRDA:30,2,0,0 +BRDA:30,3,0,0 +BRF:4 +BRH:1 +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,0 +DA:10,0 +DA:11,0 +DA:12,0 +DA:13,0 +DA:14,0 +DA:15,0 +DA:16,0 +DA:17,0 +DA:18,0 +DA:19,0 +DA:20,0 +DA:21,0 +DA:22,0 +DA:23,1 +DA:24,1 +DA:25,1 +DA:26,1 +DA:27,1 +DA:28,1 +DA:29,1 +DA:30,1 +DA:31,1 +DA:32,1 +DA:33,1 +DA:34,0 +DA:35,0 +DA:36,0 +DA:37,0 +DA:38,0 +DA:39,0 +DA:40,0 +DA:41,0 +DA:42,0 +DA:43,0 +DA:44,0 +DA:45,0 +DA:46,0 +DA:47,1 +DA:48,0 +DA:49,0 +DA:50,0 +DA:51,0 +DA:52,0 +DA:53,0 +DA:54,0 +DA:55,0 +DA:56,0 +DA:57,0 +DA:58,0 +DA:59,0 +DA:60,0 +DA:61,0 +DA:62,0 +DA:63,0 +DA:64,0 +DA:65,0 +DA:66,0 +DA:67,0 +DA:68,0 +DA:69,0 +DA:70,0 +DA:71,0 +DA:72,1 +DA:73,0 +DA:74,0 +DA:75,0 +DA:76,1 +DA:77,0 +DA:78,0 +DA:79,0 +DA:80,0 +DA:81,1 +DA:82,0 +DA:83,0 +DA:84,0 +DA:85,0 +DA:86,0 +DA:87,0 +DA:88,1 +DA:89,1 +DA:90,1 +DA:91,1 +DA:92,1 +DA:93,1 +DA:94,1 +DA:95,1 +LH:31 +LF:95 +end_of_record +SF:test/fixtures/test-runner/output/output.js +FN:8,anonymous_0 +FN:12,anonymous_1 +FN:16,anonymous_2 +FN:21,anonymous_3 +FN:26,anonymous_4 +FN:30,anonymous_5 +FN:34,anonymous_6 +FN:38,anonymous_7 +FN:42,anonymous_8 +FN:46,anonymous_9 +FN:50,anonymous_10 +FN:54,anonymous_11 +FN:59,anonymous_12 +FN:64,anonymous_13 +FN:68,anonymous_14 +FN:72,anonymous_15 +FN:76,anonymous_16 +FN:80,anonymous_17 +FN:81,anonymous_18 +FN:86,anonymous_19 +FN:87,anonymous_20 +FN:92,anonymous_21 +FN:93,anonymous_22 +FN:94,anonymous_23 +FN:100,anonymous_24 +FN:101,anonymous_25 +FN:107,anonymous_26 +FN:111,anonymous_27 +FN:112,anonymous_28 +FN:113,anonymous_29 +FN:114,anonymous_30 +FN:122,anonymous_31 +FN:123,anonymous_32 +FN:130,anonymous_33 +FN:131,anonymous_34 +FN:132,anonymous_35 +FN:140,anonymous_36 +FN:141,anonymous_37 +FN:142,anonymous_38 +FN:150,anonymous_39 +FN:151,anonymous_40 +FN:159,anonymous_41 +FN:160,anonymous_42 +FN:161,anonymous_43 +FN:166,anonymous_44 +FN:167,anonymous_45 +FN:171,anonymous_46 +FN:172,anonymous_47 +FN:173,anonymous_48 +FN:179,anonymous_49 +FN:183,anonymous_50 +FN:187,anonymous_51 +FN:195,functionOnly +FN:198,anonymous_53 +FN:213,functionAndOptions +FN:215,anonymous_55 +FN:219,anonymous_56 +FN:220,anonymous_57 +FN:225,anonymous_58 +FN:229,anonymous_59 +FN:233,anonymous_60 +FN:238,anonymous_61 +FN:242,anonymous_62 +FN:246,anonymous_63 +FN:251,anonymous_64 +FN:256,anonymous_65 +FN:257,anonymous_66 +FN:263,anonymous_67 +FN:264,anonymous_68 +FN:269,anonymous_69 +FN:270,anonymous_70 +FN:277,anonymous_71 +FN:287,anonymous_72 +FN:289,obj +FN:298,anonymous_74 +FN:300,obj +FN:309,anonymous_76 +FN:310,anonymous_77 +FN:313,anonymous_78 +FN:318,anonymous_79 +FN:319,anonymous_80 +FN:324,anonymous_81 +FN:329,anonymous_82 +FN:330,anonymous_83 +FN:335,anonymous_84 +FN:339,anonymous_85 +FN:342,get then +FN:345,anonymous_87 +FN:350,anonymous_88 +FN:353,get then +FN:356,anonymous_90 +FN:361,anonymous_91 +FN:362,anonymous_92 +FN:363,anonymous_93 +FN:367,anonymous_94 +FN:368,anonymous_95 +FN:369,anonymous_96 +FN:375,anonymous_97 +FN:379,anonymous_98 +FNDA:1,anonymous_0 +FNDA:1,anonymous_1 +FNDA:1,anonymous_2 +FNDA:1,anonymous_3 +FNDA:1,anonymous_4 +FNDA:1,anonymous_5 +FNDA:1,anonymous_6 +FNDA:1,anonymous_7 +FNDA:1,anonymous_8 +FNDA:1,anonymous_9 +FNDA:1,anonymous_10 +FNDA:1,anonymous_11 +FNDA:1,anonymous_12 +FNDA:1,anonymous_13 +FNDA:1,anonymous_14 +FNDA:1,anonymous_15 +FNDA:1,anonymous_16 +FNDA:1,anonymous_17 +FNDA:1,anonymous_18 +FNDA:1,anonymous_19 +FNDA:1,anonymous_20 +FNDA:1,anonymous_21 +FNDA:1,anonymous_22 +FNDA:1,anonymous_23 +FNDA:1,anonymous_24 +FNDA:1,anonymous_25 +FNDA:1,anonymous_26 +FNDA:1,anonymous_27 +FNDA:1,anonymous_28 +FNDA:1,anonymous_29 +FNDA:1,anonymous_30 +FNDA:1,anonymous_31 +FNDA:1,anonymous_32 +FNDA:1,anonymous_33 +FNDA:1,anonymous_34 +FNDA:1,anonymous_35 +FNDA:1,anonymous_36 +FNDA:1,anonymous_37 +FNDA:1,anonymous_38 +FNDA:1,anonymous_39 +FNDA:1,anonymous_40 +FNDA:1,anonymous_41 +FNDA:1,anonymous_42 +FNDA:1,anonymous_43 +FNDA:1,anonymous_44 +FNDA:1,anonymous_45 +FNDA:1,anonymous_46 +FNDA:1,anonymous_47 +FNDA:1,anonymous_48 +FNDA:0,anonymous_49 +FNDA:0,anonymous_50 +FNDA:1,anonymous_51 +FNDA:1,functionOnly +FNDA:1,anonymous_53 +FNDA:0,functionAndOptions +FNDA:1,anonymous_55 +FNDA:1,anonymous_56 +FNDA:1,anonymous_57 +FNDA:1,anonymous_58 +FNDA:1,anonymous_59 +FNDA:1,anonymous_60 +FNDA:1,anonymous_61 +FNDA:1,anonymous_62 +FNDA:1,anonymous_63 +FNDA:1,anonymous_64 +FNDA:1,anonymous_65 +FNDA:1,anonymous_66 +FNDA:1,anonymous_67 +FNDA:1,anonymous_68 +FNDA:1,anonymous_69 +FNDA:1,anonymous_70 +FNDA:1,anonymous_71 +FNDA:1,anonymous_72 +FNDA:1,obj +FNDA:1,anonymous_74 +FNDA:1,obj +FNDA:1,anonymous_76 +FNDA:1,anonymous_77 +FNDA:1,anonymous_78 +FNDA:1,anonymous_79 +FNDA:1,anonymous_80 +FNDA:1,anonymous_81 +FNDA:1,anonymous_82 +FNDA:1,anonymous_83 +FNDA:1,anonymous_84 +FNDA:1,anonymous_85 +FNDA:1,get then +FNDA:1,anonymous_87 +FNDA:1,anonymous_88 +FNDA:1,get then +FNDA:1,anonymous_90 +FNDA:1,anonymous_91 +FNDA:1,anonymous_92 +FNDA:1,anonymous_93 +FNDA:1,anonymous_94 +FNDA:1,anonymous_95 +FNDA:1,anonymous_96 +FNDA:1,anonymous_97 +FNDA:1,anonymous_98 +FNF:99 +FNH:96 +BRDA:1,0,0,1 +BRDA:8,1,0,1 +BRDA:12,2,0,1 +BRDA:16,3,0,1 +BRDA:21,4,0,1 +BRDA:26,5,0,1 +BRDA:30,6,0,1 +BRDA:34,7,0,1 +BRDA:38,8,0,1 +BRDA:42,9,0,1 +BRDA:46,10,0,1 +BRDA:50,11,0,1 +BRDA:54,12,0,1 +BRDA:59,13,0,1 +BRDA:64,14,0,1 +BRDA:68,15,0,1 +BRDA:72,16,0,1 +BRDA:76,17,0,1 +BRDA:80,18,0,1 +BRDA:81,19,0,1 +BRDA:86,20,0,1 +BRDA:87,21,0,1 +BRDA:92,22,0,1 +BRDA:93,23,0,1 +BRDA:94,24,0,1 +BRDA:100,25,0,1 +BRDA:101,26,0,1 +BRDA:107,27,0,1 +BRDA:111,28,0,1 +BRDA:112,29,0,1 +BRDA:113,30,0,1 +BRDA:114,31,0,1 +BRDA:122,32,0,1 +BRDA:123,33,0,1 +BRDA:130,34,0,1 +BRDA:131,35,0,1 +BRDA:132,36,0,1 +BRDA:140,37,0,1 +BRDA:141,38,0,1 +BRDA:142,39,0,1 +BRDA:150,40,0,1 +BRDA:151,41,0,1 +BRDA:159,42,0,1 +BRDA:160,43,0,1 +BRDA:161,44,0,1 +BRDA:166,45,0,1 +BRDA:167,46,0,1 +BRDA:171,47,0,1 +BRDA:172,48,0,1 +BRDA:173,49,0,1 +BRDA:187,50,0,1 +BRDA:195,51,0,1 +BRDA:198,52,0,1 +BRDA:215,53,0,1 +BRDA:219,54,0,1 +BRDA:220,55,0,1 +BRDA:225,56,0,1 +BRDA:229,57,0,1 +BRDA:233,58,0,1 +BRDA:238,59,0,1 +BRDA:242,60,0,1 +BRDA:246,61,0,1 +BRDA:251,62,0,1 +BRDA:256,63,0,1 +BRDA:257,64,0,1 +BRDA:263,65,0,1 +BRDA:264,66,0,1 +BRDA:269,67,0,1 +BRDA:270,68,0,1 +BRDA:277,69,0,1 +BRDA:287,70,0,1 +BRDA:289,71,0,1 +BRDA:298,72,0,1 +BRDA:300,73,0,1 +BRDA:309,74,0,1 +BRDA:310,75,0,1 +BRDA:313,76,0,1 +BRDA:318,77,0,1 +BRDA:319,78,0,1 +BRDA:324,79,0,1 +BRDA:329,80,0,1 +BRDA:330,81,0,1 +BRDA:335,82,0,1 +BRDA:339,83,0,1 +BRDA:342,84,0,1 +BRDA:343,85,0,0 +BRDA:345,86,0,1 +BRDA:350,87,0,1 +BRDA:353,88,0,1 +BRDA:354,89,0,0 +BRDA:356,90,0,1 +BRDA:361,91,0,1 +BRDA:364,92,0,0 +BRDA:362,93,0,1 +BRDA:363,94,0,1 +BRDA:367,95,0,1 +BRDA:370,96,0,0 +BRDA:368,97,0,1 +BRDA:369,98,0,1 +BRDA:375,99,0,1 +BRDA:379,100,0,1 +BRF:101 +BRH:97 +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,1 +DA:25,1 +DA:26,1 +DA:27,1 +DA:28,1 +DA:29,1 +DA:30,1 +DA:31,1 +DA:32,1 +DA:33,1 +DA:34,1 +DA:35,1 +DA:36,1 +DA:37,1 +DA:38,1 +DA:39,1 +DA:40,1 +DA:41,1 +DA:42,1 +DA:43,1 +DA:44,1 +DA:45,1 +DA:46,1 +DA:47,1 +DA:48,1 +DA:49,1 +DA:50,1 +DA:51,1 +DA:52,1 +DA:53,1 +DA:54,1 +DA:55,1 +DA:56,1 +DA:57,1 +DA:58,1 +DA:59,1 +DA:60,1 +DA:61,1 +DA:62,1 +DA:63,1 +DA:64,1 +DA:65,1 +DA:66,1 +DA:67,1 +DA:68,1 +DA:69,1 +DA:70,1 +DA:71,1 +DA:72,1 +DA:73,1 +DA:74,1 +DA:75,1 +DA:76,1 +DA:77,1 +DA:78,1 +DA:79,1 +DA:80,1 +DA:81,1 +DA:82,1 +DA:83,1 +DA:84,1 +DA:85,1 +DA:86,1 +DA:87,1 +DA:88,1 +DA:89,1 +DA:90,1 +DA:91,1 +DA:92,1 +DA:93,1 +DA:94,1 +DA:95,1 +DA:96,1 +DA:97,1 +DA:98,1 +DA:99,1 +DA:100,1 +DA:101,1 +DA:102,1 +DA:103,1 +DA:104,1 +DA:105,1 +DA:106,1 +DA:107,1 +DA:108,1 +DA:109,1 +DA:110,1 +DA:111,1 +DA:112,1 +DA:113,1 +DA:114,1 +DA:115,1 +DA:116,1 +DA:117,1 +DA:118,1 +DA:119,1 +DA:120,1 +DA:121,1 +DA:122,1 +DA:123,1 +DA:124,1 +DA:125,1 +DA:126,1 +DA:127,1 +DA:128,1 +DA:129,1 +DA:130,1 +DA:131,1 +DA:132,1 +DA:133,1 +DA:134,1 +DA:135,1 +DA:136,1 +DA:137,1 +DA:138,1 +DA:139,1 +DA:140,1 +DA:141,1 +DA:142,1 +DA:143,1 +DA:144,1 +DA:145,1 +DA:146,1 +DA:147,1 +DA:148,1 +DA:149,1 +DA:150,1 +DA:151,1 +DA:152,1 +DA:153,1 +DA:154,1 +DA:155,1 +DA:156,1 +DA:157,1 +DA:158,1 +DA:159,1 +DA:160,1 +DA:161,1 +DA:162,1 +DA:163,1 +DA:164,1 +DA:165,1 +DA:166,1 +DA:167,1 +DA:168,1 +DA:169,1 +DA:170,1 +DA:171,1 +DA:172,1 +DA:173,1 +DA:174,1 +DA:175,1 +DA:176,1 +DA:177,1 +DA:178,1 +DA:179,1 +DA:180,0 +DA:181,1 +DA:182,1 +DA:183,1 +DA:184,0 +DA:185,1 +DA:186,1 +DA:187,1 +DA:188,1 +DA:189,1 +DA:190,1 +DA:191,1 +DA:192,1 +DA:193,1 +DA:194,1 +DA:195,1 +DA:196,1 +DA:197,1 +DA:198,1 +DA:199,1 +DA:200,1 +DA:201,1 +DA:202,1 +DA:203,1 +DA:204,1 +DA:205,1 +DA:206,1 +DA:207,1 +DA:208,1 +DA:209,1 +DA:210,1 +DA:211,1 +DA:212,1 +DA:213,1 +DA:214,1 +DA:215,1 +DA:216,1 +DA:217,1 +DA:218,1 +DA:219,1 +DA:220,1 +DA:221,1 +DA:222,1 +DA:223,1 +DA:224,1 +DA:225,1 +DA:226,1 +DA:227,1 +DA:228,1 +DA:229,1 +DA:230,1 +DA:231,1 +DA:232,1 +DA:233,1 +DA:234,1 +DA:235,1 +DA:236,1 +DA:237,1 +DA:238,1 +DA:239,1 +DA:240,1 +DA:241,1 +DA:242,1 +DA:243,1 +DA:244,1 +DA:245,1 +DA:246,1 +DA:247,1 +DA:248,1 +DA:249,1 +DA:250,1 +DA:251,1 +DA:252,1 +DA:253,1 +DA:254,1 +DA:255,1 +DA:256,1 +DA:257,1 +DA:258,1 +DA:259,1 +DA:260,1 +DA:261,1 +DA:262,1 +DA:263,1 +DA:264,1 +DA:265,1 +DA:266,1 +DA:267,1 +DA:268,1 +DA:269,1 +DA:270,1 +DA:271,1 +DA:272,1 +DA:273,1 +DA:274,1 +DA:275,1 +DA:276,1 +DA:277,1 +DA:278,1 +DA:279,1 +DA:280,1 +DA:281,1 +DA:282,1 +DA:283,1 +DA:284,1 +DA:285,1 +DA:286,1 +DA:287,1 +DA:288,1 +DA:289,1 +DA:290,1 +DA:291,1 +DA:292,1 +DA:293,1 +DA:294,1 +DA:295,1 +DA:296,1 +DA:297,1 +DA:298,1 +DA:299,1 +DA:300,1 +DA:301,1 +DA:302,1 +DA:303,1 +DA:304,1 +DA:305,1 +DA:306,1 +DA:307,1 +DA:308,1 +DA:309,1 +DA:310,1 +DA:311,1 +DA:312,1 +DA:313,1 +DA:314,1 +DA:315,1 +DA:316,1 +DA:317,1 +DA:318,1 +DA:319,1 +DA:320,1 +DA:321,1 +DA:322,1 +DA:323,1 +DA:324,1 +DA:325,1 +DA:326,1 +DA:327,1 +DA:328,1 +DA:329,1 +DA:330,1 +DA:331,1 +DA:332,1 +DA:333,1 +DA:334,1 +DA:335,1 +DA:336,1 +DA:337,1 +DA:338,1 +DA:339,1 +DA:340,1 +DA:341,1 +DA:342,1 +DA:343,1 +DA:344,1 +DA:345,1 +DA:346,1 +DA:347,1 +DA:348,1 +DA:349,1 +DA:350,1 +DA:351,1 +DA:352,1 +DA:353,1 +DA:354,1 +DA:355,1 +DA:356,1 +DA:357,1 +DA:358,1 +DA:359,1 +DA:360,1 +DA:361,1 +DA:362,1 +DA:363,1 +DA:364,1 +DA:365,1 +DA:366,1 +DA:367,1 +DA:368,1 +DA:369,1 +DA:370,1 +DA:371,1 +DA:372,1 +DA:373,1 +DA:374,1 +DA:375,1 +DA:376,1 +DA:377,1 +DA:378,1 +DA:379,1 +DA:380,1 +DA:381,1 +DA:382,1 +DA:383,1 +DA:384,1 +DA:385,1 +DA:386,1 +DA:387,1 +DA:388,1 +DA:389,1 +DA:390,1 +DA:391,1 +LH:389 +LF:391 +end_of_record diff --git a/test/parallel/test-runner-output.mjs b/test/parallel/test-runner-output.mjs index 372ca8f3bae0ff..ebe1421eb70f58 100644 --- a/test/parallel/test-runner-output.mjs +++ b/test/parallel/test-runner-output.mjs @@ -80,6 +80,7 @@ const tests = [ { name: 'test-runner/output/spec_reporter_successful.js', transform: specTransform }, { name: 'test-runner/output/spec_reporter.js', transform: specTransform }, { name: 'test-runner/output/spec_reporter_cli.js', transform: specTransform }, + { name: 'test-runner/output/lcov_reporter.js' }, { name: 'test-runner/output/output.js' }, { name: 'test-runner/output/output_cli.js' }, { name: 'test-runner/output/name_pattern.js' }, From f1fb0473d7ac01f25366d562a03329e029846a2d Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Tue, 3 Oct 2023 10:45:04 +1100 Subject: [PATCH 02/14] test_runner: update lcov test output snapshot --- .../test-runner/output/lcov_reporter.snapshot | 405 +++++++++--------- 1 file changed, 205 insertions(+), 200 deletions(-) diff --git a/test/fixtures/test-runner/output/lcov_reporter.snapshot b/test/fixtures/test-runner/output/lcov_reporter.snapshot index 1a0263a70cb941..24878fc8f4873f 100644 --- a/test/fixtures/test-runner/output/lcov_reporter.snapshot +++ b/test/fixtures/test-runner/output/lcov_reporter.snapshot @@ -2,61 +2,62 @@ TN: SF:test/common/index.js FN:54,noop FN:67,parseTestFlags -FN:133,anonymous_2 -FN:169,anonymous_3 -FN:176,queueDestroyAsyncId -FN:187,init -FN:199,before -FN:200,after -FN:201,destroy -FN:230,anonymous_9 -FN:240,childShouldThrowAndAbort -FN:258,createZeroFilledFile -FN:270,platformTimeout -FN:377,allowGlobals -FN:387,leakedGlobals -FN:401,anonymous_15 -FN:411,runCallChecks -FN:434,mustCall -FN:438,mustSucceed -FN:446,mustCallAtLeast -FN:450,_mustCallInner -FN:499,hasMultiLocalhost -FN:508,skipIfEslintMissing -FN:516,canCreateSymLink -FN:538,getCallSite -FN:550,mustNotCall -FN:563,mustNotMutateObjectDeep -FN:607,printSkipMessage -FN:611,skip -FN:619,nodeProcessAborted -FN:652,isAlive -FN:661,_expectWarning -FN:695,expectWarning -FN:718,expectsError -FN:734,skipIfInspectorDisabled -FN:740,skipIf32Bits -FN:746,skipIfWorker -FN:752,getArrayBufferViews -FN:781,getBufferSources -FN:785,getTTYfd -FN:802,runWithInvalidFD -FN:816,invalidArgTypeHelper -FN:836,skipIfDumbTerminal -FN:842,gcUntil -FN:866,requireNoPackageJSONAbove -FN:880,spawnPromisified -FN:965,get enoughTestMem -FN:969,get hasFipsCrypto -FN:973,get hasIPv6 -FN:989,get inFreeBSDJail -FN:1003,get isIBMi -FN:1007,get isLinuxPPCBE -FN:1012,get localhostIPv4 -FN:1034,get opensslCli -FN:1055,get PORT -FN:1065,get checkoutEOL -FN:1072,get +FN:132,anonymous_2 +FN:168,anonymous_3 +FN:175,queueDestroyAsyncId +FN:186,init +FN:198,before +FN:199,after +FN:200,destroy +FN:229,anonymous_9 +FN:239,childShouldThrowAndAbort +FN:257,createZeroFilledFile +FN:269,platformTimeout +FN:376,allowGlobals +FN:386,leakedGlobals +FN:400,anonymous_15 +FN:410,runCallChecks +FN:433,mustCall +FN:437,mustSucceed +FN:445,mustCallAtLeast +FN:449,_mustCallInner +FN:498,hasMultiLocalhost +FN:507,skipIfEslintMissing +FN:515,canCreateSymLink +FN:537,getCallSite +FN:549,mustNotCall +FN:562,mustNotMutateObjectDeep +FN:606,printSkipMessage +FN:610,skip +FN:618,nodeProcessAborted +FN:651,isAlive +FN:660,_expectWarning +FN:694,expectWarning +FN:717,expectsError +FN:733,skipIfInspectorDisabled +FN:739,skipIf32Bits +FN:745,skipIfWorker +FN:751,getArrayBufferViews +FN:780,getBufferSources +FN:784,getTTYfd +FN:801,runWithInvalidFD +FN:815,invalidArgTypeHelper +FN:835,skipIfDumbTerminal +FN:841,gcUntil +FN:865,requireNoPackageJSONAbove +FN:879,spawnPromisified +FN:963,get enoughTestMem +FN:967,get hasFipsCrypto +FN:971,get hasIPv6 +FN:987,get inFreeBSDJail +FN:1002,get isAIX +FN:1006,get isIBMi +FN:1010,get isLinuxPPCBE +FN:1015,get localhostIPv4 +FN:1037,get opensslCli +FN:1058,get PORT +FN:1068,get checkoutEOL +FN:1075,get FNDA:0,noop FNDA:1,parseTestFlags FNDA:1,anonymous_2 @@ -107,6 +108,7 @@ FNDA:0,get enoughTestMem FNDA:0,get hasFipsCrypto FNDA:0,get hasIPv6 FNDA:0,get inFreeBSDJail +FNDA:0,get isAIX FNDA:0,get isIBMi FNDA:0,get isLinuxPPCBE FNDA:0,get localhostIPv4 @@ -114,31 +116,31 @@ FNDA:0,get opensslCli FNDA:0,get PORT FNDA:0,get checkoutEOL FNDA:0,get -FNF:57 +FNF:58 FNH:4 BRDA:1,0,0,1 BRDA:38,1,0,0 BRDA:104,2,0,0 BRDA:107,3,0,0 -BRDA:158,4,0,0 -BRDA:162,5,0,0 -BRDA:217,6,0,0 -BRDA:265,7,0,0 -BRDA:308,8,0,0 -BRDA:373,9,0,0 -BRDA:382,10,0,0 +BRDA:157,4,0,0 +BRDA:161,5,0,0 +BRDA:216,6,0,0 +BRDA:264,7,0,0 +BRDA:307,8,0,0 +BRDA:372,9,0,0 +BRDA:381,10,0,0 BRDA:67,11,0,1 BRDA:78,12,0,0 BRDA:83,13,0,0 -BRDA:133,14,0,1 -BRDA:139,15,0,0 -BRDA:230,16,0,1 -BRDA:232,17,0,0 -BRDA:270,18,0,2 -BRDA:271,19,0,0 -BRDA:275,20,0,0 -BRDA:278,21,0,0 -BRDA:281,22,0,0 +BRDA:132,14,0,1 +BRDA:138,15,0,0 +BRDA:229,16,0,1 +BRDA:231,17,0,0 +BRDA:269,18,0,2 +BRDA:270,19,0,0 +BRDA:274,20,0,0 +BRDA:277,21,0,0 +BRDA:280,22,0,0 BRF:23 BRH:5 DA:1,1 @@ -302,7 +304,7 @@ DA:158,1 DA:159,1 DA:160,1 DA:161,1 -DA:162,1 +DA:162,0 DA:163,0 DA:164,0 DA:165,0 @@ -350,14 +352,14 @@ DA:206,0 DA:207,0 DA:208,0 DA:209,0 -DA:210,0 +DA:210,1 DA:211,1 DA:212,1 DA:213,1 DA:214,1 DA:215,1 DA:216,1 -DA:217,1 +DA:217,0 DA:218,0 DA:219,0 DA:220,0 @@ -367,7 +369,7 @@ DA:223,0 DA:224,0 DA:225,0 DA:226,0 -DA:227,0 +DA:227,1 DA:228,1 DA:229,1 DA:230,1 @@ -379,7 +381,7 @@ DA:235,1 DA:236,1 DA:237,1 DA:238,1 -DA:239,1 +DA:239,0 DA:240,0 DA:241,0 DA:242,0 @@ -396,20 +398,20 @@ DA:252,0 DA:253,0 DA:254,0 DA:255,0 -DA:256,0 -DA:257,1 +DA:256,1 +DA:257,0 DA:258,0 DA:259,0 DA:260,0 DA:261,0 -DA:262,0 +DA:262,1 DA:263,1 DA:264,1 DA:265,1 DA:266,1 DA:267,1 DA:268,1 -DA:269,1 +DA:269,2 DA:270,2 DA:271,2 DA:272,2 @@ -424,7 +426,7 @@ DA:280,2 DA:281,2 DA:282,2 DA:283,2 -DA:284,2 +DA:284,1 DA:285,1 DA:286,1 DA:287,1 @@ -448,9 +450,9 @@ DA:304,1 DA:305,1 DA:306,1 DA:307,1 -DA:308,1 +DA:308,0 DA:309,0 -DA:310,0 +DA:310,1 DA:311,1 DA:312,1 DA:313,1 @@ -513,21 +515,21 @@ DA:369,1 DA:370,1 DA:371,1 DA:372,1 -DA:373,1 +DA:373,0 DA:374,0 -DA:375,0 -DA:376,1 +DA:375,1 +DA:376,0 DA:377,0 DA:378,0 -DA:379,0 +DA:379,1 DA:380,1 DA:381,1 -DA:382,1 +DA:382,0 DA:383,0 DA:384,0 -DA:385,0 +DA:385,1 DA:386,1 -DA:387,1 +DA:387,0 DA:388,0 DA:389,0 DA:390,0 @@ -539,18 +541,18 @@ DA:395,0 DA:396,0 DA:397,0 DA:398,0 -DA:399,0 +DA:399,1 DA:400,1 -DA:401,1 +DA:401,0 DA:402,0 DA:403,0 DA:404,0 -DA:405,0 +DA:405,1 DA:406,1 DA:407,1 DA:408,1 DA:409,1 -DA:410,1 +DA:410,0 DA:411,0 DA:412,0 DA:413,0 @@ -572,24 +574,24 @@ DA:428,0 DA:429,0 DA:430,0 DA:431,0 -DA:432,0 -DA:433,1 +DA:432,1 +DA:433,0 DA:434,0 DA:435,0 -DA:436,0 -DA:437,1 +DA:436,1 +DA:437,0 DA:438,0 DA:439,0 DA:440,0 DA:441,0 DA:442,0 DA:443,0 -DA:444,0 -DA:445,1 +DA:444,1 +DA:445,0 DA:446,0 DA:447,0 -DA:448,0 -DA:449,1 +DA:448,1 +DA:449,0 DA:450,0 DA:451,0 DA:452,0 @@ -637,8 +639,8 @@ DA:493,0 DA:494,0 DA:495,0 DA:496,0 -DA:497,0 -DA:498,1 +DA:497,1 +DA:498,0 DA:499,0 DA:500,0 DA:501,0 @@ -646,16 +648,16 @@ DA:502,0 DA:503,0 DA:504,0 DA:505,0 -DA:506,0 -DA:507,1 +DA:506,1 +DA:507,0 DA:508,0 DA:509,0 DA:510,0 DA:511,0 DA:512,0 DA:513,0 -DA:514,0 -DA:515,1 +DA:514,1 +DA:515,0 DA:516,0 DA:517,0 DA:518,0 @@ -676,8 +678,8 @@ DA:532,0 DA:533,0 DA:534,0 DA:535,0 -DA:536,0 -DA:537,1 +DA:536,1 +DA:537,0 DA:538,0 DA:539,0 DA:540,0 @@ -688,8 +690,8 @@ DA:544,0 DA:545,0 DA:546,0 DA:547,0 -DA:548,0 -DA:549,1 +DA:548,1 +DA:549,0 DA:550,0 DA:551,0 DA:552,0 @@ -699,10 +701,10 @@ DA:555,0 DA:556,0 DA:557,0 DA:558,0 -DA:559,0 +DA:559,1 DA:560,1 DA:561,1 -DA:562,1 +DA:562,0 DA:563,0 DA:564,0 DA:565,0 @@ -745,20 +747,20 @@ DA:601,0 DA:602,0 DA:603,0 DA:604,0 -DA:605,0 -DA:606,1 +DA:605,1 +DA:606,0 DA:607,0 DA:608,0 -DA:609,0 -DA:610,1 +DA:609,1 +DA:610,0 DA:611,0 DA:612,0 DA:613,0 -DA:614,0 +DA:614,1 DA:615,1 DA:616,1 DA:617,1 -DA:618,1 +DA:618,0 DA:619,0 DA:620,0 DA:621,0 @@ -790,8 +792,8 @@ DA:646,0 DA:647,0 DA:648,0 DA:649,0 -DA:650,0 -DA:651,1 +DA:650,1 +DA:651,0 DA:652,0 DA:653,0 DA:654,0 @@ -799,8 +801,8 @@ DA:655,0 DA:656,0 DA:657,0 DA:658,0 -DA:659,0 -DA:660,1 +DA:659,1 +DA:660,0 DA:661,0 DA:662,0 DA:663,0 @@ -827,14 +829,14 @@ DA:683,0 DA:684,0 DA:685,0 DA:686,0 -DA:687,0 +DA:687,1 DA:688,1 DA:689,1 DA:690,1 DA:691,1 DA:692,1 DA:693,1 -DA:694,1 +DA:694,0 DA:695,0 DA:696,0 DA:697,0 @@ -855,9 +857,9 @@ DA:711,0 DA:712,0 DA:713,0 DA:714,0 -DA:715,0 +DA:715,1 DA:716,1 -DA:717,1 +DA:717,0 DA:718,0 DA:719,0 DA:720,0 @@ -872,26 +874,26 @@ DA:728,0 DA:729,0 DA:730,0 DA:731,0 -DA:732,0 -DA:733,1 +DA:732,1 +DA:733,0 DA:734,0 DA:735,0 DA:736,0 DA:737,0 -DA:738,0 -DA:739,1 +DA:738,1 +DA:739,0 DA:740,0 DA:741,0 DA:742,0 DA:743,0 -DA:744,0 -DA:745,1 +DA:744,1 +DA:745,0 DA:746,0 DA:747,0 DA:748,0 DA:749,0 -DA:750,0 -DA:751,1 +DA:750,1 +DA:751,0 DA:752,0 DA:753,0 DA:754,0 @@ -919,12 +921,12 @@ DA:775,0 DA:776,0 DA:777,0 DA:778,0 -DA:779,0 -DA:780,1 +DA:779,1 +DA:780,0 DA:781,0 DA:782,0 -DA:783,0 -DA:784,1 +DA:783,1 +DA:784,0 DA:785,0 DA:786,0 DA:787,0 @@ -940,8 +942,8 @@ DA:796,0 DA:797,0 DA:798,0 DA:799,0 -DA:800,0 -DA:801,1 +DA:800,1 +DA:801,0 DA:802,0 DA:803,0 DA:804,0 @@ -953,9 +955,9 @@ DA:809,0 DA:810,0 DA:811,0 DA:812,0 -DA:813,0 +DA:813,1 DA:814,1 -DA:815,1 +DA:815,0 DA:816,0 DA:817,0 DA:818,0 @@ -974,14 +976,14 @@ DA:830,0 DA:831,0 DA:832,0 DA:833,0 -DA:834,0 -DA:835,1 +DA:834,1 +DA:835,0 DA:836,0 DA:837,0 DA:838,0 DA:839,0 -DA:840,0 -DA:841,1 +DA:840,1 +DA:841,0 DA:842,0 DA:843,0 DA:844,0 @@ -1004,8 +1006,8 @@ DA:860,0 DA:861,0 DA:862,0 DA:863,0 -DA:864,0 -DA:865,1 +DA:864,1 +DA:865,0 DA:866,0 DA:867,0 DA:868,0 @@ -1018,8 +1020,8 @@ DA:874,0 DA:875,0 DA:876,0 DA:877,0 -DA:878,0 -DA:879,1 +DA:878,1 +DA:879,0 DA:880,0 DA:881,0 DA:882,0 @@ -1048,7 +1050,7 @@ DA:904,0 DA:905,0 DA:906,0 DA:907,0 -DA:908,0 +DA:908,1 DA:909,1 DA:910,1 DA:911,1 @@ -1104,16 +1106,16 @@ DA:960,1 DA:961,1 DA:962,1 DA:963,1 -DA:964,1 +DA:964,0 DA:965,1 -DA:966,0 +DA:966,1 DA:967,1 -DA:968,1 +DA:968,0 DA:969,1 -DA:970,0 +DA:970,1 DA:971,1 -DA:972,1 -DA:973,1 +DA:972,0 +DA:973,0 DA:974,0 DA:975,0 DA:976,0 @@ -1125,11 +1127,11 @@ DA:981,0 DA:982,0 DA:983,0 DA:984,0 -DA:985,0 -DA:986,0 +DA:985,1 +DA:986,1 DA:987,1 -DA:988,1 -DA:989,1 +DA:988,0 +DA:989,0 DA:990,0 DA:991,0 DA:992,0 @@ -1137,25 +1139,25 @@ DA:993,0 DA:994,0 DA:995,0 DA:996,0 -DA:997,0 -DA:998,0 +DA:997,1 +DA:998,1 DA:999,1 DA:1000,1 DA:1001,1 DA:1002,1 -DA:1003,1 -DA:1004,0 +DA:1003,0 +DA:1004,1 DA:1005,1 DA:1006,1 -DA:1007,1 -DA:1008,0 -DA:1009,0 +DA:1007,0 +DA:1008,1 +DA:1009,1 DA:1010,1 -DA:1011,1 -DA:1012,1 -DA:1013,0 -DA:1014,0 -DA:1015,0 +DA:1011,0 +DA:1012,0 +DA:1013,1 +DA:1014,1 +DA:1015,1 DA:1016,0 DA:1017,0 DA:1018,0 @@ -1171,13 +1173,13 @@ DA:1027,0 DA:1028,0 DA:1029,0 DA:1030,0 -DA:1031,1 -DA:1032,1 -DA:1033,1 +DA:1031,0 +DA:1032,0 +DA:1033,0 DA:1034,1 -DA:1035,0 -DA:1036,0 -DA:1037,0 +DA:1035,1 +DA:1036,1 +DA:1037,1 DA:1038,0 DA:1039,0 DA:1040,0 @@ -1193,33 +1195,36 @@ DA:1049,0 DA:1050,0 DA:1051,0 DA:1052,0 -DA:1053,1 -DA:1054,1 -DA:1055,1 -DA:1056,0 -DA:1057,0 -DA:1058,0 +DA:1053,0 +DA:1054,0 +DA:1055,0 +DA:1056,1 +DA:1057,1 +DA:1058,1 DA:1059,0 -DA:1060,1 -DA:1061,1 -DA:1062,1 +DA:1060,0 +DA:1061,0 +DA:1062,0 DA:1063,1 DA:1064,1 DA:1065,1 -DA:1066,0 +DA:1066,1 DA:1067,1 DA:1068,1 -DA:1069,1 +DA:1069,0 DA:1070,1 DA:1071,1 DA:1072,1 -DA:1073,0 -DA:1074,0 -DA:1075,0 -DA:1076,1 -DA:1077,1 -LH:424 -LF:1077 +DA:1073,1 +DA:1074,1 +DA:1075,1 +DA:1076,0 +DA:1077,0 +DA:1078,0 +DA:1079,1 +DA:1080,1 +LH:426 +LF:1080 end_of_record SF:test/common/tmpdir.js FN:9,rmSync From 8b602519755c9407497e8efeebee1ca63990b269 Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Tue, 3 Oct 2023 10:50:34 +1100 Subject: [PATCH 03/14] test_runner: fix linting errors in lcov reporter --- lib/internal/test_runner/reporter/lcov.js | 4 +++- lib/test/reporters.js | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/internal/test_runner/reporter/lcov.js b/lib/internal/test_runner/reporter/lcov.js index 0ea6c38dade146..9523721a035271 100644 --- a/lib/internal/test_runner/reporter/lcov.js +++ b/lib/internal/test_runner/reporter/lcov.js @@ -1,3 +1,5 @@ +'use strict'; + const Transform = require('internal/streams/transform'); // This reporter is based on the LCOV format, as described here: @@ -6,7 +8,7 @@ const Transform = require('internal/streams/transform'); // function below. class LcovReporter extends Transform { constructor(options) { - super({ ...options, writableObjectMode: true }); + super({ ...options, writableObjectMode: true, __proto__: null }); } _transform(event, _encoding, callback) { diff --git a/lib/test/reporters.js b/lib/test/reporters.js index 943b2da9a5792b..8a1c6f589af4ef 100644 --- a/lib/test/reporters.js +++ b/lib/test/reporters.js @@ -53,6 +53,6 @@ ObjectDefineProperties(module.exports, { get() { lcov ??= require('internal/test_runner/reporter/lcov'); return lcov; - } - } + }, + }, }); From c080f971c21c592db5f0311fd13af486f888968f Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Tue, 3 Oct 2023 11:16:38 +1100 Subject: [PATCH 04/14] test_runner: fixes comments Adds missing returns. Removes unnecessary regex replace in lcov reporter test --- lib/internal/test_runner/reporter/lcov.js | 4 ++-- test/fixtures/test-runner/output/lcov_reporter.js | 8 ++------ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/lib/internal/test_runner/reporter/lcov.js b/lib/internal/test_runner/reporter/lcov.js index 9523721a035271..0b037409dd661b 100644 --- a/lib/internal/test_runner/reporter/lcov.js +++ b/lib/internal/test_runner/reporter/lcov.js @@ -95,11 +95,11 @@ class LcovReporter extends Transform { lcov += 'end_of_record\n'; } } catch (error) { - callback(error); + return callback(error); } return callback(null, lcov); } - callback(null); + return callback(null); } } diff --git a/test/fixtures/test-runner/output/lcov_reporter.js b/test/fixtures/test-runner/output/lcov_reporter.js index b55a3e5d23e4d2..a6d17432d18c23 100644 --- a/test/fixtures/test-runner/output/lcov_reporter.js +++ b/test/fixtures/test-runner/output/lcov_reporter.js @@ -3,9 +3,5 @@ require('../../../common'); const fixtures = require('../../../common/fixtures'); const spawn = require('node:child_process').spawn; -const child = spawn(process.execPath, - ['--no-warnings', '--experimental-test-coverage', '--test-reporter', 'lcov', fixtures.path('test-runner/output/output.js')], - { stdio: 'pipe' }); -// eslint-disable-next-line no-control-regex -child.stdout.on('data', (d) => process.stdout.write(d.toString().replace(/[^\x00-\x7F]/g, '').replace(/\u001b\[\d+m/g, ''))); -child.stderr.pipe(process.stderr); +spawn(process.execPath, + ['--no-warnings', '--experimental-test-coverage', '--test-reporter', 'lcov', fixtures.path('test-runner/output/output.js')], { stdio: 'inherit' }); From 6377f29a70448f83c9c97a19b992b0a24b131e70 Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Tue, 3 Oct 2023 15:28:43 +1100 Subject: [PATCH 05/14] test_runner: transform lcov output to be more consistent The test coverage outputs all files that are touched during the running of any code. This could get noisy, so this introduces a transform that turns the lcov snapshot into just the output from the test file. --- .../test-runner/output/lcov_reporter.snapshot | 1346 ----------------- test/parallel/test-runner-output.mjs | 22 +- 2 files changed, 21 insertions(+), 1347 deletions(-) diff --git a/test/fixtures/test-runner/output/lcov_reporter.snapshot b/test/fixtures/test-runner/output/lcov_reporter.snapshot index 24878fc8f4873f..c14f4c7ce2baee 100644 --- a/test/fixtures/test-runner/output/lcov_reporter.snapshot +++ b/test/fixtures/test-runner/output/lcov_reporter.snapshot @@ -1,1350 +1,4 @@ TN: -SF:test/common/index.js -FN:54,noop -FN:67,parseTestFlags -FN:132,anonymous_2 -FN:168,anonymous_3 -FN:175,queueDestroyAsyncId -FN:186,init -FN:198,before -FN:199,after -FN:200,destroy -FN:229,anonymous_9 -FN:239,childShouldThrowAndAbort -FN:257,createZeroFilledFile -FN:269,platformTimeout -FN:376,allowGlobals -FN:386,leakedGlobals -FN:400,anonymous_15 -FN:410,runCallChecks -FN:433,mustCall -FN:437,mustSucceed -FN:445,mustCallAtLeast -FN:449,_mustCallInner -FN:498,hasMultiLocalhost -FN:507,skipIfEslintMissing -FN:515,canCreateSymLink -FN:537,getCallSite -FN:549,mustNotCall -FN:562,mustNotMutateObjectDeep -FN:606,printSkipMessage -FN:610,skip -FN:618,nodeProcessAborted -FN:651,isAlive -FN:660,_expectWarning -FN:694,expectWarning -FN:717,expectsError -FN:733,skipIfInspectorDisabled -FN:739,skipIf32Bits -FN:745,skipIfWorker -FN:751,getArrayBufferViews -FN:780,getBufferSources -FN:784,getTTYfd -FN:801,runWithInvalidFD -FN:815,invalidArgTypeHelper -FN:835,skipIfDumbTerminal -FN:841,gcUntil -FN:865,requireNoPackageJSONAbove -FN:879,spawnPromisified -FN:963,get enoughTestMem -FN:967,get hasFipsCrypto -FN:971,get hasIPv6 -FN:987,get inFreeBSDJail -FN:1002,get isAIX -FN:1006,get isIBMi -FN:1010,get isLinuxPPCBE -FN:1015,get localhostIPv4 -FN:1037,get opensslCli -FN:1058,get PORT -FN:1068,get checkoutEOL -FN:1075,get -FNDA:0,noop -FNDA:1,parseTestFlags -FNDA:1,anonymous_2 -FNDA:0,anonymous_3 -FNDA:0,queueDestroyAsyncId -FNDA:0,init -FNDA:0,before -FNDA:0,after -FNDA:0,destroy -FNDA:1,anonymous_9 -FNDA:0,childShouldThrowAndAbort -FNDA:0,createZeroFilledFile -FNDA:2,platformTimeout -FNDA:0,allowGlobals -FNDA:0,leakedGlobals -FNDA:0,anonymous_15 -FNDA:0,runCallChecks -FNDA:0,mustCall -FNDA:0,mustSucceed -FNDA:0,mustCallAtLeast -FNDA:0,_mustCallInner -FNDA:0,hasMultiLocalhost -FNDA:0,skipIfEslintMissing -FNDA:0,canCreateSymLink -FNDA:0,getCallSite -FNDA:0,mustNotCall -FNDA:0,mustNotMutateObjectDeep -FNDA:0,printSkipMessage -FNDA:0,skip -FNDA:0,nodeProcessAborted -FNDA:0,isAlive -FNDA:0,_expectWarning -FNDA:0,expectWarning -FNDA:0,expectsError -FNDA:0,skipIfInspectorDisabled -FNDA:0,skipIf32Bits -FNDA:0,skipIfWorker -FNDA:0,getArrayBufferViews -FNDA:0,getBufferSources -FNDA:0,getTTYfd -FNDA:0,runWithInvalidFD -FNDA:0,invalidArgTypeHelper -FNDA:0,skipIfDumbTerminal -FNDA:0,gcUntil -FNDA:0,requireNoPackageJSONAbove -FNDA:0,spawnPromisified -FNDA:0,get enoughTestMem -FNDA:0,get hasFipsCrypto -FNDA:0,get hasIPv6 -FNDA:0,get inFreeBSDJail -FNDA:0,get isAIX -FNDA:0,get isIBMi -FNDA:0,get isLinuxPPCBE -FNDA:0,get localhostIPv4 -FNDA:0,get opensslCli -FNDA:0,get PORT -FNDA:0,get checkoutEOL -FNDA:0,get -FNF:58 -FNH:4 -BRDA:1,0,0,1 -BRDA:38,1,0,0 -BRDA:104,2,0,0 -BRDA:107,3,0,0 -BRDA:157,4,0,0 -BRDA:161,5,0,0 -BRDA:216,6,0,0 -BRDA:264,7,0,0 -BRDA:307,8,0,0 -BRDA:372,9,0,0 -BRDA:381,10,0,0 -BRDA:67,11,0,1 -BRDA:78,12,0,0 -BRDA:83,13,0,0 -BRDA:132,14,0,1 -BRDA:138,15,0,0 -BRDA:229,16,0,1 -BRDA:231,17,0,0 -BRDA:269,18,0,2 -BRDA:270,19,0,0 -BRDA:274,20,0,0 -BRDA:277,21,0,0 -BRDA:280,22,0,0 -BRF:23 -BRH:5 -DA:1,1 -DA:2,1 -DA:3,1 -DA:4,1 -DA:5,1 -DA:6,1 -DA:7,1 -DA:8,1 -DA:9,1 -DA:10,1 -DA:11,1 -DA:12,1 -DA:13,1 -DA:14,1 -DA:15,1 -DA:16,1 -DA:17,1 -DA:18,1 -DA:19,1 -DA:20,1 -DA:21,1 -DA:22,1 -DA:23,1 -DA:24,1 -DA:25,1 -DA:26,1 -DA:27,1 -DA:28,1 -DA:29,1 -DA:30,1 -DA:31,1 -DA:32,1 -DA:33,1 -DA:34,1 -DA:35,1 -DA:36,1 -DA:37,1 -DA:38,1 -DA:39,1 -DA:40,1 -DA:41,1 -DA:42,1 -DA:43,1 -DA:44,1 -DA:45,1 -DA:46,1 -DA:47,1 -DA:48,1 -DA:49,1 -DA:50,1 -DA:51,1 -DA:52,1 -DA:53,1 -DA:54,1 -DA:55,1 -DA:56,1 -DA:57,1 -DA:58,1 -DA:59,1 -DA:60,1 -DA:61,1 -DA:62,1 -DA:63,1 -DA:64,1 -DA:65,1 -DA:66,1 -DA:67,1 -DA:68,1 -DA:69,1 -DA:70,1 -DA:71,1 -DA:72,1 -DA:73,1 -DA:74,1 -DA:75,1 -DA:76,1 -DA:77,1 -DA:78,1 -DA:79,0 -DA:80,0 -DA:81,1 -DA:82,1 -DA:83,1 -DA:84,0 -DA:85,0 -DA:86,1 -DA:87,1 -DA:88,1 -DA:89,1 -DA:90,1 -DA:91,1 -DA:92,1 -DA:93,1 -DA:94,1 -DA:95,1 -DA:96,1 -DA:97,1 -DA:98,1 -DA:99,1 -DA:100,1 -DA:101,1 -DA:102,1 -DA:103,1 -DA:104,1 -DA:105,0 -DA:106,0 -DA:107,1 -DA:108,0 -DA:109,0 -DA:110,0 -DA:111,0 -DA:112,0 -DA:113,0 -DA:114,0 -DA:115,0 -DA:116,0 -DA:117,0 -DA:118,0 -DA:119,0 -DA:120,0 -DA:121,0 -DA:122,1 -DA:123,1 -DA:124,1 -DA:125,1 -DA:126,1 -DA:127,1 -DA:128,1 -DA:129,1 -DA:130,1 -DA:131,1 -DA:132,1 -DA:133,1 -DA:134,1 -DA:135,1 -DA:136,1 -DA:137,1 -DA:138,1 -DA:139,1 -DA:140,1 -DA:141,1 -DA:142,1 -DA:143,1 -DA:144,1 -DA:145,1 -DA:146,1 -DA:147,1 -DA:148,1 -DA:149,1 -DA:150,1 -DA:151,1 -DA:152,1 -DA:153,1 -DA:154,1 -DA:155,1 -DA:156,1 -DA:157,1 -DA:158,1 -DA:159,1 -DA:160,1 -DA:161,1 -DA:162,0 -DA:163,0 -DA:164,0 -DA:165,0 -DA:166,0 -DA:167,0 -DA:168,0 -DA:169,0 -DA:170,0 -DA:171,0 -DA:172,0 -DA:173,0 -DA:174,0 -DA:175,0 -DA:176,0 -DA:177,0 -DA:178,0 -DA:179,0 -DA:180,0 -DA:181,0 -DA:182,0 -DA:183,0 -DA:184,0 -DA:185,0 -DA:186,0 -DA:187,0 -DA:188,0 -DA:189,0 -DA:190,0 -DA:191,0 -DA:192,0 -DA:193,0 -DA:194,0 -DA:195,0 -DA:196,0 -DA:197,0 -DA:198,0 -DA:199,0 -DA:200,0 -DA:201,0 -DA:202,0 -DA:203,0 -DA:204,0 -DA:205,0 -DA:206,0 -DA:207,0 -DA:208,0 -DA:209,0 -DA:210,1 -DA:211,1 -DA:212,1 -DA:213,1 -DA:214,1 -DA:215,1 -DA:216,1 -DA:217,0 -DA:218,0 -DA:219,0 -DA:220,0 -DA:221,0 -DA:222,0 -DA:223,0 -DA:224,0 -DA:225,0 -DA:226,0 -DA:227,1 -DA:228,1 -DA:229,1 -DA:230,1 -DA:231,1 -DA:232,1 -DA:233,1 -DA:234,1 -DA:235,1 -DA:236,1 -DA:237,1 -DA:238,1 -DA:239,0 -DA:240,0 -DA:241,0 -DA:242,0 -DA:243,0 -DA:244,0 -DA:245,0 -DA:246,0 -DA:247,0 -DA:248,0 -DA:249,0 -DA:250,0 -DA:251,0 -DA:252,0 -DA:253,0 -DA:254,0 -DA:255,0 -DA:256,1 -DA:257,0 -DA:258,0 -DA:259,0 -DA:260,0 -DA:261,0 -DA:262,1 -DA:263,1 -DA:264,1 -DA:265,1 -DA:266,1 -DA:267,1 -DA:268,1 -DA:269,2 -DA:270,2 -DA:271,2 -DA:272,2 -DA:273,2 -DA:274,2 -DA:275,2 -DA:276,2 -DA:277,2 -DA:278,2 -DA:279,2 -DA:280,2 -DA:281,2 -DA:282,2 -DA:283,2 -DA:284,1 -DA:285,1 -DA:286,1 -DA:287,1 -DA:288,1 -DA:289,1 -DA:290,1 -DA:291,1 -DA:292,1 -DA:293,1 -DA:294,1 -DA:295,1 -DA:296,1 -DA:297,1 -DA:298,1 -DA:299,1 -DA:300,1 -DA:301,1 -DA:302,1 -DA:303,1 -DA:304,1 -DA:305,1 -DA:306,1 -DA:307,1 -DA:308,0 -DA:309,0 -DA:310,1 -DA:311,1 -DA:312,1 -DA:313,1 -DA:314,1 -DA:315,1 -DA:316,1 -DA:317,1 -DA:318,1 -DA:319,1 -DA:320,1 -DA:321,1 -DA:322,1 -DA:323,1 -DA:324,1 -DA:325,1 -DA:326,1 -DA:327,1 -DA:328,1 -DA:329,1 -DA:330,1 -DA:331,1 -DA:332,1 -DA:333,1 -DA:334,1 -DA:335,1 -DA:336,1 -DA:337,1 -DA:338,1 -DA:339,1 -DA:340,1 -DA:341,1 -DA:342,1 -DA:343,1 -DA:344,1 -DA:345,1 -DA:346,1 -DA:347,1 -DA:348,1 -DA:349,1 -DA:350,1 -DA:351,1 -DA:352,1 -DA:353,1 -DA:354,1 -DA:355,1 -DA:356,1 -DA:357,1 -DA:358,1 -DA:359,1 -DA:360,1 -DA:361,1 -DA:362,1 -DA:363,1 -DA:364,1 -DA:365,1 -DA:366,1 -DA:367,1 -DA:368,1 -DA:369,1 -DA:370,1 -DA:371,1 -DA:372,1 -DA:373,0 -DA:374,0 -DA:375,1 -DA:376,0 -DA:377,0 -DA:378,0 -DA:379,1 -DA:380,1 -DA:381,1 -DA:382,0 -DA:383,0 -DA:384,0 -DA:385,1 -DA:386,1 -DA:387,0 -DA:388,0 -DA:389,0 -DA:390,0 -DA:391,0 -DA:392,0 -DA:393,0 -DA:394,0 -DA:395,0 -DA:396,0 -DA:397,0 -DA:398,0 -DA:399,1 -DA:400,1 -DA:401,0 -DA:402,0 -DA:403,0 -DA:404,0 -DA:405,1 -DA:406,1 -DA:407,1 -DA:408,1 -DA:409,1 -DA:410,0 -DA:411,0 -DA:412,0 -DA:413,0 -DA:414,0 -DA:415,0 -DA:416,0 -DA:417,0 -DA:418,0 -DA:419,0 -DA:420,0 -DA:421,0 -DA:422,0 -DA:423,0 -DA:424,0 -DA:425,0 -DA:426,0 -DA:427,0 -DA:428,0 -DA:429,0 -DA:430,0 -DA:431,0 -DA:432,1 -DA:433,0 -DA:434,0 -DA:435,0 -DA:436,1 -DA:437,0 -DA:438,0 -DA:439,0 -DA:440,0 -DA:441,0 -DA:442,0 -DA:443,0 -DA:444,1 -DA:445,0 -DA:446,0 -DA:447,0 -DA:448,1 -DA:449,0 -DA:450,0 -DA:451,0 -DA:452,0 -DA:453,0 -DA:454,0 -DA:455,0 -DA:456,0 -DA:457,0 -DA:458,0 -DA:459,0 -DA:460,0 -DA:461,0 -DA:462,0 -DA:463,0 -DA:464,0 -DA:465,0 -DA:466,0 -DA:467,0 -DA:468,0 -DA:469,0 -DA:470,0 -DA:471,0 -DA:472,0 -DA:473,0 -DA:474,0 -DA:475,0 -DA:476,0 -DA:477,0 -DA:478,0 -DA:479,0 -DA:480,0 -DA:481,0 -DA:482,0 -DA:483,0 -DA:484,0 -DA:485,0 -DA:486,0 -DA:487,0 -DA:488,0 -DA:489,0 -DA:490,0 -DA:491,0 -DA:492,0 -DA:493,0 -DA:494,0 -DA:495,0 -DA:496,0 -DA:497,1 -DA:498,0 -DA:499,0 -DA:500,0 -DA:501,0 -DA:502,0 -DA:503,0 -DA:504,0 -DA:505,0 -DA:506,1 -DA:507,0 -DA:508,0 -DA:509,0 -DA:510,0 -DA:511,0 -DA:512,0 -DA:513,0 -DA:514,1 -DA:515,0 -DA:516,0 -DA:517,0 -DA:518,0 -DA:519,0 -DA:520,0 -DA:521,0 -DA:522,0 -DA:523,0 -DA:524,0 -DA:525,0 -DA:526,0 -DA:527,0 -DA:528,0 -DA:529,0 -DA:530,0 -DA:531,0 -DA:532,0 -DA:533,0 -DA:534,0 -DA:535,0 -DA:536,1 -DA:537,0 -DA:538,0 -DA:539,0 -DA:540,0 -DA:541,0 -DA:542,0 -DA:543,0 -DA:544,0 -DA:545,0 -DA:546,0 -DA:547,0 -DA:548,1 -DA:549,0 -DA:550,0 -DA:551,0 -DA:552,0 -DA:553,0 -DA:554,0 -DA:555,0 -DA:556,0 -DA:557,0 -DA:558,0 -DA:559,1 -DA:560,1 -DA:561,1 -DA:562,0 -DA:563,0 -DA:564,0 -DA:565,0 -DA:566,0 -DA:567,0 -DA:568,0 -DA:569,0 -DA:570,0 -DA:571,0 -DA:572,0 -DA:573,0 -DA:574,0 -DA:575,0 -DA:576,0 -DA:577,0 -DA:578,0 -DA:579,0 -DA:580,0 -DA:581,0 -DA:582,0 -DA:583,0 -DA:584,0 -DA:585,0 -DA:586,0 -DA:587,0 -DA:588,0 -DA:589,0 -DA:590,0 -DA:591,0 -DA:592,0 -DA:593,0 -DA:594,0 -DA:595,0 -DA:596,0 -DA:597,0 -DA:598,0 -DA:599,0 -DA:600,0 -DA:601,0 -DA:602,0 -DA:603,0 -DA:604,0 -DA:605,1 -DA:606,0 -DA:607,0 -DA:608,0 -DA:609,1 -DA:610,0 -DA:611,0 -DA:612,0 -DA:613,0 -DA:614,1 -DA:615,1 -DA:616,1 -DA:617,1 -DA:618,0 -DA:619,0 -DA:620,0 -DA:621,0 -DA:622,0 -DA:623,0 -DA:624,0 -DA:625,0 -DA:626,0 -DA:627,0 -DA:628,0 -DA:629,0 -DA:630,0 -DA:631,0 -DA:632,0 -DA:633,0 -DA:634,0 -DA:635,0 -DA:636,0 -DA:637,0 -DA:638,0 -DA:639,0 -DA:640,0 -DA:641,0 -DA:642,0 -DA:643,0 -DA:644,0 -DA:645,0 -DA:646,0 -DA:647,0 -DA:648,0 -DA:649,0 -DA:650,1 -DA:651,0 -DA:652,0 -DA:653,0 -DA:654,0 -DA:655,0 -DA:656,0 -DA:657,0 -DA:658,0 -DA:659,1 -DA:660,0 -DA:661,0 -DA:662,0 -DA:663,0 -DA:664,0 -DA:665,0 -DA:666,0 -DA:667,0 -DA:668,0 -DA:669,0 -DA:670,0 -DA:671,0 -DA:672,0 -DA:673,0 -DA:674,0 -DA:675,0 -DA:676,0 -DA:677,0 -DA:678,0 -DA:679,0 -DA:680,0 -DA:681,0 -DA:682,0 -DA:683,0 -DA:684,0 -DA:685,0 -DA:686,0 -DA:687,1 -DA:688,1 -DA:689,1 -DA:690,1 -DA:691,1 -DA:692,1 -DA:693,1 -DA:694,0 -DA:695,0 -DA:696,0 -DA:697,0 -DA:698,0 -DA:699,0 -DA:700,0 -DA:701,0 -DA:702,0 -DA:703,0 -DA:704,0 -DA:705,0 -DA:706,0 -DA:707,0 -DA:708,0 -DA:709,0 -DA:710,0 -DA:711,0 -DA:712,0 -DA:713,0 -DA:714,0 -DA:715,1 -DA:716,1 -DA:717,0 -DA:718,0 -DA:719,0 -DA:720,0 -DA:721,0 -DA:722,0 -DA:723,0 -DA:724,0 -DA:725,0 -DA:726,0 -DA:727,0 -DA:728,0 -DA:729,0 -DA:730,0 -DA:731,0 -DA:732,1 -DA:733,0 -DA:734,0 -DA:735,0 -DA:736,0 -DA:737,0 -DA:738,1 -DA:739,0 -DA:740,0 -DA:741,0 -DA:742,0 -DA:743,0 -DA:744,1 -DA:745,0 -DA:746,0 -DA:747,0 -DA:748,0 -DA:749,0 -DA:750,1 -DA:751,0 -DA:752,0 -DA:753,0 -DA:754,0 -DA:755,0 -DA:756,0 -DA:757,0 -DA:758,0 -DA:759,0 -DA:760,0 -DA:761,0 -DA:762,0 -DA:763,0 -DA:764,0 -DA:765,0 -DA:766,0 -DA:767,0 -DA:768,0 -DA:769,0 -DA:770,0 -DA:771,0 -DA:772,0 -DA:773,0 -DA:774,0 -DA:775,0 -DA:776,0 -DA:777,0 -DA:778,0 -DA:779,1 -DA:780,0 -DA:781,0 -DA:782,0 -DA:783,1 -DA:784,0 -DA:785,0 -DA:786,0 -DA:787,0 -DA:788,0 -DA:789,0 -DA:790,0 -DA:791,0 -DA:792,0 -DA:793,0 -DA:794,0 -DA:795,0 -DA:796,0 -DA:797,0 -DA:798,0 -DA:799,0 -DA:800,1 -DA:801,0 -DA:802,0 -DA:803,0 -DA:804,0 -DA:805,0 -DA:806,0 -DA:807,0 -DA:808,0 -DA:809,0 -DA:810,0 -DA:811,0 -DA:812,0 -DA:813,1 -DA:814,1 -DA:815,0 -DA:816,0 -DA:817,0 -DA:818,0 -DA:819,0 -DA:820,0 -DA:821,0 -DA:822,0 -DA:823,0 -DA:824,0 -DA:825,0 -DA:826,0 -DA:827,0 -DA:828,0 -DA:829,0 -DA:830,0 -DA:831,0 -DA:832,0 -DA:833,0 -DA:834,1 -DA:835,0 -DA:836,0 -DA:837,0 -DA:838,0 -DA:839,0 -DA:840,1 -DA:841,0 -DA:842,0 -DA:843,0 -DA:844,0 -DA:845,0 -DA:846,0 -DA:847,0 -DA:848,0 -DA:849,0 -DA:850,0 -DA:851,0 -DA:852,0 -DA:853,0 -DA:854,0 -DA:855,0 -DA:856,0 -DA:857,0 -DA:858,0 -DA:859,0 -DA:860,0 -DA:861,0 -DA:862,0 -DA:863,0 -DA:864,1 -DA:865,0 -DA:866,0 -DA:867,0 -DA:868,0 -DA:869,0 -DA:870,0 -DA:871,0 -DA:872,0 -DA:873,0 -DA:874,0 -DA:875,0 -DA:876,0 -DA:877,0 -DA:878,1 -DA:879,0 -DA:880,0 -DA:881,0 -DA:882,0 -DA:883,0 -DA:884,0 -DA:885,0 -DA:886,0 -DA:887,0 -DA:888,0 -DA:889,0 -DA:890,0 -DA:891,0 -DA:892,0 -DA:893,0 -DA:894,0 -DA:895,0 -DA:896,0 -DA:897,0 -DA:898,0 -DA:899,0 -DA:900,0 -DA:901,0 -DA:902,0 -DA:903,0 -DA:904,0 -DA:905,0 -DA:906,0 -DA:907,0 -DA:908,1 -DA:909,1 -DA:910,1 -DA:911,1 -DA:912,1 -DA:913,1 -DA:914,1 -DA:915,1 -DA:916,1 -DA:917,1 -DA:918,1 -DA:919,1 -DA:920,1 -DA:921,1 -DA:922,1 -DA:923,1 -DA:924,1 -DA:925,1 -DA:926,1 -DA:927,1 -DA:928,1 -DA:929,1 -DA:930,1 -DA:931,1 -DA:932,1 -DA:933,1 -DA:934,1 -DA:935,1 -DA:936,1 -DA:937,1 -DA:938,1 -DA:939,1 -DA:940,1 -DA:941,1 -DA:942,1 -DA:943,1 -DA:944,1 -DA:945,1 -DA:946,1 -DA:947,1 -DA:948,1 -DA:949,1 -DA:950,1 -DA:951,1 -DA:952,1 -DA:953,1 -DA:954,1 -DA:955,1 -DA:956,1 -DA:957,1 -DA:958,1 -DA:959,1 -DA:960,1 -DA:961,1 -DA:962,1 -DA:963,1 -DA:964,0 -DA:965,1 -DA:966,1 -DA:967,1 -DA:968,0 -DA:969,1 -DA:970,1 -DA:971,1 -DA:972,0 -DA:973,0 -DA:974,0 -DA:975,0 -DA:976,0 -DA:977,0 -DA:978,0 -DA:979,0 -DA:980,0 -DA:981,0 -DA:982,0 -DA:983,0 -DA:984,0 -DA:985,1 -DA:986,1 -DA:987,1 -DA:988,0 -DA:989,0 -DA:990,0 -DA:991,0 -DA:992,0 -DA:993,0 -DA:994,0 -DA:995,0 -DA:996,0 -DA:997,1 -DA:998,1 -DA:999,1 -DA:1000,1 -DA:1001,1 -DA:1002,1 -DA:1003,0 -DA:1004,1 -DA:1005,1 -DA:1006,1 -DA:1007,0 -DA:1008,1 -DA:1009,1 -DA:1010,1 -DA:1011,0 -DA:1012,0 -DA:1013,1 -DA:1014,1 -DA:1015,1 -DA:1016,0 -DA:1017,0 -DA:1018,0 -DA:1019,0 -DA:1020,0 -DA:1021,0 -DA:1022,0 -DA:1023,0 -DA:1024,0 -DA:1025,0 -DA:1026,0 -DA:1027,0 -DA:1028,0 -DA:1029,0 -DA:1030,0 -DA:1031,0 -DA:1032,0 -DA:1033,0 -DA:1034,1 -DA:1035,1 -DA:1036,1 -DA:1037,1 -DA:1038,0 -DA:1039,0 -DA:1040,0 -DA:1041,0 -DA:1042,0 -DA:1043,0 -DA:1044,0 -DA:1045,0 -DA:1046,0 -DA:1047,0 -DA:1048,0 -DA:1049,0 -DA:1050,0 -DA:1051,0 -DA:1052,0 -DA:1053,0 -DA:1054,0 -DA:1055,0 -DA:1056,1 -DA:1057,1 -DA:1058,1 -DA:1059,0 -DA:1060,0 -DA:1061,0 -DA:1062,0 -DA:1063,1 -DA:1064,1 -DA:1065,1 -DA:1066,1 -DA:1067,1 -DA:1068,1 -DA:1069,0 -DA:1070,1 -DA:1071,1 -DA:1072,1 -DA:1073,1 -DA:1074,1 -DA:1075,1 -DA:1076,0 -DA:1077,0 -DA:1078,0 -DA:1079,1 -DA:1080,1 -LH:426 -LF:1080 -end_of_record -SF:test/common/tmpdir.js -FN:9,rmSync -FN:34,refresh -FN:48,onexit -FN:73,resolve -FN:77,hasEnoughSpace -FN:82,fileURL -FNDA:0,rmSync -FNDA:0,refresh -FNDA:0,onexit -FNDA:0,resolve -FNDA:0,hasEnoughSpace -FNDA:0,fileURL -FNF:6 -FNH:0 -BRDA:1,0,0,1 -BRDA:24,1,0,0 -BRDA:30,2,0,0 -BRDA:30,3,0,0 -BRF:4 -BRH:1 -DA:1,1 -DA:2,1 -DA:3,1 -DA:4,1 -DA:5,1 -DA:6,1 -DA:7,1 -DA:8,1 -DA:9,0 -DA:10,0 -DA:11,0 -DA:12,0 -DA:13,0 -DA:14,0 -DA:15,0 -DA:16,0 -DA:17,0 -DA:18,0 -DA:19,0 -DA:20,0 -DA:21,0 -DA:22,0 -DA:23,1 -DA:24,1 -DA:25,1 -DA:26,1 -DA:27,1 -DA:28,1 -DA:29,1 -DA:30,1 -DA:31,1 -DA:32,1 -DA:33,1 -DA:34,0 -DA:35,0 -DA:36,0 -DA:37,0 -DA:38,0 -DA:39,0 -DA:40,0 -DA:41,0 -DA:42,0 -DA:43,0 -DA:44,0 -DA:45,0 -DA:46,0 -DA:47,1 -DA:48,0 -DA:49,0 -DA:50,0 -DA:51,0 -DA:52,0 -DA:53,0 -DA:54,0 -DA:55,0 -DA:56,0 -DA:57,0 -DA:58,0 -DA:59,0 -DA:60,0 -DA:61,0 -DA:62,0 -DA:63,0 -DA:64,0 -DA:65,0 -DA:66,0 -DA:67,0 -DA:68,0 -DA:69,0 -DA:70,0 -DA:71,0 -DA:72,1 -DA:73,0 -DA:74,0 -DA:75,0 -DA:76,1 -DA:77,0 -DA:78,0 -DA:79,0 -DA:80,0 -DA:81,1 -DA:82,0 -DA:83,0 -DA:84,0 -DA:85,0 -DA:86,0 -DA:87,0 -DA:88,1 -DA:89,1 -DA:90,1 -DA:91,1 -DA:92,1 -DA:93,1 -DA:94,1 -DA:95,1 -LH:31 -LF:95 -end_of_record SF:test/fixtures/test-runner/output/output.js FN:8,anonymous_0 FN:12,anonymous_1 diff --git a/test/parallel/test-runner-output.mjs b/test/parallel/test-runner-output.mjs index ebe1421eb70f58..2b72d833f7ed63 100644 --- a/test/parallel/test-runner-output.mjs +++ b/test/parallel/test-runner-output.mjs @@ -40,6 +40,19 @@ function replaceTestLocationLine(str) { return str.replaceAll(/(js:)(\d+)(:\d+)/g, '$1(LINE)$3'); } +// The Node test coverage returns results for all files called by the test. This +// will make the output file change if files like test/common/index.js change. +// This transform picks only the first line and then the lines from the test +// file. +function pickTestFileFromLcov(str) { + const lines = str.split(/\n/); + const firstLineOfTestFile = lines.findIndex((line) => line === 'SF:test/fixtures/test-runner/output/output.js'); + const lastLineOfTestFile = lines.findIndex((line, index) => index > line && line === 'end_of_record'); + return ( + lines[0] + '\n' + lines.slice(firstLineOfTestFile, lastLineOfTestFile).join('\n') + '\n' + ); +} + const defaultTransform = snapshot.transform( snapshot.replaceWindowsLineEndings, snapshot.replaceStackTrace, @@ -59,6 +72,13 @@ const junitTransform = snapshot.transform( snapshot.replaceWindowsLineEndings, snapshot.replaceStackTrace, ); +const lcovTransform = snapshot.transform( + snapshot.replaceWindowsLineEndings, + snapshot.replaceStackTrace, + snapshot.replaceFullPaths, + snapshot.replaceWindowsPaths, + pickTestFileFromLcov +); const tests = [ { name: 'test-runner/output/abort.js' }, @@ -80,7 +100,7 @@ const tests = [ { name: 'test-runner/output/spec_reporter_successful.js', transform: specTransform }, { name: 'test-runner/output/spec_reporter.js', transform: specTransform }, { name: 'test-runner/output/spec_reporter_cli.js', transform: specTransform }, - { name: 'test-runner/output/lcov_reporter.js' }, + { name: 'test-runner/output/lcov_reporter.js', transform: lcovTransform }, { name: 'test-runner/output/output.js' }, { name: 'test-runner/output/output_cli.js' }, { name: 'test-runner/output/name_pattern.js' }, From c079bfca53b578372cc4ffc28fc1f68796addd01 Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Tue, 3 Oct 2023 20:29:51 +1100 Subject: [PATCH 06/14] test_runner: fixing PR comments * Adds lcov reporter to docs examples * Corrects comment with period after URL * Use ReflectConstruct so that the lcov reporter class is usable as a function --- doc/api/test.md | 4 ++-- lib/internal/test_runner/reporter/lcov.js | 6 +++--- lib/test/reporters.js | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/api/test.md b/doc/api/test.md index f07a3234435858..b4a5b7e6ca5bb3 100644 --- a/doc/api/test.md +++ b/doc/api/test.md @@ -877,11 +877,11 @@ to the test runner's output is required, use the events emitted by the The reporters are available via the `node:test/reporters` module: ```mjs -import { tap, spec, dot, junit } from 'node:test/reporters'; +import { tap, spec, dot, junit, lcov } from 'node:test/reporters'; ``` ```cjs -const { tap, spec, dot, junit } = require('node:test/reporters'); +const { tap, spec, dot, junit, lcov } = require('node:test/reporters'); ``` ### Custom reporters diff --git a/lib/internal/test_runner/reporter/lcov.js b/lib/internal/test_runner/reporter/lcov.js index 0b037409dd661b..4703abd874556a 100644 --- a/lib/internal/test_runner/reporter/lcov.js +++ b/lib/internal/test_runner/reporter/lcov.js @@ -3,9 +3,9 @@ const Transform = require('internal/streams/transform'); // This reporter is based on the LCOV format, as described here: -// https://ltp.sourceforge.net/coverage/lcov/geninfo.1.php. Excerpts from this -// documentation are included in the comments that make up the _transform -// function below. +// https://ltp.sourceforge.net/coverage/lcov/geninfo.1.php +// Excerpts from this documentation are included in the comments that make up +// the _transform function below. class LcovReporter extends Transform { constructor(options) { super({ ...options, writableObjectMode: true, __proto__: null }); diff --git a/lib/test/reporters.js b/lib/test/reporters.js index 8a1c6f589af4ef..6316074e6e64aa 100644 --- a/lib/test/reporters.js +++ b/lib/test/reporters.js @@ -52,7 +52,7 @@ ObjectDefineProperties(module.exports, { enumerable: true, get() { lcov ??= require('internal/test_runner/reporter/lcov'); - return lcov; + return ReflectConstruct(lcov, arguments); }, }, }); From 579ce3eacc8e6edfbe6235cbe1ef02d1e890791f Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Tue, 3 Oct 2023 21:21:48 +1100 Subject: [PATCH 07/14] test_runner: lcov reverse if statement to reduce indentation --- lib/internal/test_runner/reporter/lcov.js | 158 +++++++++++----------- 1 file changed, 79 insertions(+), 79 deletions(-) diff --git a/lib/internal/test_runner/reporter/lcov.js b/lib/internal/test_runner/reporter/lcov.js index 4703abd874556a..c907c115fcb205 100644 --- a/lib/internal/test_runner/reporter/lcov.js +++ b/lib/internal/test_runner/reporter/lcov.js @@ -12,94 +12,94 @@ class LcovReporter extends Transform { } _transform(event, _encoding, callback) { - if (event.type === 'test:coverage') { - let lcov = ''; - // A tracefile is made up of several human-readable lines of text, divided - // into sections. If available, a tracefile begins with the testname which - // is stored in the following format: - // ## TN:\ - lcov += 'TN:\n'; - const { - data: { - summary: { workingDirectory }, - }, - } = event; - try { - for (let i = 0; i < event.data.summary.files.length; i++) { - const file = event.data.summary.files[i]; - // For each source file referenced in the .da file, there is a section - // containing filename and coverage data: - // ## SF:\ - lcov += `SF:${file.path.replace(workingDirectory + '/', '')}\n`; + if (event.type !== 'test:coverage') { + return callback(null); + } + let lcov = ''; + // A tracefile is made up of several human-readable lines of text, divided + // into sections. If available, a tracefile begins with the testname which + // is stored in the following format: + // ## TN:\ + lcov += 'TN:\n'; + const { + data: { + summary: { workingDirectory }, + }, + } = event; + try { + for (let i = 0; i < event.data.summary.files.length; i++) { + const file = event.data.summary.files[i]; + // For each source file referenced in the .da file, there is a section + // containing filename and coverage data: + // ## SF:\ + lcov += `SF:${file.path.replace(workingDirectory + '/', '')}\n`; - // Following is a list of line numbers for each function name found in - // the source file: - // ## FN:\,\ - // - // After, there is a list of execution counts for each instrumented - // function: - // ## FNDA:\,\ - // - // This loop adds the FN lines to the lcov variable as it goes and - // gathers the FNDA lines to be added later. This way we only loop - // through the list of functions once. - let fnda = ''; - for (let j = 0; j < file.functions.length; j++) { - const func = file.functions[j]; - const name = func.name || `anonymous_${j}`; - lcov += `FN:${func.line},${name}\n`; - fnda += `FNDA:${func.count},${name}\n`; - } - lcov += fnda; + // Following is a list of line numbers for each function name found in + // the source file: + // ## FN:\,\ + // + // After, there is a list of execution counts for each instrumented + // function: + // ## FNDA:\,\ + // + // This loop adds the FN lines to the lcov variable as it goes and + // gathers the FNDA lines to be added later. This way we only loop + // through the list of functions once. + let fnda = ''; + for (let j = 0; j < file.functions.length; j++) { + const func = file.functions[j]; + const name = func.name || `anonymous_${j}`; + lcov += `FN:${func.line},${name}\n`; + fnda += `FNDA:${func.count},${name}\n`; + } + lcov += fnda; - // This list is followed by two lines containing the number of - // functions found and hit: - // ## FNF:\ - // ## FNH:\ - lcov += `FNF:${file.totalFunctionCount}\n`; - lcov += `FNH:${file.coveredFunctionCount}\n`; + // This list is followed by two lines containing the number of + // functions found and hit: + // ## FNF:\ + // ## FNH:\ + lcov += `FNF:${file.totalFunctionCount}\n`; + lcov += `FNH:${file.coveredFunctionCount}\n`; - // Branch coverage information is stored which one line per branch: - // ## BRDA:\,\,\,\ - // Block number and branch number are gcc internal IDs for the branch. - // Taken is either '-' if the basic block containing the branch was - // never executed or a number indicating how often that branch was - // taken. - for (let j = 0; j < file.branches.length; j++) { - lcov += `BRDA:${file.branches[j].line},${j},0,${file.branches[j].count}\n`; - } + // Branch coverage information is stored which one line per branch: + // ## BRDA:\,\,\,\ + // Block number and branch number are gcc internal IDs for the branch. + // Taken is either '-' if the basic block containing the branch was + // never executed or a number indicating how often that branch was + // taken. + for (let j = 0; j < file.branches.length; j++) { + lcov += `BRDA:${file.branches[j].line},${j},0,${file.branches[j].count}\n`; + } - // Branch coverage summaries are stored in two lines: - // ## BRF:\ - // ## BRH:\ - lcov += `BRF:${file.totalBranchCount}\n`; - lcov += `BRH:${file.coveredBranchCount}\n`; + // Branch coverage summaries are stored in two lines: + // ## BRF:\ + // ## BRH:\ + lcov += `BRF:${file.totalBranchCount}\n`; + lcov += `BRH:${file.coveredBranchCount}\n`; - // Then there is a list of execution counts for each instrumented line - // (i.e. a line which resulted in executable code): - // ## DA:\,\[,\] - const sortedLines = [...file.lines].sort((a, b) => a.line - b.line); - for (let j = 0; j < sortedLines.length; j++) { - lcov += `DA:${sortedLines[j].line},${sortedLines[j].count}\n`; - } + // Then there is a list of execution counts for each instrumented line + // (i.e. a line which resulted in executable code): + // ## DA:\,\[,\] + const sortedLines = [...file.lines].sort((a, b) => a.line - b.line); + for (let j = 0; j < sortedLines.length; j++) { + lcov += `DA:${sortedLines[j].line},${sortedLines[j].count}\n`; + } - // At the end of a section, there is a summary about how many lines - // were found and how many were actually instrumented: - // ## LH:\ - // ## LF:\ - lcov += `LH:${file.coveredLineCount}\n`; - lcov += `LF:${file.totalLineCount}\n`; + // At the end of a section, there is a summary about how many lines + // were found and how many were actually instrumented: + // ## LH:\ + // ## LF:\ + lcov += `LH:${file.coveredLineCount}\n`; + lcov += `LF:${file.totalLineCount}\n`; - // Each sections ends with: - // end_of_record - lcov += 'end_of_record\n'; - } - } catch (error) { - return callback(error); + // Each sections ends with: + // end_of_record + lcov += 'end_of_record\n'; } - return callback(null, lcov); + } catch (error) { + return callback(error); } - return callback(null); + return callback(null, lcov); } } From e1dbd6bf1542dbcbfd8b726680e3d916507e7d3f Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Wed, 4 Oct 2023 09:31:02 +1100 Subject: [PATCH 08/14] test_runner: use string replace primordial and array tosorted --- lib/internal/test_runner/reporter/lcov.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/internal/test_runner/reporter/lcov.js b/lib/internal/test_runner/reporter/lcov.js index c907c115fcb205..3197923a56b62b 100644 --- a/lib/internal/test_runner/reporter/lcov.js +++ b/lib/internal/test_runner/reporter/lcov.js @@ -1,5 +1,10 @@ 'use strict'; +const { + StringPrototypeReplace, +} = primordials; + + const Transform = require('internal/streams/transform'); // This reporter is based on the LCOV format, as described here: @@ -32,7 +37,7 @@ class LcovReporter extends Transform { // For each source file referenced in the .da file, there is a section // containing filename and coverage data: // ## SF:\ - lcov += `SF:${file.path.replace(workingDirectory + '/', '')}\n`; + lcov += `SF:${StringPrototypeReplace(file.path, `${workingDirectory}/`, '')}\n`; // Following is a list of line numbers for each function name found in // the source file: @@ -80,7 +85,7 @@ class LcovReporter extends Transform { // Then there is a list of execution counts for each instrumented line // (i.e. a line which resulted in executable code): // ## DA:\,\[,\] - const sortedLines = [...file.lines].sort((a, b) => a.line - b.line); + const sortedLines = file.lines.toSorted((a, b) => a.line - b.line); for (let j = 0; j < sortedLines.length; j++) { lcov += `DA:${sortedLines[j].line},${sortedLines[j].count}\n`; } From c218382021ae61b218ed2b99033d8081fb2cd993 Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Wed, 4 Oct 2023 09:33:39 +1100 Subject: [PATCH 09/14] test_runner: skip lcov reporter test if no inspector --- test/parallel/test-runner-output.mjs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/test/parallel/test-runner-output.mjs b/test/parallel/test-runner-output.mjs index 2b72d833f7ed63..47e60aa99a897c 100644 --- a/test/parallel/test-runner-output.mjs +++ b/test/parallel/test-runner-output.mjs @@ -80,6 +80,10 @@ const lcovTransform = snapshot.transform( pickTestFileFromLcov ); +const skipIfNoInspector = { + skip: !process.features.inspector ? 'inspector disabled' : false +}; + const tests = [ { name: 'test-runner/output/abort.js' }, { name: 'test-runner/output/abort_suite.js' }, @@ -100,7 +104,7 @@ const tests = [ { name: 'test-runner/output/spec_reporter_successful.js', transform: specTransform }, { name: 'test-runner/output/spec_reporter.js', transform: specTransform }, { name: 'test-runner/output/spec_reporter_cli.js', transform: specTransform }, - { name: 'test-runner/output/lcov_reporter.js', transform: lcovTransform }, + { name: 'test-runner/output/lcov_reporter.js', transform: lcovTransform, options: skipIfNoInspector }, { name: 'test-runner/output/output.js' }, { name: 'test-runner/output/output_cli.js' }, { name: 'test-runner/output/name_pattern.js' }, @@ -124,15 +128,16 @@ const tests = [ process.features.inspector ? { name: 'test-runner/output/coverage_failure.js' } : false, ] .filter(Boolean) -.map(({ name, tty, transform }) => ({ +.map(({ name, tty, transform, options }) => ({ name, fn: common.mustCall(async () => { await snapshot.spawnAndAssert(fixtures.path(name), transform ?? defaultTransform, { tty }); }), + options })); describe('test runner output', { concurrency: true }, () => { - for (const { name, fn } of tests) { - it(name, fn); + for (const { name, fn, options } of tests) { + it(name, fn, options); } }); From b33f154f7b561893409bb990441d711f5dcd5d69 Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Thu, 5 Oct 2023 00:25:54 +1100 Subject: [PATCH 10/14] test_runner: correct order of function and options in tests --- test/parallel/test-runner-output.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-runner-output.mjs b/test/parallel/test-runner-output.mjs index 47e60aa99a897c..c8d26612fc8841 100644 --- a/test/parallel/test-runner-output.mjs +++ b/test/parallel/test-runner-output.mjs @@ -138,6 +138,6 @@ const tests = [ describe('test runner output', { concurrency: true }, () => { for (const { name, fn, options } of tests) { - it(name, fn, options); + it(name, options, fn); } }); From ed9d6ca2399f2f12d7788f96c1ed809e58e4206c Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Thu, 5 Oct 2023 11:03:40 +1100 Subject: [PATCH 11/14] test_runner: different way to skip test runner tests --- test/parallel/test-runner-output.mjs | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/test/parallel/test-runner-output.mjs b/test/parallel/test-runner-output.mjs index c8d26612fc8841..69cf38dbd4e5b1 100644 --- a/test/parallel/test-runner-output.mjs +++ b/test/parallel/test-runner-output.mjs @@ -8,6 +8,8 @@ const skipForceColors = process.config.variables.icu_gyp_path !== 'tools/icu/icu-generic.gyp' || process.config.variables.node_shared_openssl; +const skipIfNoInspector = !process.features.inspector; + function replaceTestDuration(str) { return str .replaceAll(/duration_ms: [0-9.]+/g, 'duration_ms: *') @@ -80,9 +82,6 @@ const lcovTransform = snapshot.transform( pickTestFileFromLcov ); -const skipIfNoInspector = { - skip: !process.features.inspector ? 'inspector disabled' : false -}; const tests = [ { name: 'test-runner/output/abort.js' }, @@ -104,7 +103,7 @@ const tests = [ { name: 'test-runner/output/spec_reporter_successful.js', transform: specTransform }, { name: 'test-runner/output/spec_reporter.js', transform: specTransform }, { name: 'test-runner/output/spec_reporter_cli.js', transform: specTransform }, - { name: 'test-runner/output/lcov_reporter.js', transform: lcovTransform, options: skipIfNoInspector }, + skipIfNoInspector ? false : { name: 'test-runner/output/lcov_reporter.js', transform: lcovTransform }, { name: 'test-runner/output/output.js' }, { name: 'test-runner/output/output_cli.js' }, { name: 'test-runner/output/name_pattern.js' }, @@ -128,16 +127,15 @@ const tests = [ process.features.inspector ? { name: 'test-runner/output/coverage_failure.js' } : false, ] .filter(Boolean) -.map(({ name, tty, transform, options }) => ({ +.map(({ name, tty, transform }) => ({ name, fn: common.mustCall(async () => { await snapshot.spawnAndAssert(fixtures.path(name), transform ?? defaultTransform, { tty }); }), - options })); describe('test runner output', { concurrency: true }, () => { - for (const { name, fn, options } of tests) { - it(name, options, fn); + for (const { name, fn } of tests) { + it(name, fn); } }); From 56a137ffb6da1736d457ff2f9b177f211d972761 Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Fri, 6 Oct 2023 11:11:56 +1100 Subject: [PATCH 12/14] test_runner: consistency in skipping tests when inspector not available --- test/parallel/test-runner-output.mjs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/parallel/test-runner-output.mjs b/test/parallel/test-runner-output.mjs index 69cf38dbd4e5b1..d321da32b40666 100644 --- a/test/parallel/test-runner-output.mjs +++ b/test/parallel/test-runner-output.mjs @@ -8,8 +8,6 @@ const skipForceColors = process.config.variables.icu_gyp_path !== 'tools/icu/icu-generic.gyp' || process.config.variables.node_shared_openssl; -const skipIfNoInspector = !process.features.inspector; - function replaceTestDuration(str) { return str .replaceAll(/duration_ms: [0-9.]+/g, 'duration_ms: *') @@ -103,7 +101,7 @@ const tests = [ { name: 'test-runner/output/spec_reporter_successful.js', transform: specTransform }, { name: 'test-runner/output/spec_reporter.js', transform: specTransform }, { name: 'test-runner/output/spec_reporter_cli.js', transform: specTransform }, - skipIfNoInspector ? false : { name: 'test-runner/output/lcov_reporter.js', transform: lcovTransform }, + process.features.inspector ? { name: 'test-runner/output/lcov_reporter.js', transform: lcovTransform } : false, { name: 'test-runner/output/output.js' }, { name: 'test-runner/output/output_cli.js' }, { name: 'test-runner/output/name_pattern.js' }, From eb7a3adf56b129084eaa8821cc5eafc51d70b0ed Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Mon, 9 Oct 2023 10:28:11 +1100 Subject: [PATCH 13/14] test_runner: alternative way to filter lcov test results --- test/parallel/test-runner-output.mjs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/test/parallel/test-runner-output.mjs b/test/parallel/test-runner-output.mjs index d321da32b40666..e2fa99e17cf8c8 100644 --- a/test/parallel/test-runner-output.mjs +++ b/test/parallel/test-runner-output.mjs @@ -46,10 +46,14 @@ function replaceTestLocationLine(str) { // file. function pickTestFileFromLcov(str) { const lines = str.split(/\n/); - const firstLineOfTestFile = lines.findIndex((line) => line === 'SF:test/fixtures/test-runner/output/output.js'); - const lastLineOfTestFile = lines.findIndex((line, index) => index > line && line === 'end_of_record'); + const firstLineOfTestFile = lines.findIndex( + (line) => line.startsWith('SF:') && line.trim().endsWith('output.js') + ); + const lastLineOfTestFile = lines.findIndex( + (line, index) => index > firstLineOfTestFile && line.trim() === 'end_of_record' + ); return ( - lines[0] + '\n' + lines.slice(firstLineOfTestFile, lastLineOfTestFile).join('\n') + '\n' + lines[0] + '\n' + lines.slice(firstLineOfTestFile, lastLineOfTestFile + 1).join('\n') + '\n' ); } From 3c5ee6b073d70043b5bddbd64bdd683f2b74e3b0 Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Wed, 25 Oct 2023 17:56:19 +1100 Subject: [PATCH 14/14] test_runner: make file path relative properly --- lib/internal/test_runner/reporter/lcov.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/lib/internal/test_runner/reporter/lcov.js b/lib/internal/test_runner/reporter/lcov.js index 3197923a56b62b..698913d79dec02 100644 --- a/lib/internal/test_runner/reporter/lcov.js +++ b/lib/internal/test_runner/reporter/lcov.js @@ -1,10 +1,6 @@ 'use strict'; -const { - StringPrototypeReplace, -} = primordials; - - +const { relative } = require('path'); const Transform = require('internal/streams/transform'); // This reporter is based on the LCOV format, as described here: @@ -37,7 +33,7 @@ class LcovReporter extends Transform { // For each source file referenced in the .da file, there is a section // containing filename and coverage data: // ## SF:\ - lcov += `SF:${StringPrototypeReplace(file.path, `${workingDirectory}/`, '')}\n`; + lcov += `SF:${relative(workingDirectory, file.path)}\n`; // Following is a list of line numbers for each function name found in // the source file: