@testing-library/react-native 12.2.0 → 12.2.1

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 (283) hide show
  1. package/.DS_Store +0 -0
  2. package/.eslintcache +1 -1
  3. package/.eslintignore +1 -0
  4. package/build/fireEvent.js +1 -1
  5. package/build/fireEvent.js.map +1 -1
  6. package/build/helpers/component-tree.d.ts +11 -5
  7. package/build/helpers/component-tree.js +5 -1
  8. package/build/helpers/component-tree.js.map +1 -1
  9. package/build/helpers/findAll.d.ts +2 -1
  10. package/build/helpers/findAll.js +2 -1
  11. package/build/helpers/findAll.js.map +1 -1
  12. package/build/helpers/host-component-names.d.ts +11 -2
  13. package/build/helpers/host-component-names.js +10 -0
  14. package/build/helpers/host-component-names.js.map +1 -1
  15. package/build/helpers/matchers/matchLabelText.js +1 -1
  16. package/build/helpers/matchers/matchLabelText.js.map +1 -1
  17. package/build/queries/a11yState.js +1 -1
  18. package/build/queries/a11yState.js.map +1 -1
  19. package/build/queries/a11yValue.js +1 -1
  20. package/build/queries/a11yValue.js.map +1 -1
  21. package/build/queries/displayValue.js +5 -6
  22. package/build/queries/displayValue.js.map +1 -1
  23. package/build/queries/hintText.js +1 -1
  24. package/build/queries/hintText.js.map +1 -1
  25. package/build/queries/labelText.js +1 -1
  26. package/build/queries/labelText.js.map +1 -1
  27. package/build/queries/placeholderText.js +3 -4
  28. package/build/queries/placeholderText.js.map +1 -1
  29. package/build/queries/role.js +1 -1
  30. package/build/queries/role.js.map +1 -1
  31. package/build/queries/testId.js +3 -3
  32. package/build/queries/testId.js.map +1 -1
  33. package/build/queries/text.js +1 -2
  34. package/build/queries/text.js.map +1 -1
  35. package/build/render.js.map +1 -1
  36. package/build/user-event/clear.d.ts +3 -0
  37. package/build/user-event/clear.js +41 -0
  38. package/build/user-event/clear.js.map +1 -0
  39. package/build/user-event/index.d.ts +1 -0
  40. package/build/user-event/index.js +2 -1
  41. package/build/user-event/index.js.map +1 -1
  42. package/build/user-event/press/press.js +1 -4
  43. package/build/user-event/press/press.js.map +1 -1
  44. package/build/user-event/setup/setup.d.ts +14 -2
  45. package/build/user-event/setup/setup.js +3 -1
  46. package/build/user-event/setup/setup.js.map +1 -1
  47. package/build/user-event/type/type.d.ts +2 -1
  48. package/build/user-event/type/type.js +8 -4
  49. package/build/user-event/type/type.js.map +1 -1
  50. package/build/user-event/utils/host-components.d.ts +2 -0
  51. package/build/user-event/utils/host-components.js +11 -0
  52. package/build/user-event/utils/host-components.js.map +1 -0
  53. package/build/user-event/utils/index.d.ts +1 -0
  54. package/build/user-event/utils/index.js +11 -0
  55. package/build/user-event/utils/index.js.map +1 -1
  56. package/build/user-event/utils/text-range.d.ts +0 -1
  57. package/build/user-event/utils/text-range.js +0 -11
  58. package/build/user-event/utils/text-range.js.map +1 -1
  59. package/examples/basic/.expo/README.md +4 -6
  60. package/examples/basic/.expo/settings.json +2 -0
  61. package/examples/basic/__tests__/App.test.tsx +30 -12
  62. package/examples/basic/package.json +1 -1
  63. package/examples/basic/yarn.lock +2095 -3474
  64. package/examples/react-navigation/yarn.lock +1657 -2249
  65. package/examples/redux/yarn.lock +1772 -5376
  66. package/experiments-app/.expo/packager-info.json +9 -0
  67. package/experiments-app/.expo/settings.json +1 -2
  68. package/experiments-app/package.json +7 -9
  69. package/experiments-app/src/MainScreen.tsx +1 -0
  70. package/experiments-app/src/experiments.ts +20 -2
  71. package/experiments-app/src/screens/FlatListEvents.tsx +57 -0
  72. package/experiments-app/src/screens/ScrollViewEvents.tsx +65 -0
  73. package/experiments-app/src/screens/SectionListEvents.tsx +91 -0
  74. package/experiments-app/src/screens/TextInputEventPropagation.tsx +5 -17
  75. package/experiments-app/src/screens/TextInputEvents.tsx +13 -25
  76. package/experiments-app/src/utils/helpers.ts +13 -3
  77. package/experiments-app/yarn.lock +901 -1105
  78. package/experiments-rtl/.babelrc +8 -0
  79. package/experiments-rtl/.eslintrc.json +3 -0
  80. package/experiments-rtl/.gitignore +35 -0
  81. package/experiments-rtl/README.md +34 -0
  82. package/experiments-rtl/jest-setup.js +1 -0
  83. package/experiments-rtl/jest.config.js +4 -0
  84. package/experiments-rtl/next.config.js +4 -0
  85. package/experiments-rtl/package.json +38 -0
  86. package/experiments-rtl/postcss.config.js +6 -0
  87. package/experiments-rtl/public/next.svg +1 -0
  88. package/experiments-rtl/public/vercel.svg +1 -0
  89. package/experiments-rtl/src/app/__tests__/click.test.tsx +31 -0
  90. package/experiments-rtl/src/app/__tests__/managed-text-input.test.tsx +51 -0
  91. package/experiments-rtl/src/app/globals.css +27 -0
  92. package/experiments-rtl/src/app/layout.tsx +22 -0
  93. package/experiments-rtl/src/app/page.tsx +113 -0
  94. package/experiments-rtl/tailwind.config.ts +20 -0
  95. package/experiments-rtl/tsconfig.json +28 -0
  96. package/experiments-rtl/yarn.lock +5418 -0
  97. package/package.json +4 -2
  98. package/src/fireEvent.ts +1 -1
  99. package/src/helpers/component-tree.ts +14 -9
  100. package/src/helpers/findAll.ts +6 -4
  101. package/src/helpers/host-component-names.tsx +15 -2
  102. package/src/helpers/matchers/matchLabelText.ts +0 -1
  103. package/src/queries/a11yState.ts +2 -6
  104. package/src/queries/a11yValue.ts +2 -6
  105. package/src/queries/displayValue.ts +7 -14
  106. package/src/queries/hintText.ts +2 -7
  107. package/src/queries/labelText.ts +1 -3
  108. package/src/queries/placeholderText.ts +6 -13
  109. package/src/queries/role.ts +1 -2
  110. package/src/queries/testId.ts +5 -10
  111. package/src/queries/text.ts +3 -6
  112. package/src/render.tsx +1 -1
  113. package/src/user-event/__tests__/__snapshots__/clear.test.tsx.snap +269 -0
  114. package/src/user-event/__tests__/clear.test.tsx +217 -0
  115. package/src/user-event/clear.ts +59 -0
  116. package/src/user-event/index.ts +1 -0
  117. package/src/user-event/press/press.ts +8 -14
  118. package/src/user-event/setup/setup.ts +17 -2
  119. package/src/user-event/type/__tests__/type-managed.test.tsx +0 -1
  120. package/src/user-event/type/__tests__/type.test.tsx +0 -1
  121. package/src/user-event/type/type.ts +16 -13
  122. package/src/user-event/utils/__tests__/wait.test.ts +0 -1
  123. package/src/user-event/utils/host-components.ts +6 -0
  124. package/src/user-event/utils/index.ts +1 -0
  125. package/src/user-event/utils/text-range.ts +0 -7
  126. package/website/docs/Queries.md +64 -59
  127. package/website/docs/UserEvent.md +48 -0
  128. package/build/helpers/filterNodeByType.d.ts +0 -3
  129. package/build/helpers/filterNodeByType.js +0 -9
  130. package/build/helpers/filterNodeByType.js.map +0 -1
  131. package/coverage/clover.xml +0 -1176
  132. package/coverage/coverage-final.json +0 -70
  133. package/coverage/lcov-report/base.css +0 -224
  134. package/coverage/lcov-report/block-navigation.js +0 -87
  135. package/coverage/lcov-report/favicon.png +0 -0
  136. package/coverage/lcov-report/index.html +0 -266
  137. package/coverage/lcov-report/prettify.css +0 -1
  138. package/coverage/lcov-report/prettify.js +0 -2
  139. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  140. package/coverage/lcov-report/sorter.js +0 -196
  141. package/coverage/lcov-report/src/act.ts.html +0 -343
  142. package/coverage/lcov-report/src/cleanup.ts.html +0 -130
  143. package/coverage/lcov-report/src/config.ts.html +0 -301
  144. package/coverage/lcov-report/src/fireEvent.ts.html +0 -559
  145. package/coverage/lcov-report/src/flushMicroTasks.ts.html +0 -124
  146. package/coverage/lcov-report/src/helpers/accessiblity.ts.html +0 -412
  147. package/coverage/lcov-report/src/helpers/component-tree.ts.html +0 -352
  148. package/coverage/lcov-report/src/helpers/debugDeep.ts.html +0 -166
  149. package/coverage/lcov-report/src/helpers/debugShallow.ts.html +0 -151
  150. package/coverage/lcov-report/src/helpers/deprecation.ts.html +0 -244
  151. package/coverage/lcov-report/src/helpers/errors.ts.html +0 -283
  152. package/coverage/lcov-report/src/helpers/filterNodeByType.ts.html +0 -106
  153. package/coverage/lcov-report/src/helpers/findAll.ts.html +0 -289
  154. package/coverage/lcov-report/src/helpers/format-default.ts.html +0 -301
  155. package/coverage/lcov-report/src/helpers/format.ts.html +0 -226
  156. package/coverage/lcov-report/src/helpers/getTextContent.ts.html +0 -145
  157. package/coverage/lcov-report/src/helpers/host-component-names.tsx.html +0 -286
  158. package/coverage/lcov-report/src/helpers/index.html +0 -326
  159. package/coverage/lcov-report/src/helpers/matchers/accessibilityState.ts.html +0 -229
  160. package/coverage/lcov-report/src/helpers/matchers/accessibilityValue.ts.html +0 -157
  161. package/coverage/lcov-report/src/helpers/matchers/index.html +0 -206
  162. package/coverage/lcov-report/src/helpers/matchers/matchArrayProp.ts.html +0 -148
  163. package/coverage/lcov-report/src/helpers/matchers/matchLabelText.ts.html +0 -238
  164. package/coverage/lcov-report/src/helpers/matchers/matchObjectProp.ts.html +0 -160
  165. package/coverage/lcov-report/src/helpers/matchers/matchStringProp.ts.html +0 -154
  166. package/coverage/lcov-report/src/helpers/matchers/matchTextContent.ts.html +0 -145
  167. package/coverage/lcov-report/src/helpers/query-name.ts.html +0 -97
  168. package/coverage/lcov-report/src/helpers/stringValidation.ts.html +0 -193
  169. package/coverage/lcov-report/src/helpers/timers.ts.html +0 -382
  170. package/coverage/lcov-report/src/index.html +0 -356
  171. package/coverage/lcov-report/src/index.ts.html +0 -184
  172. package/coverage/lcov-report/src/matches.ts.html +0 -232
  173. package/coverage/lcov-report/src/pure.ts.html +0 -157
  174. package/coverage/lcov-report/src/queries/a11yState.ts.html +0 -478
  175. package/coverage/lcov-report/src/queries/a11yValue.ts.html +0 -478
  176. package/coverage/lcov-report/src/queries/displayValue.ts.html +0 -319
  177. package/coverage/lcov-report/src/queries/hintText.ts.html +0 -421
  178. package/coverage/lcov-report/src/queries/index.html +0 -281
  179. package/coverage/lcov-report/src/queries/labelText.ts.html +0 -262
  180. package/coverage/lcov-report/src/queries/makeQueries.ts.html +0 -850
  181. package/coverage/lcov-report/src/queries/placeholderText.ts.html +0 -322
  182. package/coverage/lcov-report/src/queries/role.ts.html +0 -481
  183. package/coverage/lcov-report/src/queries/testId.ts.html +0 -298
  184. package/coverage/lcov-report/src/queries/text.ts.html +0 -283
  185. package/coverage/lcov-report/src/queries/unsafeProps.ts.html +0 -313
  186. package/coverage/lcov-report/src/queries/unsafeType.ts.html +0 -304
  187. package/coverage/lcov-report/src/react-versions.ts.html +0 -118
  188. package/coverage/lcov-report/src/render-act.ts.html +0 -142
  189. package/coverage/lcov-report/src/render.tsx.html +0 -592
  190. package/coverage/lcov-report/src/renderHook.tsx.html +0 -262
  191. package/coverage/lcov-report/src/screen.ts.html +0 -454
  192. package/coverage/lcov-report/src/shallow.ts.html +0 -139
  193. package/coverage/lcov-report/src/test-utils/events.ts.html +0 -145
  194. package/coverage/lcov-report/src/test-utils/index.html +0 -131
  195. package/coverage/lcov-report/src/test-utils/index.ts.html +0 -88
  196. package/coverage/lcov-report/src/user-event/event-builder/common.ts.html +0 -229
  197. package/coverage/lcov-report/src/user-event/event-builder/index.html +0 -146
  198. package/coverage/lcov-report/src/user-event/event-builder/index.ts.html +0 -106
  199. package/coverage/lcov-report/src/user-event/event-builder/test-input.ts.html +0 -343
  200. package/coverage/lcov-report/src/user-event/event-builder/text-input.ts.html +0 -343
  201. package/coverage/lcov-report/src/user-event/index.html +0 -116
  202. package/coverage/lcov-report/src/user-event/index.ts.html +0 -121
  203. package/coverage/lcov-report/src/user-event/press/index.html +0 -131
  204. package/coverage/lcov-report/src/user-event/press/index.ts.html +0 -88
  205. package/coverage/lcov-report/src/user-event/press/press.ts.html +0 -133
  206. package/coverage/lcov-report/src/user-event/setup/index.html +0 -131
  207. package/coverage/lcov-report/src/user-event/setup/index.ts.html +0 -91
  208. package/coverage/lcov-report/src/user-event/setup/setup.ts.html +0 -358
  209. package/coverage/lcov-report/src/user-event/type/index.html +0 -146
  210. package/coverage/lcov-report/src/user-event/type/index.ts.html +0 -88
  211. package/coverage/lcov-report/src/user-event/type/parseKeys.ts.html +0 -208
  212. package/coverage/lcov-report/src/user-event/type/type.ts.html +0 -484
  213. package/coverage/lcov-report/src/user-event/utils/content-size.ts.html +0 -160
  214. package/coverage/lcov-report/src/user-event/utils/dispatch-event.ts.html +0 -367
  215. package/coverage/lcov-report/src/user-event/utils/events.ts.html +0 -247
  216. package/coverage/lcov-report/src/user-event/utils/index.html +0 -176
  217. package/coverage/lcov-report/src/user-event/utils/index.ts.html +0 -97
  218. package/coverage/lcov-report/src/user-event/utils/text-range.ts.html +0 -118
  219. package/coverage/lcov-report/src/user-event/utils/wait.ts.html +0 -130
  220. package/coverage/lcov-report/src/waitFor.ts.html +0 -772
  221. package/coverage/lcov-report/src/waitForElementToBeRemoved.ts.html +0 -211
  222. package/coverage/lcov-report/src/within.ts.html +0 -175
  223. package/coverage/lcov.info +0 -2614
  224. package/examples/.DS_Store +0 -0
  225. package/examples/basic/.expo/devices.json +0 -3
  226. package/examples/basic/yarn-error.log +0 -8083
  227. package/examples/redux/yarn-error.log +0 -8083
  228. package/src/.DS_Store +0 -0
  229. package/src/__tests__/.DS_Store +0 -0
  230. package/src/helpers/filterNodeByType.ts +0 -7
  231. package/website/.DS_Store +0 -0
  232. package/website/.docusaurus/DONT-EDIT-THIS-FOLDER +0 -5
  233. package/website/.docusaurus/client-modules.js +0 -6
  234. package/website/.docusaurus/codeTranslations.json +0 -1
  235. package/website/.docusaurus/docusaurus-plugin-content-blog/default/blog-post-list-prop-default.json +0 -4
  236. package/website/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json +0 -4
  237. package/website/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json +0 -4
  238. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-api-md-c82.json +0 -27
  239. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-eslint-p-llugin-testing-library-md-d24.json +0 -27
  240. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-faq-md-ad8.json +0 -27
  241. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-getting-started-md-8a6.json +0 -23
  242. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-how-should-i-query-md-f2d.json +0 -27
  243. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-migration-v-11-md-add.json +0 -27
  244. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-migration-v-12-md-14f.json +0 -27
  245. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-migration-v-2-md-698.json +0 -27
  246. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-migration-v-7-md-6bb.json +0 -27
  247. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-migration-v-9-md-f69.json +0 -27
  248. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-queries-md-7ad.json +0 -27
  249. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-react-navigation-md-1bd.json +0 -27
  250. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-redux-integration-md-77b.json +0 -23
  251. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-testing-environment-md-1c6.json +0 -27
  252. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-troubleshooting-md-01d.json +0 -27
  253. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-understanding-act-md-aa9.json +0 -27
  254. package/website/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-user-event-md-501.json +0 -27
  255. package/website/.docusaurus/docusaurus-plugin-content-docs/default/version-current-metadata-prop-751.json +0 -268
  256. package/website/.docusaurus/docusaurus-plugin-content-docs/react-native-testing-library-docs-route-96e.json +0 -115
  257. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-api-md-c82.json +0 -19
  258. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-eslint-p-llugin-testing-library-md-d24.json +0 -19
  259. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-faq-md-ad8.json +0 -19
  260. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-getting-started-md-8a6.json +0 -15
  261. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-how-should-i-query-md-f2d.json +0 -19
  262. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-migration-v-11-md-add.json +0 -19
  263. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-migration-v-2-md-698.json +0 -19
  264. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-migration-v-7-md-6bb.json +0 -19
  265. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-migration-v-9-md-f69.json +0 -19
  266. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-queries-md-7ad.json +0 -19
  267. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-react-navigation-md-1bd.json +0 -19
  268. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-redux-integration-md-77b.json +0 -15
  269. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-troubleshooting-md-01d.json +0 -19
  270. package/website/.docusaurus/docusaurus-plugin-content-docs/site-docs-understanding-act-md-aa9.json +0 -19
  271. package/website/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json +0 -4
  272. package/website/.docusaurus/docusaurus-plugin-debug/default/docusaurus-debug-all-content-673.json +0 -623
  273. package/website/.docusaurus/docusaurus-plugin-debug/default/plugin-route-context-module-100.json +0 -4
  274. package/website/.docusaurus/docusaurus-theme-search-algolia/default/plugin-route-context-module-100.json +0 -4
  275. package/website/.docusaurus/docusaurus.config.js +0 -267
  276. package/website/.docusaurus/docusaurus.config.mjs +0 -365
  277. package/website/.docusaurus/globalData.json +0 -113
  278. package/website/.docusaurus/i18n.json +0 -17
  279. package/website/.docusaurus/registry.js +0 -35
  280. package/website/.docusaurus/routes.js +0 -162
  281. package/website/.docusaurus/routesChunkNames.json +0 -133
  282. package/website/.docusaurus/site-metadata.json +0 -36
  283. package/yarn-error.log +0 -10613
@@ -1 +1 @@
1
- {"version":3,"file":"testId.js","names":["_findAll","require","_matches","_makeQueries","getNodeByTestId","node","testID","options","exact","normalizer","matches","props","queryAllByTestId","instance","queryAllByTestIdFn","testId","queryOptions","findAll","type","getMultipleError","String","getMissingError","getBy","getAllBy","queryBy","queryAllBy","findBy","findAllBy","makeQueries","bindByTestIdQueries","getByTestId","getAllByTestId","queryByTestId","findByTestId","findAllByTestId","exports"],"sources":["../../src/queries/testId.ts"],"sourcesContent":["import type { ReactTestInstance } from 'react-test-renderer';\nimport { findAll } from '../helpers/findAll';\nimport { matches, TextMatch, TextMatchOptions } from '../matches';\nimport { makeQueries } from './makeQueries';\nimport type {\n FindAllByQuery,\n FindByQuery,\n GetAllByQuery,\n GetByQuery,\n QueryAllByQuery,\n QueryByQuery,\n} from './makeQueries';\nimport type { CommonQueryOptions } from './options';\n\ntype ByTestIdOptions = CommonQueryOptions & TextMatchOptions;\n\nconst getNodeByTestId = (\n node: ReactTestInstance,\n testID: TextMatch,\n options: TextMatchOptions = {}\n) => {\n const { exact, normalizer } = options;\n return matches(testID, node.props.testID, normalizer, exact);\n};\n\nconst queryAllByTestId = (\n instance: ReactTestInstance\n): ((\n testId: TextMatch,\n queryOptions?: ByTestIdOptions\n) => Array<ReactTestInstance>) =>\n function queryAllByTestIdFn(testId, queryOptions) {\n return findAll(\n instance,\n (node) =>\n typeof node.type === 'string' &&\n getNodeByTestId(node, testId, queryOptions),\n queryOptions\n );\n };\n\nconst getMultipleError = (testId: TextMatch) =>\n `Found multiple elements with testID: ${String(testId)}`;\nconst getMissingError = (testId: TextMatch) =>\n `Unable to find an element with testID: ${String(testId)}`;\n\nconst { getBy, getAllBy, queryBy, queryAllBy, findBy, findAllBy } = makeQueries(\n queryAllByTestId,\n getMissingError,\n getMultipleError\n);\n\nexport type ByTestIdQueries = {\n getByTestId: GetByQuery<TextMatch, ByTestIdOptions>;\n getAllByTestId: GetAllByQuery<TextMatch, ByTestIdOptions>;\n queryByTestId: QueryByQuery<TextMatch, ByTestIdOptions>;\n queryAllByTestId: QueryAllByQuery<TextMatch, ByTestIdOptions>;\n findByTestId: FindByQuery<TextMatch, ByTestIdOptions>;\n findAllByTestId: FindAllByQuery<TextMatch, ByTestIdOptions>;\n};\n\nexport const bindByTestIdQueries = (\n instance: ReactTestInstance\n): ByTestIdQueries => ({\n getByTestId: getBy(instance),\n getAllByTestId: getAllBy(instance),\n queryByTestId: queryBy(instance),\n queryAllByTestId: queryAllBy(instance),\n findByTestId: findBy(instance),\n findAllByTestId: findAllBy(instance),\n});\n"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AAaA,MAAMG,eAAe,GAAGA,CACtBC,IAAuB,EACvBC,MAAiB,EACjBC,OAAyB,GAAG,CAAC,CAAC,KAC3B;EACH,MAAM;IAAEC,KAAK;IAAEC;EAAW,CAAC,GAAGF,OAAO;EACrC,OAAO,IAAAG,gBAAO,EAACJ,MAAM,EAAED,IAAI,CAACM,KAAK,CAACL,MAAM,EAAEG,UAAU,EAAED,KAAK,CAAC;AAC9D,CAAC;AAED,MAAMI,gBAAgB,GACpBC,QAA2B,IAK3B,SAASC,kBAAkBA,CAACC,MAAM,EAAEC,YAAY,EAAE;EAChD,OAAO,IAAAC,gBAAO,EACZJ,QAAQ,EACPR,IAAI,IACH,OAAOA,IAAI,CAACa,IAAI,KAAK,QAAQ,IAC7Bd,eAAe,CAACC,IAAI,EAAEU,MAAM,EAAEC,YAAY,CAAC,EAC7CA,YACF,CAAC;AACH,CAAC;AAEH,MAAMG,gBAAgB,GAAIJ,MAAiB,IACxC,wCAAuCK,MAAM,CAACL,MAAM,CAAE,EAAC;AAC1D,MAAMM,eAAe,GAAIN,MAAiB,IACvC,0CAAyCK,MAAM,CAACL,MAAM,CAAE,EAAC;AAE5D,MAAM;EAAEO,KAAK;EAAEC,QAAQ;EAAEC,OAAO;EAAEC,UAAU;EAAEC,MAAM;EAAEC;AAAU,CAAC,GAAG,IAAAC,wBAAW,EAC7EhB,gBAAgB,EAChBS,eAAe,EACfF,gBACF,CAAC;AAWM,MAAMU,mBAAmB,GAC9BhB,QAA2B,KACN;EACrBiB,WAAW,EAAER,KAAK,CAACT,QAAQ,CAAC;EAC5BkB,cAAc,EAAER,QAAQ,CAACV,QAAQ,CAAC;EAClCmB,aAAa,EAAER,OAAO,CAACX,QAAQ,CAAC;EAChCD,gBAAgB,EAAEa,UAAU,CAACZ,QAAQ,CAAC;EACtCoB,YAAY,EAAEP,MAAM,CAACb,QAAQ,CAAC;EAC9BqB,eAAe,EAAEP,SAAS,CAACd,QAAQ;AACrC,CAAC,CAAC;AAACsB,OAAA,CAAAN,mBAAA,GAAAA,mBAAA"}
1
+ {"version":3,"file":"testId.js","names":["_findAll","require","_matches","_makeQueries","matchTestId","node","testId","options","exact","normalizer","matches","props","testID","queryAllByTestId","instance","queryAllByTestIdFn","queryOptions","findAll","getMultipleError","String","getMissingError","getBy","getAllBy","queryBy","queryAllBy","findBy","findAllBy","makeQueries","bindByTestIdQueries","getByTestId","getAllByTestId","queryByTestId","findByTestId","findAllByTestId","exports"],"sources":["../../src/queries/testId.ts"],"sourcesContent":["import type { ReactTestInstance } from 'react-test-renderer';\nimport { findAll } from '../helpers/findAll';\nimport { matches, TextMatch, TextMatchOptions } from '../matches';\nimport { makeQueries } from './makeQueries';\nimport type {\n FindAllByQuery,\n FindByQuery,\n GetAllByQuery,\n GetByQuery,\n QueryAllByQuery,\n QueryByQuery,\n} from './makeQueries';\nimport type { CommonQueryOptions } from './options';\n\ntype ByTestIdOptions = CommonQueryOptions & TextMatchOptions;\n\nconst matchTestId = (\n node: ReactTestInstance,\n testId: TextMatch,\n options: TextMatchOptions = {}\n) => {\n const { exact, normalizer } = options;\n return matches(testId, node.props.testID, normalizer, exact);\n};\n\nconst queryAllByTestId = (\n instance: ReactTestInstance\n): QueryAllByQuery<TextMatch, ByTestIdOptions> =>\n function queryAllByTestIdFn(testId, queryOptions) {\n return findAll(\n instance,\n (node) => matchTestId(node, testId, queryOptions),\n queryOptions\n );\n };\n\nconst getMultipleError = (testId: TextMatch) =>\n `Found multiple elements with testID: ${String(testId)}`;\nconst getMissingError = (testId: TextMatch) =>\n `Unable to find an element with testID: ${String(testId)}`;\n\nconst { getBy, getAllBy, queryBy, queryAllBy, findBy, findAllBy } = makeQueries(\n queryAllByTestId,\n getMissingError,\n getMultipleError\n);\n\nexport type ByTestIdQueries = {\n getByTestId: GetByQuery<TextMatch, ByTestIdOptions>;\n getAllByTestId: GetAllByQuery<TextMatch, ByTestIdOptions>;\n queryByTestId: QueryByQuery<TextMatch, ByTestIdOptions>;\n queryAllByTestId: QueryAllByQuery<TextMatch, ByTestIdOptions>;\n findByTestId: FindByQuery<TextMatch, ByTestIdOptions>;\n findAllByTestId: FindAllByQuery<TextMatch, ByTestIdOptions>;\n};\n\nexport const bindByTestIdQueries = (\n instance: ReactTestInstance\n): ByTestIdQueries => ({\n getByTestId: getBy(instance),\n getAllByTestId: getAllBy(instance),\n queryByTestId: queryBy(instance),\n queryAllByTestId: queryAllBy(instance),\n findByTestId: findBy(instance),\n findAllByTestId: findAllBy(instance),\n});\n"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AAaA,MAAMG,WAAW,GAAGA,CAClBC,IAAuB,EACvBC,MAAiB,EACjBC,OAAyB,GAAG,CAAC,CAAC,KAC3B;EACH,MAAM;IAAEC,KAAK;IAAEC;EAAW,CAAC,GAAGF,OAAO;EACrC,OAAO,IAAAG,gBAAO,EAACJ,MAAM,EAAED,IAAI,CAACM,KAAK,CAACC,MAAM,EAAEH,UAAU,EAAED,KAAK,CAAC;AAC9D,CAAC;AAED,MAAMK,gBAAgB,GACpBC,QAA2B,IAE3B,SAASC,kBAAkBA,CAACT,MAAM,EAAEU,YAAY,EAAE;EAChD,OAAO,IAAAC,gBAAO,EACZH,QAAQ,EACPT,IAAI,IAAKD,WAAW,CAACC,IAAI,EAAEC,MAAM,EAAEU,YAAY,CAAC,EACjDA,YACF,CAAC;AACH,CAAC;AAEH,MAAME,gBAAgB,GAAIZ,MAAiB,IACxC,wCAAuCa,MAAM,CAACb,MAAM,CAAE,EAAC;AAC1D,MAAMc,eAAe,GAAId,MAAiB,IACvC,0CAAyCa,MAAM,CAACb,MAAM,CAAE,EAAC;AAE5D,MAAM;EAAEe,KAAK;EAAEC,QAAQ;EAAEC,OAAO;EAAEC,UAAU;EAAEC,MAAM;EAAEC;AAAU,CAAC,GAAG,IAAAC,wBAAW,EAC7Ed,gBAAgB,EAChBO,eAAe,EACfF,gBACF,CAAC;AAWM,MAAMU,mBAAmB,GAC9Bd,QAA2B,KACN;EACrBe,WAAW,EAAER,KAAK,CAACP,QAAQ,CAAC;EAC5BgB,cAAc,EAAER,QAAQ,CAACR,QAAQ,CAAC;EAClCiB,aAAa,EAAER,OAAO,CAACT,QAAQ,CAAC;EAChCD,gBAAgB,EAAEW,UAAU,CAACV,QAAQ,CAAC;EACtCkB,YAAY,EAAEP,MAAM,CAACX,QAAQ,CAAC;EAC9BmB,eAAe,EAAEP,SAAS,CAACZ,QAAQ;AACrC,CAAC,CAAC;AAACoB,OAAA,CAAAN,mBAAA,GAAAA,mBAAA"}
@@ -4,13 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.bindByTextQueries = void 0;
7
- var _filterNodeByType = require("../helpers/filterNodeByType");
8
7
  var _findAll = require("../helpers/findAll");
9
8
  var _hostComponentNames = require("../helpers/host-component-names");
10
9
  var _matchTextContent = require("../helpers/matchers/matchTextContent");
11
10
  var _makeQueries = require("./makeQueries");
12
11
  const queryAllByText = instance => function queryAllByTextFn(text, options = {}) {
13
- return (0, _findAll.findAll)(instance, node => (0, _filterNodeByType.filterNodeByType)(node, (0, _hostComponentNames.getHostComponentNames)().text) && (0, _matchTextContent.matchTextContent)(node, text, options), {
12
+ return (0, _findAll.findAll)(instance, node => (0, _hostComponentNames.isHostText)(node) && (0, _matchTextContent.matchTextContent)(node, text, options), {
14
13
  ...options,
15
14
  matchDeepestOnly: true
16
15
  });
@@ -1 +1 @@
1
- {"version":3,"file":"text.js","names":["_filterNodeByType","require","_findAll","_hostComponentNames","_matchTextContent","_makeQueries","queryAllByText","instance","queryAllByTextFn","text","options","findAll","node","filterNodeByType","getHostComponentNames","matchTextContent","matchDeepestOnly","getMultipleError","String","getMissingError","getBy","getAllBy","queryBy","queryAllBy","findBy","findAllBy","makeQueries","bindByTextQueries","getByText","getAllByText","queryByText","findByText","findAllByText","exports"],"sources":["../../src/queries/text.ts"],"sourcesContent":["import type { ReactTestInstance } from 'react-test-renderer';\nimport { filterNodeByType } from '../helpers/filterNodeByType';\nimport { findAll } from '../helpers/findAll';\nimport { getHostComponentNames } from '../helpers/host-component-names';\nimport { matchTextContent } from '../helpers/matchers/matchTextContent';\nimport { TextMatch, TextMatchOptions } from '../matches';\nimport { makeQueries } from './makeQueries';\nimport type {\n FindAllByQuery,\n FindByQuery,\n GetAllByQuery,\n GetByQuery,\n QueryAllByQuery,\n QueryByQuery,\n} from './makeQueries';\nimport type { CommonQueryOptions } from './options';\n\ntype ByTextOptions = CommonQueryOptions & TextMatchOptions;\n\nconst queryAllByText = (\n instance: ReactTestInstance\n): ((text: TextMatch, options?: ByTextOptions) => Array<ReactTestInstance>) =>\n function queryAllByTextFn(text, options = {}) {\n return findAll(\n instance,\n (node) =>\n filterNodeByType(node, getHostComponentNames().text) &&\n matchTextContent(node, text, options),\n {\n ...options,\n matchDeepestOnly: true,\n }\n );\n };\n\nconst getMultipleError = (text: TextMatch) =>\n `Found multiple elements with text: ${String(text)}`;\n\nconst getMissingError = (text: TextMatch) =>\n `Unable to find an element with text: ${String(text)}`;\n\nconst { getBy, getAllBy, queryBy, queryAllBy, findBy, findAllBy } = makeQueries(\n queryAllByText,\n getMissingError,\n getMultipleError\n);\n\nexport type ByTextQueries = {\n getByText: GetByQuery<TextMatch, ByTextOptions>;\n getAllByText: GetAllByQuery<TextMatch, ByTextOptions>;\n queryByText: QueryByQuery<TextMatch, ByTextOptions>;\n queryAllByText: QueryAllByQuery<TextMatch, ByTextOptions>;\n findByText: FindByQuery<TextMatch, ByTextOptions>;\n findAllByText: FindAllByQuery<TextMatch, ByTextOptions>;\n};\n\nexport const bindByTextQueries = (\n instance: ReactTestInstance\n): ByTextQueries => ({\n getByText: getBy(instance),\n getAllByText: getAllBy(instance),\n queryByText: queryBy(instance),\n queryAllByText: queryAllBy(instance),\n findByText: findBy(instance),\n findAllByText: findAllBy(instance),\n});\n"],"mappings":";;;;;;AACA,IAAAA,iBAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,mBAAA,GAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAH,OAAA;AAEA,IAAAI,YAAA,GAAAJ,OAAA;AAaA,MAAMK,cAAc,GAClBC,QAA2B,IAE3B,SAASC,gBAAgBA,CAACC,IAAI,EAAEC,OAAO,GAAG,CAAC,CAAC,EAAE;EAC5C,OAAO,IAAAC,gBAAO,EACZJ,QAAQ,EACPK,IAAI,IACH,IAAAC,kCAAgB,EAACD,IAAI,EAAE,IAAAE,yCAAqB,EAAC,CAAC,CAACL,IAAI,CAAC,IACpD,IAAAM,kCAAgB,EAACH,IAAI,EAAEH,IAAI,EAAEC,OAAO,CAAC,EACvC;IACE,GAAGA,OAAO;IACVM,gBAAgB,EAAE;EACpB,CACF,CAAC;AACH,CAAC;AAEH,MAAMC,gBAAgB,GAAIR,IAAe,IACtC,sCAAqCS,MAAM,CAACT,IAAI,CAAE,EAAC;AAEtD,MAAMU,eAAe,GAAIV,IAAe,IACrC,wCAAuCS,MAAM,CAACT,IAAI,CAAE,EAAC;AAExD,MAAM;EAAEW,KAAK;EAAEC,QAAQ;EAAEC,OAAO;EAAEC,UAAU;EAAEC,MAAM;EAAEC;AAAU,CAAC,GAAG,IAAAC,wBAAW,EAC7EpB,cAAc,EACda,eAAe,EACfF,gBACF,CAAC;AAWM,MAAMU,iBAAiB,GAC5BpB,QAA2B,KACR;EACnBqB,SAAS,EAAER,KAAK,CAACb,QAAQ,CAAC;EAC1BsB,YAAY,EAAER,QAAQ,CAACd,QAAQ,CAAC;EAChCuB,WAAW,EAAER,OAAO,CAACf,QAAQ,CAAC;EAC9BD,cAAc,EAAEiB,UAAU,CAAChB,QAAQ,CAAC;EACpCwB,UAAU,EAAEP,MAAM,CAACjB,QAAQ,CAAC;EAC5ByB,aAAa,EAAEP,SAAS,CAAClB,QAAQ;AACnC,CAAC,CAAC;AAAC0B,OAAA,CAAAN,iBAAA,GAAAA,iBAAA"}
1
+ {"version":3,"file":"text.js","names":["_findAll","require","_hostComponentNames","_matchTextContent","_makeQueries","queryAllByText","instance","queryAllByTextFn","text","options","findAll","node","isHostText","matchTextContent","matchDeepestOnly","getMultipleError","String","getMissingError","getBy","getAllBy","queryBy","queryAllBy","findBy","findAllBy","makeQueries","bindByTextQueries","getByText","getAllByText","queryByText","findByText","findAllByText","exports"],"sources":["../../src/queries/text.ts"],"sourcesContent":["import type { ReactTestInstance } from 'react-test-renderer';\nimport { findAll } from '../helpers/findAll';\nimport { isHostText } from '../helpers/host-component-names';\nimport { matchTextContent } from '../helpers/matchers/matchTextContent';\nimport { TextMatch, TextMatchOptions } from '../matches';\nimport { makeQueries } from './makeQueries';\nimport type {\n FindAllByQuery,\n FindByQuery,\n GetAllByQuery,\n GetByQuery,\n QueryAllByQuery,\n QueryByQuery,\n} from './makeQueries';\nimport type { CommonQueryOptions } from './options';\n\ntype ByTextOptions = CommonQueryOptions & TextMatchOptions;\n\nconst queryAllByText = (\n instance: ReactTestInstance\n): QueryAllByQuery<TextMatch, ByTextOptions> =>\n function queryAllByTextFn(text, options = {}) {\n return findAll(\n instance,\n (node) => isHostText(node) && matchTextContent(node, text, options),\n {\n ...options,\n matchDeepestOnly: true,\n }\n );\n };\n\nconst getMultipleError = (text: TextMatch) =>\n `Found multiple elements with text: ${String(text)}`;\n\nconst getMissingError = (text: TextMatch) =>\n `Unable to find an element with text: ${String(text)}`;\n\nconst { getBy, getAllBy, queryBy, queryAllBy, findBy, findAllBy } = makeQueries(\n queryAllByText,\n getMissingError,\n getMultipleError\n);\n\nexport type ByTextQueries = {\n getByText: GetByQuery<TextMatch, ByTextOptions>;\n getAllByText: GetAllByQuery<TextMatch, ByTextOptions>;\n queryByText: QueryByQuery<TextMatch, ByTextOptions>;\n queryAllByText: QueryAllByQuery<TextMatch, ByTextOptions>;\n findByText: FindByQuery<TextMatch, ByTextOptions>;\n findAllByText: FindAllByQuery<TextMatch, ByTextOptions>;\n};\n\nexport const bindByTextQueries = (\n instance: ReactTestInstance\n): ByTextQueries => ({\n getByText: getBy(instance),\n getAllByText: getAllBy(instance),\n queryByText: queryBy(instance),\n queryAllByText: queryAllBy(instance),\n findByText: findBy(instance),\n findAllByText: findAllBy(instance),\n});\n"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,iBAAA,GAAAF,OAAA;AAEA,IAAAG,YAAA,GAAAH,OAAA;AAaA,MAAMI,cAAc,GAClBC,QAA2B,IAE3B,SAASC,gBAAgBA,CAACC,IAAI,EAAEC,OAAO,GAAG,CAAC,CAAC,EAAE;EAC5C,OAAO,IAAAC,gBAAO,EACZJ,QAAQ,EACPK,IAAI,IAAK,IAAAC,8BAAU,EAACD,IAAI,CAAC,IAAI,IAAAE,kCAAgB,EAACF,IAAI,EAAEH,IAAI,EAAEC,OAAO,CAAC,EACnE;IACE,GAAGA,OAAO;IACVK,gBAAgB,EAAE;EACpB,CACF,CAAC;AACH,CAAC;AAEH,MAAMC,gBAAgB,GAAIP,IAAe,IACtC,sCAAqCQ,MAAM,CAACR,IAAI,CAAE,EAAC;AAEtD,MAAMS,eAAe,GAAIT,IAAe,IACrC,wCAAuCQ,MAAM,CAACR,IAAI,CAAE,EAAC;AAExD,MAAM;EAAEU,KAAK;EAAEC,QAAQ;EAAEC,OAAO;EAAEC,UAAU;EAAEC,MAAM;EAAEC;AAAU,CAAC,GAAG,IAAAC,wBAAW,EAC7EnB,cAAc,EACdY,eAAe,EACfF,gBACF,CAAC;AAWM,MAAMU,iBAAiB,GAC5BnB,QAA2B,KACR;EACnBoB,SAAS,EAAER,KAAK,CAACZ,QAAQ,CAAC;EAC1BqB,YAAY,EAAER,QAAQ,CAACb,QAAQ,CAAC;EAChCsB,WAAW,EAAER,OAAO,CAACd,QAAQ,CAAC;EAC9BD,cAAc,EAAEgB,UAAU,CAACf,QAAQ,CAAC;EACpCuB,UAAU,EAAEP,MAAM,CAAChB,QAAQ,CAAC;EAC5BwB,aAAa,EAAEP,SAAS,CAACjB,QAAQ;AACnC,CAAC,CAAC;AAACyB,OAAA,CAAAN,iBAAA,GAAAA,iBAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","names":["React","_interopRequireWildcard","require","_act","_interopRequireDefault","_cleanup","_config","_componentTree","_debugDeep","_debugShallow","_hostComponentNames","_stringValidation","_renderAct","_screen","_within","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","render","component","options","renderInternal","wrapper","Wrapper","createNodeMock","unstable_validateStringsRenderedWithinText","detectHostComponentNames","configureHostComponentNamesIfNeeded","renderWithStringValidation","wrap","element","createElement","renderer","renderWithAct","undefined","buildRenderResult","handleRender","_","phase","validateStringsRenderedWithinText","screen","toJSON","Profiler","id","onRender","update","updateWithAct","instance","root","unmount","act","addToCleanupQueue","result","getQueriesForElement","rerender","debug","getHostChildren","UNSAFE_root","enumerable","Error","setRenderResult","debugImpl","defaultDebugOptions","getConfig","debugOptions","message","console","warn","json","debugDeep","shallow","debugShallow"],"sources":["../src/render.tsx"],"sourcesContent":["import type { ReactTestInstance, ReactTestRenderer } from 'react-test-renderer';\nimport * as React from 'react';\nimport { Profiler } from 'react';\nimport act from './act';\nimport { addToCleanupQueue } from './cleanup';\nimport { getConfig } from './config';\nimport { getHostChildren } from './helpers/component-tree';\nimport debugDeep, { DebugOptions } from './helpers/debugDeep';\nimport debugShallow from './helpers/debugShallow';\nimport { configureHostComponentNamesIfNeeded } from './helpers/host-component-names';\nimport { validateStringsRenderedWithinText } from './helpers/stringValidation';\nimport { renderWithAct } from './render-act';\nimport { setRenderResult, screen } from './screen';\nimport { getQueriesForElement } from './within';\n\nexport interface RenderOptions {\n wrapper?: React.ComponentType<any>;\n createNodeMock?: (element: React.ReactElement) => any;\n unstable_validateStringsRenderedWithinText?: boolean;\n}\n\nexport type RenderResult = ReturnType<typeof render>;\n\n/**\n * Renders test component deeply using React Test Renderer and exposes helpers\n * to assert on the output.\n */\nexport default function render<T>(\n component: React.ReactElement<T>,\n options: RenderOptions = {}\n) {\n return renderInternal(component, options);\n}\n\nexport interface RenderInternalOptions extends RenderOptions {\n detectHostComponentNames?: boolean;\n}\n\nexport function renderInternal<T>(\n component: React.ReactElement<T>,\n {\n wrapper: Wrapper,\n createNodeMock,\n unstable_validateStringsRenderedWithinText,\n detectHostComponentNames = true,\n }: RenderInternalOptions = {}\n) {\n if (detectHostComponentNames) {\n configureHostComponentNamesIfNeeded();\n }\n\n if (unstable_validateStringsRenderedWithinText) {\n return renderWithStringValidation(component, {\n wrapper: Wrapper,\n createNodeMock,\n });\n }\n\n const wrap = (element: React.ReactElement) =>\n Wrapper ? <Wrapper>{element}</Wrapper> : element;\n\n const renderer = renderWithAct(\n wrap(component),\n createNodeMock ? { createNodeMock } : undefined\n );\n\n return buildRenderResult(renderer, wrap);\n}\n\nfunction renderWithStringValidation<T>(\n component: React.ReactElement<T>,\n {\n wrapper: Wrapper,\n createNodeMock,\n }: Omit<RenderOptions, 'unstable_validateStringsRenderedWithinText'> = {}\n) {\n const handleRender: React.ProfilerProps['onRender'] = (_, phase) => {\n if (phase === 'update') {\n validateStringsRenderedWithinText(screen.toJSON());\n }\n };\n\n const wrap = (element: React.ReactElement) => (\n <Profiler id=\"renderProfiler\" onRender={handleRender}>\n {Wrapper ? <Wrapper>{element}</Wrapper> : element}\n </Profiler>\n );\n\n const renderer = renderWithAct(\n wrap(component),\n createNodeMock ? { createNodeMock } : undefined\n );\n validateStringsRenderedWithinText(renderer.toJSON());\n\n return buildRenderResult(renderer, wrap);\n}\n\nfunction buildRenderResult(\n renderer: ReactTestRenderer,\n wrap: (element: React.ReactElement) => JSX.Element\n) {\n const update = updateWithAct(renderer, wrap);\n const instance = renderer.root;\n\n const unmount = () => {\n act(() => {\n renderer.unmount();\n });\n };\n\n addToCleanupQueue(unmount);\n\n const result = {\n ...getQueriesForElement(instance),\n update,\n unmount,\n rerender: update, // alias for `update`\n toJSON: renderer.toJSON,\n debug: debug(instance, renderer),\n get root() {\n return getHostChildren(instance)[0];\n },\n UNSAFE_root: instance,\n };\n\n // Add as non-enumerable property, so that it's safe to enumerate\n // `render` result, e.g. using destructuring rest syntax.\n Object.defineProperty(result, 'container', {\n enumerable: false,\n get() {\n throw new Error(\n \"'container' property has been renamed to 'UNSAFE_root'.\\n\\n\" +\n \"Consider using 'root' property which returns root host element.\"\n );\n },\n });\n\n setRenderResult(result);\n return result;\n}\n\nfunction updateWithAct(\n renderer: ReactTestRenderer,\n wrap: (innerElement: React.ReactElement) => React.ReactElement\n) {\n return function (component: React.ReactElement) {\n act(() => {\n renderer.update(wrap(component));\n });\n };\n}\n\nexport interface DebugFunction {\n (options?: DebugOptions | string): void;\n shallow: (message?: string) => void;\n}\n\nfunction debug(\n instance: ReactTestInstance,\n renderer: ReactTestRenderer\n): DebugFunction {\n function debugImpl(options?: DebugOptions | string) {\n const { defaultDebugOptions } = getConfig();\n const debugOptions =\n typeof options === 'string'\n ? { ...defaultDebugOptions, message: options }\n : { ...defaultDebugOptions, ...options };\n\n if (typeof options === 'string') {\n // eslint-disable-next-line no-console\n console.warn(\n 'Using debug(\"message\") is deprecated and will be removed in future release, please use debug({ message; \"message\" }) instead.'\n );\n }\n\n const json = renderer.toJSON();\n if (json) {\n return debugDeep(json, debugOptions);\n }\n }\n debugImpl.shallow = (message?: string) => debugShallow(instance, message);\n return debugImpl;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"render.js","names":["React","_interopRequireWildcard","require","_act","_interopRequireDefault","_cleanup","_config","_componentTree","_debugDeep","_debugShallow","_hostComponentNames","_stringValidation","_renderAct","_screen","_within","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","render","component","options","renderInternal","wrapper","Wrapper","createNodeMock","unstable_validateStringsRenderedWithinText","detectHostComponentNames","configureHostComponentNamesIfNeeded","renderWithStringValidation","wrap","element","createElement","renderer","renderWithAct","undefined","buildRenderResult","handleRender","_","phase","validateStringsRenderedWithinText","screen","toJSON","Profiler","id","onRender","update","updateWithAct","instance","root","unmount","act","addToCleanupQueue","result","getQueriesForElement","rerender","debug","getHostChildren","UNSAFE_root","enumerable","Error","setRenderResult","debugImpl","defaultDebugOptions","getConfig","debugOptions","message","console","warn","json","debugDeep","shallow","debugShallow"],"sources":["../src/render.tsx"],"sourcesContent":["import type { ReactTestInstance, ReactTestRenderer } from 'react-test-renderer';\nimport * as React from 'react';\nimport { Profiler } from 'react';\nimport act from './act';\nimport { addToCleanupQueue } from './cleanup';\nimport { getConfig } from './config';\nimport { getHostChildren } from './helpers/component-tree';\nimport debugDeep, { DebugOptions } from './helpers/debugDeep';\nimport debugShallow from './helpers/debugShallow';\nimport { configureHostComponentNamesIfNeeded } from './helpers/host-component-names';\nimport { validateStringsRenderedWithinText } from './helpers/stringValidation';\nimport { renderWithAct } from './render-act';\nimport { setRenderResult, screen } from './screen';\nimport { getQueriesForElement } from './within';\n\nexport interface RenderOptions {\n wrapper?: React.ComponentType<any>;\n createNodeMock?: (element: React.ReactElement) => any;\n unstable_validateStringsRenderedWithinText?: boolean;\n}\n\nexport type RenderResult = ReturnType<typeof render>;\n\n/**\n * Renders test component deeply using React Test Renderer and exposes helpers\n * to assert on the output.\n */\nexport default function render<T>(\n component: React.ReactElement<T>,\n options: RenderOptions = {}\n) {\n return renderInternal(component, options);\n}\n\nexport interface RenderInternalOptions extends RenderOptions {\n detectHostComponentNames?: boolean;\n}\n\nexport function renderInternal<T>(\n component: React.ReactElement<T>,\n {\n wrapper: Wrapper,\n createNodeMock,\n unstable_validateStringsRenderedWithinText,\n detectHostComponentNames = true,\n }: RenderInternalOptions = {}\n) {\n if (detectHostComponentNames) {\n configureHostComponentNamesIfNeeded();\n }\n\n if (unstable_validateStringsRenderedWithinText) {\n return renderWithStringValidation(component, {\n wrapper: Wrapper,\n createNodeMock,\n });\n }\n\n const wrap = (element: React.ReactElement) =>\n Wrapper ? <Wrapper>{element}</Wrapper> : element;\n\n const renderer = renderWithAct(\n wrap(component),\n createNodeMock ? { createNodeMock } : undefined\n );\n\n return buildRenderResult(renderer, wrap);\n}\n\nfunction renderWithStringValidation<T>(\n component: React.ReactElement<T>,\n {\n wrapper: Wrapper,\n createNodeMock,\n }: Omit<RenderOptions, 'unstable_validateStringsRenderedWithinText'> = {}\n) {\n const handleRender: React.ProfilerProps['onRender'] = (_, phase) => {\n if (phase === 'update') {\n validateStringsRenderedWithinText(screen.toJSON());\n }\n };\n\n const wrap = (element: React.ReactElement) => (\n <Profiler id=\"renderProfiler\" onRender={handleRender}>\n {Wrapper ? <Wrapper>{element}</Wrapper> : element}\n </Profiler>\n );\n\n const renderer = renderWithAct(\n wrap(component),\n createNodeMock ? { createNodeMock } : undefined\n );\n validateStringsRenderedWithinText(renderer.toJSON());\n\n return buildRenderResult(renderer, wrap);\n}\n\nfunction buildRenderResult(\n renderer: ReactTestRenderer,\n wrap: (element: React.ReactElement) => JSX.Element\n) {\n const update = updateWithAct(renderer, wrap);\n const instance = renderer.root;\n\n const unmount = () => {\n act(() => {\n renderer.unmount();\n });\n };\n\n addToCleanupQueue(unmount);\n\n const result = {\n ...getQueriesForElement(instance),\n update,\n unmount,\n rerender: update, // alias for `update`\n toJSON: renderer.toJSON,\n debug: debug(instance, renderer),\n get root(): ReactTestInstance {\n return getHostChildren(instance)[0];\n },\n UNSAFE_root: instance,\n };\n\n // Add as non-enumerable property, so that it's safe to enumerate\n // `render` result, e.g. using destructuring rest syntax.\n Object.defineProperty(result, 'container', {\n enumerable: false,\n get() {\n throw new Error(\n \"'container' property has been renamed to 'UNSAFE_root'.\\n\\n\" +\n \"Consider using 'root' property which returns root host element.\"\n );\n },\n });\n\n setRenderResult(result);\n return result;\n}\n\nfunction updateWithAct(\n renderer: ReactTestRenderer,\n wrap: (innerElement: React.ReactElement) => React.ReactElement\n) {\n return function (component: React.ReactElement) {\n act(() => {\n renderer.update(wrap(component));\n });\n };\n}\n\nexport interface DebugFunction {\n (options?: DebugOptions | string): void;\n shallow: (message?: string) => void;\n}\n\nfunction debug(\n instance: ReactTestInstance,\n renderer: ReactTestRenderer\n): DebugFunction {\n function debugImpl(options?: DebugOptions | string) {\n const { defaultDebugOptions } = getConfig();\n const debugOptions =\n typeof options === 'string'\n ? { ...defaultDebugOptions, message: options }\n : { ...defaultDebugOptions, ...options };\n\n if (typeof options === 'string') {\n // eslint-disable-next-line no-console\n console.warn(\n 'Using debug(\"message\") is deprecated and will be removed in future release, please use debug({ message; \"message\" }) instead.'\n );\n }\n\n const json = renderer.toJSON();\n if (json) {\n return debugDeep(json, debugOptions);\n }\n }\n debugImpl.shallow = (message?: string) => debugShallow(instance, message);\n return debugImpl;\n}\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ReactTestInstance } from 'react-test-renderer';
2
+ import { UserEventInstance } from './setup';
3
+ export declare function clear(this: UserEventInstance, element: ReactTestInstance): Promise<void>;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.clear = clear;
7
+ var _errors = require("../helpers/errors");
8
+ var _hostComponentNames = require("../helpers/host-component-names");
9
+ var _pointerEvents = require("../helpers/pointer-events");
10
+ var _eventBuilder = require("./event-builder");
11
+ var _utils = require("./utils");
12
+ var _type = require("./type/type");
13
+ async function clear(element) {
14
+ if (!(0, _hostComponentNames.isHostTextInput)(element)) {
15
+ throw new _errors.ErrorWithStack(`clear() only supports host "TextInput" elements. Passed element has type: "${element.type}".`, clear);
16
+ }
17
+ if (!(0, _utils.isEditableTextInput)(element) || !(0, _pointerEvents.isPointerEventEnabled)(element)) {
18
+ return;
19
+ }
20
+
21
+ // 1. Enter element
22
+ (0, _utils.dispatchEvent)(element, 'focus', _eventBuilder.EventBuilder.Common.focus());
23
+
24
+ // 2. Select all
25
+ const previousText = element.props.value ?? element.props.defaultValue ?? '';
26
+ const selectionRange = {
27
+ start: 0,
28
+ end: previousText.length
29
+ };
30
+ (0, _utils.dispatchEvent)(element, 'selectionChange', _eventBuilder.EventBuilder.TextInput.selectionChange(selectionRange));
31
+
32
+ // 3. Press backspace
33
+ const finalText = '';
34
+ await (0, _type.emitTypingEvents)(this.config, element, 'Backspace', finalText, previousText);
35
+
36
+ // 4. Exit element
37
+ await (0, _utils.wait)(this.config);
38
+ (0, _utils.dispatchEvent)(element, 'endEditing', _eventBuilder.EventBuilder.TextInput.endEditing(finalText));
39
+ (0, _utils.dispatchEvent)(element, 'blur', _eventBuilder.EventBuilder.Common.blur());
40
+ }
41
+ //# sourceMappingURL=clear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear.js","names":["_errors","require","_hostComponentNames","_pointerEvents","_eventBuilder","_utils","_type","clear","element","isHostTextInput","ErrorWithStack","type","isEditableTextInput","isPointerEventEnabled","dispatchEvent","EventBuilder","Common","focus","previousText","props","value","defaultValue","selectionRange","start","end","length","TextInput","selectionChange","finalText","emitTypingEvents","config","wait","endEditing","blur"],"sources":["../../src/user-event/clear.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport { ErrorWithStack } from '../helpers/errors';\nimport { isHostTextInput } from '../helpers/host-component-names';\nimport { isPointerEventEnabled } from '../helpers/pointer-events';\nimport { EventBuilder } from './event-builder';\nimport { UserEventInstance } from './setup';\nimport { dispatchEvent, wait, isEditableTextInput } from './utils';\nimport { emitTypingEvents } from './type/type';\n\nexport async function clear(\n this: UserEventInstance,\n element: ReactTestInstance\n): Promise<void> {\n if (!isHostTextInput(element)) {\n throw new ErrorWithStack(\n `clear() only supports host \"TextInput\" elements. Passed element has type: \"${element.type}\".`,\n clear\n );\n }\n\n if (!isEditableTextInput(element) || !isPointerEventEnabled(element)) {\n return;\n }\n\n // 1. Enter element\n dispatchEvent(element, 'focus', EventBuilder.Common.focus());\n\n // 2. Select all\n const previousText = element.props.value ?? element.props.defaultValue ?? '';\n const selectionRange = {\n start: 0,\n end: previousText.length,\n };\n dispatchEvent(\n element,\n 'selectionChange',\n EventBuilder.TextInput.selectionChange(selectionRange)\n );\n\n // 3. Press backspace\n const finalText = '';\n await emitTypingEvents(\n this.config,\n element,\n 'Backspace',\n finalText,\n previousText\n );\n\n // 4. Exit element\n await wait(this.config);\n dispatchEvent(\n element,\n 'endEditing',\n EventBuilder.TextInput.endEditing(finalText)\n );\n\n dispatchEvent(element, 'blur', EventBuilder.Common.blur());\n}\n"],"mappings":";;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AAEA,IAAAI,MAAA,GAAAJ,OAAA;AACA,IAAAK,KAAA,GAAAL,OAAA;AAEO,eAAeM,KAAKA,CAEzBC,OAA0B,EACX;EACf,IAAI,CAAC,IAAAC,mCAAe,EAACD,OAAO,CAAC,EAAE;IAC7B,MAAM,IAAIE,sBAAc,CACrB,8EAA6EF,OAAO,CAACG,IAAK,IAAG,EAC9FJ,KACF,CAAC;EACH;EAEA,IAAI,CAAC,IAAAK,0BAAmB,EAACJ,OAAO,CAAC,IAAI,CAAC,IAAAK,oCAAqB,EAACL,OAAO,CAAC,EAAE;IACpE;EACF;;EAEA;EACA,IAAAM,oBAAa,EAACN,OAAO,EAAE,OAAO,EAAEO,0BAAY,CAACC,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;;EAE5D;EACA,MAAMC,YAAY,GAAGV,OAAO,CAACW,KAAK,CAACC,KAAK,IAAIZ,OAAO,CAACW,KAAK,CAACE,YAAY,IAAI,EAAE;EAC5E,MAAMC,cAAc,GAAG;IACrBC,KAAK,EAAE,CAAC;IACRC,GAAG,EAAEN,YAAY,CAACO;EACpB,CAAC;EACD,IAAAX,oBAAa,EACXN,OAAO,EACP,iBAAiB,EACjBO,0BAAY,CAACW,SAAS,CAACC,eAAe,CAACL,cAAc,CACvD,CAAC;;EAED;EACA,MAAMM,SAAS,GAAG,EAAE;EACpB,MAAM,IAAAC,sBAAgB,EACpB,IAAI,CAACC,MAAM,EACXtB,OAAO,EACP,WAAW,EACXoB,SAAS,EACTV,YACF,CAAC;;EAED;EACA,MAAM,IAAAa,WAAI,EAAC,IAAI,CAACD,MAAM,CAAC;EACvB,IAAAhB,oBAAa,EACXN,OAAO,EACP,YAAY,EACZO,0BAAY,CAACW,SAAS,CAACM,UAAU,CAACJ,SAAS,CAC7C,CAAC;EAED,IAAAd,oBAAa,EAACN,OAAO,EAAE,MAAM,EAAEO,0BAAY,CAACC,MAAM,CAACiB,IAAI,CAAC,CAAC,CAAC;AAC5D"}
@@ -8,4 +8,5 @@ export declare const userEvent: {
8
8
  press: (element: ReactTestInstance) => Promise<void>;
9
9
  longPress: (element: ReactTestInstance, options?: PressOptions) => Promise<void>;
10
10
  type: (element: ReactTestInstance, text: string, options?: TypeOptions) => Promise<void>;
11
+ clear: (element: ReactTestInstance) => Promise<void>;
11
12
  };
@@ -16,7 +16,8 @@ const userEvent = {
16
16
  // Direct access for User Event v13 compatibility
17
17
  press: element => (0, _setup.setup)().press(element),
18
18
  longPress: (element, options) => (0, _setup.setup)().longPress(element, options),
19
- type: (element, text, options) => (0, _setup.setup)().type(element, text, options)
19
+ type: (element, text, options) => (0, _setup.setup)().type(element, text, options),
20
+ clear: element => (0, _setup.setup)().clear(element)
20
21
  };
21
22
  exports.userEvent = userEvent;
22
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_setup","require","userEvent","setup","press","element","longPress","options","type","text","exports"],"sources":["../../src/user-event/index.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport { setup } from './setup';\nimport { PressOptions } from './press';\nimport { TypeOptions } from './type';\n\nexport { UserEventConfig } from './setup';\n\nexport const userEvent = {\n setup,\n\n // Direct access for User Event v13 compatibility\n press: (element: ReactTestInstance) => setup().press(element),\n longPress: (element: ReactTestInstance, options?: PressOptions) =>\n setup().longPress(element, options),\n type: (element: ReactTestInstance, text: string, options?: TypeOptions) =>\n setup().type(element, text, options),\n};\n"],"mappings":";;;;;;;;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAMO,MAAMC,SAAS,GAAG;EACvBC,KAAK,EAALA,YAAK;EAEL;EACAC,KAAK,EAAGC,OAA0B,IAAK,IAAAF,YAAK,EAAC,CAAC,CAACC,KAAK,CAACC,OAAO,CAAC;EAC7DC,SAAS,EAAEA,CAACD,OAA0B,EAAEE,OAAsB,KAC5D,IAAAJ,YAAK,EAAC,CAAC,CAACG,SAAS,CAACD,OAAO,EAAEE,OAAO,CAAC;EACrCC,IAAI,EAAEA,CAACH,OAA0B,EAAEI,IAAY,EAAEF,OAAqB,KACpE,IAAAJ,YAAK,EAAC,CAAC,CAACK,IAAI,CAACH,OAAO,EAAEI,IAAI,EAAEF,OAAO;AACvC,CAAC;AAACG,OAAA,CAAAR,SAAA,GAAAA,SAAA"}
1
+ {"version":3,"file":"index.js","names":["_setup","require","userEvent","setup","press","element","longPress","options","type","text","clear","exports"],"sources":["../../src/user-event/index.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport { setup } from './setup';\nimport { PressOptions } from './press';\nimport { TypeOptions } from './type';\n\nexport { UserEventConfig } from './setup';\n\nexport const userEvent = {\n setup,\n\n // Direct access for User Event v13 compatibility\n press: (element: ReactTestInstance) => setup().press(element),\n longPress: (element: ReactTestInstance, options?: PressOptions) =>\n setup().longPress(element, options),\n type: (element: ReactTestInstance, text: string, options?: TypeOptions) =>\n setup().type(element, text, options),\n clear: (element: ReactTestInstance) => setup().clear(element),\n};\n"],"mappings":";;;;;;;;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAMO,MAAMC,SAAS,GAAG;EACvBC,KAAK,EAALA,YAAK;EAEL;EACAC,KAAK,EAAGC,OAA0B,IAAK,IAAAF,YAAK,EAAC,CAAC,CAACC,KAAK,CAACC,OAAO,CAAC;EAC7DC,SAAS,EAAEA,CAACD,OAA0B,EAAEE,OAAsB,KAC5D,IAAAJ,YAAK,EAAC,CAAC,CAACG,SAAS,CAACD,OAAO,EAAEE,OAAO,CAAC;EACrCC,IAAI,EAAEA,CAACH,OAA0B,EAAEI,IAAY,EAAEF,OAAqB,KACpE,IAAAJ,YAAK,EAAC,CAAC,CAACK,IAAI,CAACH,OAAO,EAAEI,IAAI,EAAEF,OAAO,CAAC;EACtCG,KAAK,EAAGL,OAA0B,IAAK,IAAAF,YAAK,EAAC,CAAC,CAACO,KAAK,CAACL,OAAO;AAC9D,CAAC;AAACM,OAAA,CAAAT,SAAA,GAAAA,SAAA"}
@@ -30,7 +30,7 @@ const basePress = async (config, element, options) => {
30
30
  await emitTextPressEvents(config, element, options);
31
31
  return;
32
32
  }
33
- if (isEnabledTextInput(element)) {
33
+ if ((0, _utils.isEditableTextInput)(element) && (0, _pointerEvents.isPointerEventEnabled)(element)) {
34
34
  await emitTextInputPressEvents(config, element, options);
35
35
  return;
36
36
  }
@@ -67,9 +67,6 @@ const isPressableText = element => {
67
67
  const hasPressEventHandler = Boolean(element.props.onPress || element.props.onLongPress || element.props.onPressIn || element.props.onPressOut);
68
68
  return (0, _hostComponentNames.isHostText)(element) && (0, _pointerEvents.isPointerEventEnabled)(element) && !element.props.disabled && hasPressEventHandler;
69
69
  };
70
- const isEnabledTextInput = element => {
71
- return (0, _hostComponentNames.isHostTextInput)(element) && (0, _pointerEvents.isPointerEventEnabled)(element) && element.props.editable !== false;
72
- };
73
70
 
74
71
  /**
75
72
  * Dispatches a press event sequence for Text.
@@ -1 +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":"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"}
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","isEditableTextInput","isPointerEventEnabled","emitTextInputPressEvents","isEnabledTouchResponder","emitPressablePressEvents","hostParentElement","getHostParent","warnAboutRealTimersIfNeeded","wait","act","dispatchEvent","EventBuilder","Common","responderGrant","responderRelease","DEFAULT_MIN_PRESS_DURATION","props","onStartShouldSetResponder","hasPressEventHandler","Boolean","onPress","onLongPress","onPressIn","onPressOut","isHostText","disabled","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 { isHostText } from '../../helpers/host-component-names';\nimport { EventBuilder } from '../event-builder';\nimport { UserEventConfig, UserEventInstance } from '../setup';\nimport {\n dispatchEvent,\n isEditableTextInput,\n wait,\n warnAboutRealTimersIfNeeded,\n} 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 (isEditableTextInput(element) && isPointerEventEnabled(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\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":"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"}
@@ -46,7 +46,7 @@ export interface UserEventInstance {
46
46
  press: (element: ReactTestInstance) => Promise<void>;
47
47
  longPress: (element: ReactTestInstance, options?: PressOptions) => Promise<void>;
48
48
  /**
49
- * Simulate user pressing on given `TextInput` element and typing given text.
49
+ * Simulate user pressing on a given `TextInput` element and typing given text.
50
50
  *
51
51
  * This method will trigger the events for each character of the text:
52
52
  * `keyPress`, `change`, `changeText`, `endEditing`, etc.
@@ -54,7 +54,7 @@ export interface UserEventInstance {
54
54
  * It will also trigger events connected with entering and leaving the text
55
55
  * input.
56
56
  *
57
- * The exact events sent depend on the props of TextInput (`editable`,
57
+ * The exact events sent depend on the props of the TextInput (`editable`,
58
58
  * `multiline`, value, defaultValue, etc) and passed options.
59
59
  *
60
60
  * @param element TextInput element to type on
@@ -66,4 +66,16 @@ export interface UserEventInstance {
66
66
  * typing the text.
67
67
  */
68
68
  type: (element: ReactTestInstance, text: string, options?: TypeOptions) => Promise<void>;
69
+ /**
70
+ * Simulate user clearing the text of a given `TextInput` element.
71
+ *
72
+ * This method will simulate:
73
+ * 1. entering TextInput
74
+ * 2. selecting all text
75
+ * 3. pressing backspace to delete all text
76
+ * 4. leaving TextInput
77
+ *
78
+ * @param element TextInput element to clear
79
+ */
80
+ clear: (element: ReactTestInstance) => Promise<void>;
69
81
  }
@@ -7,6 +7,7 @@ exports.setup = setup;
7
7
  var _timers = require("../../helpers/timers");
8
8
  var _press = require("../press");
9
9
  var _type = require("../type");
10
+ var _clear = require("../clear");
10
11
  /**
11
12
  * This functions allow wait to work correctly under both real and fake Jest timers.
12
13
  */
@@ -61,7 +62,8 @@ function createInstance(config) {
61
62
  const api = {
62
63
  press: _press.press.bind(instance),
63
64
  longPress: _press.longPress.bind(instance),
64
- type: _type.type.bind(instance)
65
+ type: _type.type.bind(instance),
66
+ clear: _clear.clear.bind(instance)
65
67
  };
66
68
  Object.assign(instance, api);
67
69
  return instance;
@@ -1 +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"}
1
+ {"version":3,"file":"setup.js","names":["_timers","require","_press","_type","_clear","universalJestAdvanceTimersBy","ms","jestFakeTimersAreEnabled","jest","advanceTimersByTime","Promise","resolve","defaultOptions","delay","advanceTimers","setup","options","config","createConfig","instance","createInstance","api","press","bind","longPress","type","clear","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';\nimport { clear } from '../clear';\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 a 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 the 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 /**\n * Simulate user clearing the text of a given `TextInput` element.\n *\n * This method will simulate:\n * 1. entering TextInput\n * 2. selecting all text\n * 3. pressing backspace to delete all text\n * 4. leaving TextInput\n *\n * @param element TextInput element to clear\n */\n clear: (element: ReactTestInstance) => 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 clear: clear.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;AACA,IAAAG,MAAA,GAAAH,OAAA;AAwBA;AACA;AACA;AACA,SAASI,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;;AAkDA,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,CAAC;IACzBO,KAAK,EAAEA,YAAK,CAACH,IAAI,CAACJ,QAAQ;EAC5B,CAAC;EAEDQ,MAAM,CAACC,MAAM,CAACT,QAAQ,EAAEE,GAAG,CAAC;EAC5B,OAAOF,QAAQ;AACjB"}
@@ -1,7 +1,8 @@
1
1
  import { ReactTestInstance } from 'react-test-renderer';
2
- import { UserEventInstance } from '../setup';
2
+ import { UserEventConfig, UserEventInstance } from '../setup';
3
3
  export interface TypeOptions {
4
4
  skipPress?: boolean;
5
5
  submitEditing?: boolean;
6
6
  }
7
7
  export declare function type(this: UserEventInstance, element: ReactTestInstance, text: string, options?: TypeOptions): Promise<void>;
8
+ export declare function emitTypingEvents(config: UserEventConfig, element: ReactTestInstance, key: string, currentText: string, previousText: string): Promise<void>;
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.emitTypingEvents = emitTypingEvents;
6
7
  exports.type = type;
7
8
  var _hostComponentNames = require("../../helpers/host-component-names");
8
9
  var _eventBuilder = require("../event-builder");
@@ -32,8 +33,7 @@ async function type(element, text, options) {
32
33
  for (const key of keys) {
33
34
  const previousText = element.props.value ?? currentText;
34
35
  currentText = applyKey(previousText, key);
35
- await (0, _utils.wait)(this.config);
36
- emitTypingEvents(element, key, currentText, previousText);
36
+ await emitTypingEvents(this.config, element, key, currentText, previousText);
37
37
  }
38
38
  const finalText = element.props.value ?? currentText;
39
39
  await (0, _utils.wait)(this.config);
@@ -43,8 +43,9 @@ async function type(element, text, options) {
43
43
  (0, _utils.dispatchEvent)(element, 'endEditing', _eventBuilder.EventBuilder.TextInput.endEditing(finalText));
44
44
  (0, _utils.dispatchEvent)(element, 'blur', _eventBuilder.EventBuilder.Common.blur());
45
45
  }
46
- async function emitTypingEvents(element, key, currentText, previousText) {
46
+ async function emitTypingEvents(config, element, key, currentText, previousText) {
47
47
  const isMultiline = element.props.multiline === true;
48
+ await (0, _utils.wait)(config);
48
49
  (0, _utils.dispatchEvent)(element, 'keyPress', _eventBuilder.EventBuilder.TextInput.keyPress(key));
49
50
 
50
51
  // According to the docs only multiline TextInput emits textInput event
@@ -54,7 +55,10 @@ async function emitTypingEvents(element, key, currentText, previousText) {
54
55
  }
55
56
  (0, _utils.dispatchEvent)(element, 'change', _eventBuilder.EventBuilder.TextInput.change(currentText));
56
57
  (0, _utils.dispatchEvent)(element, 'changeText', currentText);
57
- const selectionRange = (0, _utils.getTextRange)(currentText);
58
+ const selectionRange = {
59
+ start: currentText.length,
60
+ end: currentText.length
61
+ };
58
62
  (0, _utils.dispatchEvent)(element, 'selectionChange', _eventBuilder.EventBuilder.TextInput.selectionChange(selectionRange));
59
63
 
60
64
  // According to the docs only multiline TextInput emits contentSizeChange event
@@ -1 +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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"}
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","start","length","end","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 { UserEventConfig, UserEventInstance } from '../setup';\nimport { dispatchEvent, wait, getTextContentSize } 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 emitTypingEvents(\n this.config,\n element,\n key,\n currentText,\n previousText\n );\n }\n\n const finalText = element.props.value ?? currentText;\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\nexport async function emitTypingEvents(\n config: UserEventConfig,\n element: ReactTestInstance,\n key: string,\n currentText: string,\n previousText: string\n) {\n const isMultiline = element.props.multiline === true;\n\n await wait(config);\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 dispatchEvent(element, 'changeText', currentText);\n\n const selectionRange = {\n start: currentText.length,\n end: currentText.length,\n };\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":";;;;;;;AACA,IAAAA,mBAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,cAAA,GAAAH,OAAA;AAEA,IAAAI,MAAA,GAAAJ,OAAA;AAEA,IAAAK,UAAA,GAAAL,OAAA;AAOO,eAAeM,IAAIA,CAExBC,OAA0B,EAC1BC,IAAY,EACZC,OAAqB,EACN;EACf,IAAI,CAAC,IAAAC,mCAAe,EAACH,OAAO,CAAC,EAAE;IAC7B,MAAM,IAAII,sBAAc,CACrB,8EAA6EJ,OAAO,CAACD,IAAK,IAAG,EAC9FA,IACF,CAAC;EACH;;EAEA;EACA,IAAIC,OAAO,CAACK,KAAK,CAACC,QAAQ,KAAK,KAAK,IAAI,CAAC,IAAAC,oCAAqB,EAACP,OAAO,CAAC,EAAE;IACvE;EACF;EAEA,MAAMQ,IAAI,GAAG,IAAAC,oBAAS,EAACR,IAAI,CAAC;EAE5B,IAAI,CAACC,OAAO,EAAEQ,SAAS,EAAE;IACvB,IAAAC,oBAAa,EAACX,OAAO,EAAE,SAAS,EAAEY,0BAAY,CAACC,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;EAChE;EAEA,IAAAH,oBAAa,EAACX,OAAO,EAAE,OAAO,EAAEY,0BAAY,CAACC,MAAM,CAACE,KAAK,CAAC,CAAC,CAAC;EAE5D,IAAI,CAACb,OAAO,EAAEQ,SAAS,EAAE;IACvB,MAAM,IAAAM,WAAI,EAAC,IAAI,CAACC,MAAM,CAAC;IACvB,IAAAN,oBAAa,EAACX,OAAO,EAAE,UAAU,EAAEY,0BAAY,CAACC,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;EACjE;EAEA,IAAII,WAAW,GAAGlB,OAAO,CAACK,KAAK,CAACc,KAAK,IAAInB,OAAO,CAACK,KAAK,CAACe,YAAY,IAAI,EAAE;EACzE,KAAK,MAAMC,GAAG,IAAIb,IAAI,EAAE;IACtB,MAAMc,YAAY,GAAGtB,OAAO,CAACK,KAAK,CAACc,KAAK,IAAID,WAAW;IACvDA,WAAW,GAAGK,QAAQ,CAACD,YAAY,EAAED,GAAG,CAAC;IAEzC,MAAMG,gBAAgB,CACpB,IAAI,CAACP,MAAM,EACXjB,OAAO,EACPqB,GAAG,EACHH,WAAW,EACXI,YACF,CAAC;EACH;EAEA,MAAMG,SAAS,GAAGzB,OAAO,CAACK,KAAK,CAACc,KAAK,IAAID,WAAW;EACpD,MAAM,IAAAF,WAAI,EAAC,IAAI,CAACC,MAAM,CAAC;EAEvB,IAAIf,OAAO,EAAEwB,aAAa,EAAE;IAC1B,IAAAf,oBAAa,EACXX,OAAO,EACP,eAAe,EACfY,0BAAY,CAACe,SAAS,CAACD,aAAa,CAACD,SAAS,CAChD,CAAC;EACH;EAEA,IAAAd,oBAAa,EACXX,OAAO,EACP,YAAY,EACZY,0BAAY,CAACe,SAAS,CAACC,UAAU,CAACH,SAAS,CAC7C,CAAC;EAED,IAAAd,oBAAa,EAACX,OAAO,EAAE,MAAM,EAAEY,0BAAY,CAACC,MAAM,CAACgB,IAAI,CAAC,CAAC,CAAC;AAC5D;AAEO,eAAeL,gBAAgBA,CACpCP,MAAuB,EACvBjB,OAA0B,EAC1BqB,GAAW,EACXH,WAAmB,EACnBI,YAAoB,EACpB;EACA,MAAMQ,WAAW,GAAG9B,OAAO,CAACK,KAAK,CAAC0B,SAAS,KAAK,IAAI;EAEpD,MAAM,IAAAf,WAAI,EAACC,MAAM,CAAC;EAClB,IAAAN,oBAAa,EAACX,OAAO,EAAE,UAAU,EAAEY,0BAAY,CAACe,SAAS,CAACK,QAAQ,CAACX,GAAG,CAAC,CAAC;;EAExE;EACA;EACA,IAAIS,WAAW,EAAE;IACf,IAAAnB,oBAAa,EACXX,OAAO,EACP,WAAW,EACXY,0BAAY,CAACe,SAAS,CAACM,SAAS,CAACf,WAAW,EAAEI,YAAY,CAC5D,CAAC;EACH;EAEA,IAAAX,oBAAa,EAACX,OAAO,EAAE,QAAQ,EAAEY,0BAAY,CAACe,SAAS,CAACO,MAAM,CAAChB,WAAW,CAAC,CAAC;EAC5E,IAAAP,oBAAa,EAACX,OAAO,EAAE,YAAY,EAAEkB,WAAW,CAAC;EAEjD,MAAMiB,cAAc,GAAG;IACrBC,KAAK,EAAElB,WAAW,CAACmB,MAAM;IACzBC,GAAG,EAAEpB,WAAW,CAACmB;EACnB,CAAC;EACD,IAAA1B,oBAAa,EACXX,OAAO,EACP,iBAAiB,EACjBY,0BAAY,CAACe,SAAS,CAACY,eAAe,CAACJ,cAAc,CACvD,CAAC;;EAED;EACA;EACA,IAAIL,WAAW,EAAE;IACf,MAAMU,WAAW,GAAG,IAAAC,yBAAkB,EAACvB,WAAW,CAAC;IACnD,IAAAP,oBAAa,EACXX,OAAO,EACP,mBAAmB,EACnBY,0BAAY,CAACe,SAAS,CAACe,iBAAiB,CAACF,WAAW,CACtD,CAAC;EACH;AACF;AAEA,SAASjB,QAAQA,CAACtB,IAAY,EAAEoB,GAAW,EAAE;EAC3C,IAAIA,GAAG,KAAK,OAAO,EAAE;IACnB,OAAQ,GAAEpB,IAAK,IAAG;EACpB;EAEA,IAAIoB,GAAG,KAAK,WAAW,EAAE;IACvB,OAAOpB,IAAI,CAAC0C,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAC1B;EAEA,OAAO1C,IAAI,GAAGoB,GAAG;AACnB"}
@@ -0,0 +1,2 @@
1
+ import { ReactTestInstance } from 'react-test-renderer';
2
+ export declare function isEditableTextInput(element: ReactTestInstance): boolean;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isEditableTextInput = isEditableTextInput;
7
+ var _hostComponentNames = require("../../helpers/host-component-names");
8
+ function isEditableTextInput(element) {
9
+ return (0, _hostComponentNames.isHostTextInput)(element) && element.props.editable !== false;
10
+ }
11
+ //# sourceMappingURL=host-components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-components.js","names":["_hostComponentNames","require","isEditableTextInput","element","isHostTextInput","props","editable"],"sources":["../../../src/user-event/utils/host-components.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport { isHostTextInput } from '../../helpers/host-component-names';\n\nexport function isEditableTextInput(element: ReactTestInstance) {\n return isHostTextInput(element) && element.props.editable !== false;\n}\n"],"mappings":";;;;;;AACA,IAAAA,mBAAA,GAAAC,OAAA;AAEO,SAASC,mBAAmBA,CAACC,OAA0B,EAAE;EAC9D,OAAO,IAAAC,mCAAe,EAACD,OAAO,CAAC,IAAIA,OAAO,CAACE,KAAK,CAACC,QAAQ,KAAK,KAAK;AACrE"}
@@ -1,5 +1,6 @@
1
1
  export * from './content-size';
2
2
  export * from './dispatch-event';
3
+ export * from './host-components';
3
4
  export * from './text-range';
4
5
  export * from './wait';
5
6
  export * from './warn-about-real-timers';
@@ -25,6 +25,17 @@ Object.keys(_dispatchEvent).forEach(function (key) {
25
25
  }
26
26
  });
27
27
  });
28
+ var _hostComponents = require("./host-components");
29
+ Object.keys(_hostComponents).forEach(function (key) {
30
+ if (key === "default" || key === "__esModule") return;
31
+ if (key in exports && exports[key] === _hostComponents[key]) return;
32
+ Object.defineProperty(exports, key, {
33
+ enumerable: true,
34
+ get: function () {
35
+ return _hostComponents[key];
36
+ }
37
+ });
38
+ });
28
39
  var _textRange = require("./text-range");
29
40
  Object.keys(_textRange).forEach(function (key) {
30
41
  if (key === "default" || key === "__esModule") return;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_contentSize","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_dispatchEvent","_textRange","_wait","_warnAboutRealTimers"],"sources":["../../../src/user-event/utils/index.ts"],"sourcesContent":["export * from './content-size';\nexport * from './dispatch-event';\nexport * from './text-range';\nexport * from './wait';\nexport * from './warn-about-real-timers';\n"],"mappings":";;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,YAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,YAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,YAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,cAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,cAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,cAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,cAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,UAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,UAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,UAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,UAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,KAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,KAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,KAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,KAAA,CAAAP,GAAA;IAAA;EAAA;AAAA;AACA,IAAAQ,oBAAA,GAAAZ,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAU,oBAAA,EAAAT,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAQ,oBAAA,CAAAR,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAI,oBAAA,CAAAR,GAAA;IAAA;EAAA;AAAA"}
1
+ {"version":3,"file":"index.js","names":["_contentSize","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_dispatchEvent","_hostComponents","_textRange","_wait","_warnAboutRealTimers"],"sources":["../../../src/user-event/utils/index.ts"],"sourcesContent":["export * from './content-size';\nexport * from './dispatch-event';\nexport * from './host-components';\nexport * from './text-range';\nexport * from './wait';\nexport * from './warn-about-real-timers';\n"],"mappings":";;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,YAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,YAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,YAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,cAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,cAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,cAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,cAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,eAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,eAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,eAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,eAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,UAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,UAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,UAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,UAAA,CAAAP,GAAA;IAAA;EAAA;AAAA;AACA,IAAAQ,KAAA,GAAAZ,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAU,KAAA,EAAAT,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAQ,KAAA,CAAAR,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAI,KAAA,CAAAR,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,oBAAA,GAAAb,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAW,oBAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAS,oBAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAK,oBAAA,CAAAT,GAAA;IAAA;EAAA;AAAA"}
@@ -2,4 +2,3 @@ export interface TextRange {
2
2
  start: number;
3
3
  end: number;
4
4
  }
5
- export declare function getTextRange(text: string): TextRange;
@@ -1,13 +1,2 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.getTextRange = getTextRange;
7
- function getTextRange(text) {
8
- return {
9
- start: text.length,
10
- end: text.length
11
- };
12
- }
13
2
  //# sourceMappingURL=text-range.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"text-range.js","names":["getTextRange","text","start","length","end"],"sources":["../../../src/user-event/utils/text-range.ts"],"sourcesContent":["export interface TextRange {\n start: number;\n end: number;\n}\n\nexport function getTextRange(text: string): TextRange {\n return {\n start: text.length,\n end: text.length,\n };\n}\n"],"mappings":";;;;;;AAKO,SAASA,YAAYA,CAACC,IAAY,EAAa;EACpD,OAAO;IACLC,KAAK,EAAED,IAAI,CAACE,MAAM;IAClBC,GAAG,EAAEH,IAAI,CAACE;EACZ,CAAC;AACH"}
1
+ {"version":3,"file":"text-range.js","names":[],"sources":["../../../src/user-event/utils/text-range.ts"],"sourcesContent":["export interface TextRange {\n start: number;\n end: number;\n}\n"],"mappings":""}
@@ -2,13 +2,11 @@
2
2
 
3
3
  The ".expo" folder is created when an Expo project is started using "expo start" command.
4
4
 
5
- > What does the "packager-info.json" file contain?
5
+ > What do the files contain?
6
6
 
7
- The "packager-info.json" file contains port numbers and process PIDs that are used to serve the application to the mobile device/simulator.
8
-
9
- > What does the "settings.json" file contain?
10
-
11
- The "settings.json" file contains the server configuration that is used to serve the application manifest.
7
+ - "devices.json": contains information about devices that have recently opened this project. This is used to populate the "Development sessions" list in your development builds.
8
+ - "packager-info.json": contains port numbers and process PIDs that are used to serve the application to the mobile device/simulator.
9
+ - "settings.json": contains the server configuration that is used to serve the application manifest.
12
10
 
13
11
  > Should I commit the ".expo" folder?
14
12
 
@@ -1,6 +1,8 @@
1
1
  {
2
+ "scheme": null,
2
3
  "hostType": "lan",
3
4
  "lanType": "ip",
5
+ "devClient": false,
4
6
  "dev": true,
5
7
  "minify": false,
6
8
  "urlRandomness": null,