testWatchResultsCachedByHash
Watch results are cached by hash; --fresh re-runs; a changed dependency re-evaluates. One whose code reaches outside (randomness, the clock) isn't cached: it's evaluated every time.
import { setUp } from "#codebase/tcmts/cli/test/e2e/watch"; import assert from "node:assert/strict"; export const testWatchResultsCachedByHash = () => { const { tcm, scratch } = setUp(); scratch( "scratch.ts", `export const double = (x: number) => x * 2;\n\ndouble(21);\nMath.random();\n`, ); const first = tcm("check"); assert.match(first, /double\(21\)\n\s+⧩ 42/); const random = /Math\.random\(\)\n\s+⧩ (\S+)/.exec(first)![1]; const again = tcm("check"); assert.match(again, /double\(21\) \(cached\)\n\s+⧩ 42/); assert.notEqual( /Math\.random\(\)\n\s+⧩ (\S+)/.exec(again)?.[1], random, "evaluated again: its value isn't its hash's", ); assert.match(tcm("check", "--fresh"), /double\(21\)\n\s+⧩ 42/, "--fresh evaluates again"); // the watch's hash covers what it calls: change double and it's evaluated again scratch("scratch.ts", `export const double = (x: number) => x * 3;\n\ndouble(21);\n`); assert.match(tcm("check"), /double\(21\)\n\s+⧩ 63/); }