1import ExpoScreenCapture from '../ExpoScreenCapture'; 2import * as ScreenCapture from '../ScreenCapture'; 3 4describe('ScreenCapture methods are defined', () => { 5 it('isAvailableAsync is defined', async () => { 6 expect(ScreenCapture.isAvailableAsync).toBeDefined(); 7 }); 8 9 it('preventScreenCapture is defined', async () => { 10 expect(ScreenCapture.preventScreenCaptureAsync).toBeDefined(); 11 }); 12 13 it('allowScreenCapture is defined', async () => { 14 expect(ScreenCapture.allowScreenCaptureAsync).toBeDefined(); 15 }); 16 17 it('usePreventScreenCapture hook is defined', async () => { 18 expect(ScreenCapture.usePreventScreenCapture).toBeDefined(); 19 }); 20 21 it('addScreenshotListener is defined', async () => { 22 expect(ScreenCapture.addScreenshotListener).toBeDefined(); 23 }); 24 25 it('removeScreenshotListener is defined', async () => { 26 expect(ScreenCapture.removeScreenshotListener).toBeDefined(); 27 }); 28}); 29 30describe('Test key functionality', () => { 31 afterEach(async () => { 32 await cleanUpTags(); 33 }); 34 35 it('resolves true for isAvailableAsync on native platforms', async () => { 36 await expect(ScreenCapture.isAvailableAsync()).resolves.toBeTruthy(); 37 }); 38 39 it('Will not call the native method if default key already active', async () => { 40 await ScreenCapture.preventScreenCaptureAsync(); 41 await ScreenCapture.preventScreenCaptureAsync(); 42 43 await ScreenCapture.allowScreenCaptureAsync(); 44 45 expect(ExpoScreenCapture.preventScreenCapture).toHaveBeenCalledTimes(1); 46 expect(ExpoScreenCapture.allowScreenCapture).toHaveBeenCalledTimes(1); 47 }); 48 49 it('Passing a different key to allowScreenCaptureAsync does not re-enable screen capture', async () => { 50 await ScreenCapture.preventScreenCaptureAsync('foo'); 51 await ScreenCapture.allowScreenCaptureAsync('bar'); 52 53 expect(ExpoScreenCapture.preventScreenCapture).toHaveBeenCalledTimes(1); 54 expect(ExpoScreenCapture.allowScreenCapture).toHaveBeenCalledTimes(0); 55 }); 56 57 it('Passing a key that is already active does not call the preventScreenCapture native method', async () => { 58 await ScreenCapture.preventScreenCaptureAsync('foo'); 59 await ScreenCapture.preventScreenCaptureAsync('foo'); 60 61 expect(ExpoScreenCapture.preventScreenCapture).toHaveBeenCalledTimes(1); 62 }); 63 64 it('enabling two keys but only removing one results in the allowScreenCapture native method not being called', async () => { 65 await ScreenCapture.preventScreenCaptureAsync('foo'); 66 await ScreenCapture.preventScreenCaptureAsync('bar'); 67 68 await ScreenCapture.allowScreenCaptureAsync('bar'); 69 expect(ExpoScreenCapture.allowScreenCapture).toHaveBeenCalledTimes(0); 70 }); 71}); 72 73async function cleanUpTags() { 74 // Otherwise, these tags would persist between tests 75 await ScreenCapture.allowScreenCaptureAsync(); 76 await ScreenCapture.allowScreenCaptureAsync('foo'); 77 await ScreenCapture.allowScreenCaptureAsync('bar'); 78} 79