Skip to content

Commit

Permalink
fix: report tap subtest in order
Browse files Browse the repository at this point in the history
PR-URL: nodejs/node#45220
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
(cherry picked from commit 3e57891ee2fde0971e18fc383c25acf8f90def05)
  • Loading branch information
MoLow committed Feb 2, 2023
1 parent c0c3dde commit d18d92f
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 8 deletions.
25 changes: 17 additions & 8 deletions lib/internal/test_runner/test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// https://github.com/nodejs/node/blob/a69a30016cf3395b0bd775c1340ab6ecbac58296/lib/internal/test_runner/test.js
// https://github.com/nodejs/node/blob/3e57891ee2fde0971e18fc383c25acf8f90def05/lib/internal/test_runner/test.js

'use strict'

Expand Down Expand Up @@ -146,6 +146,7 @@ class TestContext {
class Test extends AsyncResource {
#abortController
#outerSignal
#reportedSubtest

constructor (options) {
super('Test')
Expand Down Expand Up @@ -312,7 +313,7 @@ class Test extends AsyncResource {
}

if (i === 1 && this.parent !== null) {
this.reporter.subtest(this.indent, this.name)
this.reportSubtest()
}

// Report the subtest's results and remove it from the ready map.
Expand Down Expand Up @@ -635,12 +636,6 @@ class Test extends AsyncResource {
this.processReadySubtestRange(true)

// Output this test's results and update the parent's waiting counter.
if (this.subtests.length > 0) {
this.reporter.plan(this.subtests[0].indent, this.subtests.length)
} else {
this.reporter.subtest(this.indent, this.name)
}

this.report()
this.parent.waitingOn++
this.finished = true
Expand All @@ -652,6 +647,11 @@ class Test extends AsyncResource {
}

report () {
if (this.subtests.length > 0) {
this.reporter.plan(this.subtests[0].indent, this.subtests.length)
} else {
this.reportSubtest()
}
let directive

if (this.skipped) {
Expand All @@ -670,6 +670,15 @@ class Test extends AsyncResource {
this.reporter.diagnostic(this.indent, this.diagnostics[i])
}
}

reportSubtest () {
if (this.#reportedSubtest || this.parent === null) {
return
}
this.#reportedSubtest = true
this.parent.reportSubtest()
this.reporter.subtest(this.indent, this.name)
}
}

class TestHook extends Test {
Expand Down
11 changes: 11 additions & 0 deletions test/message/test_runner_describe_nested.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// https://github.com/nodejs/node/blob/3e57891ee2fde0971e18fc383c25acf8f90def05/test/message/test_runner_describe_nested.js
// Flags: --no-warnings
'use strict'
require('../common')
const { describe, it } = require('#node:test')

describe('nested - no tests', () => {
describe('nested', () => {
it('nested', () => {})
})
})
26 changes: 26 additions & 0 deletions test/message/test_runner_describe_nested.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
TAP version 13
# Subtest: nested - no tests
# Subtest: nested
# Subtest: nested
ok 1 - nested
---
duration_ms: *
...
1..1
ok 1 - nested
---
duration_ms: *
...
1..1
ok 1 - nested - no tests
---
duration_ms: *
...
1..1
# tests 1
# pass 1
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms *

0 comments on commit d18d92f

Please sign in to comment.