mirror of
https://github.com/Kuingsmile/PicList.git
synced 2026-07-08 17:02:36 +08:00
✨ Feature(custom): support jxl image preview in gallery
ISSUES CLOSED: #531
This commit is contained in:
71
tests/gallery-preview.test.ts
Normal file
71
tests/gallery-preview.test.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
|
||||
import {
|
||||
getGalleryPreviewSource,
|
||||
getJxlPreviewSource,
|
||||
JXL_ERROR_PREVIEW_SRC,
|
||||
JXL_LOADING_PREVIEW_SRC,
|
||||
} from '../src/renderer/utils/galleryPreview'
|
||||
|
||||
describe('gallery JXL preview helpers', () => {
|
||||
it('detects local JPEG XL files from galleryPath, fileName, or extname', () => {
|
||||
expect(getJxlPreviewSource({ galleryPath: 'C:\\images\\photo.jxl' })).toBe('C:\\images\\photo.jxl')
|
||||
expect(getJxlPreviewSource({ galleryPath: '/tmp/photo', fileName: 'photo.JXL' })).toBe('/tmp/photo')
|
||||
expect(getJxlPreviewSource({ galleryPath: '/tmp/photo', extname: 'jxl' })).toBe('/tmp/photo')
|
||||
})
|
||||
|
||||
it('detects remote JPEG XL URLs but ignores inline image sources', () => {
|
||||
expect(getJxlPreviewSource({ imgUrl: 'https://example.com/photo.jxl' })).toBe('https://example.com/photo.jxl')
|
||||
expect(getJxlPreviewSource({ galleryPath: 'data:image/jxl;base64,abc', extname: '.jxl' })).toBe('')
|
||||
})
|
||||
|
||||
it('does not decode a non-JXL galleryPath just because metadata says JXL', () => {
|
||||
expect(
|
||||
getJxlPreviewSource({
|
||||
galleryPath: '/tmp/original.png',
|
||||
imgUrl: 'https://example.com/uploaded',
|
||||
extname: '.jxl',
|
||||
}),
|
||||
).toBe('https://example.com/uploaded')
|
||||
|
||||
expect(
|
||||
getJxlPreviewSource({
|
||||
galleryPath: '/tmp/original.png',
|
||||
extname: '.jxl',
|
||||
}),
|
||||
).toBe('')
|
||||
})
|
||||
|
||||
it('uses cached, loading, and error preview sources for local JXL images', () => {
|
||||
const item = { galleryPath: '/tmp/photo.jxl', imgUrl: 'https://example.com/photo.jxl' }
|
||||
|
||||
expect(getGalleryPreviewSource(item, { '/tmp/photo.jxl': 'data:image/png;base64,abc' })).toBe(
|
||||
'data:image/png;base64,abc',
|
||||
)
|
||||
expect(getGalleryPreviewSource(item, {}, { '/tmp/photo.jxl': true })).toBe(JXL_LOADING_PREVIEW_SRC)
|
||||
expect(getGalleryPreviewSource(item, {}, {}, { '/tmp/photo.jxl': true })).toBe(JXL_ERROR_PREVIEW_SRC)
|
||||
})
|
||||
|
||||
it('can keep the original JXL source after decoder failure when native rendering already worked', () => {
|
||||
const item = { galleryPath: '/tmp/photo.jxl', imgUrl: 'https://example.com/photo.jxl' }
|
||||
|
||||
expect(getGalleryPreviewSource(item, {}, {}, { '/tmp/photo.jxl': true }, true)).toBe('/tmp/photo.jxl')
|
||||
})
|
||||
|
||||
it('keeps a renderable gallery fallback while a separate JXL source is loading or failed', () => {
|
||||
const item = {
|
||||
galleryPath: '/tmp/original.png',
|
||||
imgUrl: 'https://example.com/photo.jxl',
|
||||
extname: '.jxl',
|
||||
}
|
||||
|
||||
expect(getGalleryPreviewSource(item, {}, { 'https://example.com/photo.jxl': true })).toBe('/tmp/original.png')
|
||||
expect(getGalleryPreviewSource(item, {}, {}, { 'https://example.com/photo.jxl': true })).toBe('/tmp/original.png')
|
||||
})
|
||||
|
||||
it('falls back to the original source for non-JXL images', () => {
|
||||
expect(
|
||||
getGalleryPreviewSource({ galleryPath: '/tmp/photo.png', imgUrl: 'https://example.com/photo.png' }, {}),
|
||||
).toBe('/tmp/photo.png')
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user