@testing-library/react-native 12.2.1 → 12.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. package/package.json +2 -3
  2. package/.DS_Store +0 -0
  3. package/.codecov.yml +0 -9
  4. package/.eslintcache +0 -1
  5. package/.eslintignore +0 -3
  6. package/.eslintrc +0 -19
  7. package/.flowconfig +0 -63
  8. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  9. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -14
  10. package/.github/ISSUE_TEMPLATE/question.md +0 -9
  11. package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
  12. package/.github/actions/setup-deps/action.yml +0 -22
  13. package/.github/actions/setup-website-deps/action.yml +0 -22
  14. package/.github/dependabot.yml +0 -10
  15. package/.github/workflows/deploy-website.yml +0 -36
  16. package/.github/workflows/example-apps.yml +0 -25
  17. package/.github/workflows/main.yml +0 -103
  18. package/.gitignore +0 -11
  19. package/.prettierrc.js +0 -5
  20. package/CODE_OF_CONDUCT.md +0 -73
  21. package/CONTRIBUTING.md +0 -64
  22. package/babel.config.js +0 -22
  23. package/examples/basic/.expo/README.md +0 -15
  24. package/examples/basic/.expo/packager-info.json +0 -4
  25. package/examples/basic/.expo/settings.json +0 -10
  26. package/examples/basic/.expo-shared/assets.json +0 -4
  27. package/examples/basic/.gitignore +0 -14
  28. package/examples/basic/App.tsx +0 -20
  29. package/examples/basic/README.md +0 -11
  30. package/examples/basic/__tests__/App.test.tsx +0 -137
  31. package/examples/basic/app.json +0 -31
  32. package/examples/basic/assets/adaptive-icon.png +0 -0
  33. package/examples/basic/assets/favicon.png +0 -0
  34. package/examples/basic/assets/icon.png +0 -0
  35. package/examples/basic/assets/splash.png +0 -0
  36. package/examples/basic/babel.config.js +0 -6
  37. package/examples/basic/components/Home.tsx +0 -28
  38. package/examples/basic/components/LoginForm.tsx +0 -138
  39. package/examples/basic/jest-setup.ts +0 -7
  40. package/examples/basic/jest.config.js +0 -5
  41. package/examples/basic/package.json +0 -30
  42. package/examples/basic/tsconfig.json +0 -7
  43. package/examples/basic/yarn.lock +0 -7499
  44. package/examples/react-navigation/README.md +0 -16
  45. package/examples/react-navigation/babel.config.js +0 -4
  46. package/examples/react-navigation/jest-setup.js +0 -11
  47. package/examples/react-navigation/jest.config.js +0 -10
  48. package/examples/react-navigation/package.json +0 -31
  49. package/examples/react-navigation/src/App.js +0 -21
  50. package/examples/react-navigation/src/DrawerNavigator.js +0 -15
  51. package/examples/react-navigation/src/DrawerNavigator.test.js +0 -42
  52. package/examples/react-navigation/src/NativeStackNavigator.js +0 -15
  53. package/examples/react-navigation/src/NativeStackNavigator.test.js +0 -34
  54. package/examples/react-navigation/src/StackNavigator.js +0 -15
  55. package/examples/react-navigation/src/StackNavigator.test.js +0 -34
  56. package/examples/react-navigation/src/TabNavigator.js +0 -15
  57. package/examples/react-navigation/src/TabNavigator.test.js +0 -21
  58. package/examples/react-navigation/src/screens/DetailsScreen.js +0 -43
  59. package/examples/react-navigation/src/screens/DetailsScreen.test.js +0 -27
  60. package/examples/react-navigation/src/screens/DrawerHomeScreen.js +0 -26
  61. package/examples/react-navigation/src/screens/HomeScreen.js +0 -48
  62. package/examples/react-navigation/src/screens/SettingsScreen.js +0 -20
  63. package/examples/react-navigation/src/test-utils.js +0 -12
  64. package/examples/react-navigation/yarn.lock +0 -5018
  65. package/examples/redux/App.js +0 -27
  66. package/examples/redux/README.md +0 -5
  67. package/examples/redux/actions/todoActions.js +0 -25
  68. package/examples/redux/babel.config.js +0 -6
  69. package/examples/redux/components/AddTodo.js +0 -73
  70. package/examples/redux/components/AddTodo.test.js +0 -27
  71. package/examples/redux/components/TodoElem.js +0 -25
  72. package/examples/redux/components/TodoList.js +0 -29
  73. package/examples/redux/components/TodoList.test.js +0 -34
  74. package/examples/redux/index.js +0 -8
  75. package/examples/redux/jest-setup.js +0 -2
  76. package/examples/redux/jest.config.js +0 -4
  77. package/examples/redux/package.json +0 -23
  78. package/examples/redux/reducers/index.js +0 -6
  79. package/examples/redux/reducers/todoReducer.js +0 -27
  80. package/examples/redux/store.js +0 -10
  81. package/examples/redux/test-utils.js +0 -11
  82. package/examples/redux/yarn.lock +0 -4819
  83. package/experiments-app/.expo/README.md +0 -15
  84. package/experiments-app/.expo/devices.json +0 -3
  85. package/experiments-app/.expo/packager-info.json +0 -9
  86. package/experiments-app/.expo/settings.json +0 -9
  87. package/experiments-app/.gitignore +0 -17
  88. package/experiments-app/.prettierrc.js +0 -5
  89. package/experiments-app/app.json +0 -30
  90. package/experiments-app/assets/adaptive-icon.png +0 -0
  91. package/experiments-app/assets/favicon.png +0 -0
  92. package/experiments-app/assets/icon.png +0 -0
  93. package/experiments-app/assets/splash.png +0 -0
  94. package/experiments-app/babel.config.js +0 -6
  95. package/experiments-app/index.js +0 -4
  96. package/experiments-app/package.json +0 -29
  97. package/experiments-app/src/App.tsx +0 -31
  98. package/experiments-app/src/MainScreen.tsx +0 -52
  99. package/experiments-app/src/experiments.ts +0 -35
  100. package/experiments-app/src/screens/FlatListEvents.tsx +0 -57
  101. package/experiments-app/src/screens/ScrollViewEvents.tsx +0 -65
  102. package/experiments-app/src/screens/SectionListEvents.tsx +0 -91
  103. package/experiments-app/src/screens/TextInputEventPropagation.tsx +0 -42
  104. package/experiments-app/src/screens/TextInputEvents.tsx +0 -48
  105. package/experiments-app/src/utils/helpers.ts +0 -18
  106. package/experiments-app/tsconfig.json +0 -6
  107. package/experiments-app/yarn.lock +0 -6709
  108. package/experiments-rtl/.babelrc +0 -8
  109. package/experiments-rtl/.eslintrc.json +0 -3
  110. package/experiments-rtl/.gitignore +0 -35
  111. package/experiments-rtl/README.md +0 -34
  112. package/experiments-rtl/jest-setup.js +0 -1
  113. package/experiments-rtl/jest.config.js +0 -4
  114. package/experiments-rtl/next.config.js +0 -4
  115. package/experiments-rtl/package.json +0 -38
  116. package/experiments-rtl/postcss.config.js +0 -6
  117. package/experiments-rtl/public/next.svg +0 -1
  118. package/experiments-rtl/public/vercel.svg +0 -1
  119. package/experiments-rtl/src/app/__tests__/click.test.tsx +0 -31
  120. package/experiments-rtl/src/app/__tests__/managed-text-input.test.tsx +0 -51
  121. package/experiments-rtl/src/app/globals.css +0 -27
  122. package/experiments-rtl/src/app/layout.tsx +0 -22
  123. package/experiments-rtl/src/app/page.tsx +0 -113
  124. package/experiments-rtl/tailwind.config.ts +0 -20
  125. package/experiments-rtl/tsconfig.json +0 -28
  126. package/experiments-rtl/yarn.lock +0 -5418
  127. package/flow-typed/npm/jest_v26.x.x.js +0 -1218
  128. package/flow-typed/npm/react-test-renderer_v16.x.x.js +0 -81
  129. package/jest-setup.ts +0 -10
  130. package/renovate.json +0 -19
  131. package/scripts/test_react_17 +0 -12
  132. package/src/__tests__/__snapshots__/render-debug.test.tsx.snap +0 -548
  133. package/src/__tests__/__snapshots__/render.test.tsx.snap +0 -39
  134. package/src/__tests__/act.test.tsx +0 -56
  135. package/src/__tests__/auto-cleanup-skip.test.tsx +0 -39
  136. package/src/__tests__/auto-cleanup.test.tsx +0 -50
  137. package/src/__tests__/cleanup.test.tsx +0 -26
  138. package/src/__tests__/config.test.ts +0 -55
  139. package/src/__tests__/fireEvent-textInput.test.tsx +0 -154
  140. package/src/__tests__/fireEvent.test.tsx +0 -485
  141. package/src/__tests__/host-component-names.test.tsx +0 -109
  142. package/src/__tests__/host-text-nesting.test.tsx +0 -90
  143. package/src/__tests__/jest-native.test.tsx +0 -84
  144. package/src/__tests__/questionsBoard.test.tsx +0 -62
  145. package/src/__tests__/react-native-api.test.tsx +0 -126
  146. package/src/__tests__/render-debug.test.tsx +0 -207
  147. package/src/__tests__/render-stringValidation.test.tsx +0 -157
  148. package/src/__tests__/render.test.tsx +0 -256
  149. package/src/__tests__/renderHook.test.tsx +0 -114
  150. package/src/__tests__/screen.test.tsx +0 -66
  151. package/src/__tests__/timerUtils.ts +0 -7
  152. package/src/__tests__/timers.test.ts +0 -27
  153. package/src/__tests__/waitFor.test.tsx +0 -327
  154. package/src/__tests__/waitForElementToBeRemoved.test.tsx +0 -151
  155. package/src/__tests__/within.test.tsx +0 -96
  156. package/src/act.ts +0 -86
  157. package/src/cleanup.ts +0 -15
  158. package/src/config.ts +0 -72
  159. package/src/fireEvent.ts +0 -159
  160. package/src/flush-micro-tasks.ts +0 -30
  161. package/src/helpers/__tests__/accessiblity.test.tsx +0 -373
  162. package/src/helpers/__tests__/component-tree.test.tsx +0 -226
  163. package/src/helpers/__tests__/format-default.tsx +0 -114
  164. package/src/helpers/__tests__/getTextContent.test.tsx +0 -49
  165. package/src/helpers/__tests__/includeHiddenElements.test.tsx +0 -39
  166. package/src/helpers/__tests__/query-name.test.ts +0 -10
  167. package/src/helpers/__tests__/timers.test.ts +0 -8
  168. package/src/helpers/accessiblity.ts +0 -108
  169. package/src/helpers/component-tree.ts +0 -94
  170. package/src/helpers/debugDeep.ts +0 -27
  171. package/src/helpers/debugShallow.ts +0 -22
  172. package/src/helpers/deprecation.ts +0 -53
  173. package/src/helpers/errors.ts +0 -66
  174. package/src/helpers/findAll.ts +0 -70
  175. package/src/helpers/format-default.ts +0 -72
  176. package/src/helpers/format.ts +0 -47
  177. package/src/helpers/getTextContent.ts +0 -20
  178. package/src/helpers/host-component-names.tsx +0 -88
  179. package/src/helpers/matchers/__tests__/matchArrayValue.test.ts +0 -34
  180. package/src/helpers/matchers/__tests__/matchObject.test.ts +0 -37
  181. package/src/helpers/matchers/__tests__/matchStringValue.test.ts +0 -15
  182. package/src/helpers/matchers/accessibilityState.ts +0 -48
  183. package/src/helpers/matchers/accessibilityValue.ts +0 -24
  184. package/src/helpers/matchers/matchArrayProp.ts +0 -21
  185. package/src/helpers/matchers/matchLabelText.ts +0 -50
  186. package/src/helpers/matchers/matchObjectProp.ts +0 -25
  187. package/src/helpers/matchers/matchStringProp.ts +0 -23
  188. package/src/helpers/matchers/matchTextContent.ts +0 -20
  189. package/src/helpers/pointer-events.ts +0 -27
  190. package/src/helpers/query-name.ts +0 -4
  191. package/src/helpers/stringValidation.ts +0 -36
  192. package/src/helpers/timers.ts +0 -98
  193. package/src/index.ts +0 -33
  194. package/src/matches.ts +0 -49
  195. package/src/pure.ts +0 -27
  196. package/src/queries/__tests__/a11yState.test.tsx +0 -439
  197. package/src/queries/__tests__/a11yValue.test.tsx +0 -309
  198. package/src/queries/__tests__/displayValue.test.tsx +0 -221
  199. package/src/queries/__tests__/hintText.test.tsx +0 -177
  200. package/src/queries/__tests__/labelText.test.tsx +0 -242
  201. package/src/queries/__tests__/makeQueries.test.tsx +0 -235
  202. package/src/queries/__tests__/placeholderText.test.tsx +0 -136
  203. package/src/queries/__tests__/role-value.test.tsx +0 -176
  204. package/src/queries/__tests__/role.test.tsx +0 -824
  205. package/src/queries/__tests__/testId.test.tsx +0 -200
  206. package/src/queries/__tests__/text.test.tsx +0 -556
  207. package/src/queries/a11yState.ts +0 -127
  208. package/src/queries/a11yValue.ts +0 -127
  209. package/src/queries/displayValue.ts +0 -71
  210. package/src/queries/hintText.ts +0 -107
  211. package/src/queries/labelText.ts +0 -57
  212. package/src/queries/makeQueries.ts +0 -255
  213. package/src/queries/options.ts +0 -14
  214. package/src/queries/placeholderText.ts +0 -72
  215. package/src/queries/role.ts +0 -131
  216. package/src/queries/testId.ts +0 -66
  217. package/src/queries/text.ts +0 -63
  218. package/src/queries/unsafeProps.ts +0 -76
  219. package/src/queries/unsafeType.ts +0 -73
  220. package/src/react-versions.ts +0 -11
  221. package/src/render-act.ts +0 -19
  222. package/src/render.tsx +0 -183
  223. package/src/renderHook.tsx +0 -56
  224. package/src/screen.ts +0 -123
  225. package/src/shallow.ts +0 -18
  226. package/src/test-utils/events.ts +0 -24
  227. package/src/test-utils/index.ts +0 -1
  228. package/src/user-event/__tests__/__snapshots__/clear.test.tsx.snap +0 -269
  229. package/src/user-event/__tests__/clear.test.tsx +0 -217
  230. package/src/user-event/clear.ts +0 -59
  231. package/src/user-event/event-builder/common.ts +0 -66
  232. package/src/user-event/event-builder/index.ts +0 -7
  233. package/src/user-event/event-builder/text-input.ts +0 -86
  234. package/src/user-event/index.ts +0 -18
  235. package/src/user-event/press/__tests__/longPress.real-timers.test.tsx +0 -117
  236. package/src/user-event/press/__tests__/longPress.test.tsx +0 -157
  237. package/src/user-event/press/__tests__/press.real-timers.test.tsx +0 -320
  238. package/src/user-event/press/__tests__/press.test.tsx +0 -457
  239. package/src/user-event/press/constants.ts +0 -7
  240. package/src/user-event/press/index.ts +0 -1
  241. package/src/user-event/press/press.ts +0 -163
  242. package/src/user-event/setup/index.ts +0 -2
  243. package/src/user-event/setup/setup.ts +0 -142
  244. package/src/user-event/type/__tests__/__snapshots__/type-managed.test.tsx.snap +0 -339
  245. package/src/user-event/type/__tests__/__snapshots__/type.test.tsx.snap +0 -668
  246. package/src/user-event/type/__tests__/parseKeys.test.ts +0 -23
  247. package/src/user-event/type/__tests__/type-managed.test.tsx +0 -120
  248. package/src/user-event/type/__tests__/type.test.tsx +0 -335
  249. package/src/user-event/type/index.ts +0 -1
  250. package/src/user-event/type/parseKeys.ts +0 -41
  251. package/src/user-event/type/type.ts +0 -138
  252. package/src/user-event/utils/__tests__/dispatch-event.test.tsx +0 -41
  253. package/src/user-event/utils/__tests__/wait.test.ts +0 -62
  254. package/src/user-event/utils/content-size.ts +0 -25
  255. package/src/user-event/utils/dispatch-event.ts +0 -38
  256. package/src/user-event/utils/host-components.ts +0 -6
  257. package/src/user-event/utils/index.ts +0 -6
  258. package/src/user-event/utils/text-range.ts +0 -4
  259. package/src/user-event/utils/wait.ts +0 -15
  260. package/src/user-event/utils/warn-about-real-timers.ts +0 -13
  261. package/src/waitFor.ts +0 -228
  262. package/src/waitForElementToBeRemoved.ts +0 -42
  263. package/src/within.ts +0 -30
  264. package/tsconfig.json +0 -17
  265. package/tsconfig.release.json +0 -8
  266. package/website/.gitignore +0 -20
  267. package/website/README.md +0 -33
  268. package/website/docker/.dockerignore +0 -3
  269. package/website/docker/Dockerfile +0 -9
  270. package/website/docker/docker-compose.yml +0 -11
  271. package/website/docs/API.md +0 -940
  272. package/website/docs/EslintPLluginTestingLibrary.md +0 -28
  273. package/website/docs/FAQ.md +0 -44
  274. package/website/docs/GettingStarted.md +0 -100
  275. package/website/docs/HowShouldIQuery.md +0 -21
  276. package/website/docs/MigrationV11.md +0 -64
  277. package/website/docs/MigrationV12.md +0 -67
  278. package/website/docs/MigrationV2.md +0 -126
  279. package/website/docs/MigrationV7.md +0 -119
  280. package/website/docs/MigrationV9.md +0 -67
  281. package/website/docs/Queries.md +0 -572
  282. package/website/docs/ReactNavigation.md +0 -371
  283. package/website/docs/ReduxIntegration.md +0 -137
  284. package/website/docs/TestingEnvironment.md +0 -154
  285. package/website/docs/Troubleshooting.md +0 -44
  286. package/website/docs/UnderstandingAct.md +0 -227
  287. package/website/docs/UserEvent.md +0 -191
  288. package/website/docusaurus.config.js +0 -114
  289. package/website/package.json +0 -31
  290. package/website/sidebars.js +0 -20
  291. package/website/src/components/Feature.js +0 -31
  292. package/website/src/css/custom.css +0 -13
  293. package/website/src/css/index.module.css +0 -77
  294. package/website/src/pages/index.js +0 -82
  295. package/website/static/.nojekyll +0 -0
  296. package/website/static/css/custom.css +0 -28
  297. package/website/static/img/hit.png +0 -0
  298. package/website/static/img/locomotive.png +0 -0
  299. package/website/static/img/owl.png +0 -0
  300. package/website/static/img/tools.png +0 -0
  301. package/website/yarn.lock +0 -7669
  302. package/yarn.lock +0 -7765
@@ -1,457 +0,0 @@
1
- import * as React from 'react';
2
- import {
3
- Pressable,
4
- Text,
5
- TextInput,
6
- TouchableHighlight,
7
- TouchableOpacity,
8
- View,
9
- } from 'react-native';
10
- import { createEventLogger, getEventsName } from '../../../test-utils';
11
- import { render, screen } from '../../..';
12
- import { userEvent } from '../..';
13
-
14
- describe('userEvent.press with fake timers', () => {
15
- beforeEach(() => {
16
- jest.useFakeTimers();
17
- jest.setSystemTime(0);
18
- });
19
-
20
- test('calls onPressIn, onPress and onPressOut prop of touchable', async () => {
21
- const { events, logEvent } = createEventLogger();
22
- const user = userEvent.setup();
23
-
24
- render(
25
- <Pressable
26
- onPress={logEvent('press')}
27
- onPressIn={logEvent('pressIn')}
28
- onPressOut={logEvent('pressOut')}
29
- onLongPress={logEvent('longPress')}
30
- testID="pressable"
31
- />
32
- );
33
- await user.press(screen.getByTestId('pressable'));
34
-
35
- expect(events).toMatchInlineSnapshot(`
36
- [
37
- {
38
- "name": "pressIn",
39
- "payload": {
40
- "currentTarget": {
41
- "measure": [MockFunction] {
42
- "calls": [
43
- [
44
- [Function],
45
- ],
46
- [
47
- [Function],
48
- ],
49
- ],
50
- "results": [
51
- {
52
- "type": "return",
53
- "value": undefined,
54
- },
55
- {
56
- "type": "return",
57
- "value": undefined,
58
- },
59
- ],
60
- },
61
- },
62
- "dispatchConfig": {
63
- "registrationName": "onResponderGrant",
64
- },
65
- "nativeEvent": {
66
- "changedTouches": [],
67
- "identifier": 0,
68
- "locationX": 0,
69
- "locationY": 0,
70
- "pageX": 0,
71
- "pageY": 0,
72
- "target": 0,
73
- "timestamp": 0,
74
- "touches": [],
75
- },
76
- "persist": [MockFunction] {
77
- "calls": [
78
- [],
79
- ],
80
- "results": [
81
- {
82
- "type": "return",
83
- "value": undefined,
84
- },
85
- ],
86
- },
87
- },
88
- },
89
- {
90
- "name": "press",
91
- "payload": {
92
- "currentTarget": {
93
- "measure": [MockFunction],
94
- },
95
- "dispatchConfig": {
96
- "registrationName": "onResponderRelease",
97
- },
98
- "nativeEvent": {
99
- "changedTouches": [],
100
- "identifier": 0,
101
- "locationX": 0,
102
- "locationY": 0,
103
- "pageX": 0,
104
- "pageY": 0,
105
- "target": 0,
106
- "timestamp": 0,
107
- "touches": [],
108
- },
109
- "persist": [MockFunction] {
110
- "calls": [
111
- [],
112
- ],
113
- "results": [
114
- {
115
- "type": "return",
116
- "value": undefined,
117
- },
118
- ],
119
- },
120
- },
121
- },
122
- {
123
- "name": "pressOut",
124
- "payload": {
125
- "currentTarget": {
126
- "measure": [MockFunction],
127
- },
128
- "dispatchConfig": {
129
- "registrationName": "onResponderRelease",
130
- },
131
- "nativeEvent": {
132
- "changedTouches": [],
133
- "identifier": 0,
134
- "locationX": 0,
135
- "locationY": 0,
136
- "pageX": 0,
137
- "pageY": 0,
138
- "target": 0,
139
- "timestamp": 0,
140
- "touches": [],
141
- },
142
- "persist": [MockFunction] {
143
- "calls": [
144
- [],
145
- ],
146
- "results": [
147
- {
148
- "type": "return",
149
- "value": undefined,
150
- },
151
- ],
152
- },
153
- },
154
- },
155
- ]
156
- `);
157
- });
158
-
159
- test('does not trigger event when pressable is disabled', async () => {
160
- const { events, logEvent } = createEventLogger();
161
- const user = userEvent.setup();
162
-
163
- render(
164
- <Pressable
165
- disabled
166
- onPress={logEvent('press')}
167
- onPressIn={logEvent('pressIn')}
168
- onPressOut={logEvent('pressOut')}
169
- onLongPress={logEvent('longPress')}
170
- testID="pressable"
171
- />
172
- );
173
- await user.press(screen.getByTestId('pressable'));
174
-
175
- expect(events).toEqual([]);
176
- });
177
-
178
- test('does not call press when pointer events is none', async () => {
179
- const { events, logEvent } = createEventLogger();
180
- const user = userEvent.setup();
181
-
182
- render(
183
- <Pressable
184
- onPress={logEvent('press')}
185
- onPressIn={logEvent('pressIn')}
186
- onPressOut={logEvent('pressOut')}
187
- onLongPress={logEvent('longPress')}
188
- testID="pressable"
189
- pointerEvents="none"
190
- />
191
- );
192
- await user.press(screen.getByTestId('pressable'));
193
-
194
- expect(events).toEqual([]);
195
- });
196
-
197
- test('does not call press when pointer events is box-none', async () => {
198
- const { events, logEvent } = createEventLogger();
199
- const user = userEvent.setup();
200
-
201
- render(
202
- <Pressable
203
- onPress={logEvent('press')}
204
- onPressIn={logEvent('pressIn')}
205
- onPressOut={logEvent('pressOut')}
206
- onLongPress={logEvent('longPress')}
207
- testID="pressable"
208
- pointerEvents="box-none"
209
- />
210
- );
211
- await user.press(screen.getByTestId('pressable'));
212
-
213
- expect(events).toEqual([]);
214
- });
215
-
216
- test('does not call press when parent has pointer events box-only', async () => {
217
- const { events, logEvent } = createEventLogger();
218
- const user = userEvent.setup();
219
-
220
- render(
221
- <View pointerEvents="box-only">
222
- <Pressable
223
- onPress={logEvent('press')}
224
- onPressIn={logEvent('pressIn')}
225
- onPressOut={logEvent('pressOut')}
226
- onLongPress={logEvent('longPress')}
227
- testID="pressable"
228
- />
229
- </View>
230
- );
231
- await user.press(screen.getByTestId('pressable'));
232
-
233
- expect(events).toEqual([]);
234
- });
235
-
236
- test('calls press when pressable has pointer events box-only', async () => {
237
- const { events, logEvent } = createEventLogger();
238
- const user = userEvent.setup();
239
-
240
- render(
241
- <Pressable
242
- onPress={logEvent('press')}
243
- onPressIn={logEvent('pressIn')}
244
- onPressOut={logEvent('pressOut')}
245
- onLongPress={logEvent('longPress')}
246
- testID="pressable"
247
- pointerEvents="box-only"
248
- />
249
- );
250
- await user.press(screen.getByTestId('pressable'));
251
-
252
- expect(getEventsName(events)).toEqual(['pressIn', 'press', 'pressOut']);
253
- });
254
-
255
- test('crawls up in the tree to find an element that responds to touch events', async () => {
256
- const mockOnPress = jest.fn();
257
-
258
- render(
259
- <Pressable onPress={mockOnPress}>
260
- <Text>press me</Text>
261
- </Pressable>
262
- );
263
- await userEvent.press(screen.getByText('press me'));
264
-
265
- expect(mockOnPress).toHaveBeenCalled();
266
- });
267
-
268
- test('does not call onLongPress', async () => {
269
- const mockOnLongPress = jest.fn();
270
-
271
- render(
272
- <Pressable onLongPress={mockOnLongPress}>
273
- <Text>press me</Text>
274
- </Pressable>
275
- );
276
- await userEvent.press(screen.getByText('press me'));
277
-
278
- expect(mockOnLongPress).not.toHaveBeenCalled();
279
- });
280
-
281
- test('works on TouchableOpacity', async () => {
282
- const mockOnPress = jest.fn();
283
-
284
- render(
285
- <TouchableOpacity onPress={mockOnPress}>
286
- <Text>press me</Text>
287
- </TouchableOpacity>
288
- );
289
- await userEvent.press(screen.getByText('press me'));
290
-
291
- expect(mockOnPress).toHaveBeenCalled();
292
- });
293
-
294
- test('works on TouchableHighlight', async () => {
295
- const mockOnPress = jest.fn();
296
-
297
- render(
298
- <TouchableHighlight onPress={mockOnPress}>
299
- <Text>press me</Text>
300
- </TouchableHighlight>
301
- );
302
- await userEvent.press(screen.getByText('press me'));
303
-
304
- expect(mockOnPress).toHaveBeenCalled();
305
- });
306
-
307
- test('press works on Text', async () => {
308
- const { events, logEvent } = createEventLogger();
309
-
310
- render(
311
- <Text
312
- onPress={logEvent('press')}
313
- onPressIn={logEvent('pressIn')}
314
- onPressOut={logEvent('pressOut')}
315
- onLongPress={logEvent('longPress')}
316
- >
317
- press me
318
- </Text>
319
- );
320
-
321
- await userEvent.press(screen.getByText('press me'));
322
- expect(getEventsName(events)).toEqual(['pressIn', 'press', 'pressOut']);
323
- });
324
-
325
- test('longPress works Text', async () => {
326
- const { events, logEvent } = createEventLogger();
327
-
328
- render(
329
- <Text
330
- onPress={logEvent('press')}
331
- onPressIn={logEvent('pressIn')}
332
- onPressOut={logEvent('pressOut')}
333
- onLongPress={logEvent('longPress')}
334
- >
335
- press me
336
- </Text>
337
- );
338
-
339
- await userEvent.longPress(screen.getByText('press me'));
340
- expect(getEventsName(events)).toEqual(['pressIn', 'longPress', 'pressOut']);
341
- });
342
-
343
- test('doesnt trigger on disabled Text', async () => {
344
- const { events, logEvent } = createEventLogger();
345
-
346
- render(
347
- <Text
348
- onPress={logEvent('press')}
349
- onPressIn={logEvent('pressIn')}
350
- onPressOut={logEvent('pressOut')}
351
- onLongPress={logEvent('longPress')}
352
- disabled
353
- >
354
- press me
355
- </Text>
356
- );
357
- await userEvent.press(screen.getByText('press me'));
358
-
359
- expect(events).toEqual([]);
360
- });
361
-
362
- test('doesnt trigger on Text with disabled pointer events', async () => {
363
- const { events, logEvent } = createEventLogger();
364
-
365
- render(
366
- <View pointerEvents="box-only">
367
- <Text
368
- onPress={logEvent('press')}
369
- onPressIn={logEvent('pressIn')}
370
- onPressOut={logEvent('pressOut')}
371
- onLongPress={logEvent('longPress')}
372
- >
373
- press me
374
- </Text>
375
- </View>
376
- );
377
- await userEvent.press(screen.getByText('press me'));
378
-
379
- expect(events).toEqual([]);
380
- });
381
-
382
- test('press works on TextInput', async () => {
383
- const { events, logEvent } = createEventLogger();
384
-
385
- render(
386
- <TextInput
387
- placeholder="email"
388
- onPressIn={logEvent('pressIn')}
389
- onPressOut={logEvent('pressOut')}
390
- />
391
- );
392
-
393
- await userEvent.press(screen.getByPlaceholderText('email'));
394
- expect(getEventsName(events)).toEqual(['pressIn', 'pressOut']);
395
- });
396
-
397
- test('longPress works on TextInput', async () => {
398
- const { events, logEvent } = createEventLogger();
399
-
400
- render(
401
- <TextInput
402
- placeholder="email"
403
- onPressIn={logEvent('pressIn')}
404
- onPressOut={logEvent('pressOut')}
405
- />
406
- );
407
-
408
- await userEvent.longPress(screen.getByPlaceholderText('email'));
409
- expect(getEventsName(events)).toEqual(['pressIn', 'pressOut']);
410
- });
411
-
412
- test('does not call onPressIn and onPressOut on non editable TextInput', async () => {
413
- const { events, logEvent } = createEventLogger();
414
-
415
- render(
416
- <TextInput
417
- placeholder="email"
418
- editable={false}
419
- onPressIn={logEvent('pressIn')}
420
- onPressOut={logEvent('pressOut')}
421
- />
422
- );
423
-
424
- await userEvent.press(screen.getByPlaceholderText('email'));
425
- expect(events).toEqual([]);
426
- });
427
-
428
- test('does not call onPressIn and onPressOut on TextInput with pointer events disabled', async () => {
429
- const { events, logEvent } = createEventLogger();
430
-
431
- render(
432
- <TextInput
433
- placeholder="email"
434
- pointerEvents="box-none"
435
- onPressIn={logEvent('pressIn')}
436
- onPressOut={logEvent('pressOut')}
437
- />
438
- );
439
-
440
- await userEvent.press(screen.getByPlaceholderText('email'));
441
- expect(events).toEqual([]);
442
- });
443
-
444
- test('press is accessible directly in userEvent', async () => {
445
- const mockOnPress = jest.fn();
446
-
447
- render(
448
- <Pressable onPress={mockOnPress}>
449
- <Text>press me</Text>
450
- </Pressable>
451
- );
452
-
453
- await userEvent.press(screen.getByText('press me'));
454
-
455
- expect(mockOnPress).toHaveBeenCalled();
456
- });
457
- });
@@ -1,7 +0,0 @@
1
- // These are constants defined in the React Native repo
2
-
3
- // Used to define the delay before calling onPressOut after a press
4
- export const DEFAULT_MIN_PRESS_DURATION = 130;
5
-
6
- // Default minimum press duration to trigger a long press
7
- export const DEFAULT_LONG_PRESS_DELAY_MS = 500;
@@ -1 +0,0 @@
1
- export { PressOptions, press, longPress } from './press';
@@ -1,163 +0,0 @@
1
- import { ReactTestInstance } from 'react-test-renderer';
2
- import act from '../../act';
3
- import { getHostParent } from '../../helpers/component-tree';
4
- import { isPointerEventEnabled } from '../../helpers/pointer-events';
5
- import { isHostText } from '../../helpers/host-component-names';
6
- import { EventBuilder } from '../event-builder';
7
- import { UserEventConfig, UserEventInstance } from '../setup';
8
- import {
9
- dispatchEvent,
10
- isEditableTextInput,
11
- wait,
12
- warnAboutRealTimersIfNeeded,
13
- } from '../utils';
14
- import { DEFAULT_MIN_PRESS_DURATION } from './constants';
15
-
16
- export interface PressOptions {
17
- duration?: number;
18
- }
19
-
20
- export async function press(
21
- this: UserEventInstance,
22
- element: ReactTestInstance
23
- ): Promise<void> {
24
- await basePress(this.config, element, {
25
- type: 'press',
26
- duration: 0,
27
- });
28
- }
29
-
30
- export async function longPress(
31
- this: UserEventInstance,
32
- element: ReactTestInstance,
33
- options?: PressOptions
34
- ): Promise<void> {
35
- await basePress(this.config, element, {
36
- type: 'longPress',
37
- duration: options?.duration ?? 500,
38
- });
39
- }
40
-
41
- interface BasePressOptions {
42
- type: 'press' | 'longPress';
43
- duration: number;
44
- }
45
-
46
- const basePress = async (
47
- config: UserEventConfig,
48
- element: ReactTestInstance,
49
- options: BasePressOptions
50
- ): Promise<void> => {
51
- if (isPressableText(element)) {
52
- await emitTextPressEvents(config, element, options);
53
- return;
54
- }
55
-
56
- if (isEditableTextInput(element) && isPointerEventEnabled(element)) {
57
- await emitTextInputPressEvents(config, element, options);
58
- return;
59
- }
60
-
61
- if (isEnabledTouchResponder(element)) {
62
- await emitPressablePressEvents(config, element, options);
63
- return;
64
- }
65
-
66
- const hostParentElement = getHostParent(element);
67
- if (!hostParentElement) {
68
- return;
69
- }
70
-
71
- await basePress(config, hostParentElement, options);
72
- };
73
-
74
- const emitPressablePressEvents = async (
75
- config: UserEventConfig,
76
- element: ReactTestInstance,
77
- options: BasePressOptions
78
- ) => {
79
- warnAboutRealTimersIfNeeded();
80
-
81
- await wait(config);
82
-
83
- await act(async () => {
84
- dispatchEvent(
85
- element,
86
- 'responderGrant',
87
- EventBuilder.Common.responderGrant()
88
- );
89
-
90
- await wait(config, options.duration);
91
-
92
- dispatchEvent(
93
- element,
94
- 'responderRelease',
95
- EventBuilder.Common.responderRelease()
96
- );
97
-
98
- // React Native will wait for minimal delay of DEFAULT_MIN_PRESS_DURATION
99
- // before emitting the `pressOut` event. We need to wait here, so that
100
- // `press()` function does not return before that.
101
- if (DEFAULT_MIN_PRESS_DURATION - options.duration > 0) {
102
- await wait(config, DEFAULT_MIN_PRESS_DURATION - options.duration);
103
- }
104
- });
105
- };
106
-
107
- const isEnabledTouchResponder = (element: ReactTestInstance) => {
108
- return (
109
- isPointerEventEnabled(element) &&
110
- element.props.onStartShouldSetResponder?.()
111
- );
112
- };
113
-
114
- const isPressableText = (element: ReactTestInstance) => {
115
- const hasPressEventHandler = Boolean(
116
- element.props.onPress ||
117
- element.props.onLongPress ||
118
- element.props.onPressIn ||
119
- element.props.onPressOut
120
- );
121
-
122
- return (
123
- isHostText(element) &&
124
- isPointerEventEnabled(element) &&
125
- !element.props.disabled &&
126
- hasPressEventHandler
127
- );
128
- };
129
-
130
- /**
131
- * Dispatches a press event sequence for Text.
132
- */
133
- async function emitTextPressEvents(
134
- config: UserEventConfig,
135
- element: ReactTestInstance,
136
- options: BasePressOptions
137
- ) {
138
- await wait(config);
139
- dispatchEvent(element, 'pressIn', EventBuilder.Common.touch());
140
-
141
- // Emit either `press` or `longPress`.
142
- dispatchEvent(element, options.type, EventBuilder.Common.touch());
143
-
144
- await wait(config, options.duration);
145
- dispatchEvent(element, 'pressOut', EventBuilder.Common.touch());
146
- }
147
-
148
- /**
149
- * Dispatches a press event sequence for TextInput.
150
- */
151
- async function emitTextInputPressEvents(
152
- config: UserEventConfig,
153
- element: ReactTestInstance,
154
- options: BasePressOptions
155
- ) {
156
- await wait(config);
157
- dispatchEvent(element, 'pressIn', EventBuilder.Common.touch());
158
-
159
- // Note: TextInput does not have `onPress`/`onLongPress` props.
160
-
161
- await wait(config, options.duration);
162
- dispatchEvent(element, 'pressOut', EventBuilder.Common.touch());
163
- }
@@ -1,2 +0,0 @@
1
- export type { UserEventConfig, UserEventInstance } from './setup';
2
- export { setup } from './setup';