@@ -128,6 +128,22 @@ describe('Tile', function () {
128128 } ) ;
129129 } ) ;
130130
131+ it ( 'Valid formats pass' , function ( ) {
132+ [ 'jpeg' , 'png' , 'webp' ] . forEach ( function ( format ) {
133+ assert . doesNotThrow ( function ( ) {
134+ sharp ( ) . toFormat ( format ) . tile ( ) ;
135+ } ) ;
136+ } ) ;
137+ } ) ;
138+
139+ it ( 'Invalid formats fail' , function ( ) {
140+ [ 'tiff' , 'raw' ] . forEach ( function ( format ) {
141+ assert . throws ( function ( ) {
142+ sharp ( ) . toFormat ( format ) . tile ( ) ;
143+ } ) ;
144+ } ) ;
145+ } ) ;
146+
131147 it ( 'Prevent larger overlap than default size' , function ( ) {
132148 assert . throws ( function ( ) {
133149 sharp ( ) . tile ( { overlap : 257 } ) ;
@@ -224,6 +240,111 @@ describe('Tile', function () {
224240 } ) ;
225241 } ) ;
226242
243+ it ( 'Google layout with jpeg format' , function ( done ) {
244+ const directory = fixtures . path ( 'output.jpg.google.dzi' ) ;
245+ rimraf ( directory , function ( ) {
246+ sharp ( fixtures . inputJpg )
247+ . jpeg ( { quality : 1 } )
248+ . tile ( {
249+ layout : 'google'
250+ } )
251+ . toFile ( directory , function ( err , info ) {
252+ if ( err ) throw err ;
253+ assert . strictEqual ( 'dz' , info . format ) ;
254+ assert . strictEqual ( 2725 , info . width ) ;
255+ assert . strictEqual ( 2225 , info . height ) ;
256+ assert . strictEqual ( 3 , info . channels ) ;
257+ assert . strictEqual ( 'number' , typeof info . size ) ;
258+ const sample = path . join ( directory , '0' , '0' , '0.jpg' ) ;
259+ sharp ( sample ) . metadata ( function ( err , metadata ) {
260+ if ( err ) throw err ;
261+ assert . strictEqual ( 'jpeg' , metadata . format ) ;
262+ assert . strictEqual ( 'srgb' , metadata . space ) ;
263+ assert . strictEqual ( 3 , metadata . channels ) ;
264+ assert . strictEqual ( false , metadata . hasProfile ) ;
265+ assert . strictEqual ( false , metadata . hasAlpha ) ;
266+ assert . strictEqual ( true , metadata . width === 256 ) ;
267+ assert . strictEqual ( true , metadata . height === 256 ) ;
268+ fs . stat ( sample , function ( err , stat ) {
269+ if ( err ) throw err ;
270+ assert . strictEqual ( true , stat . size < 2000 ) ;
271+ done ( ) ;
272+ } ) ;
273+ } ) ;
274+ } ) ;
275+ } ) ;
276+ } ) ;
277+
278+ it ( 'Google layout with png format' , function ( done ) {
279+ const directory = fixtures . path ( 'output.png.google.dzi' ) ;
280+ rimraf ( directory , function ( ) {
281+ sharp ( fixtures . inputJpg )
282+ . png ( { compressionLevel : 1 } )
283+ . tile ( {
284+ layout : 'google'
285+ } )
286+ . toFile ( directory , function ( err , info ) {
287+ if ( err ) throw err ;
288+ assert . strictEqual ( 'dz' , info . format ) ;
289+ assert . strictEqual ( 2725 , info . width ) ;
290+ assert . strictEqual ( 2225 , info . height ) ;
291+ assert . strictEqual ( 3 , info . channels ) ;
292+ assert . strictEqual ( 'number' , typeof info . size ) ;
293+ const sample = path . join ( directory , '0' , '0' , '0.png' ) ;
294+ sharp ( sample ) . metadata ( function ( err , metadata ) {
295+ if ( err ) throw err ;
296+ assert . strictEqual ( 'png' , metadata . format ) ;
297+ assert . strictEqual ( 'srgb' , metadata . space ) ;
298+ assert . strictEqual ( 3 , metadata . channels ) ;
299+ assert . strictEqual ( false , metadata . hasProfile ) ;
300+ assert . strictEqual ( false , metadata . hasAlpha ) ;
301+ assert . strictEqual ( true , metadata . width === 256 ) ;
302+ assert . strictEqual ( true , metadata . height === 256 ) ;
303+ fs . stat ( sample , function ( err , stat ) {
304+ if ( err ) throw err ;
305+ assert . strictEqual ( true , stat . size > 44000 ) ;
306+ done ( ) ;
307+ } ) ;
308+ } ) ;
309+ } ) ;
310+ } ) ;
311+ } ) ;
312+
313+ it ( 'Google layout with webp format' , function ( done ) {
314+ const directory = fixtures . path ( 'output.webp.google.dzi' ) ;
315+ rimraf ( directory , function ( ) {
316+ sharp ( fixtures . inputJpg )
317+ . webp ( { quality : 1 } )
318+ . tile ( {
319+ layout : 'google'
320+ } )
321+ . toFile ( directory , function ( err , info ) {
322+ if ( err ) throw err ;
323+ assert . strictEqual ( 'dz' , info . format ) ;
324+ assert . strictEqual ( 2725 , info . width ) ;
325+ assert . strictEqual ( 2225 , info . height ) ;
326+ assert . strictEqual ( 3 , info . channels ) ;
327+ assert . strictEqual ( 'number' , typeof info . size ) ;
328+ const sample = path . join ( directory , '0' , '0' , '0.webp' ) ;
329+ sharp ( sample ) . metadata ( function ( err , metadata ) {
330+ if ( err ) throw err ;
331+ assert . strictEqual ( 'webp' , metadata . format ) ;
332+ assert . strictEqual ( 'srgb' , metadata . space ) ;
333+ assert . strictEqual ( 3 , metadata . channels ) ;
334+ assert . strictEqual ( false , metadata . hasProfile ) ;
335+ assert . strictEqual ( false , metadata . hasAlpha ) ;
336+ assert . strictEqual ( true , metadata . width === 256 ) ;
337+ assert . strictEqual ( true , metadata . height === 256 ) ;
338+ fs . stat ( sample , function ( err , stat ) {
339+ if ( err ) throw err ;
340+ assert . strictEqual ( true , stat . size < 2000 ) ;
341+ done ( ) ;
342+ } ) ;
343+ } ) ;
344+ } ) ;
345+ } ) ;
346+ } ) ;
347+
227348 it ( 'Write to ZIP container using file extension' , function ( done ) {
228349 const container = fixtures . path ( 'output.dz.container.zip' ) ;
229350 const extractTo = fixtures . path ( 'output.dz.container' ) ;
0 commit comments