mirror of
https://github.com/nodejs/node.git
synced 2024-11-28 14:33:11 +01:00
5338533373
PR-URL: https://github.com/nodejs/node/pull/54619 Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
79 lines
2.0 KiB
JavaScript
79 lines
2.0 KiB
JavaScript
const t = require('tap')
|
|
const { resolve, join } = require('node:path')
|
|
const fs = require('graceful-fs')
|
|
const { log, time } = require('proc-log')
|
|
const tmock = require('../../fixtures/tmock')
|
|
|
|
const mockTimers = (t) => {
|
|
const logs = log.LEVELS.reduce((acc, l) => {
|
|
acc[l] = []
|
|
return acc
|
|
}, {})
|
|
const logHandler = (level, ...args) => {
|
|
logs[level].push(args.join(' '))
|
|
}
|
|
process.on('log', logHandler)
|
|
const Timers = tmock(t, '{LIB}/utils/timers')
|
|
const timers = new Timers()
|
|
t.teardown(() => {
|
|
timers.off()
|
|
process.off('log', logHandler)
|
|
})
|
|
return { timers, logs }
|
|
}
|
|
|
|
t.test('logs timing events', async (t) => {
|
|
const { timers, logs } = mockTimers(t)
|
|
time.start('foo')
|
|
time.start('bar')
|
|
time.end('bar')
|
|
timers.off()
|
|
time.end('foo')
|
|
t.equal(logs.timing.length, 1)
|
|
t.match(logs.timing[0], /^bar Completed in [0-9]+m?s/)
|
|
})
|
|
|
|
t.test('finish unstarted timer', async (t) => {
|
|
const { logs } = mockTimers(t)
|
|
time.end('foo')
|
|
t.match(logs.silly, ["timing Tried to end timer that doesn't exist: foo"])
|
|
})
|
|
|
|
t.test('writes file', async (t) => {
|
|
const { timers } = mockTimers(t)
|
|
const dir = t.testdir()
|
|
time.start('foo')
|
|
time.end('foo')
|
|
time.start('ohno')
|
|
timers.load({ timing: true, path: resolve(dir, `TIMING_FILE-`) })
|
|
timers.finish({ some: 'data' })
|
|
const data = JSON.parse(fs.readFileSync(resolve(dir, 'TIMING_FILE-timing.json')))
|
|
t.match(data, {
|
|
metadata: { some: 'data' },
|
|
timers: { foo: Number, npm: Number },
|
|
unfinishedTimers: {
|
|
ohno: [Number, Number],
|
|
},
|
|
})
|
|
})
|
|
|
|
t.test('fails to write file', async (t) => {
|
|
const { logs, timers } = mockTimers(t)
|
|
const dir = t.testdir()
|
|
|
|
timers.load({ timing: true, path: join(dir, 'does', 'not', 'exist') })
|
|
timers.finish()
|
|
|
|
t.match(logs.warn, ['timing could not write timing file:'])
|
|
})
|
|
|
|
t.test('no dir and no file', async (t) => {
|
|
const { logs, timers } = mockTimers(t)
|
|
|
|
timers.load()
|
|
timers.finish()
|
|
|
|
t.strictSame(logs.warn, [])
|
|
t.strictSame(logs.silly, [])
|
|
})
|