@crossed/primitive
Version:
A universal & performant styling library for React Native, Next.js & React
78 lines (77 loc) • 2.83 kB
JavaScript
import { jsx } from "react/jsx-runtime";
import "@testing-library/jest-dom";
import { Focus, useFocus } from "../Focus.web";
import { View } from "react-native";
import { renderHook, render, screen } from "@crossed/test";
jest.mock("react-focus-lock", () => ({
__esModule: true,
useFocusScope: jest.fn().mockImplementation(() => ({ focusNext: jest.fn(), focusPrev: jest.fn() })),
default: jest.fn().mockImplementation(({ children }) => children)
}));
describe("Accordion Focus web", () => {
test("Component", async () => {
const children = "Pass child";
const ReactFocusLock = jest.requireMock("react-focus-lock");
render(/* @__PURE__ */ jsx(Focus, { testID: "toto", children }));
await screen.findByText(children);
expect(ReactFocusLock.default).toBeCalledWith(
{
children,
disabled: true,
lockProps: { testID: "toto" },
as: View
},
{}
);
});
test("useFocus", async () => {
const onPress = jest.fn();
const { useFocusScope } = jest.requireMock("react-focus-lock");
const focusNext = jest.fn();
const focusPrev = jest.fn();
const stopPropagation = jest.fn();
const preventDefault = jest.fn();
useFocusScope.mockImplementation(() => ({ focusNext, focusPrev }));
const { result } = renderHook(() => useFocus({ onPress }));
const reset = () => {
stopPropagation.mockReset();
preventDefault.mockReset();
focusNext.mockReset();
focusPrev.mockReset();
};
expect(result.current).toHaveProperty(["onKeyDown"]);
const params = {
stopPropagation,
preventDefault
};
result.current.onKeyDown(params);
expect(stopPropagation).toBeCalledTimes(0);
expect(preventDefault).toBeCalledTimes(0);
expect(onPress).toBeCalledTimes(0);
expect(focusNext).toBeCalledTimes(0);
expect(focusPrev).toBeCalledTimes(0);
reset();
result.current.onKeyDown({ ...params, code: "ArrowDown" });
expect(stopPropagation).toBeCalledTimes(1);
expect(preventDefault).toBeCalledTimes(1);
expect(onPress).toBeCalledTimes(0);
expect(focusNext).toBeCalledTimes(1);
expect(focusPrev).toBeCalledTimes(0);
reset();
result.current.onKeyDown({ ...params, code: "ArrowUp" });
expect(stopPropagation).toBeCalledTimes(1);
expect(preventDefault).toBeCalledTimes(1);
expect(onPress).toBeCalledTimes(0);
expect(focusNext).toBeCalledTimes(0);
expect(focusPrev).toBeCalledTimes(1);
reset();
result.current.onKeyDown({ ...params, code: "Space" });
expect(stopPropagation).toBeCalledTimes(1);
expect(preventDefault).toBeCalledTimes(1);
expect(onPress).toBeCalledTimes(1);
expect(focusNext).toBeCalledTimes(0);
expect(focusPrev).toBeCalledTimes(0);
reset();
});
});
//# sourceMappingURL=Focus.web.spec.js.map