@@ -234,6 +234,94 @@ describe('AndroidDevice', () => {
234
234
expect ( result ) . toContain ( mockBuffer . toString ( 'base64' ) ) ;
235
235
expect ( mockAdb . shell ) . toHaveBeenCalledWith ( expect . stringMatching ( / r m / ) ) ;
236
236
} ) ;
237
+
238
+ it ( 'should apply custom resize ratio when screenshotResizeRatio is set' , async ( ) => {
239
+ const customDevice = new AndroidDevice ( 'test-device' , {
240
+ screenshotResizeRatio : 0.5 ,
241
+ } ) ;
242
+
243
+ vi . spyOn ( customDevice , 'size' ) . mockResolvedValue ( {
244
+ width : 1080 ,
245
+ height : 1920 ,
246
+ dpr : 2 ,
247
+ } ) ;
248
+
249
+ const mockBuffer = Buffer . from ( 'test-screenshot' ) ;
250
+ mockAdb . takeScreenshot . mockResolvedValue ( mockBuffer ) ;
251
+ vi . spyOn ( customDevice , 'getAdb' ) . mockResolvedValue ( mockAdb ) ;
252
+
253
+ // Mock createImgBase64ByFormat
254
+ vi . spyOn ( ImgUtils , 'createImgBase64ByFormat' ) . mockReturnValue (
255
+ `data:image/png;base64,${ mockBuffer . toString ( 'base64' ) } ` ,
256
+ ) ;
257
+
258
+ await customDevice . screenshotBase64 ( ) ;
259
+
260
+ // Verify that resizeAndConvertImgBuffer was called with half the original size
261
+ expect ( ImgUtils . resizeAndConvertImgBuffer ) . toHaveBeenCalledWith (
262
+ 'png' ,
263
+ mockBuffer ,
264
+ {
265
+ width : 540 , // 1080 * 0.5
266
+ height : 960 , // 1920 * 0.5
267
+ } ,
268
+ ) ;
269
+ } ) ;
270
+
271
+ it ( 'should use original size when screenshotResizeRatio is not set' , async ( ) => {
272
+ const mockBuffer = Buffer . from ( 'test-screenshot' ) ;
273
+ mockAdb . takeScreenshot . mockResolvedValue ( mockBuffer ) ;
274
+
275
+ // Mock createImgBase64ByFormat
276
+ vi . spyOn ( ImgUtils , 'createImgBase64ByFormat' ) . mockReturnValue (
277
+ `data:image/png;base64,${ mockBuffer . toString ( 'base64' ) } ` ,
278
+ ) ;
279
+
280
+ await device . screenshotBase64 ( ) ;
281
+
282
+ // Verify that resizeAndConvertImgBuffer was called with original size
283
+ expect ( ImgUtils . resizeAndConvertImgBuffer ) . toHaveBeenCalledWith (
284
+ 'png' ,
285
+ mockBuffer ,
286
+ {
287
+ width : 1080 , // original width
288
+ height : 1920 , // original height
289
+ } ,
290
+ ) ;
291
+ } ) ;
292
+
293
+ it ( 'should use default ratio of 1.0 when screenshotResizeRatio is undefined' , async ( ) => {
294
+ const customDevice = new AndroidDevice ( 'test-device' , {
295
+ screenshotResizeRatio : undefined ,
296
+ } ) ;
297
+
298
+ vi . spyOn ( customDevice , 'size' ) . mockResolvedValue ( {
299
+ width : 1080 ,
300
+ height : 1920 ,
301
+ dpr : 2 ,
302
+ } ) ;
303
+
304
+ const mockBuffer = Buffer . from ( 'test-screenshot' ) ;
305
+ mockAdb . takeScreenshot . mockResolvedValue ( mockBuffer ) ;
306
+ vi . spyOn ( customDevice , 'getAdb' ) . mockResolvedValue ( mockAdb ) ;
307
+
308
+ // Mock createImgBase64ByFormat
309
+ vi . spyOn ( ImgUtils , 'createImgBase64ByFormat' ) . mockReturnValue (
310
+ `data:image/png;base64,${ mockBuffer . toString ( 'base64' ) } ` ,
311
+ ) ;
312
+
313
+ await customDevice . screenshotBase64 ( ) ;
314
+
315
+ // Verify that resizeAndConvertImgBuffer was called with original size (ratio 1.0)
316
+ expect ( ImgUtils . resizeAndConvertImgBuffer ) . toHaveBeenCalledWith (
317
+ 'png' ,
318
+ mockBuffer ,
319
+ {
320
+ width : 1080 , // 1080 * 1.0
321
+ height : 1920 , // 1920 * 1.0
322
+ } ,
323
+ ) ;
324
+ } ) ;
237
325
} ) ;
238
326
239
327
describe ( 'mouse' , ( ) => {
0 commit comments