import { describe, expect, it } from 'bun:test'
import { renderJSX } from '@open-pencil/core'
import { makeSceneGraph } from '#tests/helpers/scene'
describe('jsx gaps', () => {
it('mask prop sets isMask + maskType', async () => {
const g = makeSceneGraph()
await renderJSX(
g,
``
)
const ellipse = [...g.nodes.values()].find((n) => n.type === 'ELLIPSE')
expect(ellipse?.isMask).toBe(true)
expect(ellipse?.maskType).toBe('ALPHA')
})
it('svg element renders vector paths', async () => {
const g = makeSceneGraph()
await renderJSX(
g,
``
)
const vector = [...g.nodes.values()].find((n) => n.type === 'VECTOR')
expect(vector).toBeTruthy()
expect(vector?.vectorNetwork).toBeTruthy()
})
it('renders open and closed SVG paths as separate stroked vectors', async () => {
const g = makeSceneGraph()
await renderJSX(
g,
``
)
const vectors = [...g.nodes.values()].filter((node) => node.type === 'VECTOR')
expect(vectors).toHaveLength(2)
for (const vector of vectors) {
expect(vector.vectorNetwork?.vertices.length).toBeGreaterThan(0)
expect(vector.strokes.length).toBeGreaterThan(0)
}
})
it('respects none paints on inline SVG paths', async () => {
const g = makeSceneGraph()
await renderJSX(
g,
``
)
const vectors = [...g.nodes.values()].filter((node) => node.type === 'VECTOR')
expect(vectors).toHaveLength(2)
expect(vectors[0].fills).toEqual([])
expect(vectors[0].strokes).toHaveLength(1)
expect(vectors[1].fills).toHaveLength(1)
expect(vectors[1].strokes).toEqual([])
})
it('instance overrides apply child text by name', async () => {
const g = makeSceneGraph()
await renderJSX(
g,
`+0%
`
)
const inst = [...g.nodes.values()].find((n) => n.type === 'INSTANCE')
const label = [...g.nodes.values()].find(
(n) => n.type === 'TEXT' && inst && n.parentId === inst.id
)
expect(label?.text).toBe('+14%')
})
})