diff --git a/compiler/forget/packages/sprout/src/runner-evaluator.ts b/compiler/forget/packages/sprout/src/runner-evaluator.ts index 4dd01434d7..d435eb36d5 100644 --- a/compiler/forget/packages/sprout/src/runner-evaluator.ts +++ b/compiler/forget/packages/sprout/src/runner-evaluator.ts @@ -29,10 +29,22 @@ const PLACEHOLDER_VALUE = Symbol(); const seen = new Map(); return JSON.stringify(result, (_key, val) => { - if (typeof val === "object") { + if (typeof val === "function") { + return `[[ function params=${val.length} ]]`; + } else if (typeof val === "object") { let id = seen.get(val); if (id != null) { return `[[ cyclic ref *${id} ]]`; + } else if (val instanceof Map) { + return { + kind: "Map", + value: Array.from(val.entries()), // or with spread: value: [...value] + }; + } else if (val instanceof Set) { + return { + kind: "Set", + value: Array.from(val.values()), // or with spread: value: [...value] + }; } seen.set(val, seen.size); } @@ -56,7 +68,7 @@ export function doEval(source: string): EvaluatorResult { let exports = { FIXTURE_ENTRYPOINT: { fn: globalThis.placeholderFn, - args: [], + params: [], isComponent: false, }, }; @@ -64,14 +76,18 @@ export function doEval(source: string): EvaluatorResult { try { ${source} reachedInvoke = true; - - if (exports.FIXTURE_ENTRYPOINT.isComponent) { + if (exports.FIXTURE_ENTRYPOINT == null || exports.FIXTURE_ENTRYPOINT.fn === globalThis.placeholderFn) { + return { + kind: "UnexpectedError", + value: 'FIXTURE_ENTRYPOINT not exported!', + }; + } else if (exports.FIXTURE_ENTRYPOINT.isComponent) { // try to run fixture as a react component const result = render( React.createElement( exports.FIXTURE_ENTRYPOINT.fn, exports.FIXTURE_ENTRYPOINT.params) - ).asFragment().textContent; + ).container.innerHTML; return { kind: "ok", @@ -83,7 +99,7 @@ export function doEval(source: string): EvaluatorResult { WrapperTestComponent, exports.FIXTURE_ENTRYPOINT ) - ).asFragment().textContent; + ).container.innerHTML; return { kind: "ok", @@ -96,11 +112,6 @@ export function doEval(source: string): EvaluatorResult { kind: "UnexpectedError", value: e.toString(), }; - } else if (e === PLACEHOLDER_VALUE) { - return { - kind: "UnexpectedError", - value: 'FIXTURE_ENTRYPOINT not defined!', - }; } else { return { kind: "exception", diff --git a/compiler/forget/packages/sprout/src/runner.ts b/compiler/forget/packages/sprout/src/runner.ts index e36c3d3530..f456c2a840 100644 --- a/compiler/forget/packages/sprout/src/runner.ts +++ b/compiler/forget/packages/sprout/src/runner.ts @@ -37,6 +37,7 @@ process.on("SIGTERM", function () { type RunnerOptions = { filter: boolean; sync: boolean; + verbose: boolean; }; const opts: RunnerOptions = yargs @@ -52,6 +53,9 @@ const opts: RunnerOptions = yargs `Evaluate fixtures in filter mode ("${FILTER_FILENAME}")\n` ) .default("filter", false) + .boolean("verbose") + .describe("verbose", "Print results of passing fixtures.") + .default("verbose", false) .help("help") .strict() .parseSync(hideBin(process.argv)); @@ -64,7 +68,8 @@ function logsEqual(a: Array, b: Array) { } function reportResults( - results: Array<[string, RunnerWorker.TestResult]> + results: Array<[string, RunnerWorker.TestResult]>, + verbose: boolean ): boolean { const failures: Array<[string, RunnerWorker.TestResult]> = []; @@ -92,6 +97,15 @@ function reportResults( console.log( chalk.green.inverse.bold(" PASS ") + " " + chalk.dim(fixtureName) ); + if (verbose) { + console.log( + ` ${forgetResult.kind} ${forgetResult.value} ${ + forgetResult.logs.length > 0 + ? JSON.stringify(forgetResult.logs, undefined, 2) + : "" + }` + ); + } } } @@ -139,7 +153,6 @@ function reportResults( 2 )}\nFound: ${JSON.stringify(nonForgetResult, undefined, 2)}` ); - failures.push([fixtureName, result]); } } } @@ -196,7 +209,7 @@ export async function main(opts: RunnerOptions): Promise { } } - const isSuccess = reportResults(results); + const isSuccess = reportResults(results, opts.verbose); process.exit(isSuccess ? 0 : 1); }