6bf8b0051b
图片改造改为独立 quick-edit 生成器占位并补齐提交链路 生成完成应用项目快照后同步刷新素材库 序列帧导出补充 Spine JSON 与独立验证器 序列帧播放预加载帧资源以减少加载闪烁 本地 dev 默认启用 all 进程角色并更新文档
77 lines
2.1 KiB
TypeScript
77 lines
2.1 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
|
|
import {
|
|
compressEditorImageReferenceDataUrlForGeneration,
|
|
resolveEditorImageReferenceDataUrl,
|
|
} from './editorImageReference';
|
|
|
|
describe('editorImageReference', () => {
|
|
afterEach(() => {
|
|
vi.useRealTimers();
|
|
vi.restoreAllMocks();
|
|
vi.unstubAllGlobals();
|
|
});
|
|
|
|
it('passes through base64 image data urls without fetching', async () => {
|
|
vi.spyOn(globalThis, 'fetch');
|
|
|
|
await expect(
|
|
resolveEditorImageReferenceDataUrl('data:image/png;base64,c291cmNl'),
|
|
).resolves.toBe('data:image/png;base64,c291cmNl');
|
|
expect(globalThis.fetch).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('converts public image paths to base64 image data urls', async () => {
|
|
vi.spyOn(globalThis, 'fetch').mockResolvedValue(
|
|
new Response(new Uint8Array([104, 101, 108, 108, 111]), {
|
|
status: 200,
|
|
headers: {
|
|
'Content-Type': 'image/webp',
|
|
},
|
|
}),
|
|
);
|
|
|
|
await expect(
|
|
resolveEditorImageReferenceDataUrl(
|
|
'/creation-type-references/puzzle.webp',
|
|
),
|
|
).resolves.toBe('data:image/webp;base64,aGVsbG8=');
|
|
});
|
|
|
|
it('keeps generation references unchanged when browser canvas is unavailable', async () => {
|
|
await expect(
|
|
compressEditorImageReferenceDataUrlForGeneration(
|
|
'data:image/png;base64,large-reference',
|
|
),
|
|
).resolves.toBe('data:image/png;base64,large-reference');
|
|
});
|
|
|
|
it('falls back to the original generation reference when browser image decoding stalls', async () => {
|
|
vi.useFakeTimers();
|
|
vi.stubGlobal('document', {
|
|
createElement: vi.fn(),
|
|
} as unknown as Document);
|
|
vi.stubGlobal(
|
|
'Image',
|
|
class PendingImage {
|
|
onload: (() => void) | null = null;
|
|
onerror: (() => void) | null = null;
|
|
|
|
set src(_value: string) {
|
|
void _value;
|
|
}
|
|
} as unknown as typeof Image,
|
|
);
|
|
|
|
const result = compressEditorImageReferenceDataUrlForGeneration(
|
|
'data:image/png;base64,pending-reference',
|
|
);
|
|
|
|
vi.advanceTimersByTime(251);
|
|
|
|
await expect(result).resolves.toBe(
|
|
'data:image/png;base64,pending-reference',
|
|
);
|
|
});
|
|
});
|