20 lines
735 B
JavaScript
20 lines
735 B
JavaScript
import { readFileSync } from 'node:fs'
|
|
import { fileURLToPath } from 'node:url'
|
|
import { dirname, join } from 'node:path'
|
|
|
|
const here = dirname(fileURLToPath(import.meta.url))
|
|
|
|
/** Load fixtures/<name>.json as { function, cases: [{ name, args, expected }] }. */
|
|
export const loadFixture = (name) =>
|
|
JSON.parse(readFileSync(join(here, '..', '..', 'fixtures', `${name}.json`), 'utf8'))
|
|
|
|
/** Deep-freeze for tests (independent of the student's deepFreeze). Recurses into children even of already-frozen objects. */
|
|
export const freeze = (x, seen = new WeakSet()) => {
|
|
if (x !== null && typeof x === 'object' && !seen.has(x)) {
|
|
seen.add(x)
|
|
Object.freeze(x)
|
|
Object.values(x).forEach((v) => freeze(v, seen))
|
|
}
|
|
return x
|
|
}
|