0
0
mirror of https://github.com/nodejs/node.git synced 2024-11-28 14:33:11 +01:00
nodejs/deps/npm/test/lib/utils/timers.js
npm CLI robot 5338533373
deps: upgrade npm to 10.8.3
PR-URL: https://github.com/nodejs/node/pull/54619
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
2024-09-08 06:09:40 +00:00

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, [])
})