UNPKG

react-native-web-internals

Version:

React Native for Web

284 lines (283 loc) 10.1 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { clearPointers, createEventTarget, describeWithPointerEvent, setPointerEvent } from "dom-event-testing-library"; import * as React from "react"; import * as ReactDOM from "react-dom"; import { act } from "react-dom/test-utils"; import { testOnly_resetActiveModality } from "../../modality/index.native.js"; import useHover from "../index.native.js"; function createRoot(rootNode) { return { render(element) { ReactDOM.render(element, rootNode); } }; } describeWithPointerEvent("useHover", function (hasPointerEvents) { var root, rootNode; beforeEach(function () { setPointerEvent(hasPointerEvents), rootNode = document.createElement("div"), document.body.appendChild(rootNode), root = createRoot(rootNode); }), afterEach(function () { root.render(null), document.body.removeChild(rootNode), rootNode = null, root = null, testOnly_resetActiveModality(), clearPointers(); }), describe("contain", function () { var onHoverChange, onHoverStart, onHoverUpdate, onHoverEnd, ref, childRef, componentInit = function () { onHoverChange = jest.fn(), onHoverStart = jest.fn(), onHoverUpdate = jest.fn(), onHoverEnd = jest.fn(), ref = /* @__PURE__ */React.createRef(), childRef = /* @__PURE__ */React.createRef(); var Component = function () { return useHover(ref, { onHoverChange, onHoverStart, onHoverUpdate, onHoverEnd }), useHover(childRef, { contain: !0 }), /* @__PURE__ */_jsx("div", { ref, children: /* @__PURE__ */_jsx("div", { ref: childRef }) }); }; act(function () { root.render(/* @__PURE__ */_jsx(Component, {})); }); }; test("contains the hover gesture", function () { componentInit(); var target = createEventTarget(ref.current), child = createEventTarget(childRef.current); act(function () { target.pointerover(), target.pointerout(), child.pointerover(); }), expect(onHoverEnd).toBeCalled(), act(function () { child.pointerout(); }), expect(onHoverStart).toBeCalled(); }); }), describe("disabled", function () { var onHoverChange, onHoverStart, onHoverUpdate, onHoverEnd, ref, componentInit = function () { onHoverChange = jest.fn(), onHoverStart = jest.fn(), onHoverUpdate = jest.fn(), onHoverEnd = jest.fn(), ref = /* @__PURE__ */React.createRef(); var Component = function () { return useHover(ref, { disabled: !0, onHoverChange, onHoverStart, onHoverUpdate, onHoverEnd }), /* @__PURE__ */_jsx("div", { ref }); }; act(function () { root.render(/* @__PURE__ */_jsx(Component, {})); }); }; test("does not call callbacks", function () { componentInit(); var target = createEventTarget(ref.current); act(function () { target.pointerover(), target.pointerout(); }), expect(onHoverChange).not.toBeCalled(), expect(onHoverStart).not.toBeCalled(), expect(onHoverUpdate).not.toBeCalled(), expect(onHoverEnd).not.toBeCalled(); }); }), describe("onHoverStart", function () { var onHoverStart, ref, componentInit = function () { onHoverStart = jest.fn(), ref = /* @__PURE__ */React.createRef(); var Component = function () { return useHover(ref, { onHoverStart }), /* @__PURE__ */_jsx("div", { ref }); }; act(function () { root.render(/* @__PURE__ */_jsx(Component, {})); }); }; test("is called for mouse pointers", function () { componentInit(); var target = createEventTarget(ref.current); act(function () { target.pointerover({ pointerType: "mouse" }); }), expect(onHoverStart).toBeCalledTimes(1); }), test("is not called for touch pointers", function () { componentInit(); var target = createEventTarget(ref.current); act(function () { target.pointerdown({ pointerType: "touch" }), target.pointerup({ pointerType: "touch" }); }), expect(onHoverStart).not.toBeCalled(); }), test("is called if a mouse pointer is used after a touch pointer", function () { componentInit(); var target = createEventTarget(ref.current); act(function () { target.pointerdown({ pointerType: "touch" }), target.pointerup({ pointerType: "touch" }), target.pointerover({ pointerType: "mouse" }); }), expect(onHoverStart).toBeCalledTimes(1); }); }), describe("onHoverChange", function () { var onHoverChange, ref, componentInit = function () { onHoverChange = jest.fn(), ref = /* @__PURE__ */React.createRef(); var Component = function () { return useHover(ref, { onHoverChange }), /* @__PURE__ */_jsx("div", { ref }); }; act(function () { root.render(/* @__PURE__ */_jsx(Component, {})); }); }; test("is called for mouse pointers", function () { componentInit(); var target = createEventTarget(ref.current); act(function () { target.pointerover(); }), expect(onHoverChange).toBeCalledTimes(1), expect(onHoverChange).toBeCalledWith(!0), act(function () { target.pointerout(); }), expect(onHoverChange).toBeCalledTimes(2), expect(onHoverChange).toBeCalledWith(!1); }), test("is not called for touch pointers", function () { componentInit(); var target = createEventTarget(ref.current); act(function () { target.pointerdown({ pointerType: "touch" }), target.pointerup({ pointerType: "touch" }); }), expect(onHoverChange).not.toBeCalled(); }); }), describe("onHoverEnd", function () { var onHoverEnd, ref, childRef, componentInit = function () { onHoverEnd = jest.fn(), ref = /* @__PURE__ */React.createRef(), childRef = /* @__PURE__ */React.createRef(); var Component = function () { return useHover(ref, { onHoverEnd }), /* @__PURE__ */_jsx("div", { ref, children: /* @__PURE__ */_jsx("div", { ref: childRef }) }); }; act(function () { root.render(/* @__PURE__ */_jsx(Component, {})); }); }; test("is called for mouse pointers", function () { componentInit(); var target = createEventTarget(ref.current); act(function () { target.pointerover(), target.pointerout(); }), expect(onHoverEnd).toBeCalledTimes(1); }), test("is not called for touch pointers", function () { componentInit(); var target = createEventTarget(ref.current); act(function () { target.pointerdown({ pointerType: "touch" }), target.pointerup({ pointerType: "touch" }); }), expect(onHoverEnd).not.toBeCalled(); }), test("is not called when entering children of the target", function () { componentInit(); var target = createEventTarget(ref.current), child = createEventTarget(childRef.current); act(function () { target.pointerover(), target.pointerout({ relatedTarget: childRef.current }), child.pointerover({ relatedTarget: target.node }); }), expect(onHoverEnd).not.toBeCalled(); }); }), describe("onHoverUpdate", function () { test('is called after the active pointer moves"', function () { var onHoverUpdate = jest.fn(), ref = /* @__PURE__ */React.createRef(), Component = function () { return useHover(ref, { onHoverUpdate }), /* @__PURE__ */_jsx("div", { ref }); }; act(function () { root.render(/* @__PURE__ */_jsx(Component, {})); }); var target = createEventTarget(ref.current); act(function () { target.pointerover(), target.pointerhover({ x: 0, y: 0 }), target.pointerhover({ x: 1, y: 1 }); }), expect(onHoverUpdate).toBeCalledTimes(2); }); }), describe("repeat use", function () { var onHoverChange, onHoverStart, onHoverUpdate, onHoverEnd, ref, componentInit = function () { onHoverChange = jest.fn(), onHoverStart = jest.fn(), onHoverUpdate = jest.fn(), onHoverEnd = jest.fn(), ref = /* @__PURE__ */React.createRef(); var Component = function () { return useHover(ref, { onHoverChange, onHoverStart, onHoverUpdate, onHoverEnd }), /* @__PURE__ */_jsx("div", { ref }); }; act(function () { root.render(/* @__PURE__ */_jsx(Component, {})); }); }; test("callbacks are called each time", function () { componentInit(); var target = createEventTarget(ref.current); act(function () { target.pointerover(), target.pointerhover({ x: 1, y: 1 }), target.pointerout(); }), expect(onHoverStart).toBeCalledTimes(1), expect(onHoverUpdate).toBeCalledTimes(1), expect(onHoverEnd).toBeCalledTimes(1), expect(onHoverChange).toBeCalledTimes(2), act(function () { target.pointerover(), target.pointerhover({ x: 1, y: 1 }), target.pointerout(); }), expect(onHoverStart).toBeCalledTimes(2), expect(onHoverUpdate).toBeCalledTimes(2), expect(onHoverEnd).toBeCalledTimes(2), expect(onHoverChange).toBeCalledTimes(4); }); }); }); //# sourceMappingURL=index-test.native.js.map