55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
import { describe, expect, test } from 'bun:test'
|
|
|
|
import { initCanvasKit } from '#cli/headless'
|
|
import { SkiaRenderer } from '#core/canvas'
|
|
|
|
import { createAPI } from './helpers'
|
|
|
|
async function createRenderer() {
|
|
const ck = await initCanvasKit()
|
|
const surface = ck.MakeSurface(200, 200)
|
|
if (!surface) throw new Error('Could not create CanvasKit surface')
|
|
return { renderer: new SkiaRenderer(ck, surface), surface }
|
|
}
|
|
|
|
describe('FigmaAPI renderer-backed flatten', () => {
|
|
test('keeps headless flatten as a compatibility placeholder without geometry', () => {
|
|
const api = createAPI()
|
|
const rect = api.createRectangle()
|
|
rect.resize(50, 40)
|
|
|
|
const vector = api.flatten([rect], api.currentPage)
|
|
const raw = api.graph.getNode(vector.id)
|
|
|
|
expect(raw?.type).toBe('VECTOR')
|
|
expect(raw?.width).toBe(50)
|
|
expect(raw?.height).toBe(40)
|
|
expect(raw?.vectorNetwork).toBeNull()
|
|
expect(api.getNodeById(rect.id)).toBeNull()
|
|
})
|
|
|
|
test('creates vector geometry when a renderer is attached', async () => {
|
|
const api = createAPI()
|
|
const { renderer, surface } = await createRenderer()
|
|
api.setRenderer(renderer)
|
|
const first = api.createRectangle()
|
|
const second = api.createEllipse()
|
|
first.resize(50, 40)
|
|
second.resize(50, 40)
|
|
second.x = 30
|
|
second.y = 10
|
|
|
|
const vector = api.flatten([first, second], api.currentPage)
|
|
const raw = api.graph.getNode(vector.id)
|
|
|
|
expect(raw?.type).toBe('VECTOR')
|
|
expect(raw?.x).toBe(0)
|
|
expect(raw?.y).toBe(0)
|
|
expect(raw?.width).toBe(80)
|
|
expect(raw?.height).toBe(50)
|
|
expect(raw?.vectorNetwork?.vertices.length).toBeGreaterThan(0)
|
|
expect(api.getNodeById(first.id)).toBeNull()
|
|
surface.delete()
|
|
})
|
|
})
|