@testing-library/react-native 12.2.1 → 12.3.0

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 (395) hide show
  1. package/build/config.d.ts +1 -0
  2. package/build/config.js.map +1 -1
  3. package/build/fireEvent.js +2 -1
  4. package/build/fireEvent.js.map +1 -1
  5. package/build/helpers/accessiblity.d.ts +7 -0
  6. package/build/helpers/accessiblity.js +73 -2
  7. package/build/helpers/accessiblity.js.map +1 -1
  8. package/build/helpers/component-tree.d.ts +7 -0
  9. package/build/helpers/component-tree.js +18 -0
  10. package/build/helpers/component-tree.js.map +1 -1
  11. package/build/helpers/format-default.d.ts +1 -2
  12. package/build/helpers/format-default.js +22 -13
  13. package/build/helpers/format-default.js.map +1 -1
  14. package/build/helpers/format.js +1 -4
  15. package/build/helpers/format.js.map +1 -1
  16. package/build/helpers/host-component-names.d.ts +5 -0
  17. package/build/helpers/host-component-names.js +13 -1
  18. package/build/helpers/host-component-names.js.map +1 -1
  19. package/build/helpers/matchers/accessibilityState.js +3 -3
  20. package/build/helpers/matchers/accessibilityState.js.map +1 -1
  21. package/build/helpers/matchers/accessibilityValue.js +3 -2
  22. package/build/helpers/matchers/accessibilityValue.js.map +1 -1
  23. package/build/helpers/matchers/matchLabelText.d.ts +1 -1
  24. package/build/helpers/matchers/matchLabelText.js +5 -8
  25. package/build/helpers/matchers/matchLabelText.js.map +1 -1
  26. package/build/helpers/matchers/matchTextContent.js +2 -2
  27. package/build/helpers/matchers/matchTextContent.js.map +1 -1
  28. package/build/helpers/{getTextContent.js → text-content.js} +1 -1
  29. package/build/helpers/text-content.js.map +1 -0
  30. package/build/helpers/text-input.d.ts +3 -0
  31. package/build/helpers/text-input.js +21 -0
  32. package/build/helpers/text-input.js.map +1 -0
  33. package/build/matchers/extend-expect.d.js +2 -0
  34. package/build/matchers/extend-expect.d.js.map +1 -0
  35. package/build/matchers/extend-expect.d.ts +2 -0
  36. package/build/matchers/extend-expect.js +26 -0
  37. package/build/matchers/extend-expect.js.map +1 -0
  38. package/build/matchers/index.d.ts +9 -0
  39. package/build/matchers/index.js +75 -0
  40. package/build/matchers/index.js.map +1 -0
  41. package/build/matchers/to-be-checked.d.ts +6 -0
  42. package/build/matchers/to-be-checked.js +31 -0
  43. package/build/matchers/to-be-checked.js.map +1 -0
  44. package/build/matchers/to-be-disabled.d.ts +10 -0
  45. package/build/matchers/to-be-disabled.js +52 -0
  46. package/build/matchers/to-be-disabled.js.map +1 -0
  47. package/build/matchers/to-be-empty-element.d.ts +6 -0
  48. package/build/matchers/to-be-empty-element.js +20 -0
  49. package/build/matchers/to-be-empty-element.js.map +1 -0
  50. package/build/matchers/to-be-on-the-screen.d.ts +6 -0
  51. package/build/matchers/to-be-on-the-screen.js +29 -0
  52. package/build/matchers/to-be-on-the-screen.js.map +1 -0
  53. package/build/matchers/to-be-partially-checked.d.ts +6 -0
  54. package/build/matchers/to-be-partially-checked.js +28 -0
  55. package/build/matchers/to-be-partially-checked.js.map +1 -0
  56. package/build/matchers/to-be-visible.d.ts +6 -0
  57. package/build/matchers/to-be-visible.js +56 -0
  58. package/build/matchers/to-be-visible.js.map +1 -0
  59. package/build/matchers/to-have-display-value.d.ts +7 -0
  60. package/build/matchers/to-have-display-value.js +26 -0
  61. package/build/matchers/to-have-display-value.js.map +1 -0
  62. package/build/matchers/to-have-prop.d.ts +6 -0
  63. package/build/matchers/to-have-prop.js +35 -0
  64. package/build/matchers/to-have-prop.js.map +1 -0
  65. package/build/matchers/to-have-text-content.d.ts +7 -0
  66. package/build/matchers/to-have-text-content.js +21 -0
  67. package/build/matchers/to-have-text-content.js.map +1 -0
  68. package/build/matchers/utils.d.ts +18 -0
  69. package/build/matchers/utils.js +90 -0
  70. package/build/matchers/utils.js.map +1 -0
  71. package/build/matches.d.ts +1 -1
  72. package/build/matches.js.map +1 -1
  73. package/build/queries/displayValue.js +4 -3
  74. package/build/queries/displayValue.js.map +1 -1
  75. package/build/queries/labelText.js +2 -2
  76. package/build/queries/labelText.js.map +1 -1
  77. package/build/queries/role.js +1 -1
  78. package/build/queries/role.js.map +1 -1
  79. package/build/render.d.ts +12 -48
  80. package/build/user-event/clear.js +2 -1
  81. package/build/user-event/clear.js.map +1 -1
  82. package/build/user-event/press/press.js +2 -1
  83. package/build/user-event/press/press.js.map +1 -1
  84. package/build/user-event/type/type.js +2 -1
  85. package/build/user-event/type/type.js.map +1 -1
  86. package/build/user-event/utils/index.d.ts +0 -1
  87. package/build/user-event/utils/index.js +0 -11
  88. package/build/user-event/utils/index.js.map +1 -1
  89. package/package.json +6 -23
  90. package/.DS_Store +0 -0
  91. package/.codecov.yml +0 -9
  92. package/.eslintcache +0 -1
  93. package/.eslintignore +0 -3
  94. package/.eslintrc +0 -19
  95. package/.flowconfig +0 -63
  96. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  97. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -14
  98. package/.github/ISSUE_TEMPLATE/question.md +0 -9
  99. package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
  100. package/.github/actions/setup-deps/action.yml +0 -22
  101. package/.github/actions/setup-website-deps/action.yml +0 -22
  102. package/.github/dependabot.yml +0 -10
  103. package/.github/workflows/deploy-website.yml +0 -36
  104. package/.github/workflows/example-apps.yml +0 -25
  105. package/.github/workflows/main.yml +0 -103
  106. package/.gitignore +0 -11
  107. package/.prettierrc.js +0 -5
  108. package/CODE_OF_CONDUCT.md +0 -73
  109. package/CONTRIBUTING.md +0 -64
  110. package/babel.config.js +0 -22
  111. package/build/helpers/getTextContent.js.map +0 -1
  112. package/build/user-event/utils/host-components.d.ts +0 -2
  113. package/build/user-event/utils/host-components.js +0 -11
  114. package/build/user-event/utils/host-components.js.map +0 -1
  115. package/examples/basic/.expo/README.md +0 -15
  116. package/examples/basic/.expo/packager-info.json +0 -4
  117. package/examples/basic/.expo/settings.json +0 -10
  118. package/examples/basic/.expo-shared/assets.json +0 -4
  119. package/examples/basic/.gitignore +0 -14
  120. package/examples/basic/App.tsx +0 -20
  121. package/examples/basic/README.md +0 -11
  122. package/examples/basic/__tests__/App.test.tsx +0 -137
  123. package/examples/basic/app.json +0 -31
  124. package/examples/basic/assets/adaptive-icon.png +0 -0
  125. package/examples/basic/assets/favicon.png +0 -0
  126. package/examples/basic/assets/icon.png +0 -0
  127. package/examples/basic/assets/splash.png +0 -0
  128. package/examples/basic/babel.config.js +0 -6
  129. package/examples/basic/components/Home.tsx +0 -28
  130. package/examples/basic/components/LoginForm.tsx +0 -138
  131. package/examples/basic/jest-setup.ts +0 -7
  132. package/examples/basic/jest.config.js +0 -5
  133. package/examples/basic/package.json +0 -30
  134. package/examples/basic/tsconfig.json +0 -7
  135. package/examples/basic/yarn.lock +0 -7499
  136. package/examples/react-navigation/README.md +0 -16
  137. package/examples/react-navigation/babel.config.js +0 -4
  138. package/examples/react-navigation/jest-setup.js +0 -11
  139. package/examples/react-navigation/jest.config.js +0 -10
  140. package/examples/react-navigation/package.json +0 -31
  141. package/examples/react-navigation/src/App.js +0 -21
  142. package/examples/react-navigation/src/DrawerNavigator.js +0 -15
  143. package/examples/react-navigation/src/DrawerNavigator.test.js +0 -42
  144. package/examples/react-navigation/src/NativeStackNavigator.js +0 -15
  145. package/examples/react-navigation/src/NativeStackNavigator.test.js +0 -34
  146. package/examples/react-navigation/src/StackNavigator.js +0 -15
  147. package/examples/react-navigation/src/StackNavigator.test.js +0 -34
  148. package/examples/react-navigation/src/TabNavigator.js +0 -15
  149. package/examples/react-navigation/src/TabNavigator.test.js +0 -21
  150. package/examples/react-navigation/src/screens/DetailsScreen.js +0 -43
  151. package/examples/react-navigation/src/screens/DetailsScreen.test.js +0 -27
  152. package/examples/react-navigation/src/screens/DrawerHomeScreen.js +0 -26
  153. package/examples/react-navigation/src/screens/HomeScreen.js +0 -48
  154. package/examples/react-navigation/src/screens/SettingsScreen.js +0 -20
  155. package/examples/react-navigation/src/test-utils.js +0 -12
  156. package/examples/react-navigation/yarn.lock +0 -5018
  157. package/examples/redux/App.js +0 -27
  158. package/examples/redux/README.md +0 -5
  159. package/examples/redux/actions/todoActions.js +0 -25
  160. package/examples/redux/babel.config.js +0 -6
  161. package/examples/redux/components/AddTodo.js +0 -73
  162. package/examples/redux/components/AddTodo.test.js +0 -27
  163. package/examples/redux/components/TodoElem.js +0 -25
  164. package/examples/redux/components/TodoList.js +0 -29
  165. package/examples/redux/components/TodoList.test.js +0 -34
  166. package/examples/redux/index.js +0 -8
  167. package/examples/redux/jest-setup.js +0 -2
  168. package/examples/redux/jest.config.js +0 -4
  169. package/examples/redux/package.json +0 -23
  170. package/examples/redux/reducers/index.js +0 -6
  171. package/examples/redux/reducers/todoReducer.js +0 -27
  172. package/examples/redux/store.js +0 -10
  173. package/examples/redux/test-utils.js +0 -11
  174. package/examples/redux/yarn.lock +0 -4819
  175. package/experiments-app/.expo/README.md +0 -15
  176. package/experiments-app/.expo/devices.json +0 -3
  177. package/experiments-app/.expo/packager-info.json +0 -9
  178. package/experiments-app/.expo/settings.json +0 -9
  179. package/experiments-app/.gitignore +0 -17
  180. package/experiments-app/.prettierrc.js +0 -5
  181. package/experiments-app/app.json +0 -30
  182. package/experiments-app/assets/adaptive-icon.png +0 -0
  183. package/experiments-app/assets/favicon.png +0 -0
  184. package/experiments-app/assets/icon.png +0 -0
  185. package/experiments-app/assets/splash.png +0 -0
  186. package/experiments-app/babel.config.js +0 -6
  187. package/experiments-app/index.js +0 -4
  188. package/experiments-app/package.json +0 -29
  189. package/experiments-app/src/App.tsx +0 -31
  190. package/experiments-app/src/MainScreen.tsx +0 -52
  191. package/experiments-app/src/experiments.ts +0 -35
  192. package/experiments-app/src/screens/FlatListEvents.tsx +0 -57
  193. package/experiments-app/src/screens/ScrollViewEvents.tsx +0 -65
  194. package/experiments-app/src/screens/SectionListEvents.tsx +0 -91
  195. package/experiments-app/src/screens/TextInputEventPropagation.tsx +0 -42
  196. package/experiments-app/src/screens/TextInputEvents.tsx +0 -48
  197. package/experiments-app/src/utils/helpers.ts +0 -18
  198. package/experiments-app/tsconfig.json +0 -6
  199. package/experiments-app/yarn.lock +0 -6709
  200. package/experiments-rtl/.babelrc +0 -8
  201. package/experiments-rtl/.eslintrc.json +0 -3
  202. package/experiments-rtl/.gitignore +0 -35
  203. package/experiments-rtl/README.md +0 -34
  204. package/experiments-rtl/jest-setup.js +0 -1
  205. package/experiments-rtl/jest.config.js +0 -4
  206. package/experiments-rtl/next.config.js +0 -4
  207. package/experiments-rtl/package.json +0 -38
  208. package/experiments-rtl/postcss.config.js +0 -6
  209. package/experiments-rtl/public/next.svg +0 -1
  210. package/experiments-rtl/public/vercel.svg +0 -1
  211. package/experiments-rtl/src/app/__tests__/click.test.tsx +0 -31
  212. package/experiments-rtl/src/app/__tests__/managed-text-input.test.tsx +0 -51
  213. package/experiments-rtl/src/app/globals.css +0 -27
  214. package/experiments-rtl/src/app/layout.tsx +0 -22
  215. package/experiments-rtl/src/app/page.tsx +0 -113
  216. package/experiments-rtl/tailwind.config.ts +0 -20
  217. package/experiments-rtl/tsconfig.json +0 -28
  218. package/experiments-rtl/yarn.lock +0 -5418
  219. package/flow-typed/npm/jest_v26.x.x.js +0 -1218
  220. package/flow-typed/npm/react-test-renderer_v16.x.x.js +0 -81
  221. package/jest-setup.ts +0 -10
  222. package/renovate.json +0 -19
  223. package/scripts/test_react_17 +0 -12
  224. package/src/__tests__/__snapshots__/render-debug.test.tsx.snap +0 -548
  225. package/src/__tests__/__snapshots__/render.test.tsx.snap +0 -39
  226. package/src/__tests__/act.test.tsx +0 -56
  227. package/src/__tests__/auto-cleanup-skip.test.tsx +0 -39
  228. package/src/__tests__/auto-cleanup.test.tsx +0 -50
  229. package/src/__tests__/cleanup.test.tsx +0 -26
  230. package/src/__tests__/config.test.ts +0 -55
  231. package/src/__tests__/fireEvent-textInput.test.tsx +0 -154
  232. package/src/__tests__/fireEvent.test.tsx +0 -485
  233. package/src/__tests__/host-component-names.test.tsx +0 -109
  234. package/src/__tests__/host-text-nesting.test.tsx +0 -90
  235. package/src/__tests__/jest-native.test.tsx +0 -84
  236. package/src/__tests__/questionsBoard.test.tsx +0 -62
  237. package/src/__tests__/react-native-api.test.tsx +0 -126
  238. package/src/__tests__/render-debug.test.tsx +0 -207
  239. package/src/__tests__/render-stringValidation.test.tsx +0 -157
  240. package/src/__tests__/render.test.tsx +0 -256
  241. package/src/__tests__/renderHook.test.tsx +0 -114
  242. package/src/__tests__/screen.test.tsx +0 -66
  243. package/src/__tests__/timerUtils.ts +0 -7
  244. package/src/__tests__/timers.test.ts +0 -27
  245. package/src/__tests__/waitFor.test.tsx +0 -327
  246. package/src/__tests__/waitForElementToBeRemoved.test.tsx +0 -151
  247. package/src/__tests__/within.test.tsx +0 -96
  248. package/src/act.ts +0 -86
  249. package/src/cleanup.ts +0 -15
  250. package/src/config.ts +0 -72
  251. package/src/fireEvent.ts +0 -159
  252. package/src/flush-micro-tasks.ts +0 -30
  253. package/src/helpers/__tests__/accessiblity.test.tsx +0 -373
  254. package/src/helpers/__tests__/component-tree.test.tsx +0 -226
  255. package/src/helpers/__tests__/format-default.tsx +0 -114
  256. package/src/helpers/__tests__/getTextContent.test.tsx +0 -49
  257. package/src/helpers/__tests__/includeHiddenElements.test.tsx +0 -39
  258. package/src/helpers/__tests__/query-name.test.ts +0 -10
  259. package/src/helpers/__tests__/timers.test.ts +0 -8
  260. package/src/helpers/accessiblity.ts +0 -108
  261. package/src/helpers/component-tree.ts +0 -94
  262. package/src/helpers/debugDeep.ts +0 -27
  263. package/src/helpers/debugShallow.ts +0 -22
  264. package/src/helpers/deprecation.ts +0 -53
  265. package/src/helpers/errors.ts +0 -66
  266. package/src/helpers/findAll.ts +0 -70
  267. package/src/helpers/format-default.ts +0 -72
  268. package/src/helpers/format.ts +0 -47
  269. package/src/helpers/getTextContent.ts +0 -20
  270. package/src/helpers/host-component-names.tsx +0 -88
  271. package/src/helpers/matchers/__tests__/matchArrayValue.test.ts +0 -34
  272. package/src/helpers/matchers/__tests__/matchObject.test.ts +0 -37
  273. package/src/helpers/matchers/__tests__/matchStringValue.test.ts +0 -15
  274. package/src/helpers/matchers/accessibilityState.ts +0 -48
  275. package/src/helpers/matchers/accessibilityValue.ts +0 -24
  276. package/src/helpers/matchers/matchArrayProp.ts +0 -21
  277. package/src/helpers/matchers/matchLabelText.ts +0 -50
  278. package/src/helpers/matchers/matchObjectProp.ts +0 -25
  279. package/src/helpers/matchers/matchStringProp.ts +0 -23
  280. package/src/helpers/matchers/matchTextContent.ts +0 -20
  281. package/src/helpers/pointer-events.ts +0 -27
  282. package/src/helpers/query-name.ts +0 -4
  283. package/src/helpers/stringValidation.ts +0 -36
  284. package/src/helpers/timers.ts +0 -98
  285. package/src/index.ts +0 -33
  286. package/src/matches.ts +0 -49
  287. package/src/pure.ts +0 -27
  288. package/src/queries/__tests__/a11yState.test.tsx +0 -439
  289. package/src/queries/__tests__/a11yValue.test.tsx +0 -309
  290. package/src/queries/__tests__/displayValue.test.tsx +0 -221
  291. package/src/queries/__tests__/hintText.test.tsx +0 -177
  292. package/src/queries/__tests__/labelText.test.tsx +0 -242
  293. package/src/queries/__tests__/makeQueries.test.tsx +0 -235
  294. package/src/queries/__tests__/placeholderText.test.tsx +0 -136
  295. package/src/queries/__tests__/role-value.test.tsx +0 -176
  296. package/src/queries/__tests__/role.test.tsx +0 -824
  297. package/src/queries/__tests__/testId.test.tsx +0 -200
  298. package/src/queries/__tests__/text.test.tsx +0 -556
  299. package/src/queries/a11yState.ts +0 -127
  300. package/src/queries/a11yValue.ts +0 -127
  301. package/src/queries/displayValue.ts +0 -71
  302. package/src/queries/hintText.ts +0 -107
  303. package/src/queries/labelText.ts +0 -57
  304. package/src/queries/makeQueries.ts +0 -255
  305. package/src/queries/options.ts +0 -14
  306. package/src/queries/placeholderText.ts +0 -72
  307. package/src/queries/role.ts +0 -131
  308. package/src/queries/testId.ts +0 -66
  309. package/src/queries/text.ts +0 -63
  310. package/src/queries/unsafeProps.ts +0 -76
  311. package/src/queries/unsafeType.ts +0 -73
  312. package/src/react-versions.ts +0 -11
  313. package/src/render-act.ts +0 -19
  314. package/src/render.tsx +0 -183
  315. package/src/renderHook.tsx +0 -56
  316. package/src/screen.ts +0 -123
  317. package/src/shallow.ts +0 -18
  318. package/src/test-utils/events.ts +0 -24
  319. package/src/test-utils/index.ts +0 -1
  320. package/src/user-event/__tests__/__snapshots__/clear.test.tsx.snap +0 -269
  321. package/src/user-event/__tests__/clear.test.tsx +0 -217
  322. package/src/user-event/clear.ts +0 -59
  323. package/src/user-event/event-builder/common.ts +0 -66
  324. package/src/user-event/event-builder/index.ts +0 -7
  325. package/src/user-event/event-builder/text-input.ts +0 -86
  326. package/src/user-event/index.ts +0 -18
  327. package/src/user-event/press/__tests__/longPress.real-timers.test.tsx +0 -117
  328. package/src/user-event/press/__tests__/longPress.test.tsx +0 -157
  329. package/src/user-event/press/__tests__/press.real-timers.test.tsx +0 -320
  330. package/src/user-event/press/__tests__/press.test.tsx +0 -457
  331. package/src/user-event/press/constants.ts +0 -7
  332. package/src/user-event/press/index.ts +0 -1
  333. package/src/user-event/press/press.ts +0 -163
  334. package/src/user-event/setup/index.ts +0 -2
  335. package/src/user-event/setup/setup.ts +0 -142
  336. package/src/user-event/type/__tests__/__snapshots__/type-managed.test.tsx.snap +0 -339
  337. package/src/user-event/type/__tests__/__snapshots__/type.test.tsx.snap +0 -668
  338. package/src/user-event/type/__tests__/parseKeys.test.ts +0 -23
  339. package/src/user-event/type/__tests__/type-managed.test.tsx +0 -120
  340. package/src/user-event/type/__tests__/type.test.tsx +0 -335
  341. package/src/user-event/type/index.ts +0 -1
  342. package/src/user-event/type/parseKeys.ts +0 -41
  343. package/src/user-event/type/type.ts +0 -138
  344. package/src/user-event/utils/__tests__/dispatch-event.test.tsx +0 -41
  345. package/src/user-event/utils/__tests__/wait.test.ts +0 -62
  346. package/src/user-event/utils/content-size.ts +0 -25
  347. package/src/user-event/utils/dispatch-event.ts +0 -38
  348. package/src/user-event/utils/host-components.ts +0 -6
  349. package/src/user-event/utils/index.ts +0 -6
  350. package/src/user-event/utils/text-range.ts +0 -4
  351. package/src/user-event/utils/wait.ts +0 -15
  352. package/src/user-event/utils/warn-about-real-timers.ts +0 -13
  353. package/src/waitFor.ts +0 -228
  354. package/src/waitForElementToBeRemoved.ts +0 -42
  355. package/src/within.ts +0 -30
  356. package/tsconfig.json +0 -17
  357. package/tsconfig.release.json +0 -8
  358. package/website/.gitignore +0 -20
  359. package/website/README.md +0 -33
  360. package/website/docker/.dockerignore +0 -3
  361. package/website/docker/Dockerfile +0 -9
  362. package/website/docker/docker-compose.yml +0 -11
  363. package/website/docs/API.md +0 -940
  364. package/website/docs/EslintPLluginTestingLibrary.md +0 -28
  365. package/website/docs/FAQ.md +0 -44
  366. package/website/docs/GettingStarted.md +0 -100
  367. package/website/docs/HowShouldIQuery.md +0 -21
  368. package/website/docs/MigrationV11.md +0 -64
  369. package/website/docs/MigrationV12.md +0 -67
  370. package/website/docs/MigrationV2.md +0 -126
  371. package/website/docs/MigrationV7.md +0 -119
  372. package/website/docs/MigrationV9.md +0 -67
  373. package/website/docs/Queries.md +0 -572
  374. package/website/docs/ReactNavigation.md +0 -371
  375. package/website/docs/ReduxIntegration.md +0 -137
  376. package/website/docs/TestingEnvironment.md +0 -154
  377. package/website/docs/Troubleshooting.md +0 -44
  378. package/website/docs/UnderstandingAct.md +0 -227
  379. package/website/docs/UserEvent.md +0 -191
  380. package/website/docusaurus.config.js +0 -114
  381. package/website/package.json +0 -31
  382. package/website/sidebars.js +0 -20
  383. package/website/src/components/Feature.js +0 -31
  384. package/website/src/css/custom.css +0 -13
  385. package/website/src/css/index.module.css +0 -77
  386. package/website/src/pages/index.js +0 -82
  387. package/website/static/.nojekyll +0 -0
  388. package/website/static/css/custom.css +0 -28
  389. package/website/static/img/hit.png +0 -0
  390. package/website/static/img/locomotive.png +0 -0
  391. package/website/static/img/owl.png +0 -0
  392. package/website/static/img/tools.png +0 -0
  393. package/website/yarn.lock +0 -7669
  394. package/yarn.lock +0 -7765
  395. /package/build/helpers/{getTextContent.d.ts → text-content.d.ts} +0 -0
@@ -1,120 +0,0 @@
1
- import * as React from 'react';
2
- import { TextInput } from 'react-native';
3
- import { createEventLogger } from '../../../test-utils/events';
4
- import { render } from '../../..';
5
- import { userEvent } from '../..';
6
-
7
- beforeEach(() => {
8
- jest.useRealTimers();
9
- });
10
-
11
- interface ManagedTextInputProps {
12
- valueTransformer?: (text: string) => string;
13
- logEvent: (name: string) => (event: any) => void;
14
- initialValue?: string;
15
- }
16
-
17
- function ManagedTextInput({
18
- logEvent,
19
- valueTransformer,
20
- initialValue = '',
21
- }: ManagedTextInputProps) {
22
- const [value, setValue] = React.useState(initialValue);
23
-
24
- const handleChangeText = (text: string) => {
25
- logEvent('changeText')(text);
26
- const newValue = valueTransformer?.(text) ?? text;
27
- setValue(newValue);
28
- };
29
-
30
- return (
31
- <TextInput
32
- testID="input"
33
- value={value}
34
- onChangeText={handleChangeText}
35
- onFocus={logEvent('focus')}
36
- onBlur={logEvent('blur')}
37
- onPressIn={logEvent('pressIn')}
38
- onPressOut={logEvent('pressOut')}
39
- onChange={logEvent('change')}
40
- onKeyPress={logEvent('keyPress')}
41
- onTextInput={logEvent('textInput')}
42
- onSelectionChange={logEvent('selectionChange')}
43
- onSubmitEditing={logEvent('submitEditing')}
44
- onEndEditing={logEvent('endEditing')}
45
- onContentSizeChange={logEvent('contentSizeChange')}
46
- />
47
- );
48
- }
49
-
50
- describe('type() for managed TextInput', () => {
51
- it('supports basic case', async () => {
52
- jest.spyOn(Date, 'now').mockImplementation(() => 100100100100);
53
- const { events, logEvent } = createEventLogger();
54
- const screen = render(<ManagedTextInput logEvent={logEvent} />);
55
-
56
- const user = userEvent.setup();
57
- await user.type(screen.getByTestId('input'), 'Wow');
58
-
59
- const eventNames = events.map((e) => e.name);
60
- expect(eventNames).toEqual([
61
- 'pressIn',
62
- 'focus',
63
- 'pressOut',
64
- 'keyPress',
65
- 'change',
66
- 'changeText',
67
- 'selectionChange',
68
- 'keyPress',
69
- 'change',
70
- 'changeText',
71
- 'selectionChange',
72
- 'keyPress',
73
- 'change',
74
- 'changeText',
75
- 'selectionChange',
76
- 'endEditing',
77
- 'blur',
78
- ]);
79
-
80
- expect(events).toMatchSnapshot('input: "Wow"');
81
- });
82
-
83
- test('supports rejecting TextInput', async () => {
84
- jest.spyOn(Date, 'now').mockImplementation(() => 100100100100);
85
- const { events, logEvent } = createEventLogger();
86
- const screen = render(
87
- <ManagedTextInput
88
- initialValue="XXX"
89
- logEvent={logEvent}
90
- valueTransformer={() => 'XXX'}
91
- />
92
- );
93
-
94
- const user = userEvent.setup();
95
- await user.type(screen.getByTestId('input'), 'ABC');
96
-
97
- const eventNames = events.map((e) => e.name);
98
- expect(eventNames).toEqual([
99
- 'pressIn',
100
- 'focus',
101
- 'pressOut',
102
- 'keyPress',
103
- 'change',
104
- 'changeText',
105
- 'selectionChange',
106
- 'keyPress',
107
- 'change',
108
- 'changeText',
109
- 'selectionChange',
110
- 'keyPress',
111
- 'change',
112
- 'changeText',
113
- 'selectionChange',
114
- 'endEditing',
115
- 'blur',
116
- ]);
117
-
118
- expect(events).toMatchSnapshot('input: "ABC", value: "XXX"');
119
- });
120
- });
@@ -1,335 +0,0 @@
1
- import * as React from 'react';
2
- import { View, TextInput, TextInputProps } from 'react-native';
3
- import { createEventLogger } from '../../../test-utils/events';
4
- import { render } from '../../..';
5
- import { userEvent } from '../..';
6
-
7
- beforeEach(() => {
8
- jest.useRealTimers();
9
- });
10
-
11
- function renderTextInputWithToolkit(props: TextInputProps = {}) {
12
- const { events, logEvent } = createEventLogger();
13
-
14
- const screen = render(
15
- <TextInput
16
- testID="input"
17
- onFocus={logEvent('focus')}
18
- onBlur={logEvent('blur')}
19
- onPressIn={logEvent('pressIn')}
20
- onPressOut={logEvent('pressOut')}
21
- onChange={logEvent('change')}
22
- onChangeText={logEvent('changeText')}
23
- onKeyPress={logEvent('keyPress')}
24
- onTextInput={logEvent('textInput')}
25
- onSelectionChange={logEvent('selectionChange')}
26
- onSubmitEditing={logEvent('submitEditing')}
27
- onEndEditing={logEvent('endEditing')}
28
- onContentSizeChange={logEvent('contentSizeChange')}
29
- {...props}
30
- />
31
- );
32
-
33
- return {
34
- ...screen,
35
- events,
36
- };
37
- }
38
-
39
- describe('type()', () => {
40
- it('supports basic case', async () => {
41
- jest.spyOn(Date, 'now').mockImplementation(() => 100100100100);
42
- const { events, ...queries } = renderTextInputWithToolkit();
43
-
44
- const user = userEvent.setup();
45
- await user.type(queries.getByTestId('input'), 'abc');
46
-
47
- const eventNames = events.map((e) => e.name);
48
- expect(eventNames).toEqual([
49
- 'pressIn',
50
- 'focus',
51
- 'pressOut',
52
- 'keyPress',
53
- 'change',
54
- 'changeText',
55
- 'selectionChange',
56
- 'keyPress',
57
- 'change',
58
- 'changeText',
59
- 'selectionChange',
60
- 'keyPress',
61
- 'change',
62
- 'changeText',
63
- 'selectionChange',
64
- 'endEditing',
65
- 'blur',
66
- ]);
67
-
68
- expect(events).toMatchSnapshot('input: "abc"');
69
- });
70
-
71
- it.each(['modern', 'legacy'])('works with %s fake timers', async (type) => {
72
- jest.useFakeTimers({ legacyFakeTimers: type === 'legacy' });
73
- const { events, ...queries } = renderTextInputWithToolkit();
74
-
75
- const user = userEvent.setup();
76
- await user.type(queries.getByTestId('input'), 'abc');
77
-
78
- const eventNames = events.map((e) => e.name);
79
- expect(eventNames).toEqual([
80
- 'pressIn',
81
- 'focus',
82
- 'pressOut',
83
- 'keyPress',
84
- 'change',
85
- 'changeText',
86
- 'selectionChange',
87
- 'keyPress',
88
- 'change',
89
- 'changeText',
90
- 'selectionChange',
91
- 'keyPress',
92
- 'change',
93
- 'changeText',
94
- 'selectionChange',
95
- 'endEditing',
96
- 'blur',
97
- ]);
98
- });
99
-
100
- it('supports defaultValue prop', async () => {
101
- const { events, ...queries } = renderTextInputWithToolkit({
102
- defaultValue: 'xxx',
103
- });
104
-
105
- const user = userEvent.setup();
106
- await user.type(queries.getByTestId('input'), 'ab');
107
-
108
- const eventNames = events.map((e) => e.name);
109
- expect(eventNames).toEqual([
110
- 'pressIn',
111
- 'focus',
112
- 'pressOut',
113
- 'keyPress',
114
- 'change',
115
- 'changeText',
116
- 'selectionChange',
117
- 'keyPress',
118
- 'change',
119
- 'changeText',
120
- 'selectionChange',
121
- 'endEditing',
122
- 'blur',
123
- ]);
124
-
125
- expect(events).toMatchSnapshot('input: "ab", defaultValue: "xxx"');
126
- });
127
-
128
- it('does respect editable prop', async () => {
129
- const { events, ...queries } = renderTextInputWithToolkit({
130
- editable: false,
131
- });
132
-
133
- const user = userEvent.setup();
134
- await user.type(queries.getByTestId('input'), 'ab');
135
-
136
- const eventNames = events.map((e) => e.name);
137
- expect(eventNames).toEqual([]);
138
- });
139
-
140
- it('supports backspace', async () => {
141
- const { events, ...queries } = renderTextInputWithToolkit({
142
- defaultValue: 'xxx',
143
- });
144
-
145
- const user = userEvent.setup();
146
- await user.type(queries.getByTestId('input'), '{Backspace}a');
147
-
148
- const eventNames = events.map((e) => e.name);
149
- expect(eventNames).toEqual([
150
- 'pressIn',
151
- 'focus',
152
- 'pressOut',
153
- 'keyPress',
154
- 'change',
155
- 'changeText',
156
- 'selectionChange',
157
- 'keyPress',
158
- 'change',
159
- 'changeText',
160
- 'selectionChange',
161
- 'endEditing',
162
- 'blur',
163
- ]);
164
-
165
- expect(events).toMatchSnapshot(
166
- 'input: "{Backspace}a", defaultValue: "xxx"'
167
- );
168
- });
169
-
170
- it('supports multiline', async () => {
171
- const { events, ...queries } = renderTextInputWithToolkit({
172
- multiline: true,
173
- });
174
-
175
- const user = userEvent.setup();
176
- await user.type(queries.getByTestId('input'), '{Enter}\n');
177
-
178
- const eventNames = events.map((e) => e.name);
179
- expect(eventNames).toEqual([
180
- 'pressIn',
181
- 'focus',
182
- 'pressOut',
183
- 'keyPress',
184
- 'textInput',
185
- 'change',
186
- 'changeText',
187
- 'selectionChange',
188
- 'contentSizeChange',
189
- 'keyPress',
190
- 'textInput',
191
- 'change',
192
- 'changeText',
193
- 'selectionChange',
194
- 'contentSizeChange',
195
- 'endEditing',
196
- 'blur',
197
- ]);
198
-
199
- expect(events).toMatchSnapshot('input: "{Enter}\\n", multiline: true');
200
- });
201
-
202
- test('skips press events when `skipPress: true`', async () => {
203
- const { events, ...queries } = renderTextInputWithToolkit();
204
-
205
- const user = userEvent.setup();
206
- await user.type(queries.getByTestId('input'), 'a', {
207
- skipPress: true,
208
- });
209
-
210
- const eventNames = events.map((e) => e.name);
211
- expect(eventNames).not.toContainEqual('pressIn');
212
- expect(eventNames).not.toContainEqual('pressOut');
213
- expect(eventNames).toEqual([
214
- 'focus',
215
- 'keyPress',
216
- 'change',
217
- 'changeText',
218
- 'selectionChange',
219
- 'endEditing',
220
- 'blur',
221
- ]);
222
- });
223
-
224
- it('triggers submit event with `submitEditing: true`', async () => {
225
- const { events, ...queries } = renderTextInputWithToolkit();
226
-
227
- const user = userEvent.setup();
228
- await user.type(queries.getByTestId('input'), 'a', {
229
- submitEditing: true,
230
- });
231
-
232
- const eventNames = events.map((e) => e.name);
233
- expect(eventNames).toEqual([
234
- 'pressIn',
235
- 'focus',
236
- 'pressOut',
237
- 'keyPress',
238
- 'change',
239
- 'changeText',
240
- 'selectionChange',
241
- 'submitEditing',
242
- 'endEditing',
243
- 'blur',
244
- ]);
245
-
246
- expect(events[7].name).toBe('submitEditing');
247
- expect(events[7].payload).toEqual({
248
- nativeEvent: { text: 'a', target: 0 },
249
- });
250
- });
251
-
252
- it('works when not all events have handlers', async () => {
253
- const { events, logEvent } = createEventLogger();
254
- const screen = render(
255
- <TextInput
256
- testID="input"
257
- onChangeText={logEvent('changeText')}
258
- onEndEditing={logEvent('endEditing')}
259
- />
260
- );
261
-
262
- const user = userEvent.setup();
263
- await user.type(screen.getByTestId('input'), 'abc');
264
-
265
- const eventNames = events.map((e) => e.name);
266
- expect(eventNames).toEqual([
267
- 'changeText',
268
- 'changeText',
269
- 'changeText',
270
- 'endEditing',
271
- ]);
272
-
273
- expect(events).toMatchSnapshot('input: "abc"');
274
- });
275
-
276
- it('does NOT work on View', async () => {
277
- const screen = render(<View testID="input" />);
278
-
279
- const user = userEvent.setup();
280
- await expect(
281
- user.type(screen.getByTestId('input'), 'abc')
282
- ).rejects.toThrowErrorMatchingInlineSnapshot(
283
- `"type() works only with host "TextInput" elements. Passed element has type "View"."`
284
- );
285
- });
286
-
287
- // View that ignores props type checking
288
- const AnyView = View as React.ComponentType<any>;
289
-
290
- it('does NOT bubble up', async () => {
291
- const parentHandler = jest.fn();
292
- const screen = render(
293
- <AnyView
294
- onChangeText={parentHandler}
295
- onChange={parentHandler}
296
- onKeyPress={parentHandler}
297
- onTextInput={parentHandler}
298
- onFocus={parentHandler}
299
- onBlur={parentHandler}
300
- onEndEditing={parentHandler}
301
- onPressIn={parentHandler}
302
- onPressOut={parentHandler}
303
- >
304
- <TextInput testID="input" />
305
- </AnyView>
306
- );
307
-
308
- const user = userEvent.setup();
309
- await user.type(screen.getByTestId('input'), 'abc');
310
- expect(parentHandler).not.toHaveBeenCalled();
311
- });
312
-
313
- it('supports direct access', async () => {
314
- const { events, logEvent } = createEventLogger();
315
- const screen = render(
316
- <TextInput
317
- testID="input"
318
- onChangeText={logEvent('changeText')}
319
- onFocus={logEvent('focus')}
320
- onBlur={logEvent('blur')}
321
- />
322
- );
323
-
324
- await userEvent.type(screen.getByTestId('input'), 'abc');
325
-
326
- const eventNames = events.map((event) => event.name);
327
- expect(eventNames).toEqual([
328
- 'focus',
329
- 'changeText',
330
- 'changeText',
331
- 'changeText',
332
- 'blur',
333
- ]);
334
- });
335
- });
@@ -1 +0,0 @@
1
- export { type, TypeOptions } from './type';
@@ -1,41 +0,0 @@
1
- const knownKeys = new Set(['Enter', 'Backspace']);
2
-
3
- export function parseKeys(text: string) {
4
- const result = [];
5
-
6
- let remainingText = text;
7
- while (remainingText) {
8
- const [token, rest] = getNextToken(remainingText);
9
- if (token.length > 1 && !knownKeys.has(token)) {
10
- throw new Error(`Unknown key "${token}" in "${text}"`);
11
- }
12
-
13
- result.push(token);
14
- remainingText = rest;
15
- }
16
-
17
- return result;
18
- }
19
-
20
- function getNextToken(text: string): [string, string] {
21
- // Detect `{{` => escaped `{`
22
- if (text[0] === '{' && text[1] === '{') {
23
- return ['{', text.slice(2)];
24
- }
25
-
26
- // Detect `{key}` => special key
27
- if (text[0] === '{') {
28
- const endIndex = text.indexOf('}');
29
- if (endIndex === -1) {
30
- throw new Error(`Invalid key sequence "${text}"`);
31
- }
32
-
33
- return [text.slice(1, endIndex), text.slice(endIndex + 1)];
34
- }
35
-
36
- if (text[0] === '\n') {
37
- return ['Enter', text.slice(1)];
38
- }
39
-
40
- return [text[0], text.slice(1)];
41
- }
@@ -1,138 +0,0 @@
1
- import { ReactTestInstance } from 'react-test-renderer';
2
- import { isHostTextInput } from '../../helpers/host-component-names';
3
- import { EventBuilder } from '../event-builder';
4
- import { ErrorWithStack } from '../../helpers/errors';
5
- import { isPointerEventEnabled } from '../../helpers/pointer-events';
6
- import { UserEventConfig, UserEventInstance } from '../setup';
7
- import { dispatchEvent, wait, getTextContentSize } from '../utils';
8
-
9
- import { parseKeys } from './parseKeys';
10
-
11
- export interface TypeOptions {
12
- skipPress?: boolean;
13
- submitEditing?: boolean;
14
- }
15
-
16
- export async function type(
17
- this: UserEventInstance,
18
- element: ReactTestInstance,
19
- text: string,
20
- options?: TypeOptions
21
- ): Promise<void> {
22
- if (!isHostTextInput(element)) {
23
- throw new ErrorWithStack(
24
- `type() works only with host "TextInput" elements. Passed element has type "${element.type}".`,
25
- type
26
- );
27
- }
28
-
29
- // Skip events if the element is disabled
30
- if (element.props.editable === false || !isPointerEventEnabled(element)) {
31
- return;
32
- }
33
-
34
- const keys = parseKeys(text);
35
-
36
- if (!options?.skipPress) {
37
- dispatchEvent(element, 'pressIn', EventBuilder.Common.touch());
38
- }
39
-
40
- dispatchEvent(element, 'focus', EventBuilder.Common.focus());
41
-
42
- if (!options?.skipPress) {
43
- await wait(this.config);
44
- dispatchEvent(element, 'pressOut', EventBuilder.Common.touch());
45
- }
46
-
47
- let currentText = element.props.value ?? element.props.defaultValue ?? '';
48
- for (const key of keys) {
49
- const previousText = element.props.value ?? currentText;
50
- currentText = applyKey(previousText, key);
51
-
52
- await emitTypingEvents(
53
- this.config,
54
- element,
55
- key,
56
- currentText,
57
- previousText
58
- );
59
- }
60
-
61
- const finalText = element.props.value ?? currentText;
62
- await wait(this.config);
63
-
64
- if (options?.submitEditing) {
65
- dispatchEvent(
66
- element,
67
- 'submitEditing',
68
- EventBuilder.TextInput.submitEditing(finalText)
69
- );
70
- }
71
-
72
- dispatchEvent(
73
- element,
74
- 'endEditing',
75
- EventBuilder.TextInput.endEditing(finalText)
76
- );
77
-
78
- dispatchEvent(element, 'blur', EventBuilder.Common.blur());
79
- }
80
-
81
- export async function emitTypingEvents(
82
- config: UserEventConfig,
83
- element: ReactTestInstance,
84
- key: string,
85
- currentText: string,
86
- previousText: string
87
- ) {
88
- const isMultiline = element.props.multiline === true;
89
-
90
- await wait(config);
91
- dispatchEvent(element, 'keyPress', EventBuilder.TextInput.keyPress(key));
92
-
93
- // According to the docs only multiline TextInput emits textInput event
94
- // @see: https://github.com/facebook/react-native/blob/42a2898617da1d7a98ef574a5b9e500681c8f738/packages/react-native/Libraries/Components/TextInput/TextInput.d.ts#L754
95
- if (isMultiline) {
96
- dispatchEvent(
97
- element,
98
- 'textInput',
99
- EventBuilder.TextInput.textInput(currentText, previousText)
100
- );
101
- }
102
-
103
- dispatchEvent(element, 'change', EventBuilder.TextInput.change(currentText));
104
- dispatchEvent(element, 'changeText', currentText);
105
-
106
- const selectionRange = {
107
- start: currentText.length,
108
- end: currentText.length,
109
- };
110
- dispatchEvent(
111
- element,
112
- 'selectionChange',
113
- EventBuilder.TextInput.selectionChange(selectionRange)
114
- );
115
-
116
- // According to the docs only multiline TextInput emits contentSizeChange event
117
- // @see: https://reactnative.dev/docs/textinput#oncontentsizechange
118
- if (isMultiline) {
119
- const contentSize = getTextContentSize(currentText);
120
- dispatchEvent(
121
- element,
122
- 'contentSizeChange',
123
- EventBuilder.TextInput.contentSizeChange(contentSize)
124
- );
125
- }
126
- }
127
-
128
- function applyKey(text: string, key: string) {
129
- if (key === 'Enter') {
130
- return `${text}\n`;
131
- }
132
-
133
- if (key === 'Backspace') {
134
- return text.slice(0, -1);
135
- }
136
-
137
- return text + key;
138
- }
@@ -1,41 +0,0 @@
1
- import * as React from 'react';
2
- import { Text } from 'react-native';
3
- import render from '../../../render';
4
- import { dispatchEvent } from '../dispatch-event';
5
- import { EventBuilder } from '../../event-builder';
6
-
7
- const TOUCH_EVENT = EventBuilder.Common.touch();
8
-
9
- describe('dispatchEvent', () => {
10
- it('does dispatch event', () => {
11
- const onPress = jest.fn();
12
- const screen = render(<Text testID="text" onPress={onPress} />);
13
-
14
- dispatchEvent(screen.getByTestId('text'), 'press', TOUCH_EVENT);
15
- expect(onPress).toHaveBeenCalledTimes(1);
16
- });
17
-
18
- it('does not dispatch event to parent host component', () => {
19
- const onPressParent = jest.fn();
20
- const screen = render(
21
- <Text onPress={onPressParent}>
22
- <Text testID="text" />
23
- </Text>
24
- );
25
-
26
- dispatchEvent(screen.getByTestId('text'), 'press', TOUCH_EVENT);
27
- expect(onPressParent).not.toHaveBeenCalled();
28
- });
29
-
30
- it('does NOT throw if no handler found', () => {
31
- const screen = render(
32
- <Text>
33
- <Text testID="text" />
34
- </Text>
35
- );
36
-
37
- expect(() =>
38
- dispatchEvent(screen.getByTestId('text'), 'press', TOUCH_EVENT)
39
- ).not.toThrow();
40
- });
41
- });