mirror of
https://github.com/stablyai/orca.git
synced 2026-09-22 08:02:28 +00:00
74 lines
2.9 KiB
TypeScript
74 lines
2.9 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import { buildImageDataUri, validateRasterImageDataUri } from './image-data-uri'
|
|
|
|
function pngBase64(width = 1, height = 1): string {
|
|
const bytes = Buffer.alloc(24)
|
|
Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]).copy(bytes)
|
|
bytes.writeUInt32BE(13, 8)
|
|
bytes.write('IHDR', 12, 'ascii')
|
|
bytes.writeUInt32BE(width, 16)
|
|
bytes.writeUInt32BE(height, 20)
|
|
return bytes.toString('base64')
|
|
}
|
|
|
|
describe('buildImageDataUri', () => {
|
|
it('builds a data URI from base64 image bytes', () => {
|
|
const content = pngBase64()
|
|
expect(buildImageDataUri('image/png', content)).toBe(`data:image/png;base64,${content}`)
|
|
})
|
|
|
|
it('strips whitespace from line-wrapped base64 payloads', () => {
|
|
const content = pngBase64()
|
|
const wrapped = `${content.slice(0, 8)}\n${content.slice(8, 20)}\t ${content.slice(20)}\r\n`
|
|
expect(buildImageDataUri('image/png', wrapped)).toBe(`data:image/png;base64,${content}`)
|
|
})
|
|
|
|
it('returns null for an empty payload', () => {
|
|
expect(buildImageDataUri('image/png', ' \n')).toBeNull()
|
|
})
|
|
|
|
it('returns null for a missing mime type', () => {
|
|
expect(buildImageDataUri(undefined, 'bmV3')).toBeNull()
|
|
})
|
|
|
|
it('returns null for application/pdf (not an <img> source)', () => {
|
|
expect(buildImageDataUri('application/pdf', 'JVBER')).toBeNull()
|
|
})
|
|
|
|
it('returns null for a non-image mime such as application/octet-stream', () => {
|
|
expect(buildImageDataUri('application/octet-stream', 'AAAA')).toBeNull()
|
|
})
|
|
|
|
it('rejects oversized known rasters before native decode', () => {
|
|
expect(buildImageDataUri('image/png', pngBase64(32_769, 1))).toBeNull()
|
|
expect(buildImageDataUri('image/png', pngBase64(8192, 8192))).toBeNull()
|
|
})
|
|
|
|
it('still renders bytes whose header we cannot measure', () => {
|
|
// Failing to read a header means we could not measure the image, not that it is oversized.
|
|
// The decoder handles encodings this parser does not, so suppressing here blanks valid images.
|
|
expect(buildImageDataUri('image/png', 'bmV3')).toBe('data:image/png;base64,bmV3')
|
|
})
|
|
|
|
it('preserves SVG behavior because vectors do not have encoded raster dimensions', () => {
|
|
expect(buildImageDataUri('image/svg+xml', 'PHN2Zy8+')).toBe(
|
|
'data:image/svg+xml;base64,PHN2Zy8+'
|
|
)
|
|
})
|
|
})
|
|
|
|
describe('validateRasterImageDataUri', () => {
|
|
it('accepts a safe inline raster and rejects an oversized one', () => {
|
|
const safe = `data:image/png;base64,${pngBase64()}`
|
|
expect(validateRasterImageDataUri(safe)).toBe(safe)
|
|
expect(validateRasterImageDataUri(`data:image/png;base64,${pngBase64(32_769, 1)}`)).toBeNull()
|
|
})
|
|
|
|
it('preserves non-raster data URIs and rejects non-base64 raster data', () => {
|
|
expect(validateRasterImageDataUri('data:image/svg+xml,%3Csvg/%3E')).toBe(
|
|
'data:image/svg+xml,%3Csvg/%3E'
|
|
)
|
|
expect(validateRasterImageDataUri('data:image/png,not-base64')).toBeNull()
|
|
})
|
|
})
|