diff --git a/src/__tests__/fireEvent.test.js b/src/__tests__/fireEvent.test.js index 5fef1c806..0b5f72c27 100644 --- a/src/__tests__/fireEvent.test.js +++ b/src/__tests__/fireEvent.test.js @@ -3,6 +3,7 @@ import React from 'react'; import { View, TouchableOpacity, + PanResponder, Pressable, Text, ScrollView, @@ -305,3 +306,27 @@ test('is not fooled by non-responder wrapping host elements', () => { fireEvent.press(screen.getByText('Trigger')); expect(handlePress).not.toHaveBeenCalled(); }); + +function TestDraggableComponent({ onDrag }) { + const responderHandlers = PanResponder.create({ + onMoveShouldSetPanResponder: (_evt, _gestureState) => true, + onPanResponderMove: onDrag, + }).panHandlers; + + return ( + + Trigger + + ); +} + +test('has only onMove', () => { + const handleDrag = jest.fn(); + + const screen = render(); + + fireEvent(screen.getByText('Trigger'), 'responderMove', { + touchHistory: { mostRecentTimeStamp: '2', touchBank: [] }, + }); + expect(handleDrag).toHaveBeenCalled(); +}); diff --git a/src/fireEvent.js b/src/fireEvent.js index f3846c714..7f21f0339 100644 --- a/src/fireEvent.js +++ b/src/fireEvent.js @@ -23,7 +23,12 @@ const isEventEnabled = ( ) => { if (isTextInput(element)) return element?.props.editable !== false; - return touchResponder?.props.onStartShouldSetResponder?.() !== false; + const touchStart = touchResponder?.props.onStartShouldSetResponder?.(); + const touchMove = touchResponder?.props.onMoveShouldSetResponder?.(); + + if (touchStart || touchMove) return true; + + return touchStart === undefined && touchMove === undefined; }; const findEventHandler = (