UNPKG

no-sleep-app

Version:

NoSleepApp is a lightweight JavaScript library that prevents devices from going to sleep during critical activities. It uses the Screen Wake Lock API or a fallback video playback method to keep the screen active, ensuring uninterrupted user experiences ac

62 lines (44 loc) 2.13 kB
import VisibilityListener from './visibility-listener'; describe('VisibilityListener', () => { let visibilityListener; let mockCallback; beforeEach(() => { mockCallback = jest.fn(); visibilityListener = new VisibilityListener(mockCallback); }); afterEach(() => { visibilityListener.removeListeners(); }); test('should add event listeners for visibilitychange and fullscreenchange', () => { const addEventListenerSpy = jest.spyOn(document, 'addEventListener'); visibilityListener = new VisibilityListener(mockCallback); expect(addEventListenerSpy).toHaveBeenCalledWith('visibilitychange', expect.any(Function)); expect(addEventListenerSpy).toHaveBeenCalledWith('fullscreenchange', expect.any(Function)); }); test('should invoke the callback when document visibility changes to "visible"', () => { document.visibilityState = 'visible'; visibilityListener.handleVisibilityChange(); expect(mockCallback).toHaveBeenCalledTimes(1); }); test('should not invoke the callback when document visibility changes to "hidden"', () => { document.visibilityState = 'hidden'; visibilityListener.handleVisibilityChange(); expect(mockCallback).not.toHaveBeenCalled(); }); test('should invoke the callback when entering fullscreen', () => { document.fullscreenElement = document.documentElement; visibilityListener.handleFullscreenChange(); expect(mockCallback).toHaveBeenCalledTimes(1); }); test('should not invoke the callback when exiting fullscreen', () => { document.fullscreenElement = null; visibilityListener.handleFullscreenChange(); expect(mockCallback).not.toHaveBeenCalled(); }); test('should remove event listeners when removeListeners is called', () => { const removeEventListenerSpy = jest.spyOn(document, 'removeEventListener'); visibilityListener.removeListeners(); expect(removeEventListenerSpy).toHaveBeenCalledWith('visibilitychange', expect.any(Function)); expect(removeEventListenerSpy).toHaveBeenCalledWith('fullscreenchange', expect.any(Function)); }); });