import { createMockLocation, MockLocation } from "./Location"; import { createMockMediaQueryList } from "./MediaQueryList"; import { fn, Mock } from "./mocks"; import { createMockNavigator, MockNavigator } from "./Navigator"; import { createMockPerformance, MockPerformance } from "./Performance"; import { MockStorage } from "./Storage"; export interface MockWindowMembers { addEventListener: Mock; alert: Mock; blur: Mock; close: Mock; confirm: Mock; dispatchEvent: Mock; focus: Mock; getSelection: Mock; localStorage: MockStorage; location: MockLocation; matchMedia: Mock; moveBy: Mock; navigator: MockNavigator; open: Mock; performance: MockPerformance; postMessage: Mock; print: Mock; prompt: Mock; removeEventListener: Mock; requestAnimationFrame: Mock; requestIdleCallback: Mock; resizeBy: Mock; resizeTo: Mock; scrollBy: Mock; scrollTo: Mock; sessionStorage: MockStorage; setImmediate: Mock; stop: Mock; top: MockWindowMembers; } export class MockWindow implements MockWindowMembers { addEventListener = fn(); alert = fn(); blur = fn(); close = fn(); confirm = fn(); dispatchEvent = fn(); focus = fn(); getSelection = fn(); localStorage = new MockStorage(); location = createMockLocation(); matchMedia = fn().mockReturnValue( createMockMediaQueryList() ); moveBy = fn(); navigator = createMockNavigator(); open = fn(); performance = createMockPerformance(); postMessage = fn(); print = fn(); prompt = fn(); removeEventListener = fn(); requestAnimationFrame = fn(); requestIdleCallback = fn(); resizeBy = fn(); resizeTo = fn(); scrollBy = fn(); scrollTo = fn(); sessionStorage = new MockStorage(); setImmediate = fn(); stop = fn(); top: MockWindow; constructor(settings: Partial = {}) { Object.assign(this, settings); this.top ??= this; } }