UNPKG

@netdata/charts

Version:

Netdata frontend SDK and chart utilities

119 lines 3.41 kB
import { renderHook, act } from "@testing-library/react"; import useWindowSize from "./useWindowSize"; describe("useWindowSize", function () { var addEventListenerSpy; var removeEventListenerSpy; beforeEach(function () { addEventListenerSpy = jest.spyOn(window, "addEventListener"); removeEventListenerSpy = jest.spyOn(window, "removeEventListener"); Object.defineProperty(window, "innerWidth", { value: 1024, writable: true, configurable: true }); Object.defineProperty(window, "innerHeight", { value: 768, writable: true, configurable: true }); }); afterEach(function () { addEventListenerSpy.mockRestore(); removeEventListenerSpy.mockRestore(); }); it("returns initial window size", function () { var _renderHook = renderHook(function () { return useWindowSize(); }), result = _renderHook.result; expect(result.current).toEqual({ width: 1024, height: 768 }); }); it("initializes with current window dimensions", function () { var _renderHook2 = renderHook(function () { return useWindowSize(); }), result = _renderHook2.result; expect(result.current.width).toBe(1024); expect(result.current.height).toBe(768); }); it("adds resize event listener on mount", function () { renderHook(function () { return useWindowSize(); }); expect(addEventListenerSpy).toHaveBeenCalledWith("resize", expect.any(Function)); }); it("updates size when window is resized", function () { var _renderHook3 = renderHook(function () { return useWindowSize(); }), result = _renderHook3.result; Object.defineProperty(window, "innerWidth", { value: 1280, writable: true, configurable: true }); Object.defineProperty(window, "innerHeight", { value: 720, writable: true, configurable: true }); act(function () { window.dispatchEvent(new Event("resize")); }); expect(result.current).toEqual({ width: 1280, height: 720 }); }); it("removes resize event listener on unmount", function () { var _renderHook4 = renderHook(function () { return useWindowSize(); }), unmount = _renderHook4.unmount; unmount(); expect(removeEventListenerSpy).toHaveBeenCalledWith("resize", expect.any(Function)); }); it("handles multiple resize events correctly", function () { var _renderHook5 = renderHook(function () { return useWindowSize(); }), result = _renderHook5.result; Object.defineProperty(window, "innerWidth", { value: 800, writable: true, configurable: true }); Object.defineProperty(window, "innerHeight", { value: 600, writable: true, configurable: true }); act(function () { window.dispatchEvent(new Event("resize")); }); expect(result.current).toEqual({ width: 800, height: 600 }); Object.defineProperty(window, "innerWidth", { value: 1920, writable: true, configurable: true }); Object.defineProperty(window, "innerHeight", { value: 1080, writable: true, configurable: true }); act(function () { window.dispatchEvent(new Event("resize")); }); expect(result.current).toEqual({ width: 1920, height: 1080 }); }); });