49 lines
1.4 KiB
TypeScript
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}$/)
|
|
})
|
|
})
|