openpencil/tests/engine/render/canvas/effects/inner-shadow.test.ts
2026-06-30 10:54:32 +03:00

42 lines
1.2 KiB
TypeScript

import { describe, expect, test } from 'bun:test'
import type { Canvas } from 'canvaskit-wasm'
import type { SceneNode } from '@open-pencil/scene-graph'
import { renderEffects } from '#core/canvas/shadows'
import { createMockCanvas, createMockRenderer } from './helpers'
describe('INNER_SHADOW bug proofs', () => {
test('INNER_SHADOW solid mask via ColorFilter on DstOut layer', () => {
const r = createMockRenderer()
const canvas = createMockCanvas()
const node: Partial<SceneNode> = {
type: 'TEXT',
width: 100,
height: 100,
fills: [],
childIds: [],
effects: [
{
type: 'INNER_SHADOW',
visible: true,
color: { r: 0, g: 0, b: 0, a: 1 },
offset: { x: 5, y: 5 },
radius: 0,
spread: 0
}
]
}
renderEffects(r, canvas as Canvas, node as SceneNode, new Float32Array(4), false, 'front')
// PROOF: ColorFilter.MakeBlend(black, SrcIn) on DstOut layer paint
// forces renderText output to solid black without mutating fillPaint.
// The DstOut saveLayer punches the solid mask from the blurred block.
expect(canvas.saveLayer).toHaveBeenCalled()
expect(canvas.drawRect).toHaveBeenCalled()
})
})