75 lines
2.6 KiB
TypeScript
75 lines
2.6 KiB
TypeScript
import { describe, test, expect, beforeAll } from 'bun:test'
|
|
|
|
import { exportFigFile, parseFigFile, initCodec, SceneGraph } from '@open-pencil/core'
|
|
import type { Color } from '@open-pencil/core'
|
|
|
|
import { expectDefined } from '#tests/helpers/assert'
|
|
|
|
beforeAll(async () => {
|
|
await initCodec()
|
|
})
|
|
|
|
describe('COLOR variable alpha handling', () => {
|
|
test('COLOR variable without alpha exports successfully', async () => {
|
|
const graph = new SceneGraph()
|
|
const col = graph.createCollection('Colors')
|
|
// Simulate a COLOR variable value missing the alpha field
|
|
graph.createVariable('brand', 'COLOR', col.id, { r: 0.2, g: 0.4, b: 0.8 } as Color)
|
|
|
|
const exported = await exportFigFile(graph)
|
|
const reimported = await parseFigFile(exported.buffer as ArrayBuffer)
|
|
|
|
const vars = [...reimported.variables.values()]
|
|
const colorVar = expectDefined(
|
|
vars.find((v) => v.name === 'brand'),
|
|
'brand variable'
|
|
)
|
|
expect(colorVar.type).toBe('COLOR')
|
|
const val = Object.values(colorVar.valuesByMode)[0] as Color
|
|
expect(val.r).toBeCloseTo(0.2, 1)
|
|
expect(val.g).toBeCloseTo(0.4, 1)
|
|
expect(val.b).toBeCloseTo(0.8, 1)
|
|
expect(val.a).toBe(1)
|
|
})
|
|
|
|
test('COLOR variable with explicit alpha preserves it', async () => {
|
|
const graph = new SceneGraph()
|
|
const col = graph.createCollection('Colors')
|
|
graph.createVariable('overlay', 'COLOR', col.id, { r: 0, g: 0, b: 0, a: 0.5 })
|
|
|
|
const exported = await exportFigFile(graph)
|
|
const reimported = await parseFigFile(exported.buffer as ArrayBuffer)
|
|
|
|
const vars = [...reimported.variables.values()]
|
|
const colorVar = expectDefined(
|
|
vars.find((v) => v.name === 'overlay'),
|
|
'overlay variable'
|
|
)
|
|
const val = Object.values(colorVar.valuesByMode)[0] as Color
|
|
expect(val.a).toBeCloseTo(0.5, 1)
|
|
})
|
|
|
|
test('alias variables export with generated target GUIDs', async () => {
|
|
const graph = new SceneGraph()
|
|
const col = graph.createCollection('Colors')
|
|
const target = graph.createVariable('base', 'COLOR', col.id, { r: 0.1, g: 0.2, b: 0.3, a: 1 })
|
|
graph.createVariable('alias', 'COLOR', col.id, { aliasId: target.id })
|
|
|
|
const exported = await exportFigFile(graph)
|
|
const reimported = await parseFigFile(exported.buffer as ArrayBuffer)
|
|
|
|
const alias = expectDefined(
|
|
[...reimported.variables.values()].find((v) => v.name === 'alias'),
|
|
'alias variable'
|
|
)
|
|
const resolved = expectDefined(
|
|
reimported.resolveColorVariable(alias.id),
|
|
'resolved alias color'
|
|
)
|
|
expect(resolved.r).toBeCloseTo(0.1)
|
|
expect(resolved.g).toBeCloseTo(0.2)
|
|
expect(resolved.b).toBeCloseTo(0.3)
|
|
expect(resolved.a).toBe(1)
|
|
})
|
|
})
|