From afd583e6c30c34ea8af75faf4cf904cdabdb54fe Mon Sep 17 00:00:00 2001 From: RedYetiDev <38299977+RedYetiDev@users.noreply.github.com> Date: Wed, 6 Nov 2024 20:47:41 -0500 Subject: [PATCH] benchmark: add `test-reporters` --- benchmark/fixtures/basic-test-runner.js | 11 +++++++ benchmark/test_runner/test-reporters.js | 39 +++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 benchmark/fixtures/basic-test-runner.js create mode 100644 benchmark/test_runner/test-reporters.js diff --git a/benchmark/fixtures/basic-test-runner.js b/benchmark/fixtures/basic-test-runner.js new file mode 100644 index 000000000000000..d57f70da0d40a5d --- /dev/null +++ b/benchmark/fixtures/basic-test-runner.js @@ -0,0 +1,11 @@ +const { test } = require('node:test'); + +test('should pass', () => {}); +test('should fail', () => { throw new Error('fail'); }); +test('should skip', { skip: true }, () => {}); +test('parent', (t) => { + t.test('should fail', () => { throw new Error('fail'); }); + t.test('should pass but parent fail', (t, done) => { + setImmediate(done); + }); +}); diff --git a/benchmark/test_runner/test-reporters.js b/benchmark/test_runner/test-reporters.js new file mode 100644 index 000000000000000..0b9b109dba68786 --- /dev/null +++ b/benchmark/test_runner/test-reporters.js @@ -0,0 +1,39 @@ +const common = require('../common'); +const { run } = require('node:test'); +const reporters = require('node:test/reporters'); +const { Readable } = require('node:stream'); +const assert = require('node:assert'); + +// Set up the benchmark +const bench = common.createBenchmark(main, { + n: [1e4], + reporter: Object.keys(reporters), +}); + +// Run the test and get the stream of results +const stream = run({ + files: ['../fixtures/basic-test-runner.js'] +}); + +async function main({ n, reporter: reporterKey }) { + // Prepare test data array from stream + const testResults = await stream.toArray(); + + // Create readable streams for each iteration + const readables = Array.from({ length: n }, () => Readable.from(testResults)); + + // Get the selected reporter + const reporter = reporters[reporterKey]; + + bench.start(); + + let noDead; + for (const readable of readables) { + // Process each readable stream through the reporter + noDead = await readable.compose(reporter).toArray(); + } + + bench.end(n); + + assert.ok(noDead); +}