import { describe, expect, it } from "vitest"; import { createToolcraftEnvelopeValidationContext } from "./performance-envelope-validation-context"; import { getRendererTechniqueErrors } from "./performance-renderer-technique-validation"; import type { ToolcraftEnvelopePerformanceConfig } from "./performance-types"; import { createSchema } from "./performance-workload-envelope-test-fixtures"; describe("renderer technique validation context", () => { it("appends GPU ownership errors from the already parsed pipeline context", () => { const config = { rendererPipeline: { interactionInvalidation: [], passes: [], }, rendererStrategy: "webgpu", rendererTechnique: { exportRenderer: "none", fidelityRisks: ["Device precision can differ."], performanceRisks: ["Rendering can exceed the frame budget."], previewRenderer: "webgpu", productRepresentation: "pixel", rendererStrategy: "webgpu", sourceRepresentation: "procedural-data", whyNotAlternativeStrategies: ["The renderer uses WebGPU shaders."], }, scenarios: [], usesCustomRenderer: true, workloadEnvelope: { dimensions: [] }, } as ToolcraftEnvelopePerformanceConfig; const context = createToolcraftEnvelopeValidationContext(createSchema(), config); expect(getRendererTechniqueErrors(context)).toContain( "GPU renderer strategies must declare rendererTechnique.gpu.", ); }); it("preserves the general renderer-technique checks", () => { const config = { rendererStrategy: "canvas-2d", rendererTechnique: { exportRenderer: "canvas-2d", fidelityRisks: [], performanceRisks: [], previewRenderer: "canvas-2d", productRepresentation: "pixel", rendererStrategy: "svg", sourceRepresentation: "procedural-data", whyNotAlternativeStrategies: [], }, scenarios: [], usesCustomRenderer: true, workloadEnvelope: { dimensions: [] }, } as ToolcraftEnvelopePerformanceConfig; const context = createToolcraftEnvelopeValidationContext(createSchema(), config); expect(getRendererTechniqueErrors(context)).toEqual( expect.arrayContaining([ 'rendererTechnique.rendererStrategy "svg" must match rendererStrategy "canvas-2d".', "Custom renderer technique must explain why alternative renderer strategies were rejected.", "Custom renderer technique must list fidelity risks.", "Custom renderer technique must list performance risks.", ]), ); }); });