[Pkg-javascript-commits] [node-tap] 94/186: unit test for save file and dir walking
Bastien Roucariès
rouca at moszumanska.debian.org
Fri Dec 1 16:40:48 UTC 2017
This is an automated email from the git hooks/post-receive script.
rouca pushed a commit to branch master
in repository node-tap.
commit 7a9b618e4d151c7b2340a392c989182b7010113f
Author: isaacs <i at izs.me>
Date: Fri Nov 17 09:57:47 2017 -0800
unit test for save file and dir walking
---
bin/run.js | 66 ++++----
package.json | 1 +
tap-snapshots/test-run.js-TAP.test.js | 305 ++++++++++++++++++++++++++++++++++
test/clean-stacks.js | 4 +
test/run.js | 211 +++++++++++++++++++++--
5 files changed, 542 insertions(+), 45 deletions(-)
diff --git a/bin/run.js b/bin/run.js
index fa35509..a1bacb1 100755
--- a/bin/run.js
+++ b/bin/run.js
@@ -25,10 +25,13 @@ const coverageServiceTest = process.env.COVERAGE_SERVICE_TEST === 'true'
/* istanbul ignore next */
if (process.env._TAP_COVERAGE_ === '1')
global.__coverage__ = global.__coverage__ || {}
+else if (process.env._TAP_COVERAGE_ === '0') {
+ global.__coverage__ = null
+ Object.keys(process.env).filter(k => /NYC/.test(k)).forEach(k =>
+ process.env[k] = '')
+}
-// console.error(process.argv.join(' '))
-// console.error('CST=%j', process.env.COVERAGE_SERVICE_TEST)
-// console.error('CRT=%j', process.env.COVERALLS_REPO_TOKEN)
+/* istanbul ignore next */
if (coverageServiceTest)
console.log('COVERAGE_SERVICE_TEST')
@@ -46,7 +49,6 @@ const coverageServices = [
}
]
-
const main = _ => {
const args = process.argv.slice(2)
@@ -75,6 +77,7 @@ const main = _ => {
return
process.stdout.on('error', er => {
+ /* istanbul ignore else */
if (er.code === 'EPIPE')
process.exit()
else
@@ -83,6 +86,8 @@ const main = _ => {
options.files = globFiles(options.files)
+ // this is only testable by escaping from the covered environment
+ /* istanbul ignore next */
if ((options.coverageReport || options.checkCoverage) &&
options.files.length === 0)
return runCoverageReport(options)
@@ -102,10 +107,10 @@ const main = _ => {
// By definition, the next block cannot be covered, because
// they are only relevant when coverage is turned off.
-
- /* istanbul ignore if */
- if (options.coverage && !global.__coverage__)
+ /* istanbul ignore next */
+ if (options.coverage && !global.__coverage__) {
return respawnWithCoverage(options)
+ }
setupTapEnv(options)
runTests(options)
@@ -420,7 +425,6 @@ const parseArgs = (args, options) => {
// it only runs when we DON'T have coverage enabled, to enable it.
/* istanbul ignore next */
const respawnWithCoverage = options => {
- // console.error('respawn with coverage')
// Re-spawn with coverage
const args = [nycBin].concat(
'--silent',
@@ -437,11 +441,10 @@ const respawnWithCoverage = options => {
runCoverageReport(options, code, signal))
}
+/* istanbul ignore next */
const pipeToCoverageServices = (options, child) => {
- // console.error('pipe to services')
let piped = false
for (let i = 0; i < coverageServices.length; i++) {
- // console.error('pipe to service?', coverageServices[i].env)
if (process.env[coverageServices[i].env]) {
pipeToCoverageService(coverageServices[i], options, child)
piped = true
@@ -452,12 +455,11 @@ const pipeToCoverageServices = (options, child) => {
throw new Error('unknown service, internal error')
}
+/* istanbul ignore next */
const pipeToCoverageService = (service, options, child) => {
- // console.error('pipe to service yes', service.env)
let bin = service.bin
if (coverageServiceTest) {
- // console.error('use fakey test bin')
// test scaffolding.
// don't actually send stuff to the service
bin = require.resolve('../test/fixtures/cat.js')
@@ -476,6 +478,7 @@ const pipeToCoverageService = (service, options, child) => {
: console.log('Successfully piped to ' + service.name))
}
+/* istanbul ignore next */
const runCoverageReport = (options, code, signal) => {
if (options.checkCoverage)
runCoverageCheck(options, code, signal)
@@ -483,6 +486,7 @@ const runCoverageReport = (options, code, signal) => {
runCoverageReportOnly(options, code, signal)
}
+/* istanbul ignore next */
const runCoverageReportOnly = (options, code, signal) => {
const close = (s, c) => {
if (signal || s) {
@@ -503,12 +507,10 @@ const runCoverageReportOnly = (options, code, signal) => {
}
const args = [nycBin, 'report', '--reporter', options.coverageReport]
- // console.error('run coverage report', args)
let child
// automatically hook into coveralls
if (options.coverageReport === 'text-lcov' && options.pipeToService) {
- // console.error('pipeToService')
child = spawn(node, args, { stdio: [ 0, 'pipe', 2 ] })
pipeToCoverageServices(options, child)
} else {
@@ -525,6 +527,7 @@ const runCoverageReportOnly = (options, code, signal) => {
}
}
+/* istanbul ignore next */
const coverageCheckArgs = options => {
const args = []
if (options.branches)
@@ -539,6 +542,7 @@ const coverageCheckArgs = options => {
return args
}
+/* istanbul ignore next */
const runCoverageCheck = (options, code, signal) => {
const args = [nycBin, 'check-coverage'].concat(coverageCheckArgs(options))
@@ -589,20 +593,8 @@ const setupTapEnv = options => {
process.env.TAP_ONLY = '1'
}
-const globFiles = files => {
- return files.reduce((acc, f) => {
- if (f === '-') {
- acc.push(f)
- return acc
- }
-
- // glob claims patterns MUST not include any '\'s
- if (!/\\/.test(f))
- f = glob.sync(f) || f
-
- return acc.concat(f)
- }, [])
-}
+const globFiles = files => files.reduce((acc, f) =>
+ acc.concat(f === '-' ? f : glob.sync(f, { nonull: true })), [])
const makeReporter = options =>
new (require('tap-mocha-reporter'))(options.reporter)
@@ -670,16 +662,26 @@ const saveFails = (options, tap) => {
tap.on('end', save)
}
-const filterFiles = (files, saved, parallelOk) => {
- return files.filter(file => {
+const filterFiles = (files, saved, parallelOk) =>
+ files.filter(file => {
if (path.basename(file) === 'tap-parallel-ok')
parallelOk[path.resolve(path.dirname(file))] = true
else if (path.basename(file) === 'tap-parallel-not-ok')
parallelOk[path.resolve(path.dirname(file))] = false
else
- return saved === null || saved.indexOf(file) !== -1
+ return saved === null || onSavedList(saved, file)
})
-}
+
+// check if the file is on the list, or if it's a parent dir of
+// any items that are on the list.
+const onSavedList = (saved, file) =>
+ !saved || !saved.length ? true
+ : file === path.dirname(file) ? false
+ : saved.indexOf(file) !== -1 ? true
+ : onSavedList(saved.filter(
+ f => f !== path.dirname(f)).map(
+ f => path.dirname(f)
+ ), file)
const isParallelOk = (parallelOk, file) => {
const dir = path.resolve(path.dirname(file))
diff --git a/package.json b/package.json
index 4b6567f..8040a70 100644
--- a/package.json
+++ b/package.json
@@ -54,6 +54,7 @@
"regen-fixtures": "node scripts/generate-test-test.js test/test/*.js",
"snap": "TAP_SNAPSHOT=1 node bin/run.js test/*.js",
"test": "node bin/run.js test/*.js --100 -J",
+ "unit": "bash scripts/unit.sh",
"test-legacy": "node bin/run.js test-legacy/*.* --coverage -t3600 -sfails",
"smoke": "node bin/run.js --node-arg=test-legacy/test.js test-legacy/test/*.js -j2",
"posttest": "standard lib test",
diff --git a/tap-snapshots/test-run.js-TAP.test.js b/tap-snapshots/test-run.js-TAP.test.js
index 418bab2..78e09a4 100644
--- a/tap-snapshots/test-run.js-TAP.test.js
+++ b/tap-snapshots/test-run.js-TAP.test.js
@@ -33,3 +33,308 @@ ok 2 - /dev/stdin # {time} {
# {time}
`
+
+exports[`run.js TAP coverage --100 pass > 100 pass 1`] = `
+TAP version 13
+# Subtest: 1.test.js
+ ok 1 - should be equal
+ 1..1
+ # {time}
+ok 1 - 1.test.js # {time}
+
+# Subtest: 2.test.js
+ ok 1 - should be equal
+ 1..1
+ # {time}
+ok 2 - 2.test.js # {time}
+
+# Subtest: 3.test.js
+ ok 1 - should be equal
+ 1..1
+ # {time}
+ok 3 - 3.test.js # {time}
+
+1..3
+# {time}
+----------|----------|----------|----------|----------|----------------|
+File | % Stmts | % Branch | % Funcs | % Lines |Uncovered Lines |
+----------|----------|----------|----------|----------|----------------|
+All files | 100 | 100 | 100 | 100 | |
+ ok.js | 100 | 100 | 100 | 100 | |
+----------|----------|----------|----------|----------|----------------|
+
+`
+
+exports[`run.js TAP coverage --100 fail > 100 fail 1`] = `
+TAP version 13
+# Subtest: 1.test.js
+ ok 1 - should be equal
+ 1..1
+ # {time}
+ok 1 - 1.test.js # {time}
+
+# Subtest: 2.test.js
+ ok 1 - should be equal
+ 1..1
+ # {time}
+ok 2 - 2.test.js # {time}
+
+1..2
+# {time}
+----------|----------|----------|----------|----------|----------------|
+File | % Stmts | % Branch | % Funcs | % Lines |Uncovered Lines |
+----------|----------|----------|----------|----------|----------------|
+All files | 75 | 75 | 100 | 75 | |
+ ok.js | 75 | 75 | 100 | 75 | 6 |
+----------|----------|----------|----------|----------|----------------|
+
+`
+
+exports[`run.js TAP coverage report only > lcov output 1`] = `
+TN:
+SF:{CWD}/ok.js
+FN:2,(anonymous_0)
+FNF:1
+FNH:1
+FNDA:2,(anonymous_0)
+DA:2,2
+DA:3,2
+DA:4,2
+DA:6,0
+LF:4
+LH:3
+BRDA:3,0,0,2
+BRDA:3,0,1,0
+BRDA:4,1,0,2
+BRDA:4,1,1,1
+BRF:4
+BRH:3
+end_of_record
+
+`
+
+exports[`run.js TAP coverage report with checks > lcov output and 100 check 1`] = `
+TN:
+SF:{CWD}/ok.js
+FN:2,(anonymous_0)
+FNF:1
+FNH:1
+FNDA:2,(anonymous_0)
+DA:2,2
+DA:3,2
+DA:4,2
+DA:6,0
+LF:4
+LH:3
+BRDA:3,0,0,2
+BRDA:3,0,1,0
+BRDA:4,1,0,2
+BRDA:4,1,1,1
+BRF:4
+BRH:3
+end_of_record
+
+`
+
+exports[`run.js TAP coverage pipe to service > piped to coverage service cat 1`] = `
+COVERAGE_SERVICE_TEST
+TN:
+SF:{CWD}/ok.js
+FN:2,(anonymous_0)
+FNF:1
+FNH:1
+FNDA:2,(anonymous_0)
+DA:2,2
+DA:3,2
+DA:4,2
+DA:6,0
+LF:4
+LH:3
+BRDA:3,0,0,2
+BRDA:3,0,1,0
+BRDA:4,1,0,2
+BRDA:4,1,1,1
+BRF:4
+BRH:3
+end_of_record
+
+`
+
+exports[`run.js TAP save file with bailout, should save all untested > stdout 1`] = `
+TAP version 13
+# Subtest: a/b/2.js
+ ok 1 - 2
+ 1..1
+ # {time}
+ok 1 - a/b/2.js # {time}
+
+# Subtest: a/b/f1.js
+ not ok 1 - a/b
+ ---
+ at:
+ line: #
+ column: #
+ file: a/b/f1.js
+ source: |
+ require("{TAPDIR}/").fail('a/b')
+ ...
+
+ Bail out! # a/b
+Bail out! # a/b
+
+`
+
+exports[`run.js TAP save file with bailout, should save all untested > savefile 1`] = `
+a
+x
+a/b
+x/y
+a/b/f1.js
+a/b/f2.js
+x/y/1.js
+
+`
+
+exports[`run.js TAP save file without bailout, run untested, save failures > stdout 1`] = `
+TAP version 13
+# Subtest: a/b/2.js
+ ok 1 - 2
+ 1..1
+ # {time}
+ok 1 - a/b/2.js # {time}
+
+# Subtest: a/b/f1.js
+ not ok 1 - a/b
+ ---
+ at:
+ line: #
+ column: #
+ file: a/b/f1.js
+ source: |
+ require("{TAPDIR}/").fail('a/b')
+ ...
+
+ 1..1
+ # failed 1 test
+ # {time}
+not ok 2 - a/b/f1.js # {time}
+ ---
+ args:
+ - a/b/f1.js
+ command: /usr/local/bin/node
+ cwd: {CWD}
+ exitCode: 1
+ file: a/b/f1.js
+ stdio:
+ - 0
+ - pipe
+ - 2 timeout: {default}
+ ...
+
+# Subtest: a/b/f2.js
+ not ok 1 - c/d
+ ---
+ at:
+ line: #
+ column: #
+ file: a/b/f2.js
+ source: |
+ require("{TAPDIR}/").fail('c/d')
+ ...
+
+ 1..1
+ # failed 1 test
+ # {time}
+not ok 3 - a/b/f2.js # {time}
+ ---
+ args:
+ - a/b/f2.js
+ command: /usr/local/bin/node
+ cwd: {CWD}
+ exitCode: 1
+ file: a/b/f2.js
+ stdio:
+ - 0
+ - pipe
+ - 2 timeout: {default}
+ ...
+
+# Subtest: x/y/1.js
+ ok 1 - one
+ 1..1
+ # {time}
+ok 4 - x/y/1.js # {time}
+
+1..4
+# failed 2 of 4 tests
+# {time}
+
+`
+
+exports[`run.js TAP save file without bailout, run untested, save failures > savefile 1`] = `
+a/b/f1.js
+a/b/f2.js
+
+`
+
+exports[`run.js TAP save file pass, empty save file > stdout 1`] = `
+TAP version 13
+# Subtest: a/b/2.js
+ ok 1 - 2
+ 1..1
+ # {time}
+ok 1 - a/b/2.js # {time}
+
+# Subtest: a/b/f1.js
+ ok 1 - fine now
+ 1..1
+ # {time}
+ok 2 - a/b/f1.js # {time}
+
+# Subtest: a/b/f2.js
+ ok 1 - fine now too
+ 1..1
+ # {time}
+ok 3 - a/b/f2.js # {time}
+
+# Subtest: x/y/1.js
+ ok 1 - one
+ 1..1
+ # {time}
+ok 4 - x/y/1.js # {time}
+
+1..4
+# {time}
+
+`
+
+exports[`run.js TAP save file empty save file, run all tests > stdout 1`] = `
+TAP version 13
+# Subtest: a/b/2.js
+ ok 1 - 2
+ 1..1
+ # {time}
+ok 1 - a/b/2.js # {time}
+
+# Subtest: a/b/f1.js
+ ok 1 - fine now
+ 1..1
+ # {time}
+ok 2 - a/b/f1.js # {time}
+
+# Subtest: a/b/f2.js
+ ok 1 - fine now too
+ 1..1
+ # {time}
+ok 3 - a/b/f2.js # {time}
+
+# Subtest: x/y/1.js
+ ok 1 - one
+ 1..1
+ # {time}
+ok 4 - x/y/1.js # {time}
+
+1..4
+# {time}
+
+`
diff --git a/test/clean-stacks.js b/test/clean-stacks.js
index e09eb59..64d7b71 100644
--- a/test/clean-stacks.js
+++ b/test/clean-stacks.js
@@ -45,8 +45,12 @@ module.exports = out => out
.replace(/\n( +)method: .*(\n\1 .*)*\n/g, '\n')
.replace(/\n( +)type: .*\n/g, '\n')
+ // timeout values are different when coverage is present
+ .replace(/\n( *)timeout: (30000|240000)(\n|$)/g, '$1timeout: {default}$3')
+
// fix references to cwd
.split(process.cwd()).join('{CWD}')
+ .split(require('path').resolve(__dirname, '..')).join('{TAPDIR}')
// nothing to see here
if (module === require.main)
diff --git a/test/run.js b/test/run.js
index bae7abc..1e30848 100644
--- a/test/run.js
+++ b/test/run.js
@@ -3,7 +3,8 @@ const fs = require('fs')
const mkdirp = require('mkdirp')
const rimraf = require('rimraf')
const path = require('path')
-const execFile = require('child_process').execFile
+const cp = require('child_process')
+const execFile = cp.execFile
const node = process.execPath
const bin = require.resolve('../bin/run.js')
const tap = JSON.stringify(path.join(__dirname, '..') + '/')
@@ -11,6 +12,13 @@ const t = require('../')
const dir = path.join(__dirname, 'cli-tests')
mkdirp.sync(dir)
+t.teardown(() => rimraf.sync(dir))
+
+// set this forcibly so it doesn't interfere with other tests.
+delete process.env.TAP_DIAG
+delete process.env.TAP_BAIL
+delete process.env.TAP_COLORS
+delete process.env.TAP_TIMEOUT
const clean = require('./clean-stacks.js')
@@ -26,8 +34,12 @@ const run = (args, options, cb) => {
}
const tmpfile = (t, filename, content) => {
+ const parts = filename.split('/')
+ // make any necessary dirs
+ if (parts.length > 1)
+ mkdirp.sync(path.join(dir, parts.slice(0, -1).join('/')))
+ t.teardown(() => rimraf.sync(path.join(dir, parts[0])))
filename = path.join(dir, filename)
- t.teardown(() => rimraf.sync(filename))
fs.writeFileSync(filename, content)
return path.relative('', filename)
}
@@ -77,7 +89,7 @@ t.test('usage and other basics', t => {
t.test('basic', t => {
const ok = tmpfile(t, 'ok.js', `require(${tap}).pass('this is fine')`)
- run(['-Cb', '--', ok], null, (err, stdout, stderr) => {
+ run(['-Cbt0', '--', ok], null, (err, stdout, stderr) => {
t.matchSnapshot(clean(stdout), 'ok.js output')
t.end()
})
@@ -229,7 +241,7 @@ t.test('stdin', t => {
const tapcode = 'TAP version 13\n1..1\nok\n'
t.test('with output file', t => {
- const c = run(['-', '-C', '-Rspec', '-ofoo.txt', '--cov'], { env: {
+ const c = run(['-', '-c', '-Rspec', '-ofoo.txt', '--cov'], { env: {
_TAP_IS_TTY: '1',
TAP: '0'
}}, (er, o, e) => {
@@ -244,12 +256,12 @@ t.test('stdin', t => {
})
t.test('no output file', t => {
- const c = run(['-', '--only', '-gx', '-iC', '-Rclassic'], { env: {
+ const c = run(['--only', '-gx', '-iC', '-Rclassic'], { env: {
_TAP_IS_TTY: '1',
TAP: '0'
}}, (er, o, e) => {
t.equal(er, null)
- t.equal(e, '')
+ t.equal(e, 'Reading TAP data from stdin (use "-" argument to suppress)\n')
t.match(o, /total \.+ 1\/1/)
t.throws(() => fs.statSync('foo.txt'))
t.end()
@@ -279,6 +291,21 @@ t.test('stdin', t => {
t.end()
})
+t.test('epipe on stdout', t => {
+ const c = run(['-', '-C'], { stdio: 'pipe' }, (er, o, e) => {
+ t.equal(er, null)
+ t.equal(o, 'TAP version 13\n1..9\nok\n')
+ t.equal(e, '')
+ t.end()
+ })
+ c.stdin.write('TAP version 13\n1..9\nok\n')
+ c.stdout.on('data', chunk => {
+ c.stdout.destroy()
+ c.stdin.write('ok\nok\nok\nok\n')
+ c.stdin.write('ok\nok\nok\nok\n')
+ })
+})
+
t.test('unknown arg throws', t => {
run(['--blerg'], null, (er, o, e) => {
t.match(er, { code: 1 })
@@ -287,10 +314,168 @@ t.test('unknown arg throws', t => {
})
})
-t.test('save file')
-t.test('coverage service piping')
-t.test('coverage report only')
-t.test('color, -c -C TAP_COLOR=1')
-t.test('timeouts incl --no-timeout')
-t.test('epipe')
-t.test('parallel sigil files')
+t.test('coverage', t => {
+ const cwd = process.cwd()
+ process.chdir(dir)
+ const ok = tmpfile(t, 'ok.js', `'use strict'
+ module.exports = (x, y) => {
+ if (x)
+ return y || x
+ else
+ return y
+ }`)
+
+ tmpfile(t, 'package.json', '{"name":"just a placeholder"}')
+
+ const t1 = tmpfile(t, '1.test.js', `'use strict'
+ const ok = require('./ok.js')
+ require(${tap}).equal(ok(1), 1)`)
+
+ const t2 = tmpfile(t, '2.test.js', `'use strict'
+ const ok = require('./ok.js')
+ require(${tap}).equal(ok(1, 2), 2)`)
+
+ const t3 = tmpfile(t, '3.test.js', `'use strict'
+ const ok = require('./ok.js')
+ require(${tap}).equal(ok(0, 3), 3)`)
+
+ // escape from new york
+ const esc = tmpfile(t, 'runtest.sh',
+`"${node}" "${bin}" "\$@" --cov --nyc-arg=--include="${ok}"
+`)
+
+ const escape = (args, options, cb) => {
+ options = options || {}
+ const env = Object.keys(process.env).filter(
+ k => !/TAP|NYC|SW_ORIG/.test(k)
+ ).reduce((env, k) => {
+ if (!env.hasOwnProperty(k))
+ env[k] = process.env[k]
+ return env
+ }, options.env || {})
+ options.env = env
+ return execFile('bash', [esc].concat(args), options, cb)
+ }
+
+ t.test('--100', t => {
+ t.test('pass', t => {
+ escape([t1, t2, t3, '--100'], null, (er, o, e) => {
+ t.equal(er, null)
+ t.matchSnapshot(clean(o), '100 pass')
+ t.end()
+ })
+ })
+ t.test('fail', t => {
+ escape([t1, t2, '--100'], null, (er, o, e) => {
+ t.match(er, { code: 1 })
+ t.matchSnapshot(clean(o), '100 fail')
+ t.end()
+ })
+ })
+ t.end()
+ })
+
+ t.test('report only', t => {
+ escape(['--coverage-report=text-lcov'], null, (er, o, e) => {
+ t.equal(er, null)
+ t.matchSnapshot(clean(o), 'lcov output')
+ t.end()
+ })
+ })
+
+ t.test('report with checks', t => {
+ escape(['--100', '--coverage-report=text-lcov'], null, (er, o, e) => {
+ t.match(er, { code: 1 })
+ t.matchSnapshot(clean(o), 'lcov output and 100 check')
+ t.end()
+ })
+ })
+
+ t.test('pipe to service', t => {
+ escape(['--coverage-report=text-lcov'], { env: {
+ COVERAGE_SERVICE_TEST: 'true'
+ }}, (er, o, e) => {
+ t.equal(er, null)
+ t.matchSnapshot(clean(o), 'piped to coverage service cat')
+ t.end()
+ })
+ })
+
+ t.end()
+})
+
+t.test('save file', t => {
+ const xy1 = tmpfile(t, 'x/y/1.js', `'use strict'
+ const t = require(${tap})
+ t.pass('one')
+ `)
+
+ const ab2 = tmpfile(t, 'a/b/2.js', `'use strict'
+ const t = require(${tap})
+ t.pass('2')
+ `)
+
+ const abf1 = tmpfile(t, 'a/b/f1.js', `'use strict'
+ require(${tap}).fail('a/b')
+ `)
+
+ const abf2 = tmpfile(t, 'a/b/f2.js', `'use strict'
+ require(${tap}).fail('c/d')
+ `)
+
+ const savefile = path.resolve(tmpfile(t, 'fails.txt', ''))
+
+ t.test('with bailout, should save all untested', t => {
+ run(['a', 'x', '-s', savefile, '-b'], { cwd: dir }, (er, o, e) => {
+ t.match(er, { code: 1 })
+ t.matchSnapshot(clean(o), 'stdout')
+ t.equal(e, '')
+ t.matchSnapshot(clean(fs.readFileSync(savefile, 'utf8')), 'savefile')
+ t.end()
+ })
+ })
+
+ t.test('without bailout, run untested, save failures', t => {
+ run(['a', 'x', '-s', savefile], { cwd: dir }, (er, o, e) => {
+ t.match(er, { code: 1 })
+ t.matchSnapshot(clean(o), 'stdout')
+ t.equal(e, '')
+ t.matchSnapshot(clean(fs.readFileSync(savefile, 'utf8')), 'savefile')
+ t.end()
+ })
+ })
+
+ t.test('make fails pass', t => {
+ fs.writeFileSync(abf1, `'use strict'
+ require(${tap}).pass('fine now')
+ `)
+ fs.writeFileSync(abf2, `'use strict'
+ require(${tap}).pass('fine now too')
+ `)
+ t.end()
+ })
+
+ t.test('pass, empty save file', t => {
+ run(['a', 'x', '-s', savefile], { cwd: dir }, (er, o, e) => {
+ t.equal(er, null)
+ t.matchSnapshot(clean(o), 'stdout')
+ t.equal(e, '')
+ t.throws(() => fs.statSync(savefile), 'save file is gone')
+ t.end()
+ })
+ })
+
+ t.test('empty save file, run all tests', t => {
+ run(['a', 'x', '-s', savefile], { cwd: dir }, (er, o, e) => {
+ t.equal(er, null)
+ t.matchSnapshot(clean(o), 'stdout')
+ t.equal(e, '')
+ t.throws(() => fs.statSync(savefile), 'save file is gone')
+ t.end()
+ })
+ })
+
+ t.end()
+})
+
+t.test('parallel')
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-tap.git
More information about the Pkg-javascript-commits
mailing list