diff --git a/__tests__/Container.js b/__tests__/Container.js index f058b5d..d735306 100644 --- a/__tests__/Container.js +++ b/__tests__/Container.js @@ -2,7 +2,7 @@ import { render, fireEvent } from '@testing-library/react-native' import React from 'react' import { Pressable, View } from 'react-native' import Container from '../src/Container' -import { tap } from '../src/utils' +import { events } from '../src/utils' describe("Container testing suite | handling different use cases of the Container's behavior.", () => { test('Container renders a single child', () => { @@ -34,7 +34,7 @@ describe("Container testing suite | handling different use cases of the Containe ) - tap(getByTestId('container')) + events.tap(getByTestId('container')) expect(onPress).toHaveBeenCalled() }) diff --git a/__tests__/Controller.js b/__tests__/Controller.js index b620700..8801d68 100644 --- a/__tests__/Controller.js +++ b/__tests__/Controller.js @@ -10,7 +10,7 @@ import { getLength, reset } from '../src/ref' -import { tap } from '../src/utils' +import { events } from '../src/utils' describe('Controller testing suite | handling different use cases of the Controller behavior.', () => { afterEach(() => { @@ -20,17 +20,17 @@ describe('Controller testing suite | handling different use cases of the Control describe('Rendering Related', () => { test('Container renders a single controller child', () => { - const { getAllByTestId } = render( + const { getByTestId } = render( ) - expect(getAllByTestId('child')).toBeDefined() + expect(getByTestId('child')).toBeDefined() }) test('Container renders multiple controllers', () => { - const { getAllByTestId } = render( + const { getByTestId } = render( @@ -40,8 +40,50 @@ describe('Controller testing suite | handling different use cases of the Control ) - expect(getAllByTestId('child#1')).toBeDefined() - expect(getAllByTestId('child#2')).toBeDefined() + expect(getByTestId('child#1')).toBeDefined() + expect(getByTestId('child#2')).toBeDefined() + }) + }) + + describe('Handling Touches', () => { + test("Controller presses does not trigger Container's", () => { + const onContainerPress = jest.fn(() => {}) + const onControllerPress = jest.fn(() => {}) + + const { getByTestId } = render( + + + + + + ) + events.tap(getByTestId('ctrlr#1')) + expect(onControllerPress).toHaveBeenCalled() + expect(onContainerPress).toHaveBeenCalledTimes(0) + }) + + test("Container presses does not trigger Controller's", () => { + const onContainerPress = jest.fn(() => {}) + const onControllerPress = jest.fn(() => {}) + + const { getByTestId } = render( + + + + + + ) + events.tap(getByTestId('cntr#1')) + expect(onContainerPress).toHaveBeenCalled() + expect(onControllerPress).toHaveBeenCalledTimes(0) }) }) @@ -115,7 +157,7 @@ describe('Controller testing suite | handling different use cases of the Control ) expect(getFocused()).toBeUndefined() - tap(getByTestId('ctrlr')) + events.tap(getByTestId('ctrlr')) expect(onFocus).toHaveBeenCalled() expect(getFocused()).toBeDefined() }) @@ -130,7 +172,7 @@ describe('Controller testing suite | handling different use cases of the Control ) expect(getFocused()).toBeUndefined() - tap(getByTestId('ctrlr')) + events.tap(getByTestId('ctrlr')) expect(getFocused()).toBeUndefined() }) }) @@ -157,7 +199,7 @@ describe('Controller testing suite | handling different use cases of the Control ) expect(getFocused()).toBeUndefined() - tap(getByTestId('ctrlr')) + events.tap(getByTestId('ctrlr')) expect(onContainerPress).toHaveBeenCalledTimes(0) expect(onControllerFocus).toHaveBeenCalled() expect(onCustomTextInputFocus).toHaveBeenCalled() @@ -172,9 +214,9 @@ describe('Controller testing suite | handling different use cases of the Control ) - tap(getByTestId('ctrlr')) + events.tap(getByTestId('ctrlr')) expect(getFocused()).toBeDefined() - tap(getByTestId('ctnr')) + events.tap(getByTestId('ctnr')) expect(getFocused()).toBeUndefined() }) @@ -191,9 +233,9 @@ describe('Controller testing suite | handling different use cases of the Control ) - tap(getByTestId('ctrlr')) + events.tap(getByTestId('ctrlr')) expect(getFocused()).toBeDefined() - tap(getByTestId('ctnr')) + events.tap(getByTestId('ctnr')) expect(getFocused()).toBeDefined() }) test('Focused Controller gets blurred properly once clicking on another Controller when onBlur returns true', () => { @@ -212,10 +254,10 @@ describe('Controller testing suite | handling different use cases of the Control ) - tap(getByTestId('ctrlr#1')) + events.tap(getByTestId('ctrlr#1')) expect(getFocused()).toBeDefined() const focused1 = getFocusedId() - tap(getByTestId('ctrlr#2')) + events.tap(getByTestId('ctrlr#2')) expect(getFocused()).toBeDefined() const focused2 = getFocusedId() expect(focused1).not.toEqual(focused2) @@ -236,10 +278,10 @@ describe('Controller testing suite | handling different use cases of the Control ) - tap(getByTestId('ctrlr#1')) + events.tap(getByTestId('ctrlr#1')) expect(getFocused()).toBeDefined() const focused1 = getFocusedId() - tap(getByTestId('ctrlr#2')) + events.tap(getByTestId('ctrlr#2')) expect(getFocused()).toBeDefined() const focused2 = getFocusedId() expect(focused1).not.toEqual(focused2) diff --git a/src/Container.tsx b/src/Container.tsx index 1f58c50..974aafa 100644 --- a/src/Container.tsx +++ b/src/Container.tsx @@ -8,8 +8,6 @@ type Props = ViewProps & { onPress?: () => void } -const _onStartShouldSetResponder = () => true - const Container = ({ children, onPress, ...props }: Props) => { const onContainerPress = useCallback( (_: GestureResponderEvent) => { @@ -20,11 +18,7 @@ const Container = ({ children, onPress, ...props }: Props) => { ) return ( - + {children} ) diff --git a/src/Controller.tsx b/src/Controller.tsx index f23ee7e..3b9a582 100644 --- a/src/Controller.tsx +++ b/src/Controller.tsx @@ -64,7 +64,7 @@ function Controller({ return ( {React.cloneElement(children as any, { ref: refSetter })} diff --git a/src/utils.ts b/src/utils.ts index 3810160..4c4b3a0 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,7 +1,18 @@ import { fireEvent } from '@testing-library/react-native' +/** + * Simulate a `onResponderRelease` event through `fireEvent` + * @param node + */ const tap = (node: any) => { - fireEvent(node, 'onResponderRelease') + const memoizedProps = Object.keys(node._fiber.memoizedProps) + if (memoizedProps.includes('onResponderRelease')) + fireEvent(node, 'onResponderRelease') + if (memoizedProps.includes('onPress')) fireEvent.press(node) } -export { tap } +const events = { + tap +} + +export { events }