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 }