@@ -101,7 +101,6 @@ describe('image resolveImage', () => {
101101 expect ( image ?. height ) . toBeGreaterThan ( 0 ) ;
102102 } ) ;
103103
104-
105104 test ( 'Should render a local image from relative path' , async ( ) => {
106105 const image = await resolveImage ( {
107106 uri : 'packages/layout/tests/assets/test.jpg' ,
@@ -112,7 +111,6 @@ describe('image resolveImage', () => {
112111 expect ( image ?. height ) . toBeGreaterThan ( 0 ) ;
113112 } ) ;
114113
115-
116114 test ( 'Should render a local image from src object' , async ( ) => {
117115 const image = await resolveImage ( {
118116 uri : './packages/layout/tests/assets/test.jpg' ,
@@ -232,4 +230,81 @@ describe('image resolveImage', () => {
232230 expect ( image ?. width ) . toBeGreaterThan ( 0 ) ;
233231 expect ( image ?. height ) . toBeGreaterThan ( 0 ) ;
234232 } ) ;
233+
234+ test ( 'Should throw error for unsupported base64 format' , async ( ) => {
235+ await expect (
236+ resolveImage ( {
237+ uri : 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==' ,
238+ } ) ,
239+ ) . rejects . toThrow ( 'Base64 image invalid format: gif' ) ;
240+ } ) ;
241+
242+ test ( 'Should throw error for invalid base64 URI' , async ( ) => {
243+ await expect (
244+ resolveImage ( { uri : 'data:image/pngbase64,invalid' } as any ) ,
245+ ) . rejects . toThrow ( 'Invalid base64 image' ) ;
246+ } ) ;
247+
248+ test ( 'Should throw error for invalid blob type' , async ( ) => {
249+ const blob = new Blob ( [ localJPGImage ] , { type : 'text/plain' } ) ;
250+ await expect ( resolveImage ( blob ) ) . rejects . toThrow (
251+ 'Invalid blob type: text/plain' ,
252+ ) ;
253+ } ) ;
254+
255+ test ( 'Should throw error for unsupported blob image type' , async ( ) => {
256+ const blob = new Blob ( [ localJPGImage ] , { type : 'image/gif' } ) ;
257+ await expect ( resolveImage ( blob ) ) . rejects . toThrow (
258+ 'Invalid blob type: image/gif' ,
259+ ) ;
260+ } ) ;
261+
262+ test ( 'Should throw error for invalid data source' , async ( ) => {
263+ await expect (
264+ resolveImage ( { data : undefined as any , format : 'jpg' } ) ,
265+ ) . rejects . toThrow ( 'Invalid data given for local file' ) ;
266+ } ) ;
267+
268+ test ( 'Should throw error for non-existent local file' , async ( ) => {
269+ await expect (
270+ resolveImage ( { uri : '/nonexistent/path/image.jpg' } ) ,
271+ ) . rejects . toThrow ( ) ;
272+ } ) ;
273+
274+ test ( 'Should return null for invalid buffer' , async ( ) => {
275+ const invalidBuffer = Buffer . from ( 'not an image' ) ;
276+ const image = await resolveImage ( invalidBuffer ) ;
277+ expect ( image ) . toBeNull ( ) ;
278+ } ) ;
279+
280+ test ( 'Should throw on network fetch failure' , async ( ) => {
281+ fetchMock . once ( ( ) => {
282+ throw new Error ( 'Network error' ) ;
283+ } ) ;
284+
285+ await expect ( resolveImage ( { uri : jpgImageUrl } ) ) . rejects . toThrow (
286+ 'Network error' ,
287+ ) ;
288+ } ) ;
289+
290+ test ( 'Should throw for unsupported remote image format' , async ( ) => {
291+ // GIF89a magic bytes - neither JPEG nor PNG
292+ const gifBuffer = Buffer . from ( [ 0x47 , 0x49 , 0x46 , 0x38 , 0x39 , 0x61 ] ) ;
293+ fetchMock . once ( gifBuffer ) ;
294+
295+ await expect (
296+ resolveImage ( { uri : 'https://example.com/image.gif' } ) ,
297+ ) . rejects . toThrow ( 'Not valid image extension' ) ;
298+ } ) ;
299+
300+ test ( 'Should cache DataImageSrc images using base64 key' , async ( ) => {
301+ const image1 = await resolveImage ( { data : localJPGImage , format : 'jpg' } ) ;
302+ const image2 = await resolveImage ( { data : localJPGImage , format : 'jpg' } ) ;
303+
304+ expect ( image1 ) . toBe ( image2 ) ;
305+ } ) ;
306+
307+ test ( 'Should return null when getting cache with null key' , ( ) => {
308+ expect ( IMAGE_CACHE . get ( null ) ) . toBeNull ( ) ;
309+ } ) ;
235310} ) ;
0 commit comments