kt-blog-web/src/__tests__/live2d/Cubism2ModelProjection.spec.ts

49 lines
1.4 KiB
TypeScript

import { describe, expect, it, vi } from 'vitest'
import { configureCubism2ModelProjection } from '../../components/blog/live2d/runtime/cubism2ModelProjection'
describe('Cubism2 model projection', () => {
it('applies the source L2D model and canvas projection matrix before drawing', () => {
const setMatrix = vi.fn()
configureCubism2ModelProjection(
{
getCanvasHeight: () => 2,
getCanvasWidth: () => 4,
setMatrix,
},
{
height: 250,
width: 280,
},
{
center_x: 0,
center_y: -0.05,
width: 2,
},
)
expect(setMatrix).toHaveBeenCalledOnce()
const matrix = setMatrix.mock.calls[0]?.[0] as Float32Array
expect(matrix).toBeInstanceOf(Float32Array)
expect(matrix[0]).toBeCloseTo(0.5)
expect(matrix[5]).toBeCloseTo(-0.56)
expect(matrix[12]).toBeCloseTo(-1)
expect(matrix[13]).toBeCloseTo(0.504)
expect(matrix[10]).toBe(1)
expect(matrix[15]).toBe(1)
})
it('rejects invalid model or canvas dimensions instead of drawing a transparent frame', () => {
const model = {
getCanvasHeight: () => 2,
getCanvasWidth: () => 0,
setMatrix: vi.fn(),
}
expect(() => configureCubism2ModelProjection(model, { height: 250, width: 280 })).toThrow(
'Cubism2 model and canvas dimensions must be positive.',
)
})
})