55 lines
1.1 KiB
TypeScript
55 lines
1.1 KiB
TypeScript
|
|
import { beforeEach, vi } from 'vitest'
|
||
|
|
|
||
|
|
interface ResizeObserverEntryMock {
|
||
|
|
target: Element
|
||
|
|
contentRect: DOMRectReadOnly
|
||
|
|
}
|
||
|
|
|
||
|
|
type ResizeCallback = (entries: ResizeObserverEntryMock[]) => void
|
||
|
|
|
||
|
|
export const resizeObservers: ResizeObserverMock[] = []
|
||
|
|
|
||
|
|
export class ResizeObserverMock {
|
||
|
|
private target?: Element
|
||
|
|
|
||
|
|
constructor(private readonly callback: ResizeCallback) {
|
||
|
|
resizeObservers.push(this)
|
||
|
|
}
|
||
|
|
|
||
|
|
observe = vi.fn((target: Element) => {
|
||
|
|
this.target = target
|
||
|
|
})
|
||
|
|
|
||
|
|
unobserve = vi.fn()
|
||
|
|
disconnect = vi.fn()
|
||
|
|
|
||
|
|
resize(width: number, height = 400) {
|
||
|
|
if (!this.target) return
|
||
|
|
this.callback([
|
||
|
|
{
|
||
|
|
target: this.target,
|
||
|
|
contentRect: { width, height } as DOMRectReadOnly,
|
||
|
|
},
|
||
|
|
])
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
vi.stubGlobal('ResizeObserver', ResizeObserverMock)
|
||
|
|
vi.stubGlobal(
|
||
|
|
'matchMedia',
|
||
|
|
vi.fn((query: string): MediaQueryList => ({
|
||
|
|
matches: false,
|
||
|
|
media: query,
|
||
|
|
onchange: null,
|
||
|
|
addListener: vi.fn(),
|
||
|
|
removeListener: vi.fn(),
|
||
|
|
addEventListener: vi.fn(),
|
||
|
|
removeEventListener: vi.fn(),
|
||
|
|
dispatchEvent: vi.fn(),
|
||
|
|
})),
|
||
|
|
)
|
||
|
|
|
||
|
|
beforeEach(() => {
|
||
|
|
resizeObservers.length = 0
|
||
|
|
})
|