UNPKG

react-native-reanimated-carousel

Version:

Simple carousel component.fully implemented using Reanimated 2.Infinitely scrolling, very smooth.

2 lines 13 kB
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _react=_interopRequireDefault(require("react"));var _reactNative=require("react-native");var _reactNativeGestureHandler=require("react-native-gesture-handler");var _reactNative2=require("@testing-library/react-native");var _jestUtils=require("react-native-gesture-handler/jest-utils");var _usePanGestureProxy=require("./usePanGestureProxy");var _jsxRuntime=require("react/jsx-runtime");var _this=this,_jsxFileName="/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/hooks/usePanGestureProxy.test.tsx";beforeEach(_reactNative2.cleanup);var mockedEventHandlers=function mockedEventHandlers(){return{begin:jest.fn(),start:jest.fn(),active:jest.fn(),end:jest.fn(),fail:jest.fn(),cancel:jest.fn(),finish:jest.fn()};};var mockedEventHandlersFromUser=function mockedEventHandlersFromUser(){return{begin:jest.fn(),start:jest.fn(),active:jest.fn(),end:jest.fn(),fail:jest.fn(),cancel:jest.fn(),finish:jest.fn()};};describe("Using RNGH v2 gesture API",function(){function SingleHandler(_ref){var handlers=_ref.handlers,handlersFromUser=_ref.handlersFromUser,treatStartAsUpdate=_ref.treatStartAsUpdate;var pan=(0,_usePanGestureProxy.usePanGestureProxy)({onConfigurePanGesture:function onConfigurePanGesture(gesture){gesture.onBegin(handlersFromUser.begin).onUpdate(handlersFromUser.active).onEnd(handlersFromUser.end).onFinalize(handlers.finish).withTestId("pan");},onGestureStart:treatStartAsUpdate?handlers.active:handlers.start,onGestureUpdate:handlers.active,onGestureEnd:handlers.end,options:{enabled:true}});return(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureHandlerRootView,{children:(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:pan,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{children:"v2 API test"})})});}function RacingHandlers(_ref2){var tapHandlers=_ref2.tapHandlers,panHandlers=_ref2.panHandlers;var tap=_reactNativeGestureHandler.Gesture.Tap().onBegin(tapHandlers.begin).onEnd(tapHandlers.end).withTestId("tap");var pan=(0,_usePanGestureProxy.usePanGestureProxy)({onConfigurePanGesture:function onConfigurePanGesture(_){_.onBegin(panHandlers.begin).onFinalize(panHandlers.finish).withTestId("pan");},onGestureStart:panHandlers.start,onGestureUpdate:panHandlers.active,onGestureEnd:panHandlers.end,options:{enabled:true}});return(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureHandlerRootView,{children:(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:_reactNativeGestureHandler.Gesture.Race(tap,pan),children:(0,_jsxRuntime.jsx)(_reactNative.Text,{children:"v2 API test"})})});}it("sends events to handlers",function(){var tapHandlers=mockedEventHandlers();var panHandlers=mockedEventHandlers();(0,_reactNative2.render)((0,_jsxRuntime.jsx)(RacingHandlers,{tapHandlers:tapHandlers,panHandlers:panHandlers}));(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)("pan"),[{state:_reactNativeGestureHandler.State.BEGAN},{state:_reactNativeGestureHandler.State.ACTIVE},{state:_reactNativeGestureHandler.State.END}]);expect(panHandlers.begin).toBeCalledWith(expect.objectContaining({state:_reactNativeGestureHandler.State.BEGAN}));expect(panHandlers.finish).toBeCalled();expect(tapHandlers.begin).not.toBeCalled();});it("sends events with additional data to handlers",function(){var panHandlers=mockedEventHandlers();var panHandlersFromUser=mockedEventHandlersFromUser();(0,_reactNative2.render)((0,_jsxRuntime.jsx)(SingleHandler,{handlers:panHandlers,handlersFromUser:panHandlersFromUser,treatStartAsUpdate:true}));(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)("pan"),[{state:_reactNativeGestureHandler.State.BEGAN,translationX:0},{state:_reactNativeGestureHandler.State.ACTIVE,translationX:10},{translationX:20},{translationX:20},{state:_reactNativeGestureHandler.State.END,translationX:30}]);expect(panHandlersFromUser.begin).toBeCalledTimes(1);expect(panHandlersFromUser.active).toBeCalledTimes(2);expect(panHandlersFromUser.end).toBeCalledTimes(1);expect(panHandlers.active).toBeCalledTimes(3);expect(panHandlers.active).toHaveBeenLastCalledWith(expect.objectContaining({translationX:20}));});it("does not include console.error in the output",function(){var panHandlers=mockedEventHandlers();var panHandlersFromUser=mockedEventHandlersFromUser();jest.spyOn(console,"error");(0,_reactNative2.render)((0,_jsxRuntime.jsx)(SingleHandler,{handlers:panHandlers,handlersFromUser:panHandlersFromUser,treatStartAsUpdate:true}));(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)("pan"),[{state:_reactNativeGestureHandler.State.BEGAN},{state:_reactNativeGestureHandler.State.ACTIVE},{state:_reactNativeGestureHandler.State.END}]);expect(console.error).not.toBeCalled();});});describe("Event list validation",function(){function SingleHandler(_ref3){var handlers=_ref3.handlers,handlersFromUser=_ref3.handlersFromUser,treatStartAsUpdate=_ref3.treatStartAsUpdate;var pan=(0,_usePanGestureProxy.usePanGestureProxy)({onConfigurePanGesture:function onConfigurePanGesture(_){_.onBegin(handlersFromUser.begin).onUpdate(handlersFromUser.active).onEnd(handlersFromUser.end).onFinalize(handlers.finish).withTestId("pan");},onGestureStart:treatStartAsUpdate?handlers.active:handlers.start,onGestureUpdate:handlers.active,onGestureEnd:handlers.end,options:{enabled:true}});return(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureHandlerRootView,{children:(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:pan,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{children:"v2 API test"})})});}it("throws error when oldState doesn't correspond to previous event's state",function(){var panHandlers=mockedEventHandlers();var panHandlersFromUser=mockedEventHandlersFromUser();(0,_reactNative2.render)((0,_jsxRuntime.jsx)(SingleHandler,{handlers:panHandlers,handlersFromUser:panHandlersFromUser}));expect(function(){(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)("pan"),[{oldState:_reactNativeGestureHandler.State.UNDETERMINED,state:_reactNativeGestureHandler.State.BEGAN,x:0,y:10},{oldState:_reactNativeGestureHandler.State.UNDETERMINED,state:_reactNativeGestureHandler.State.ACTIVE,x:1,y:11}]);}).toThrow("when state changes, oldState should be the same as previous event' state");});it.each([[_reactNativeGestureHandler.State.END],[_reactNativeGestureHandler.State.FAILED],[_reactNativeGestureHandler.State.CANCELLED]])("correctly handles events ending with state %s",function(lastState){var panHandlers=mockedEventHandlers();var panHandlersFromUser=mockedEventHandlersFromUser();(0,_reactNative2.render)((0,_jsxRuntime.jsx)(SingleHandler,{handlers:panHandlers,handlersFromUser:panHandlersFromUser}));(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)("pan"),[{state:_reactNativeGestureHandler.State.BEGAN},{state:_reactNativeGestureHandler.State.ACTIVE},{state:lastState}]);expect(panHandlersFromUser.begin).toBeCalledTimes(1);expect(panHandlersFromUser.active).toBeCalledTimes(0);expect(panHandlersFromUser.end).toBeCalledTimes(1);if(lastState===_reactNativeGestureHandler.State.END)expect(panHandlers.end).toBeCalled();else expect(panHandlers.finish).toBeCalledWith(expect.any(Object),false);});});describe("Filling event list with defaults",function(){function RacingTapAndPan(_ref4){var handlers=_ref4.handlers,treatStartAsUpdate=_ref4.treatStartAsUpdate;var tap=_reactNativeGestureHandler.Gesture.Tap().onBegin(handlers.begin).onEnd(handlers.end).withTestId("tap");var pan=(0,_usePanGestureProxy.usePanGestureProxy)({onConfigurePanGesture:function onConfigurePanGesture(_){_.onBegin(handlers.begin).onFinalize(handlers.finish).withTestId("pan");},onGestureStart:treatStartAsUpdate?handlers.active:handlers.start,onGestureUpdate:handlers.active,onGestureEnd:handlers.end,options:{enabled:true}});return(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureHandlerRootView,{children:(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:_reactNativeGestureHandler.Gesture.Exclusive(pan,tap),children:(0,_jsxRuntime.jsx)(_reactNative.Text,{children:"v2 API test"})})});}it("fills oldState if not passed",function(){var handlers=mockedEventHandlers();(0,_reactNative2.render)((0,_jsxRuntime.jsx)(RacingTapAndPan,{handlers:handlers,treatStartAsUpdate:true}));(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)("pan"),[{state:_reactNativeGestureHandler.State.BEGAN},{state:_reactNativeGestureHandler.State.ACTIVE},{state:_reactNativeGestureHandler.State.ACTIVE},{state:_reactNativeGestureHandler.State.ACTIVE},{state:_reactNativeGestureHandler.State.END}]);expect(handlers.begin).toBeCalledWith(expect.objectContaining({oldState:_reactNativeGestureHandler.State.UNDETERMINED}));expect(handlers.active).nthCalledWith(1,expect.objectContaining({oldState:_reactNativeGestureHandler.State.BEGAN}));expect(handlers.active).lastCalledWith(expect.not.objectContaining({oldState:expect.anything()}));expect(handlers.end).toBeCalledWith(expect.objectContaining({oldState:_reactNativeGestureHandler.State.ACTIVE}),true);});it("fills missing ACTIVE states",function(){var panHandlers=mockedEventHandlers();(0,_reactNative2.render)((0,_jsxRuntime.jsx)(RacingTapAndPan,{handlers:panHandlers,treatStartAsUpdate:true}));(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)("pan"),[{state:_reactNativeGestureHandler.State.BEGAN,x:0,y:10},{state:_reactNativeGestureHandler.State.ACTIVE,x:1,y:11},{x:2,y:12},{x:3,y:13},{state:_reactNativeGestureHandler.State.END,x:4,y:14}]);expect(panHandlers.active).toBeCalledTimes(3);expect(panHandlers.active).toHaveBeenLastCalledWith(expect.objectContaining({x:3,y:13}));});it("fills BEGIN and END events for discrete handlers",function(){var handlers=mockedEventHandlers();(0,_reactNative2.render)((0,_jsxRuntime.jsx)(RacingTapAndPan,{handlers:handlers,treatStartAsUpdate:true}));(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)("tap"),[{x:5}]);expect(handlers.begin).toBeCalledTimes(1);expect(handlers.end).toBeCalledTimes(1);});it("with FAILED event, fills BEGIN event for discrete handlers",function(){var handlers=mockedEventHandlers();(0,_reactNative2.render)((0,_jsxRuntime.jsx)(RacingTapAndPan,{handlers:handlers,treatStartAsUpdate:true}));(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)("tap"),[{state:_reactNativeGestureHandler.State.FAILED}]);expect(handlers.begin).toBeCalledTimes(1);expect(handlers.end).toBeCalledTimes(1);expect(handlers.end).toBeCalledWith(expect.anything(),false);});it("uses event data from first event in filled BEGIN, ACTIVE events",function(){var handlers=mockedEventHandlers();(0,_reactNative2.render)((0,_jsxRuntime.jsx)(RacingTapAndPan,{handlers:handlers,treatStartAsUpdate:true}));(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)("pan"),[{x:120}]);expect(handlers.begin).toBeCalledWith(expect.objectContaining({x:120}));expect(handlers.active).toHaveBeenNthCalledWith(1,expect.objectContaining({x:120}));});it("uses event data from last event in filled END events",function(){var handlers=mockedEventHandlers();(0,_reactNative2.render)((0,_jsxRuntime.jsx)(RacingTapAndPan,{handlers:handlers,treatStartAsUpdate:true}));(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)("pan"),[{x:120,state:_reactNativeGestureHandler.State.FAILED}]);expect(handlers.begin).toBeCalledTimes(1);expect(handlers.active).toBeCalledTimes(1);expect(handlers.end).toBeCalledWith(expect.objectContaining({x:120}),false);});it("uses event data filled events",function(){var handlers=mockedEventHandlers();(0,_reactNative2.render)((0,_jsxRuntime.jsx)(RacingTapAndPan,{handlers:handlers,treatStartAsUpdate:true}));(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)("pan"),[{x:5,y:15},{x:6,y:16},{x:7,y:17}]);expect(handlers.begin).toBeCalledWith(expect.objectContaining({x:5,y:15}));expect(handlers.active).toBeCalledTimes(3);expect(handlers.end).toBeCalledWith(expect.objectContaining({x:7,y:17}),true);});it("fills BEGIN and END events when they're not present, for discrete handlers",function(){var handlers=mockedEventHandlers();(0,_reactNative2.render)((0,_jsxRuntime.jsx)(RacingTapAndPan,{handlers:handlers,treatStartAsUpdate:true}));(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)("tap"));expect(handlers.begin).toBeCalledTimes(1);expect(handlers.end).toHaveBeenCalledTimes(1);});it("fills BEGIN, ACTIVE and END events when they're not present, for continuous handlers",function(){var handlers=mockedEventHandlers();(0,_reactNative2.render)((0,_jsxRuntime.jsx)(RacingTapAndPan,{handlers:handlers,treatStartAsUpdate:true}));(0,_jestUtils.fireGestureHandler)((0,_jestUtils.getByGestureTestId)("pan"));expect(handlers.begin).toBeCalledTimes(1);expect(handlers.active).toBeCalledTimes(1);expect(handlers.end).toHaveBeenCalledTimes(1);});}); //# sourceMappingURL=usePanGestureProxy.test.js.map