@testing-library/react-native 12.1.2 → 12.2.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 (545) hide show
  1. package/.DS_Store +0 -0
  2. package/.codecov.yml +9 -0
  3. package/.eslintcache +1 -0
  4. package/.eslintignore +2 -0
  5. package/.eslintrc +19 -0
  6. package/.flowconfig +63 -0
  7. package/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
  8. package/.github/ISSUE_TEMPLATE/feature_request.md +14 -0
  9. package/.github/ISSUE_TEMPLATE/question.md +9 -0
  10. package/.github/PULL_REQUEST_TEMPLATE.md +10 -0
  11. package/.github/actions/setup-deps/action.yml +22 -0
  12. package/.github/actions/setup-website-deps/action.yml +22 -0
  13. package/.github/dependabot.yml +10 -0
  14. package/.github/workflows/deploy-website.yml +36 -0
  15. package/.github/workflows/example-apps.yml +25 -0
  16. package/.github/workflows/main.yml +103 -0
  17. package/.gitignore +11 -0
  18. package/.prettierrc.js +5 -0
  19. package/CODE_OF_CONDUCT.md +73 -0
  20. package/CONTRIBUTING.md +64 -0
  21. package/README.md +8 -7
  22. package/babel.config.js +22 -0
  23. package/build/act.js.map +1 -1
  24. package/build/cleanup.js.map +1 -1
  25. package/build/fireEvent.d.ts +9 -1
  26. package/build/fireEvent.js +11 -20
  27. package/build/fireEvent.js.map +1 -1
  28. package/build/flush-micro-tasks.d.ts +19 -0
  29. package/build/flush-micro-tasks.js +36 -0
  30. package/build/flush-micro-tasks.js.map +1 -0
  31. package/build/helpers/accessiblity.js +2 -2
  32. package/build/helpers/accessiblity.js.map +1 -1
  33. package/build/helpers/component-tree.js.map +1 -1
  34. package/build/helpers/deprecation.js +1 -1
  35. package/build/helpers/deprecation.js.map +1 -1
  36. package/build/helpers/errors.js.map +1 -1
  37. package/build/helpers/findAll.js.map +1 -1
  38. package/build/helpers/format-default.js.map +1 -1
  39. package/build/helpers/format.js.map +1 -1
  40. package/build/helpers/host-component-names.d.ts +3 -0
  41. package/build/helpers/host-component-names.js +8 -0
  42. package/build/helpers/host-component-names.js.map +1 -1
  43. package/build/helpers/matchers/matchLabelText.js.map +1 -1
  44. package/build/helpers/pointer-events.d.ts +9 -0
  45. package/build/helpers/pointer-events.js +25 -0
  46. package/build/helpers/pointer-events.js.map +1 -0
  47. package/build/helpers/stringValidation.js.map +1 -1
  48. package/build/helpers/timers.js.map +1 -1
  49. package/build/index.js +2 -2
  50. package/build/index.js.map +1 -1
  51. package/build/matches.js.map +1 -1
  52. package/build/pure.d.ts +3 -1
  53. package/build/pure.js +7 -0
  54. package/build/pure.js.map +1 -1
  55. package/build/queries/a11yState.js.map +1 -1
  56. package/build/queries/a11yValue.js.map +1 -1
  57. package/build/queries/displayValue.js.map +1 -1
  58. package/build/queries/hintText.js.map +1 -1
  59. package/build/queries/labelText.js.map +1 -1
  60. package/build/queries/makeQueries.js.map +1 -1
  61. package/build/queries/placeholderText.js.map +1 -1
  62. package/build/queries/role.js.map +1 -1
  63. package/build/queries/testId.js.map +1 -1
  64. package/build/queries/text.js.map +1 -1
  65. package/build/queries/unsafeProps.js.map +1 -1
  66. package/build/render.d.ts +171 -12
  67. package/build/render.js +11 -4
  68. package/build/render.js.map +1 -1
  69. package/build/renderHook.d.ts +3 -6
  70. package/build/renderHook.js +4 -3
  71. package/build/renderHook.js.map +1 -1
  72. package/build/shallow.js.map +1 -1
  73. package/build/test-utils/events.d.ts +10 -0
  74. package/build/test-utils/events.js +27 -0
  75. package/build/test-utils/events.js.map +1 -0
  76. package/build/test-utils/index.d.ts +1 -0
  77. package/build/test-utils/index.js +17 -0
  78. package/build/test-utils/index.js.map +1 -0
  79. package/build/user-event/event-builder/common.d.ts +87 -0
  80. package/build/user-event/event-builder/common.js +75 -0
  81. package/build/user-event/event-builder/common.js.map +1 -0
  82. package/build/user-event/event-builder/index.d.ts +126 -0
  83. package/build/user-event/event-builder/index.js +14 -0
  84. package/build/user-event/event-builder/index.js.map +1 -0
  85. package/build/user-event/event-builder/text-input.d.ts +91 -0
  86. package/build/user-event/event-builder/text-input.js +117 -0
  87. package/build/user-event/event-builder/text-input.js.map +1 -0
  88. package/build/user-event/index.d.ts +11 -0
  89. package/build/user-event/index.js +22 -0
  90. package/build/user-event/index.js.map +1 -0
  91. package/build/user-event/press/constants.d.ts +2 -0
  92. package/build/user-event/press/constants.js +16 -0
  93. package/build/user-event/press/constants.js.map +1 -0
  94. package/build/user-event/press/index.d.ts +1 -0
  95. package/build/user-event/press/index.js +25 -0
  96. package/build/user-event/press/index.js.map +1 -0
  97. package/build/user-event/press/press.d.ts +7 -0
  98. package/build/user-event/press/press.js +99 -0
  99. package/build/user-event/press/press.js.map +1 -0
  100. package/build/user-event/setup/index.d.ts +2 -0
  101. package/build/user-event/setup/index.js +13 -0
  102. package/build/user-event/setup/index.js.map +1 -0
  103. package/build/user-event/setup/setup.d.ts +69 -0
  104. package/build/user-event/setup/setup.js +69 -0
  105. package/build/user-event/setup/setup.js.map +1 -0
  106. package/build/user-event/type/index.d.ts +1 -0
  107. package/build/user-event/type/index.js +19 -0
  108. package/build/user-event/type/index.js.map +1 -0
  109. package/build/user-event/type/parseKeys.d.ts +1 -0
  110. package/build/user-event/type/parseKeys.js +40 -0
  111. package/build/user-event/type/parseKeys.js.map +1 -0
  112. package/build/user-event/type/type.d.ts +7 -0
  113. package/build/user-event/type/type.js +76 -0
  114. package/build/user-event/type/type.js.map +1 -0
  115. package/build/user-event/utils/content-size.d.ts +15 -0
  116. package/build/user-event/utils/content-size.js +26 -0
  117. package/build/user-event/utils/content-size.js.map +1 -0
  118. package/build/user-event/utils/dispatch-event.d.ts +9 -0
  119. package/build/user-event/utils/dispatch-event.js +36 -0
  120. package/build/user-event/utils/dispatch-event.js.map +1 -0
  121. package/build/user-event/utils/index.d.ts +5 -0
  122. package/build/user-event/utils/index.js +61 -0
  123. package/build/user-event/utils/index.js.map +1 -0
  124. package/build/user-event/utils/text-range.d.ts +5 -0
  125. package/build/user-event/utils/text-range.js +13 -0
  126. package/build/user-event/utils/text-range.js.map +1 -0
  127. package/build/user-event/utils/wait.d.ts +2 -0
  128. package/build/user-event/utils/wait.js +14 -0
  129. package/build/user-event/utils/wait.js.map +1 -0
  130. package/build/user-event/utils/warn-about-real-timers.d.ts +1 -0
  131. package/build/user-event/utils/warn-about-real-timers.js +20 -0
  132. package/build/user-event/utils/warn-about-real-timers.js.map +1 -0
  133. package/build/waitFor.js +3 -3
  134. package/build/waitFor.js.map +1 -1
  135. package/build/waitForElementToBeRemoved.js.map +1 -1
  136. package/coverage/clover.xml +1176 -0
  137. package/coverage/coverage-final.json +70 -0
  138. package/coverage/lcov-report/base.css +224 -0
  139. package/coverage/lcov-report/block-navigation.js +87 -0
  140. package/coverage/lcov-report/favicon.png +0 -0
  141. package/coverage/lcov-report/index.html +266 -0
  142. package/coverage/lcov-report/prettify.css +1 -0
  143. package/coverage/lcov-report/prettify.js +2 -0
  144. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  145. package/coverage/lcov-report/sorter.js +196 -0
  146. package/coverage/lcov-report/src/act.ts.html +343 -0
  147. package/coverage/lcov-report/src/cleanup.ts.html +130 -0
  148. package/coverage/lcov-report/src/config.ts.html +301 -0
  149. package/coverage/lcov-report/src/fireEvent.ts.html +559 -0
  150. package/coverage/lcov-report/src/flushMicroTasks.ts.html +124 -0
  151. package/coverage/lcov-report/src/helpers/accessiblity.ts.html +412 -0
  152. package/coverage/lcov-report/src/helpers/component-tree.ts.html +352 -0
  153. package/coverage/lcov-report/src/helpers/debugDeep.ts.html +166 -0
  154. package/coverage/lcov-report/src/helpers/debugShallow.ts.html +151 -0
  155. package/coverage/lcov-report/src/helpers/deprecation.ts.html +244 -0
  156. package/coverage/lcov-report/src/helpers/errors.ts.html +283 -0
  157. package/coverage/lcov-report/src/helpers/filterNodeByType.ts.html +106 -0
  158. package/coverage/lcov-report/src/helpers/findAll.ts.html +289 -0
  159. package/coverage/lcov-report/src/helpers/format-default.ts.html +301 -0
  160. package/coverage/lcov-report/src/helpers/format.ts.html +226 -0
  161. package/coverage/lcov-report/src/helpers/getTextContent.ts.html +145 -0
  162. package/coverage/lcov-report/src/helpers/host-component-names.tsx.html +286 -0
  163. package/coverage/lcov-report/src/helpers/index.html +326 -0
  164. package/coverage/lcov-report/src/helpers/matchers/accessibilityState.ts.html +229 -0
  165. package/coverage/lcov-report/src/helpers/matchers/accessibilityValue.ts.html +157 -0
  166. package/coverage/lcov-report/src/helpers/matchers/index.html +206 -0
  167. package/coverage/lcov-report/src/helpers/matchers/matchArrayProp.ts.html +148 -0
  168. package/coverage/lcov-report/src/helpers/matchers/matchLabelText.ts.html +238 -0
  169. package/coverage/lcov-report/src/helpers/matchers/matchObjectProp.ts.html +160 -0
  170. package/coverage/lcov-report/src/helpers/matchers/matchStringProp.ts.html +154 -0
  171. package/coverage/lcov-report/src/helpers/matchers/matchTextContent.ts.html +145 -0
  172. package/coverage/lcov-report/src/helpers/query-name.ts.html +97 -0
  173. package/coverage/lcov-report/src/helpers/stringValidation.ts.html +193 -0
  174. package/coverage/lcov-report/src/helpers/timers.ts.html +382 -0
  175. package/coverage/lcov-report/src/index.html +356 -0
  176. package/coverage/lcov-report/src/index.ts.html +184 -0
  177. package/coverage/lcov-report/src/matches.ts.html +232 -0
  178. package/coverage/lcov-report/src/pure.ts.html +157 -0
  179. package/coverage/lcov-report/src/queries/a11yState.ts.html +478 -0
  180. package/coverage/lcov-report/src/queries/a11yValue.ts.html +478 -0
  181. package/coverage/lcov-report/src/queries/displayValue.ts.html +319 -0
  182. package/coverage/lcov-report/src/queries/hintText.ts.html +421 -0
  183. package/coverage/lcov-report/src/queries/index.html +281 -0
  184. package/coverage/lcov-report/src/queries/labelText.ts.html +262 -0
  185. package/coverage/lcov-report/src/queries/makeQueries.ts.html +850 -0
  186. package/coverage/lcov-report/src/queries/placeholderText.ts.html +322 -0
  187. package/coverage/lcov-report/src/queries/role.ts.html +481 -0
  188. package/coverage/lcov-report/src/queries/testId.ts.html +298 -0
  189. package/coverage/lcov-report/src/queries/text.ts.html +283 -0
  190. package/coverage/lcov-report/src/queries/unsafeProps.ts.html +313 -0
  191. package/coverage/lcov-report/src/queries/unsafeType.ts.html +304 -0
  192. package/coverage/lcov-report/src/react-versions.ts.html +118 -0
  193. package/coverage/lcov-report/src/render-act.ts.html +142 -0
  194. package/coverage/lcov-report/src/render.tsx.html +592 -0
  195. package/coverage/lcov-report/src/renderHook.tsx.html +262 -0
  196. package/coverage/lcov-report/src/screen.ts.html +454 -0
  197. package/coverage/lcov-report/src/shallow.ts.html +139 -0
  198. package/coverage/lcov-report/src/test-utils/events.ts.html +145 -0
  199. package/coverage/lcov-report/src/test-utils/index.html +131 -0
  200. package/coverage/lcov-report/src/test-utils/index.ts.html +88 -0
  201. package/coverage/lcov-report/src/user-event/event-builder/common.ts.html +229 -0
  202. package/coverage/lcov-report/src/user-event/event-builder/index.html +146 -0
  203. package/coverage/lcov-report/src/user-event/event-builder/index.ts.html +106 -0
  204. package/coverage/lcov-report/src/user-event/event-builder/test-input.ts.html +343 -0
  205. package/coverage/lcov-report/src/user-event/event-builder/text-input.ts.html +343 -0
  206. package/coverage/lcov-report/src/user-event/index.html +116 -0
  207. package/coverage/lcov-report/src/user-event/index.ts.html +121 -0
  208. package/coverage/lcov-report/src/user-event/press/index.html +131 -0
  209. package/coverage/lcov-report/src/user-event/press/index.ts.html +88 -0
  210. package/coverage/lcov-report/src/user-event/press/press.ts.html +133 -0
  211. package/coverage/lcov-report/src/user-event/setup/index.html +131 -0
  212. package/coverage/lcov-report/src/user-event/setup/index.ts.html +91 -0
  213. package/coverage/lcov-report/src/user-event/setup/setup.ts.html +358 -0
  214. package/coverage/lcov-report/src/user-event/type/index.html +146 -0
  215. package/coverage/lcov-report/src/user-event/type/index.ts.html +88 -0
  216. package/coverage/lcov-report/src/user-event/type/parseKeys.ts.html +208 -0
  217. package/coverage/lcov-report/src/user-event/type/type.ts.html +484 -0
  218. package/coverage/lcov-report/src/user-event/utils/content-size.ts.html +160 -0
  219. package/coverage/lcov-report/src/user-event/utils/dispatch-event.ts.html +367 -0
  220. package/coverage/lcov-report/src/user-event/utils/events.ts.html +247 -0
  221. package/coverage/lcov-report/src/user-event/utils/index.html +176 -0
  222. package/coverage/lcov-report/src/user-event/utils/index.ts.html +97 -0
  223. package/coverage/lcov-report/src/user-event/utils/text-range.ts.html +118 -0
  224. package/coverage/lcov-report/src/user-event/utils/wait.ts.html +130 -0
  225. package/coverage/lcov-report/src/waitFor.ts.html +772 -0
  226. package/coverage/lcov-report/src/waitForElementToBeRemoved.ts.html +211 -0
  227. package/coverage/lcov-report/src/within.ts.html +175 -0
  228. package/coverage/lcov.info +2614 -0
  229. package/examples/.DS_Store +0 -0
  230. package/examples/basic/.expo/README.md +17 -0
  231. package/examples/basic/.expo/devices.json +3 -0
  232. package/examples/basic/.expo/packager-info.json +4 -0
  233. package/examples/basic/.expo/settings.json +8 -0
  234. package/examples/basic/.expo-shared/assets.json +4 -0
  235. package/examples/basic/.gitignore +14 -0
  236. package/examples/basic/App.tsx +20 -0
  237. package/examples/basic/README.md +11 -0
  238. package/examples/basic/__tests__/App.test.tsx +119 -0
  239. package/examples/basic/app.json +31 -0
  240. package/examples/basic/assets/adaptive-icon.png +0 -0
  241. package/examples/basic/assets/favicon.png +0 -0
  242. package/examples/basic/assets/icon.png +0 -0
  243. package/examples/basic/assets/splash.png +0 -0
  244. package/examples/basic/babel.config.js +6 -0
  245. package/examples/basic/components/Home.tsx +28 -0
  246. package/examples/basic/components/LoginForm.tsx +138 -0
  247. package/examples/basic/jest-setup.ts +7 -0
  248. package/examples/basic/jest.config.js +5 -0
  249. package/examples/basic/package.json +30 -0
  250. package/examples/basic/tsconfig.json +7 -0
  251. package/examples/basic/yarn-error.log +8083 -0
  252. package/examples/basic/yarn.lock +8878 -0
  253. package/examples/react-navigation/README.md +16 -0
  254. package/examples/react-navigation/babel.config.js +4 -0
  255. package/examples/react-navigation/jest-setup.js +11 -0
  256. package/examples/react-navigation/jest.config.js +10 -0
  257. package/examples/react-navigation/package.json +31 -0
  258. package/examples/react-navigation/src/App.js +21 -0
  259. package/examples/react-navigation/src/DrawerNavigator.js +15 -0
  260. package/examples/react-navigation/src/DrawerNavigator.test.js +42 -0
  261. package/examples/react-navigation/src/NativeStackNavigator.js +15 -0
  262. package/examples/react-navigation/src/NativeStackNavigator.test.js +34 -0
  263. package/examples/react-navigation/src/StackNavigator.js +15 -0
  264. package/examples/react-navigation/src/StackNavigator.test.js +34 -0
  265. package/examples/react-navigation/src/TabNavigator.js +15 -0
  266. package/examples/react-navigation/src/TabNavigator.test.js +21 -0
  267. package/examples/react-navigation/src/screens/DetailsScreen.js +43 -0
  268. package/examples/react-navigation/src/screens/DetailsScreen.test.js +27 -0
  269. package/examples/react-navigation/src/screens/DrawerHomeScreen.js +26 -0
  270. package/examples/react-navigation/src/screens/HomeScreen.js +48 -0
  271. package/examples/react-navigation/src/screens/SettingsScreen.js +20 -0
  272. package/examples/react-navigation/src/test-utils.js +12 -0
  273. package/examples/react-navigation/yarn.lock +5610 -0
  274. package/examples/redux/App.js +27 -0
  275. package/examples/redux/README.md +5 -0
  276. package/examples/redux/actions/todoActions.js +25 -0
  277. package/examples/redux/babel.config.js +6 -0
  278. package/examples/redux/components/AddTodo.js +73 -0
  279. package/examples/redux/components/AddTodo.test.js +27 -0
  280. package/examples/redux/components/TodoElem.js +25 -0
  281. package/examples/redux/components/TodoList.js +29 -0
  282. package/examples/redux/components/TodoList.test.js +34 -0
  283. package/examples/redux/index.js +8 -0
  284. package/examples/redux/jest-setup.js +2 -0
  285. package/examples/redux/jest.config.js +4 -0
  286. package/examples/redux/package.json +23 -0
  287. package/examples/redux/reducers/index.js +6 -0
  288. package/examples/redux/reducers/todoReducer.js +27 -0
  289. package/examples/redux/store.js +10 -0
  290. package/examples/redux/test-utils.js +11 -0
  291. package/examples/redux/yarn-error.log +8083 -0
  292. package/examples/redux/yarn.lock +8423 -0
  293. package/experiments-app/.expo/README.md +15 -0
  294. package/experiments-app/.expo/devices.json +3 -0
  295. package/experiments-app/.expo/settings.json +10 -0
  296. package/experiments-app/.gitignore +17 -0
  297. package/experiments-app/.prettierrc.js +5 -0
  298. package/experiments-app/app.json +30 -0
  299. package/experiments-app/assets/adaptive-icon.png +0 -0
  300. package/experiments-app/assets/favicon.png +0 -0
  301. package/experiments-app/assets/icon.png +0 -0
  302. package/experiments-app/assets/splash.png +0 -0
  303. package/experiments-app/babel.config.js +6 -0
  304. package/experiments-app/index.js +4 -0
  305. package/experiments-app/package.json +31 -0
  306. package/experiments-app/src/App.tsx +31 -0
  307. package/experiments-app/src/MainScreen.tsx +51 -0
  308. package/experiments-app/src/experiments.ts +17 -0
  309. package/experiments-app/src/screens/TextInputEventPropagation.tsx +54 -0
  310. package/experiments-app/src/screens/TextInputEvents.tsx +60 -0
  311. package/experiments-app/src/utils/helpers.ts +8 -0
  312. package/experiments-app/tsconfig.json +6 -0
  313. package/experiments-app/yarn.lock +6913 -0
  314. package/flow-typed/npm/jest_v26.x.x.js +1218 -0
  315. package/flow-typed/npm/react-test-renderer_v16.x.x.js +81 -0
  316. package/jest-setup.ts +10 -0
  317. package/package.json +6 -6
  318. package/renovate.json +19 -0
  319. package/scripts/test_react_17 +12 -0
  320. package/src/.DS_Store +0 -0
  321. package/src/__tests__/.DS_Store +0 -0
  322. package/src/__tests__/__snapshots__/render-debug.test.tsx.snap +548 -0
  323. package/src/__tests__/__snapshots__/render.test.tsx.snap +39 -0
  324. package/src/__tests__/act.test.tsx +56 -0
  325. package/src/__tests__/auto-cleanup-skip.test.tsx +39 -0
  326. package/src/__tests__/auto-cleanup.test.tsx +50 -0
  327. package/src/__tests__/cleanup.test.tsx +26 -0
  328. package/src/__tests__/config.test.ts +55 -0
  329. package/src/__tests__/fireEvent-textInput.test.tsx +154 -0
  330. package/src/__tests__/fireEvent.test.tsx +485 -0
  331. package/src/__tests__/host-component-names.test.tsx +109 -0
  332. package/src/__tests__/host-text-nesting.test.tsx +90 -0
  333. package/src/__tests__/jest-native.test.tsx +84 -0
  334. package/src/__tests__/questionsBoard.test.tsx +62 -0
  335. package/src/__tests__/react-native-api.test.tsx +126 -0
  336. package/src/__tests__/render-debug.test.tsx +207 -0
  337. package/src/__tests__/render-stringValidation.test.tsx +157 -0
  338. package/src/__tests__/render.test.tsx +256 -0
  339. package/src/__tests__/renderHook.test.tsx +114 -0
  340. package/src/__tests__/screen.test.tsx +66 -0
  341. package/src/__tests__/timerUtils.ts +7 -0
  342. package/src/__tests__/timers.test.ts +27 -0
  343. package/src/__tests__/waitFor.test.tsx +327 -0
  344. package/src/__tests__/waitForElementToBeRemoved.test.tsx +151 -0
  345. package/src/__tests__/within.test.tsx +96 -0
  346. package/src/act.ts +86 -0
  347. package/src/cleanup.ts +15 -0
  348. package/src/config.ts +72 -0
  349. package/src/fireEvent.ts +159 -0
  350. package/src/flush-micro-tasks.ts +30 -0
  351. package/src/helpers/__tests__/accessiblity.test.tsx +373 -0
  352. package/src/helpers/__tests__/component-tree.test.tsx +226 -0
  353. package/src/helpers/__tests__/format-default.tsx +114 -0
  354. package/src/helpers/__tests__/getTextContent.test.tsx +49 -0
  355. package/src/helpers/__tests__/includeHiddenElements.test.tsx +39 -0
  356. package/src/helpers/__tests__/query-name.test.ts +10 -0
  357. package/src/helpers/__tests__/timers.test.ts +8 -0
  358. package/src/helpers/accessiblity.ts +108 -0
  359. package/src/helpers/component-tree.ts +89 -0
  360. package/src/helpers/debugDeep.ts +27 -0
  361. package/src/helpers/debugShallow.ts +22 -0
  362. package/src/helpers/deprecation.ts +53 -0
  363. package/src/helpers/errors.ts +66 -0
  364. package/src/helpers/filterNodeByType.ts +7 -0
  365. package/src/helpers/findAll.ts +68 -0
  366. package/src/helpers/format-default.ts +72 -0
  367. package/src/helpers/format.ts +47 -0
  368. package/src/helpers/getTextContent.ts +20 -0
  369. package/src/helpers/host-component-names.tsx +75 -0
  370. package/src/helpers/matchers/__tests__/matchArrayValue.test.ts +34 -0
  371. package/src/helpers/matchers/__tests__/matchObject.test.ts +37 -0
  372. package/src/helpers/matchers/__tests__/matchStringValue.test.ts +15 -0
  373. package/src/helpers/matchers/accessibilityState.ts +48 -0
  374. package/src/helpers/matchers/accessibilityValue.ts +24 -0
  375. package/src/helpers/matchers/matchArrayProp.ts +21 -0
  376. package/src/helpers/matchers/matchLabelText.ts +51 -0
  377. package/src/helpers/matchers/matchObjectProp.ts +25 -0
  378. package/src/helpers/matchers/matchStringProp.ts +23 -0
  379. package/src/helpers/matchers/matchTextContent.ts +20 -0
  380. package/src/helpers/pointer-events.ts +27 -0
  381. package/src/helpers/query-name.ts +4 -0
  382. package/src/helpers/stringValidation.ts +36 -0
  383. package/src/helpers/timers.ts +98 -0
  384. package/src/index.ts +33 -0
  385. package/src/matches.ts +49 -0
  386. package/src/pure.ts +27 -0
  387. package/src/queries/__tests__/a11yState.test.tsx +439 -0
  388. package/src/queries/__tests__/a11yValue.test.tsx +309 -0
  389. package/src/queries/__tests__/displayValue.test.tsx +221 -0
  390. package/src/queries/__tests__/hintText.test.tsx +177 -0
  391. package/src/queries/__tests__/labelText.test.tsx +242 -0
  392. package/src/queries/__tests__/makeQueries.test.tsx +235 -0
  393. package/src/queries/__tests__/placeholderText.test.tsx +136 -0
  394. package/src/queries/__tests__/role-value.test.tsx +176 -0
  395. package/src/queries/__tests__/role.test.tsx +824 -0
  396. package/src/queries/__tests__/testId.test.tsx +200 -0
  397. package/src/queries/__tests__/text.test.tsx +556 -0
  398. package/src/queries/a11yState.ts +131 -0
  399. package/src/queries/a11yValue.ts +131 -0
  400. package/src/queries/displayValue.ts +78 -0
  401. package/src/queries/hintText.ts +112 -0
  402. package/src/queries/labelText.ts +59 -0
  403. package/src/queries/makeQueries.ts +255 -0
  404. package/src/queries/options.ts +14 -0
  405. package/src/queries/placeholderText.ts +79 -0
  406. package/src/queries/role.ts +132 -0
  407. package/src/queries/testId.ts +71 -0
  408. package/src/queries/text.ts +66 -0
  409. package/src/queries/unsafeProps.ts +76 -0
  410. package/src/queries/unsafeType.ts +73 -0
  411. package/src/react-versions.ts +11 -0
  412. package/src/render-act.ts +19 -0
  413. package/src/render.tsx +183 -0
  414. package/src/renderHook.tsx +56 -0
  415. package/src/screen.ts +123 -0
  416. package/src/shallow.ts +18 -0
  417. package/src/test-utils/events.ts +24 -0
  418. package/src/test-utils/index.ts +1 -0
  419. package/src/user-event/event-builder/common.ts +66 -0
  420. package/src/user-event/event-builder/index.ts +7 -0
  421. package/src/user-event/event-builder/text-input.ts +86 -0
  422. package/src/user-event/index.ts +17 -0
  423. package/src/user-event/press/__tests__/longPress.real-timers.test.tsx +117 -0
  424. package/src/user-event/press/__tests__/longPress.test.tsx +157 -0
  425. package/src/user-event/press/__tests__/press.real-timers.test.tsx +320 -0
  426. package/src/user-event/press/__tests__/press.test.tsx +457 -0
  427. package/src/user-event/press/constants.ts +7 -0
  428. package/src/user-event/press/index.ts +1 -0
  429. package/src/user-event/press/press.ts +169 -0
  430. package/src/user-event/setup/index.ts +2 -0
  431. package/src/user-event/setup/setup.ts +127 -0
  432. package/src/user-event/type/__tests__/__snapshots__/type-managed.test.tsx.snap +339 -0
  433. package/src/user-event/type/__tests__/__snapshots__/type.test.tsx.snap +668 -0
  434. package/src/user-event/type/__tests__/parseKeys.test.ts +23 -0
  435. package/src/user-event/type/__tests__/type-managed.test.tsx +121 -0
  436. package/src/user-event/type/__tests__/type.test.tsx +336 -0
  437. package/src/user-event/type/index.ts +1 -0
  438. package/src/user-event/type/parseKeys.ts +41 -0
  439. package/src/user-event/type/type.ts +135 -0
  440. package/src/user-event/utils/__tests__/dispatch-event.test.tsx +41 -0
  441. package/src/user-event/utils/__tests__/wait.test.ts +63 -0
  442. package/src/user-event/utils/content-size.ts +25 -0
  443. package/src/user-event/utils/dispatch-event.ts +38 -0
  444. package/src/user-event/utils/index.ts +5 -0
  445. package/src/user-event/utils/text-range.ts +11 -0
  446. package/src/user-event/utils/wait.ts +15 -0
  447. package/src/user-event/utils/warn-about-real-timers.ts +13 -0
  448. package/src/waitFor.ts +228 -0
  449. package/src/waitForElementToBeRemoved.ts +42 -0
  450. package/src/within.ts +30 -0
  451. package/tsconfig.json +17 -0
  452. package/tsconfig.release.json +8 -0
  453. package/website/.DS_Store +0 -0
  454. package/website/.docusaurus/DONT-EDIT-THIS-FOLDER +5 -0
  455. package/website/.docusaurus/client-modules.js +6 -0
  456. package/website/.docusaurus/codeTranslations.json +1 -0
  457. package/website/.docusaurus/docusaurus-plugin-content-blog/default/blog-post-list-prop-default.json +4 -0
  458. package/website/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json +4 -0
  459. package/website/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json +4 -0
  460. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-api-md-c82.json +27 -0
  461. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-eslint-p-llugin-testing-library-md-d24.json +27 -0
  462. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-faq-md-ad8.json +27 -0
  463. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-getting-started-md-8a6.json +23 -0
  464. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-how-should-i-query-md-f2d.json +27 -0
  465. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-migration-v-11-md-add.json +27 -0
  466. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-migration-v-12-md-14f.json +27 -0
  467. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-migration-v-2-md-698.json +27 -0
  468. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-migration-v-7-md-6bb.json +27 -0
  469. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-migration-v-9-md-f69.json +27 -0
  470. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-queries-md-7ad.json +27 -0
  471. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-react-navigation-md-1bd.json +27 -0
  472. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-redux-integration-md-77b.json +23 -0
  473. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-testing-environment-md-1c6.json +27 -0
  474. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-troubleshooting-md-01d.json +27 -0
  475. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-understanding-act-md-aa9.json +27 -0
  476. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-user-event-md-501.json +27 -0
  477. package/website/.docusaurus/docusaurus-plugin-content-docs/default/version-current-metadata-prop-751.json +268 -0
  478. package/website/.docusaurus/docusaurus-plugin-content-docs/react-native-testing-library-docs-route-96e.json +115 -0
  479. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-api-md-c82.json +19 -0
  480. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-eslint-p-llugin-testing-library-md-d24.json +19 -0
  481. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-faq-md-ad8.json +19 -0
  482. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-getting-started-md-8a6.json +15 -0
  483. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-how-should-i-query-md-f2d.json +19 -0
  484. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-migration-v-11-md-add.json +19 -0
  485. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-migration-v-2-md-698.json +19 -0
  486. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-migration-v-7-md-6bb.json +19 -0
  487. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-migration-v-9-md-f69.json +19 -0
  488. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-queries-md-7ad.json +19 -0
  489. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-react-navigation-md-1bd.json +19 -0
  490. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-redux-integration-md-77b.json +15 -0
  491. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-troubleshooting-md-01d.json +19 -0
  492. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-understanding-act-md-aa9.json +19 -0
  493. package/website/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json +4 -0
  494. package/website/.docusaurus/docusaurus-plugin-debug/default/docusaurus-debug-all-content-673.json +623 -0
  495. package/website/.docusaurus/docusaurus-plugin-debug/default/plugin-route-context-module-100.json +4 -0
  496. package/website/.docusaurus/docusaurus-theme-search-algolia/default/plugin-route-context-module-100.json +4 -0
  497. package/website/.docusaurus/docusaurus.config.js +267 -0
  498. package/website/.docusaurus/docusaurus.config.mjs +365 -0
  499. package/website/.docusaurus/globalData.json +113 -0
  500. package/website/.docusaurus/i18n.json +17 -0
  501. package/website/.docusaurus/registry.js +35 -0
  502. package/website/.docusaurus/routes.js +162 -0
  503. package/website/.docusaurus/routesChunkNames.json +133 -0
  504. package/website/.docusaurus/site-metadata.json +36 -0
  505. package/website/.gitignore +20 -0
  506. package/website/README.md +33 -0
  507. package/website/docker/.dockerignore +3 -0
  508. package/website/docker/Dockerfile +9 -0
  509. package/website/docker/docker-compose.yml +11 -0
  510. package/website/docs/API.md +940 -0
  511. package/website/docs/EslintPLluginTestingLibrary.md +28 -0
  512. package/website/docs/FAQ.md +44 -0
  513. package/website/docs/GettingStarted.md +100 -0
  514. package/website/docs/HowShouldIQuery.md +21 -0
  515. package/website/docs/MigrationV11.md +64 -0
  516. package/website/docs/MigrationV12.md +67 -0
  517. package/website/docs/MigrationV2.md +126 -0
  518. package/website/docs/MigrationV7.md +119 -0
  519. package/website/docs/MigrationV9.md +67 -0
  520. package/website/docs/Queries.md +567 -0
  521. package/website/docs/ReactNavigation.md +371 -0
  522. package/website/docs/ReduxIntegration.md +137 -0
  523. package/website/docs/TestingEnvironment.md +154 -0
  524. package/website/docs/Troubleshooting.md +44 -0
  525. package/website/docs/UnderstandingAct.md +227 -0
  526. package/website/docs/UserEvent.md +143 -0
  527. package/website/docusaurus.config.js +114 -0
  528. package/website/package.json +31 -0
  529. package/website/sidebars.js +20 -0
  530. package/website/src/components/Feature.js +31 -0
  531. package/website/src/css/custom.css +13 -0
  532. package/website/src/css/index.module.css +77 -0
  533. package/website/src/pages/index.js +82 -0
  534. package/website/static/.nojekyll +0 -0
  535. package/website/static/css/custom.css +28 -0
  536. package/website/static/img/hit.png +0 -0
  537. package/website/static/img/locomotive.png +0 -0
  538. package/website/static/img/owl.png +0 -0
  539. package/website/static/img/tools.png +0 -0
  540. package/website/yarn.lock +7669 -0
  541. package/yarn-error.log +10613 -0
  542. package/yarn.lock +7765 -0
  543. package/build/flushMicroTasks.d.ts +0 -5
  544. package/build/flushMicroTasks.js +0 -17
  545. package/build/flushMicroTasks.js.map +0 -1
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.longPress = longPress;
7
+ exports.press = press;
8
+ var _act = _interopRequireDefault(require("../../act"));
9
+ var _componentTree = require("../../helpers/component-tree");
10
+ var _pointerEvents = require("../../helpers/pointer-events");
11
+ var _hostComponentNames = require("../../helpers/host-component-names");
12
+ var _eventBuilder = require("../event-builder");
13
+ var _utils = require("../utils");
14
+ var _constants = require("./constants");
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
+ async function press(element) {
17
+ await basePress(this.config, element, {
18
+ type: 'press',
19
+ duration: 0
20
+ });
21
+ }
22
+ async function longPress(element, options) {
23
+ await basePress(this.config, element, {
24
+ type: 'longPress',
25
+ duration: options?.duration ?? 500
26
+ });
27
+ }
28
+ const basePress = async (config, element, options) => {
29
+ if (isPressableText(element)) {
30
+ await emitTextPressEvents(config, element, options);
31
+ return;
32
+ }
33
+ if (isEnabledTextInput(element)) {
34
+ await emitTextInputPressEvents(config, element, options);
35
+ return;
36
+ }
37
+ if (isEnabledTouchResponder(element)) {
38
+ await emitPressablePressEvents(config, element, options);
39
+ return;
40
+ }
41
+ const hostParentElement = (0, _componentTree.getHostParent)(element);
42
+ if (!hostParentElement) {
43
+ return;
44
+ }
45
+ await basePress(config, hostParentElement, options);
46
+ };
47
+ const emitPressablePressEvents = async (config, element, options) => {
48
+ (0, _utils.warnAboutRealTimersIfNeeded)();
49
+ await (0, _utils.wait)(config);
50
+ await (0, _act.default)(async () => {
51
+ (0, _utils.dispatchEvent)(element, 'responderGrant', _eventBuilder.EventBuilder.Common.responderGrant());
52
+ await (0, _utils.wait)(config, options.duration);
53
+ (0, _utils.dispatchEvent)(element, 'responderRelease', _eventBuilder.EventBuilder.Common.responderRelease());
54
+
55
+ // React Native will wait for minimal delay of DEFAULT_MIN_PRESS_DURATION
56
+ // before emitting the `pressOut` event. We need to wait here, so that
57
+ // `press()` function does not return before that.
58
+ if (_constants.DEFAULT_MIN_PRESS_DURATION - options.duration > 0) {
59
+ await (0, _utils.wait)(config, _constants.DEFAULT_MIN_PRESS_DURATION - options.duration);
60
+ }
61
+ });
62
+ };
63
+ const isEnabledTouchResponder = element => {
64
+ return (0, _pointerEvents.isPointerEventEnabled)(element) && element.props.onStartShouldSetResponder?.();
65
+ };
66
+ const isPressableText = element => {
67
+ const hasPressEventHandler = Boolean(element.props.onPress || element.props.onLongPress || element.props.onPressIn || element.props.onPressOut);
68
+ return (0, _hostComponentNames.isHostText)(element) && (0, _pointerEvents.isPointerEventEnabled)(element) && !element.props.disabled && hasPressEventHandler;
69
+ };
70
+ const isEnabledTextInput = element => {
71
+ return (0, _hostComponentNames.isHostTextInput)(element) && (0, _pointerEvents.isPointerEventEnabled)(element) && element.props.editable !== false;
72
+ };
73
+
74
+ /**
75
+ * Dispatches a press event sequence for Text.
76
+ */
77
+ async function emitTextPressEvents(config, element, options) {
78
+ await (0, _utils.wait)(config);
79
+ (0, _utils.dispatchEvent)(element, 'pressIn', _eventBuilder.EventBuilder.Common.touch());
80
+
81
+ // Emit either `press` or `longPress`.
82
+ (0, _utils.dispatchEvent)(element, options.type, _eventBuilder.EventBuilder.Common.touch());
83
+ await (0, _utils.wait)(config, options.duration);
84
+ (0, _utils.dispatchEvent)(element, 'pressOut', _eventBuilder.EventBuilder.Common.touch());
85
+ }
86
+
87
+ /**
88
+ * Dispatches a press event sequence for TextInput.
89
+ */
90
+ async function emitTextInputPressEvents(config, element, options) {
91
+ await (0, _utils.wait)(config);
92
+ (0, _utils.dispatchEvent)(element, 'pressIn', _eventBuilder.EventBuilder.Common.touch());
93
+
94
+ // Note: TextInput does not have `onPress`/`onLongPress` props.
95
+
96
+ await (0, _utils.wait)(config, options.duration);
97
+ (0, _utils.dispatchEvent)(element, 'pressOut', _eventBuilder.EventBuilder.Common.touch());
98
+ }
99
+ //# sourceMappingURL=press.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"press.js","names":["_act","_interopRequireDefault","require","_componentTree","_pointerEvents","_hostComponentNames","_eventBuilder","_utils","_constants","obj","__esModule","default","press","element","basePress","config","type","duration","longPress","options","isPressableText","emitTextPressEvents","isEnabledTextInput","emitTextInputPressEvents","isEnabledTouchResponder","emitPressablePressEvents","hostParentElement","getHostParent","warnAboutRealTimersIfNeeded","wait","act","dispatchEvent","EventBuilder","Common","responderGrant","responderRelease","DEFAULT_MIN_PRESS_DURATION","isPointerEventEnabled","props","onStartShouldSetResponder","hasPressEventHandler","Boolean","onPress","onLongPress","onPressIn","onPressOut","isHostText","disabled","isHostTextInput","editable","touch"],"sources":["../../../src/user-event/press/press.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport act from '../../act';\nimport { getHostParent } from '../../helpers/component-tree';\nimport { isPointerEventEnabled } from '../../helpers/pointer-events';\nimport {\n isHostText,\n isHostTextInput,\n} from '../../helpers/host-component-names';\nimport { EventBuilder } from '../event-builder';\nimport { UserEventConfig, UserEventInstance } from '../setup';\nimport { dispatchEvent, wait, warnAboutRealTimersIfNeeded } from '../utils';\nimport { DEFAULT_MIN_PRESS_DURATION } from './constants';\n\nexport interface PressOptions {\n duration?: number;\n}\n\nexport async function press(\n this: UserEventInstance,\n element: ReactTestInstance\n): Promise<void> {\n await basePress(this.config, element, {\n type: 'press',\n duration: 0,\n });\n}\n\nexport async function longPress(\n this: UserEventInstance,\n element: ReactTestInstance,\n options?: PressOptions\n): Promise<void> {\n await basePress(this.config, element, {\n type: 'longPress',\n duration: options?.duration ?? 500,\n });\n}\n\ninterface BasePressOptions {\n type: 'press' | 'longPress';\n duration: number;\n}\n\nconst basePress = async (\n config: UserEventConfig,\n element: ReactTestInstance,\n options: BasePressOptions\n): Promise<void> => {\n if (isPressableText(element)) {\n await emitTextPressEvents(config, element, options);\n return;\n }\n\n if (isEnabledTextInput(element)) {\n await emitTextInputPressEvents(config, element, options);\n return;\n }\n\n if (isEnabledTouchResponder(element)) {\n await emitPressablePressEvents(config, element, options);\n return;\n }\n\n const hostParentElement = getHostParent(element);\n if (!hostParentElement) {\n return;\n }\n\n await basePress(config, hostParentElement, options);\n};\n\nconst emitPressablePressEvents = async (\n config: UserEventConfig,\n element: ReactTestInstance,\n options: BasePressOptions\n) => {\n warnAboutRealTimersIfNeeded();\n\n await wait(config);\n\n await act(async () => {\n dispatchEvent(\n element,\n 'responderGrant',\n EventBuilder.Common.responderGrant()\n );\n\n await wait(config, options.duration);\n\n dispatchEvent(\n element,\n 'responderRelease',\n EventBuilder.Common.responderRelease()\n );\n\n // React Native will wait for minimal delay of DEFAULT_MIN_PRESS_DURATION\n // before emitting the `pressOut` event. We need to wait here, so that\n // `press()` function does not return before that.\n if (DEFAULT_MIN_PRESS_DURATION - options.duration > 0) {\n await wait(config, DEFAULT_MIN_PRESS_DURATION - options.duration);\n }\n });\n};\n\nconst isEnabledTouchResponder = (element: ReactTestInstance) => {\n return (\n isPointerEventEnabled(element) &&\n element.props.onStartShouldSetResponder?.()\n );\n};\n\nconst isPressableText = (element: ReactTestInstance) => {\n const hasPressEventHandler = Boolean(\n element.props.onPress ||\n element.props.onLongPress ||\n element.props.onPressIn ||\n element.props.onPressOut\n );\n\n return (\n isHostText(element) &&\n isPointerEventEnabled(element) &&\n !element.props.disabled &&\n hasPressEventHandler\n );\n};\n\nconst isEnabledTextInput = (element: ReactTestInstance) => {\n return (\n isHostTextInput(element) &&\n isPointerEventEnabled(element) &&\n element.props.editable !== false\n );\n};\n\n/**\n * Dispatches a press event sequence for Text.\n */\nasync function emitTextPressEvents(\n config: UserEventConfig,\n element: ReactTestInstance,\n options: BasePressOptions\n) {\n await wait(config);\n dispatchEvent(element, 'pressIn', EventBuilder.Common.touch());\n\n // Emit either `press` or `longPress`.\n dispatchEvent(element, options.type, EventBuilder.Common.touch());\n\n await wait(config, options.duration);\n dispatchEvent(element, 'pressOut', EventBuilder.Common.touch());\n}\n\n/**\n * Dispatches a press event sequence for TextInput.\n */\nasync function emitTextInputPressEvents(\n config: UserEventConfig,\n element: ReactTestInstance,\n options: BasePressOptions\n) {\n await wait(config);\n dispatchEvent(element, 'pressIn', EventBuilder.Common.touch());\n\n // Note: TextInput does not have `onPress`/`onLongPress` props.\n\n await wait(config, options.duration);\n dispatchEvent(element, 'pressOut', EventBuilder.Common.touch());\n}\n"],"mappings":";;;;;;;AACA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,mBAAA,GAAAH,OAAA;AAIA,IAAAI,aAAA,GAAAJ,OAAA;AAEA,IAAAK,MAAA,GAAAL,OAAA;AACA,IAAAM,UAAA,GAAAN,OAAA;AAAyD,SAAAD,uBAAAQ,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAMlD,eAAeG,KAAKA,CAEzBC,OAA0B,EACX;EACf,MAAMC,SAAS,CAAC,IAAI,CAACC,MAAM,EAAEF,OAAO,EAAE;IACpCG,IAAI,EAAE,OAAO;IACbC,QAAQ,EAAE;EACZ,CAAC,CAAC;AACJ;AAEO,eAAeC,SAASA,CAE7BL,OAA0B,EAC1BM,OAAsB,EACP;EACf,MAAML,SAAS,CAAC,IAAI,CAACC,MAAM,EAAEF,OAAO,EAAE;IACpCG,IAAI,EAAE,WAAW;IACjBC,QAAQ,EAAEE,OAAO,EAAEF,QAAQ,IAAI;EACjC,CAAC,CAAC;AACJ;AAOA,MAAMH,SAAS,GAAG,MAAAA,CAChBC,MAAuB,EACvBF,OAA0B,EAC1BM,OAAyB,KACP;EAClB,IAAIC,eAAe,CAACP,OAAO,CAAC,EAAE;IAC5B,MAAMQ,mBAAmB,CAACN,MAAM,EAAEF,OAAO,EAAEM,OAAO,CAAC;IACnD;EACF;EAEA,IAAIG,kBAAkB,CAACT,OAAO,CAAC,EAAE;IAC/B,MAAMU,wBAAwB,CAACR,MAAM,EAAEF,OAAO,EAAEM,OAAO,CAAC;IACxD;EACF;EAEA,IAAIK,uBAAuB,CAACX,OAAO,CAAC,EAAE;IACpC,MAAMY,wBAAwB,CAACV,MAAM,EAAEF,OAAO,EAAEM,OAAO,CAAC;IACxD;EACF;EAEA,MAAMO,iBAAiB,GAAG,IAAAC,4BAAa,EAACd,OAAO,CAAC;EAChD,IAAI,CAACa,iBAAiB,EAAE;IACtB;EACF;EAEA,MAAMZ,SAAS,CAACC,MAAM,EAAEW,iBAAiB,EAAEP,OAAO,CAAC;AACrD,CAAC;AAED,MAAMM,wBAAwB,GAAG,MAAAA,CAC/BV,MAAuB,EACvBF,OAA0B,EAC1BM,OAAyB,KACtB;EACH,IAAAS,kCAA2B,EAAC,CAAC;EAE7B,MAAM,IAAAC,WAAI,EAACd,MAAM,CAAC;EAElB,MAAM,IAAAe,YAAG,EAAC,YAAY;IACpB,IAAAC,oBAAa,EACXlB,OAAO,EACP,gBAAgB,EAChBmB,0BAAY,CAACC,MAAM,CAACC,cAAc,CAAC,CACrC,CAAC;IAED,MAAM,IAAAL,WAAI,EAACd,MAAM,EAAEI,OAAO,CAACF,QAAQ,CAAC;IAEpC,IAAAc,oBAAa,EACXlB,OAAO,EACP,kBAAkB,EAClBmB,0BAAY,CAACC,MAAM,CAACE,gBAAgB,CAAC,CACvC,CAAC;;IAED;IACA;IACA;IACA,IAAIC,qCAA0B,GAAGjB,OAAO,CAACF,QAAQ,GAAG,CAAC,EAAE;MACrD,MAAM,IAAAY,WAAI,EAACd,MAAM,EAAEqB,qCAA0B,GAAGjB,OAAO,CAACF,QAAQ,CAAC;IACnE;EACF,CAAC,CAAC;AACJ,CAAC;AAED,MAAMO,uBAAuB,GAAIX,OAA0B,IAAK;EAC9D,OACE,IAAAwB,oCAAqB,EAACxB,OAAO,CAAC,IAC9BA,OAAO,CAACyB,KAAK,CAACC,yBAAyB,GAAG,CAAC;AAE/C,CAAC;AAED,MAAMnB,eAAe,GAAIP,OAA0B,IAAK;EACtD,MAAM2B,oBAAoB,GAAGC,OAAO,CAClC5B,OAAO,CAACyB,KAAK,CAACI,OAAO,IACnB7B,OAAO,CAACyB,KAAK,CAACK,WAAW,IACzB9B,OAAO,CAACyB,KAAK,CAACM,SAAS,IACvB/B,OAAO,CAACyB,KAAK,CAACO,UAClB,CAAC;EAED,OACE,IAAAC,8BAAU,EAACjC,OAAO,CAAC,IACnB,IAAAwB,oCAAqB,EAACxB,OAAO,CAAC,IAC9B,CAACA,OAAO,CAACyB,KAAK,CAACS,QAAQ,IACvBP,oBAAoB;AAExB,CAAC;AAED,MAAMlB,kBAAkB,GAAIT,OAA0B,IAAK;EACzD,OACE,IAAAmC,mCAAe,EAACnC,OAAO,CAAC,IACxB,IAAAwB,oCAAqB,EAACxB,OAAO,CAAC,IAC9BA,OAAO,CAACyB,KAAK,CAACW,QAAQ,KAAK,KAAK;AAEpC,CAAC;;AAED;AACA;AACA;AACA,eAAe5B,mBAAmBA,CAChCN,MAAuB,EACvBF,OAA0B,EAC1BM,OAAyB,EACzB;EACA,MAAM,IAAAU,WAAI,EAACd,MAAM,CAAC;EAClB,IAAAgB,oBAAa,EAAClB,OAAO,EAAE,SAAS,EAAEmB,0BAAY,CAACC,MAAM,CAACiB,KAAK,CAAC,CAAC,CAAC;;EAE9D;EACA,IAAAnB,oBAAa,EAAClB,OAAO,EAAEM,OAAO,CAACH,IAAI,EAAEgB,0BAAY,CAACC,MAAM,CAACiB,KAAK,CAAC,CAAC,CAAC;EAEjE,MAAM,IAAArB,WAAI,EAACd,MAAM,EAAEI,OAAO,CAACF,QAAQ,CAAC;EACpC,IAAAc,oBAAa,EAAClB,OAAO,EAAE,UAAU,EAAEmB,0BAAY,CAACC,MAAM,CAACiB,KAAK,CAAC,CAAC,CAAC;AACjE;;AAEA;AACA;AACA;AACA,eAAe3B,wBAAwBA,CACrCR,MAAuB,EACvBF,OAA0B,EAC1BM,OAAyB,EACzB;EACA,MAAM,IAAAU,WAAI,EAACd,MAAM,CAAC;EAClB,IAAAgB,oBAAa,EAAClB,OAAO,EAAE,SAAS,EAAEmB,0BAAY,CAACC,MAAM,CAACiB,KAAK,CAAC,CAAC,CAAC;;EAE9D;;EAEA,MAAM,IAAArB,WAAI,EAACd,MAAM,EAAEI,OAAO,CAACF,QAAQ,CAAC;EACpC,IAAAc,oBAAa,EAAClB,OAAO,EAAE,UAAU,EAAEmB,0BAAY,CAACC,MAAM,CAACiB,KAAK,CAAC,CAAC,CAAC;AACjE"}
@@ -0,0 +1,2 @@
1
+ export type { UserEventConfig, UserEventInstance } from './setup';
2
+ export { setup } from './setup';
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "setup", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _setup.setup;
10
+ }
11
+ });
12
+ var _setup = require("./setup");
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_setup","require"],"sources":["../../../src/user-event/setup/index.ts"],"sourcesContent":["export type { UserEventConfig, UserEventInstance } from './setup';\nexport { setup } from './setup';\n"],"mappings":";;;;;;;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA"}
@@ -0,0 +1,69 @@
1
+ import { ReactTestInstance } from 'react-test-renderer';
2
+ import { PressOptions } from '../press';
3
+ import { TypeOptions } from '../type';
4
+ export interface UserEventSetupOptions {
5
+ /**
6
+ * Between some subsequent inputs like typing a series of characters
7
+ * the code execution is delayed per `setTimeout` for (at least) `delay` seconds.
8
+ * This moves the next changes at least to next macro task
9
+ * and allows other (asynchronous) code to run between events.
10
+ *
11
+ * `null` prevents `setTimeout` from being called.
12
+ *
13
+ * @default 0
14
+ */
15
+ delay?: number;
16
+ /**
17
+ * Function to be called to advance fake timers. Setting it is necessary for
18
+ * fake timers to work.
19
+ *
20
+ * @example jest.advanceTimersByTime
21
+ */
22
+ advanceTimers?: (delay: number) => Promise<void> | void;
23
+ }
24
+ /**
25
+ * Creates a new instance of user event instance with the given options.
26
+ *
27
+ * @param options
28
+ * @returns UserEvent instance
29
+ */
30
+ export declare function setup(options?: UserEventSetupOptions): UserEventInstance;
31
+ /**
32
+ * Options affecting all user event interactions.
33
+ *
34
+ * @param delay between some subsequent inputs like typing a series of characters
35
+ * @param advanceTimers function to be called to advance fake timers
36
+ */
37
+ export interface UserEventConfig {
38
+ delay: number;
39
+ advanceTimers: (delay: number) => Promise<void> | void;
40
+ }
41
+ /**
42
+ * UserEvent instance used to invoke user interaction functions.
43
+ */
44
+ export interface UserEventInstance {
45
+ config: UserEventConfig;
46
+ press: (element: ReactTestInstance) => Promise<void>;
47
+ longPress: (element: ReactTestInstance, options?: PressOptions) => Promise<void>;
48
+ /**
49
+ * Simulate user pressing on given `TextInput` element and typing given text.
50
+ *
51
+ * This method will trigger the events for each character of the text:
52
+ * `keyPress`, `change`, `changeText`, `endEditing`, etc.
53
+ *
54
+ * It will also trigger events connected with entering and leaving the text
55
+ * input.
56
+ *
57
+ * The exact events sent depend on the props of TextInput (`editable`,
58
+ * `multiline`, value, defaultValue, etc) and passed options.
59
+ *
60
+ * @param element TextInput element to type on
61
+ * @param text Text to type
62
+ * @param options Options affecting typing behavior:
63
+ * - `skipPress` - if true, `pressIn` and `pressOut` events will not be
64
+ * triggered.
65
+ * - `submitEditing` - if true, `submitEditing` event will be triggered after
66
+ * typing the text.
67
+ */
68
+ type: (element: ReactTestInstance, text: string, options?: TypeOptions) => Promise<void>;
69
+ }
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.setup = setup;
7
+ var _timers = require("../../helpers/timers");
8
+ var _press = require("../press");
9
+ var _type = require("../type");
10
+ /**
11
+ * This functions allow wait to work correctly under both real and fake Jest timers.
12
+ */
13
+ function universalJestAdvanceTimersBy(ms) {
14
+ if ((0, _timers.jestFakeTimersAreEnabled)()) {
15
+ return jest.advanceTimersByTime(ms);
16
+ } else {
17
+ return Promise.resolve();
18
+ }
19
+ }
20
+ const defaultOptions = {
21
+ delay: 0,
22
+ advanceTimers: universalJestAdvanceTimersBy
23
+ };
24
+
25
+ /**
26
+ * Creates a new instance of user event instance with the given options.
27
+ *
28
+ * @param options
29
+ * @returns UserEvent instance
30
+ */
31
+ function setup(options) {
32
+ const config = createConfig(options);
33
+ const instance = createInstance(config);
34
+ return instance;
35
+ }
36
+
37
+ /**
38
+ * Options affecting all user event interactions.
39
+ *
40
+ * @param delay between some subsequent inputs like typing a series of characters
41
+ * @param advanceTimers function to be called to advance fake timers
42
+ */
43
+
44
+ function createConfig(options) {
45
+ return {
46
+ ...defaultOptions,
47
+ ...options
48
+ };
49
+ }
50
+
51
+ /**
52
+ * UserEvent instance used to invoke user interaction functions.
53
+ */
54
+
55
+ function createInstance(config) {
56
+ const instance = {
57
+ config
58
+ };
59
+
60
+ // We need to bind these functions, as they access the config through 'this.config'.
61
+ const api = {
62
+ press: _press.press.bind(instance),
63
+ longPress: _press.longPress.bind(instance),
64
+ type: _type.type.bind(instance)
65
+ };
66
+ Object.assign(instance, api);
67
+ return instance;
68
+ }
69
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","names":["_timers","require","_press","_type","universalJestAdvanceTimersBy","ms","jestFakeTimersAreEnabled","jest","advanceTimersByTime","Promise","resolve","defaultOptions","delay","advanceTimers","setup","options","config","createConfig","instance","createInstance","api","press","bind","longPress","type","Object","assign"],"sources":["../../../src/user-event/setup/setup.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport { jestFakeTimersAreEnabled } from '../../helpers/timers';\nimport { PressOptions, press, longPress } from '../press';\nimport { TypeOptions, type } from '../type';\n\nexport interface UserEventSetupOptions {\n /**\n * Between some subsequent inputs like typing a series of characters\n * the code execution is delayed per `setTimeout` for (at least) `delay` seconds.\n * This moves the next changes at least to next macro task\n * and allows other (asynchronous) code to run between events.\n *\n * `null` prevents `setTimeout` from being called.\n *\n * @default 0\n */\n delay?: number;\n\n /**\n * Function to be called to advance fake timers. Setting it is necessary for\n * fake timers to work.\n *\n * @example jest.advanceTimersByTime\n */\n advanceTimers?: (delay: number) => Promise<void> | void;\n}\n\n/**\n * This functions allow wait to work correctly under both real and fake Jest timers.\n */\nfunction universalJestAdvanceTimersBy(ms: number) {\n if (jestFakeTimersAreEnabled()) {\n return jest.advanceTimersByTime(ms);\n } else {\n return Promise.resolve();\n }\n}\n\nconst defaultOptions: Required<UserEventSetupOptions> = {\n delay: 0,\n advanceTimers: universalJestAdvanceTimersBy,\n};\n\n/**\n * Creates a new instance of user event instance with the given options.\n *\n * @param options\n * @returns UserEvent instance\n */\nexport function setup(options?: UserEventSetupOptions) {\n const config = createConfig(options);\n const instance = createInstance(config);\n return instance;\n}\n\n/**\n * Options affecting all user event interactions.\n *\n * @param delay between some subsequent inputs like typing a series of characters\n * @param advanceTimers function to be called to advance fake timers\n */\nexport interface UserEventConfig {\n delay: number;\n advanceTimers: (delay: number) => Promise<void> | void;\n}\n\nfunction createConfig(options?: UserEventSetupOptions): UserEventConfig {\n return {\n ...defaultOptions,\n ...options,\n };\n}\n\n/**\n * UserEvent instance used to invoke user interaction functions.\n */\nexport interface UserEventInstance {\n config: UserEventConfig;\n\n press: (element: ReactTestInstance) => Promise<void>;\n longPress: (\n element: ReactTestInstance,\n options?: PressOptions\n ) => Promise<void>;\n\n /**\n * Simulate user pressing on given `TextInput` element and typing given text.\n *\n * This method will trigger the events for each character of the text:\n * `keyPress`, `change`, `changeText`, `endEditing`, etc.\n *\n * It will also trigger events connected with entering and leaving the text\n * input.\n *\n * The exact events sent depend on the props of TextInput (`editable`,\n * `multiline`, value, defaultValue, etc) and passed options.\n *\n * @param element TextInput element to type on\n * @param text Text to type\n * @param options Options affecting typing behavior:\n * - `skipPress` - if true, `pressIn` and `pressOut` events will not be\n * triggered.\n * - `submitEditing` - if true, `submitEditing` event will be triggered after\n * typing the text.\n */\n type: (\n element: ReactTestInstance,\n text: string,\n options?: TypeOptions\n ) => Promise<void>;\n}\n\nfunction createInstance(config: UserEventConfig): UserEventInstance {\n const instance = {\n config,\n } as UserEventInstance;\n\n // We need to bind these functions, as they access the config through 'this.config'.\n const api = {\n press: press.bind(instance),\n longPress: longPress.bind(instance),\n type: type.bind(instance),\n };\n\n Object.assign(instance, api);\n return instance;\n}\n"],"mappings":";;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AAwBA;AACA;AACA;AACA,SAASG,4BAA4BA,CAACC,EAAU,EAAE;EAChD,IAAI,IAAAC,gCAAwB,EAAC,CAAC,EAAE;IAC9B,OAAOC,IAAI,CAACC,mBAAmB,CAACH,EAAE,CAAC;EACrC,CAAC,MAAM;IACL,OAAOI,OAAO,CAACC,OAAO,CAAC,CAAC;EAC1B;AACF;AAEA,MAAMC,cAA+C,GAAG;EACtDC,KAAK,EAAE,CAAC;EACRC,aAAa,EAAET;AACjB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACO,SAASU,KAAKA,CAACC,OAA+B,EAAE;EACrD,MAAMC,MAAM,GAAGC,YAAY,CAACF,OAAO,CAAC;EACpC,MAAMG,QAAQ,GAAGC,cAAc,CAACH,MAAM,CAAC;EACvC,OAAOE,QAAQ;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAMA,SAASD,YAAYA,CAACF,OAA+B,EAAmB;EACtE,OAAO;IACL,GAAGJ,cAAc;IACjB,GAAGI;EACL,CAAC;AACH;;AAEA;AACA;AACA;;AAqCA,SAASI,cAAcA,CAACH,MAAuB,EAAqB;EAClE,MAAME,QAAQ,GAAG;IACfF;EACF,CAAsB;;EAEtB;EACA,MAAMI,GAAG,GAAG;IACVC,KAAK,EAAEA,YAAK,CAACC,IAAI,CAACJ,QAAQ,CAAC;IAC3BK,SAAS,EAAEA,gBAAS,CAACD,IAAI,CAACJ,QAAQ,CAAC;IACnCM,IAAI,EAAEA,UAAI,CAACF,IAAI,CAACJ,QAAQ;EAC1B,CAAC;EAEDO,MAAM,CAACC,MAAM,CAACR,QAAQ,EAAEE,GAAG,CAAC;EAC5B,OAAOF,QAAQ;AACjB"}
@@ -0,0 +1 @@
1
+ export { type, TypeOptions } from './type';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "TypeOptions", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _type.TypeOptions;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "type", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _type.type;
16
+ }
17
+ });
18
+ var _type = require("./type");
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_type","require"],"sources":["../../../src/user-event/type/index.ts"],"sourcesContent":["export { type, TypeOptions } from './type';\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA"}
@@ -0,0 +1 @@
1
+ export declare function parseKeys(text: string): string[];
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.parseKeys = parseKeys;
7
+ const knownKeys = new Set(['Enter', 'Backspace']);
8
+ function parseKeys(text) {
9
+ const result = [];
10
+ let remainingText = text;
11
+ while (remainingText) {
12
+ const [token, rest] = getNextToken(remainingText);
13
+ if (token.length > 1 && !knownKeys.has(token)) {
14
+ throw new Error(`Unknown key "${token}" in "${text}"`);
15
+ }
16
+ result.push(token);
17
+ remainingText = rest;
18
+ }
19
+ return result;
20
+ }
21
+ function getNextToken(text) {
22
+ // Detect `{{` => escaped `{`
23
+ if (text[0] === '{' && text[1] === '{') {
24
+ return ['{', text.slice(2)];
25
+ }
26
+
27
+ // Detect `{key}` => special key
28
+ if (text[0] === '{') {
29
+ const endIndex = text.indexOf('}');
30
+ if (endIndex === -1) {
31
+ throw new Error(`Invalid key sequence "${text}"`);
32
+ }
33
+ return [text.slice(1, endIndex), text.slice(endIndex + 1)];
34
+ }
35
+ if (text[0] === '\n') {
36
+ return ['Enter', text.slice(1)];
37
+ }
38
+ return [text[0], text.slice(1)];
39
+ }
40
+ //# sourceMappingURL=parseKeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseKeys.js","names":["knownKeys","Set","parseKeys","text","result","remainingText","token","rest","getNextToken","length","has","Error","push","slice","endIndex","indexOf"],"sources":["../../../src/user-event/type/parseKeys.ts"],"sourcesContent":["const knownKeys = new Set(['Enter', 'Backspace']);\n\nexport function parseKeys(text: string) {\n const result = [];\n\n let remainingText = text;\n while (remainingText) {\n const [token, rest] = getNextToken(remainingText);\n if (token.length > 1 && !knownKeys.has(token)) {\n throw new Error(`Unknown key \"${token}\" in \"${text}\"`);\n }\n\n result.push(token);\n remainingText = rest;\n }\n\n return result;\n}\n\nfunction getNextToken(text: string): [string, string] {\n // Detect `{{` => escaped `{`\n if (text[0] === '{' && text[1] === '{') {\n return ['{', text.slice(2)];\n }\n\n // Detect `{key}` => special key\n if (text[0] === '{') {\n const endIndex = text.indexOf('}');\n if (endIndex === -1) {\n throw new Error(`Invalid key sequence \"${text}\"`);\n }\n\n return [text.slice(1, endIndex), text.slice(endIndex + 1)];\n }\n\n if (text[0] === '\\n') {\n return ['Enter', text.slice(1)];\n }\n\n return [text[0], text.slice(1)];\n}\n"],"mappings":";;;;;;AAAA,MAAMA,SAAS,GAAG,IAAIC,GAAG,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAE1C,SAASC,SAASA,CAACC,IAAY,EAAE;EACtC,MAAMC,MAAM,GAAG,EAAE;EAEjB,IAAIC,aAAa,GAAGF,IAAI;EACxB,OAAOE,aAAa,EAAE;IACpB,MAAM,CAACC,KAAK,EAAEC,IAAI,CAAC,GAAGC,YAAY,CAACH,aAAa,CAAC;IACjD,IAAIC,KAAK,CAACG,MAAM,GAAG,CAAC,IAAI,CAACT,SAAS,CAACU,GAAG,CAACJ,KAAK,CAAC,EAAE;MAC7C,MAAM,IAAIK,KAAK,CAAE,gBAAeL,KAAM,SAAQH,IAAK,GAAE,CAAC;IACxD;IAEAC,MAAM,CAACQ,IAAI,CAACN,KAAK,CAAC;IAClBD,aAAa,GAAGE,IAAI;EACtB;EAEA,OAAOH,MAAM;AACf;AAEA,SAASI,YAAYA,CAACL,IAAY,EAAoB;EACpD;EACA,IAAIA,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAIA,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;IACtC,OAAO,CAAC,GAAG,EAAEA,IAAI,CAACU,KAAK,CAAC,CAAC,CAAC,CAAC;EAC7B;;EAEA;EACA,IAAIV,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;IACnB,MAAMW,QAAQ,GAAGX,IAAI,CAACY,OAAO,CAAC,GAAG,CAAC;IAClC,IAAID,QAAQ,KAAK,CAAC,CAAC,EAAE;MACnB,MAAM,IAAIH,KAAK,CAAE,yBAAwBR,IAAK,GAAE,CAAC;IACnD;IAEA,OAAO,CAACA,IAAI,CAACU,KAAK,CAAC,CAAC,EAAEC,QAAQ,CAAC,EAAEX,IAAI,CAACU,KAAK,CAACC,QAAQ,GAAG,CAAC,CAAC,CAAC;EAC5D;EAEA,IAAIX,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;IACpB,OAAO,CAAC,OAAO,EAAEA,IAAI,CAACU,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC;EAEA,OAAO,CAACV,IAAI,CAAC,CAAC,CAAC,EAAEA,IAAI,CAACU,KAAK,CAAC,CAAC,CAAC,CAAC;AACjC"}
@@ -0,0 +1,7 @@
1
+ import { ReactTestInstance } from 'react-test-renderer';
2
+ import { UserEventInstance } from '../setup';
3
+ export interface TypeOptions {
4
+ skipPress?: boolean;
5
+ submitEditing?: boolean;
6
+ }
7
+ export declare function type(this: UserEventInstance, element: ReactTestInstance, text: string, options?: TypeOptions): Promise<void>;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.type = type;
7
+ var _hostComponentNames = require("../../helpers/host-component-names");
8
+ var _eventBuilder = require("../event-builder");
9
+ var _errors = require("../../helpers/errors");
10
+ var _pointerEvents = require("../../helpers/pointer-events");
11
+ var _utils = require("../utils");
12
+ var _parseKeys = require("./parseKeys");
13
+ async function type(element, text, options) {
14
+ if (!(0, _hostComponentNames.isHostTextInput)(element)) {
15
+ throw new _errors.ErrorWithStack(`type() works only with host "TextInput" elements. Passed element has type "${element.type}".`, type);
16
+ }
17
+
18
+ // Skip events if the element is disabled
19
+ if (element.props.editable === false || !(0, _pointerEvents.isPointerEventEnabled)(element)) {
20
+ return;
21
+ }
22
+ const keys = (0, _parseKeys.parseKeys)(text);
23
+ if (!options?.skipPress) {
24
+ (0, _utils.dispatchEvent)(element, 'pressIn', _eventBuilder.EventBuilder.Common.touch());
25
+ }
26
+ (0, _utils.dispatchEvent)(element, 'focus', _eventBuilder.EventBuilder.Common.focus());
27
+ if (!options?.skipPress) {
28
+ await (0, _utils.wait)(this.config);
29
+ (0, _utils.dispatchEvent)(element, 'pressOut', _eventBuilder.EventBuilder.Common.touch());
30
+ }
31
+ let currentText = element.props.value ?? element.props.defaultValue ?? '';
32
+ for (const key of keys) {
33
+ const previousText = element.props.value ?? currentText;
34
+ currentText = applyKey(previousText, key);
35
+ await (0, _utils.wait)(this.config);
36
+ emitTypingEvents(element, key, currentText, previousText);
37
+ }
38
+ const finalText = element.props.value ?? currentText;
39
+ await (0, _utils.wait)(this.config);
40
+ if (options?.submitEditing) {
41
+ (0, _utils.dispatchEvent)(element, 'submitEditing', _eventBuilder.EventBuilder.TextInput.submitEditing(finalText));
42
+ }
43
+ (0, _utils.dispatchEvent)(element, 'endEditing', _eventBuilder.EventBuilder.TextInput.endEditing(finalText));
44
+ (0, _utils.dispatchEvent)(element, 'blur', _eventBuilder.EventBuilder.Common.blur());
45
+ }
46
+ async function emitTypingEvents(element, key, currentText, previousText) {
47
+ const isMultiline = element.props.multiline === true;
48
+ (0, _utils.dispatchEvent)(element, 'keyPress', _eventBuilder.EventBuilder.TextInput.keyPress(key));
49
+
50
+ // According to the docs only multiline TextInput emits textInput event
51
+ // @see: https://github.com/facebook/react-native/blob/42a2898617da1d7a98ef574a5b9e500681c8f738/packages/react-native/Libraries/Components/TextInput/TextInput.d.ts#L754
52
+ if (isMultiline) {
53
+ (0, _utils.dispatchEvent)(element, 'textInput', _eventBuilder.EventBuilder.TextInput.textInput(currentText, previousText));
54
+ }
55
+ (0, _utils.dispatchEvent)(element, 'change', _eventBuilder.EventBuilder.TextInput.change(currentText));
56
+ (0, _utils.dispatchEvent)(element, 'changeText', currentText);
57
+ const selectionRange = (0, _utils.getTextRange)(currentText);
58
+ (0, _utils.dispatchEvent)(element, 'selectionChange', _eventBuilder.EventBuilder.TextInput.selectionChange(selectionRange));
59
+
60
+ // According to the docs only multiline TextInput emits contentSizeChange event
61
+ // @see: https://reactnative.dev/docs/textinput#oncontentsizechange
62
+ if (isMultiline) {
63
+ const contentSize = (0, _utils.getTextContentSize)(currentText);
64
+ (0, _utils.dispatchEvent)(element, 'contentSizeChange', _eventBuilder.EventBuilder.TextInput.contentSizeChange(contentSize));
65
+ }
66
+ }
67
+ function applyKey(text, key) {
68
+ if (key === 'Enter') {
69
+ return `${text}\n`;
70
+ }
71
+ if (key === 'Backspace') {
72
+ return text.slice(0, -1);
73
+ }
74
+ return text + key;
75
+ }
76
+ //# sourceMappingURL=type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.js","names":["_hostComponentNames","require","_eventBuilder","_errors","_pointerEvents","_utils","_parseKeys","type","element","text","options","isHostTextInput","ErrorWithStack","props","editable","isPointerEventEnabled","keys","parseKeys","skipPress","dispatchEvent","EventBuilder","Common","touch","focus","wait","config","currentText","value","defaultValue","key","previousText","applyKey","emitTypingEvents","finalText","submitEditing","TextInput","endEditing","blur","isMultiline","multiline","keyPress","textInput","change","selectionRange","getTextRange","selectionChange","contentSize","getTextContentSize","contentSizeChange","slice"],"sources":["../../../src/user-event/type/type.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport { isHostTextInput } from '../../helpers/host-component-names';\nimport { EventBuilder } from '../event-builder';\nimport { ErrorWithStack } from '../../helpers/errors';\nimport { isPointerEventEnabled } from '../../helpers/pointer-events';\nimport { UserEventInstance } from '../setup';\nimport {\n dispatchEvent,\n wait,\n getTextRange,\n getTextContentSize,\n} from '../utils';\n\nimport { parseKeys } from './parseKeys';\n\nexport interface TypeOptions {\n skipPress?: boolean;\n submitEditing?: boolean;\n}\n\nexport async function type(\n this: UserEventInstance,\n element: ReactTestInstance,\n text: string,\n options?: TypeOptions\n): Promise<void> {\n if (!isHostTextInput(element)) {\n throw new ErrorWithStack(\n `type() works only with host \"TextInput\" elements. Passed element has type \"${element.type}\".`,\n type\n );\n }\n\n // Skip events if the element is disabled\n if (element.props.editable === false || !isPointerEventEnabled(element)) {\n return;\n }\n\n const keys = parseKeys(text);\n\n if (!options?.skipPress) {\n dispatchEvent(element, 'pressIn', EventBuilder.Common.touch());\n }\n\n dispatchEvent(element, 'focus', EventBuilder.Common.focus());\n\n if (!options?.skipPress) {\n await wait(this.config);\n dispatchEvent(element, 'pressOut', EventBuilder.Common.touch());\n }\n\n let currentText = element.props.value ?? element.props.defaultValue ?? '';\n for (const key of keys) {\n const previousText = element.props.value ?? currentText;\n currentText = applyKey(previousText, key);\n\n await wait(this.config);\n emitTypingEvents(element, key, currentText, previousText);\n }\n\n const finalText = element.props.value ?? currentText;\n\n await wait(this.config);\n\n if (options?.submitEditing) {\n dispatchEvent(\n element,\n 'submitEditing',\n EventBuilder.TextInput.submitEditing(finalText)\n );\n }\n\n dispatchEvent(\n element,\n 'endEditing',\n EventBuilder.TextInput.endEditing(finalText)\n );\n\n dispatchEvent(element, 'blur', EventBuilder.Common.blur());\n}\n\nasync function emitTypingEvents(\n element: ReactTestInstance,\n key: string,\n currentText: string,\n previousText: string\n) {\n const isMultiline = element.props.multiline === true;\n\n dispatchEvent(element, 'keyPress', EventBuilder.TextInput.keyPress(key));\n\n // According to the docs only multiline TextInput emits textInput event\n // @see: https://github.com/facebook/react-native/blob/42a2898617da1d7a98ef574a5b9e500681c8f738/packages/react-native/Libraries/Components/TextInput/TextInput.d.ts#L754\n if (isMultiline) {\n dispatchEvent(\n element,\n 'textInput',\n EventBuilder.TextInput.textInput(currentText, previousText)\n );\n }\n\n dispatchEvent(element, 'change', EventBuilder.TextInput.change(currentText));\n\n dispatchEvent(element, 'changeText', currentText);\n\n const selectionRange = getTextRange(currentText);\n dispatchEvent(\n element,\n 'selectionChange',\n EventBuilder.TextInput.selectionChange(selectionRange)\n );\n\n // According to the docs only multiline TextInput emits contentSizeChange event\n // @see: https://reactnative.dev/docs/textinput#oncontentsizechange\n if (isMultiline) {\n const contentSize = getTextContentSize(currentText);\n dispatchEvent(\n element,\n 'contentSizeChange',\n EventBuilder.TextInput.contentSizeChange(contentSize)\n );\n }\n}\n\nfunction applyKey(text: string, key: string) {\n if (key === 'Enter') {\n return `${text}\\n`;\n }\n\n if (key === 'Backspace') {\n return text.slice(0, -1);\n }\n\n return text + key;\n}\n"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface ContentSize {
2
+ width: number;
3
+ height: number;
4
+ }
5
+ /**
6
+ * Simple function for getting mock the size of given text.
7
+ *
8
+ * It works by calculating height based on number of lines and width based on
9
+ * the longest line length. It does not take into account font size, font
10
+ * family, as well as different letter sizes.
11
+ *
12
+ * @param text text to be measure
13
+ * @returns width and height of the text
14
+ */
15
+ export declare function getTextContentSize(text: string): ContentSize;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getTextContentSize = getTextContentSize;
7
+ /**
8
+ * Simple function for getting mock the size of given text.
9
+ *
10
+ * It works by calculating height based on number of lines and width based on
11
+ * the longest line length. It does not take into account font size, font
12
+ * family, as well as different letter sizes.
13
+ *
14
+ * @param text text to be measure
15
+ * @returns width and height of the text
16
+ */
17
+
18
+ function getTextContentSize(text) {
19
+ const lines = text.split('\n');
20
+ const maxLineLength = Math.max(...lines.map(line => line.length));
21
+ return {
22
+ width: maxLineLength * 5,
23
+ height: lines.length * 16
24
+ };
25
+ }
26
+ //# sourceMappingURL=content-size.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-size.js","names":["getTextContentSize","text","lines","split","maxLineLength","Math","max","map","line","length","width","height"],"sources":["../../../src/user-event/utils/content-size.ts"],"sourcesContent":["export interface ContentSize {\n width: number;\n height: number;\n}\n\n/**\n * Simple function for getting mock the size of given text.\n *\n * It works by calculating height based on number of lines and width based on\n * the longest line length. It does not take into account font size, font\n * family, as well as different letter sizes.\n *\n * @param text text to be measure\n * @returns width and height of the text\n */\n\nexport function getTextContentSize(text: string): ContentSize {\n const lines = text.split('\\n');\n const maxLineLength = Math.max(...lines.map((line) => line.length));\n\n return {\n width: maxLineLength * 5,\n height: lines.length * 16,\n };\n}\n"],"mappings":";;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,SAASA,kBAAkBA,CAACC,IAAY,EAAe;EAC5D,MAAMC,KAAK,GAAGD,IAAI,CAACE,KAAK,CAAC,IAAI,CAAC;EAC9B,MAAMC,aAAa,GAAGC,IAAI,CAACC,GAAG,CAAC,GAAGJ,KAAK,CAACK,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACC,MAAM,CAAC,CAAC;EAEnE,OAAO;IACLC,KAAK,EAAEN,aAAa,GAAG,CAAC;IACxBO,MAAM,EAAET,KAAK,CAACO,MAAM,GAAG;EACzB,CAAC;AACH"}
@@ -0,0 +1,9 @@
1
+ import { ReactTestInstance } from 'react-test-renderer';
2
+ /**
3
+ * Basic dispatch event function used by User Event module.
4
+ *
5
+ * @param element element trigger event on
6
+ * @param eventName name of the event
7
+ * @param event event payload
8
+ */
9
+ export declare function dispatchEvent(element: ReactTestInstance, eventName: string, event: unknown): void;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.dispatchEvent = dispatchEvent;
7
+ var _act = _interopRequireDefault(require("../../act"));
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ /**
10
+ * Basic dispatch event function used by User Event module.
11
+ *
12
+ * @param element element trigger event on
13
+ * @param eventName name of the event
14
+ * @param event event payload
15
+ */
16
+ function dispatchEvent(element, eventName, event) {
17
+ const handler = getEventHandler(element, eventName);
18
+ if (!handler) {
19
+ return;
20
+ }
21
+ (0, _act.default)(() => {
22
+ handler(event);
23
+ });
24
+ }
25
+ function getEventHandler(element, eventName) {
26
+ const handleName = getEventHandlerName(eventName);
27
+ const handle = element.props[handleName];
28
+ if (typeof handle !== 'function') {
29
+ return undefined;
30
+ }
31
+ return handle;
32
+ }
33
+ function getEventHandlerName(eventName) {
34
+ return `on${eventName.charAt(0).toUpperCase()}${eventName.slice(1)}`;
35
+ }
36
+ //# sourceMappingURL=dispatch-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch-event.js","names":["_act","_interopRequireDefault","require","obj","__esModule","default","dispatchEvent","element","eventName","event","handler","getEventHandler","act","handleName","getEventHandlerName","handle","props","undefined","charAt","toUpperCase","slice"],"sources":["../../../src/user-event/utils/dispatch-event.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport act from '../../act';\n\n/**\n * Basic dispatch event function used by User Event module.\n *\n * @param element element trigger event on\n * @param eventName name of the event\n * @param event event payload\n */\nexport function dispatchEvent(\n element: ReactTestInstance,\n eventName: string,\n event: unknown\n) {\n const handler = getEventHandler(element, eventName);\n if (!handler) {\n return;\n }\n\n act(() => {\n handler(event);\n });\n}\n\nfunction getEventHandler(element: ReactTestInstance, eventName: string) {\n const handleName = getEventHandlerName(eventName);\n const handle = element.props[handleName] as unknown;\n if (typeof handle !== 'function') {\n return undefined;\n }\n\n return handle;\n}\n\nfunction getEventHandlerName(eventName: string) {\n return `on${eventName.charAt(0).toUpperCase()}${eventName.slice(1)}`;\n}\n"],"mappings":";;;;;;AACA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA4B,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,aAAaA,CAC3BC,OAA0B,EAC1BC,SAAiB,EACjBC,KAAc,EACd;EACA,MAAMC,OAAO,GAAGC,eAAe,CAACJ,OAAO,EAAEC,SAAS,CAAC;EACnD,IAAI,CAACE,OAAO,EAAE;IACZ;EACF;EAEA,IAAAE,YAAG,EAAC,MAAM;IACRF,OAAO,CAACD,KAAK,CAAC;EAChB,CAAC,CAAC;AACJ;AAEA,SAASE,eAAeA,CAACJ,OAA0B,EAAEC,SAAiB,EAAE;EACtE,MAAMK,UAAU,GAAGC,mBAAmB,CAACN,SAAS,CAAC;EACjD,MAAMO,MAAM,GAAGR,OAAO,CAACS,KAAK,CAACH,UAAU,CAAY;EACnD,IAAI,OAAOE,MAAM,KAAK,UAAU,EAAE;IAChC,OAAOE,SAAS;EAClB;EAEA,OAAOF,MAAM;AACf;AAEA,SAASD,mBAAmBA,CAACN,SAAiB,EAAE;EAC9C,OAAQ,KAAIA,SAAS,CAACU,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAE,GAAEX,SAAS,CAACY,KAAK,CAAC,CAAC,CAAE,EAAC;AACtE"}
@@ -0,0 +1,5 @@
1
+ export * from './content-size';
2
+ export * from './dispatch-event';
3
+ export * from './text-range';
4
+ export * from './wait';
5
+ export * from './warn-about-real-timers';