openpencil/tests/engine/figma/api/images.test.ts
2026-05-24 12:15:29 +03:00

49 lines
1.4 KiB
TypeScript

import { describe, expect, test } from 'bun:test'
import { FigmaAPI, SceneGraph } from '@open-pencil/core'
const PNG_MAGIC = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])
const JPEG_MAGIC = new Uint8Array([0xff, 0xd8, 0xff, 0xe0])
function setup() {
const graph = new SceneGraph()
const figma = new FigmaAPI(graph)
return { graph, figma }
}
describe('FigmaAPI.createImage', () => {
test('returns deterministic hash for same bytes', () => {
const { figma } = setup()
const a = figma.createImage(PNG_MAGIC)
const b = figma.createImage(PNG_MAGIC)
expect(a.hash).toBe(b.hash)
})
test('different bytes produce different hashes', () => {
const { figma } = setup()
const a = figma.createImage(PNG_MAGIC)
const b = figma.createImage(JPEG_MAGIC)
expect(a.hash).not.toBe(b.hash)
})
test('stores bytes in graph.images', () => {
const { graph, figma } = setup()
const { hash } = figma.createImage(PNG_MAGIC)
expect(graph.images.get(hash)).toEqual(PNG_MAGIC)
})
test('hash is a 40-char hex string', () => {
const { figma } = setup()
const { hash } = figma.createImage(PNG_MAGIC)
expect(hash).toHaveLength(40)
expect(hash).toMatch(/^[0-9a-f]{40}$/)
})
test('empty data produces a valid hash', () => {
const { figma } = setup()
const { hash } = figma.createImage(new Uint8Array([]))
expect(hash).toHaveLength(40)
expect(hash).toMatch(/^[0-9a-f]{40}$/)
})
})