import { render, fireEvent } from "@testing-library/react"; import React from "react"; import TabLoop from "../tab_loop"; describe("TabLoop", () => { describe("when enableTabLoop is true (default)", () => { it("should render tab loop container with start and end sentinels", () => { const { container } = render( , ); const tabLoopContainer = container.querySelector( ".react-datepicker__tab-loop", ); expect(tabLoopContainer).not.toBeNull(); const startSentinel = container.querySelector( ".react-datepicker__tab-loop__start", ); expect(startSentinel).not.toBeNull(); expect(startSentinel?.getAttribute("tabIndex")).toBe("0"); const endSentinel = container.querySelector( ".react-datepicker__tab-loop__end", ); expect(endSentinel).not.toBeNull(); expect(endSentinel?.getAttribute("tabIndex")).toBe("0"); }); it("should focus last tabbable child when start sentinel is focused", () => { const { container } = render( , ); const buttons = container.querySelectorAll("button"); const startSentinel = container.querySelector( ".react-datepicker__tab-loop__start", ) as HTMLElement; // Mock focus on the last button const focusSpy = jest.spyOn(buttons[2] as HTMLElement, "focus"); fireEvent.focus(startSentinel); expect(focusSpy).toHaveBeenCalled(); focusSpy.mockRestore(); }); it("should focus first tabbable child when end sentinel is focused", () => { const { container } = render( , ); const buttons = container.querySelectorAll("button"); const endSentinel = container.querySelector( ".react-datepicker__tab-loop__end", ) as HTMLElement; // Mock focus on the first button const focusSpy = jest.spyOn(buttons[0] as HTMLElement, "focus"); fireEvent.focus(endSentinel); expect(focusSpy).toHaveBeenCalled(); focusSpy.mockRestore(); }); it("should handle multiple focusable element types", () => { const { container } = render(