OverviewFilesCommitsIssuesDocsReleasesPeers

P2P-Hiverelay / test / unit / brittle-suite-runner.test.js

36 lines · javascript ref:
import { spawnSync } from 'node:child_process'
import { readFileSync } from 'node:fs'
import path from 'node:path'
import process from 'node:process'
import test from 'brittle'

test('suite runner deterministically places force-exit guards after ordinary tests', t => {
  const runner = path.resolve('scripts/run-brittle-suite.mjs')
  const scripts = JSON.parse(readFileSync(path.resolve('package.json'))).scripts
  t.is(scripts.test, 'node scripts/run-brittle-suite.mjs all')
  t.is(scripts['test:unit'], 'node scripts/run-brittle-suite.mjs unit')
  t.is(scripts['test:integration'], 'node scripts/run-brittle-suite.mjs integration')
  for (const [suite, expectedFinalizers] of [
    ['unit', ['test/unit/zz-finalize.test.js']],
    ['integration', ['test/integration/zz-finalize.test.js']],
    ['all', ['test/integration/zz-finalize.test.js', 'test/unit/zz-finalize.test.js']]
  ]) {
    const result = spawnSync(process.execPath, [runner, suite, '--list'], {
      cwd: path.resolve('.'),
      encoding: 'utf8'
    })
    t.is(result.status, 0, result.stderr)
    const files = result.stdout.trim().split('\n')
    t.alike(files.slice(-expectedFinalizers.length), expectedFinalizers)
    const ordinary = files.slice(0, -expectedFinalizers.length)
    t.ok(ordinary.length > 0)
    if (suite !== 'integration') t.ok(files.includes('test/unit/brittle-suite-runner.test.js'))
    t.absent(ordinary.some(file => path.basename(file) === 'zz-finalize.test.js'))
    t.alike(ordinary, [...ordinary].sort(compareNames))
  }
})

function compareNames (left, right) {
  return left < right ? -1 : left > right ? 1 : 0
}