@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@testing-library/react-native",
3
- "version": "12.2.0",
3
+ "version": "12.2.1",
4
4
  "description": "Simple and complete React Native testing utilities that encourage good testing practices.",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -97,7 +97,9 @@
97
97
  ],
98
98
  "testPathIgnorePatterns": [
99
99
  "timerUtils",
100
- "examples/"
100
+ "examples/",
101
+ "experiments-app/",
102
+ "experiments-rtl/"
101
103
  ],
102
104
  "testTimeout": 60000,
103
105
  "transformIgnorePatterns": [
package/src/fireEvent.ts CHANGED
@@ -7,9 +7,9 @@ import {
7
7
  ScrollViewProps,
8
8
  } from 'react-native';
9
9
  import act from './act';
10
- import { isPointerEventEnabled } from './helpers/pointer-events';
11
10
  import { isHostElement } from './helpers/component-tree';
12
11
  import { isHostTextInput } from './helpers/host-component-names';
12
+ import { isPointerEventEnabled } from './helpers/pointer-events';
13
13
 
14
14
  type EventHandler = (...args: unknown[]) => unknown;
15
15
 
@@ -1,10 +1,17 @@
1
1
  import { ReactTestInstance } from 'react-test-renderer';
2
2
 
3
+ /**
4
+ * ReactTestInstance referring to host element.
5
+ */
6
+ export type HostTestInstance = ReactTestInstance & { type: string };
7
+
3
8
  /**
4
9
  * Checks if the given element is a host element.
5
10
  * @param element The element to check.
6
11
  */
7
- export function isHostElement(element?: ReactTestInstance | null) {
12
+ export function isHostElement(
13
+ element?: ReactTestInstance | null
14
+ ): element is HostTestInstance {
8
15
  return typeof element?.type === 'string';
9
16
  }
10
17
 
@@ -14,7 +21,7 @@ export function isHostElement(element?: ReactTestInstance | null) {
14
21
  */
15
22
  export function getHostParent(
16
23
  element: ReactTestInstance | null
17
- ): ReactTestInstance | null {
24
+ ): HostTestInstance | null {
18
25
  if (element == null) {
19
26
  return null;
20
27
  }
@@ -37,12 +44,12 @@ export function getHostParent(
37
44
  */
38
45
  export function getHostChildren(
39
46
  element: ReactTestInstance | null
40
- ): ReactTestInstance[] {
47
+ ): HostTestInstance[] {
41
48
  if (element == null) {
42
49
  return [];
43
50
  }
44
51
 
45
- const hostChildren: ReactTestInstance[] = [];
52
+ const hostChildren: HostTestInstance[] = [];
46
53
 
47
54
  element.children.forEach((child) => {
48
55
  if (typeof child !== 'object') {
@@ -68,10 +75,8 @@ export function getHostChildren(
68
75
  */
69
76
  export function getHostSelves(
70
77
  element: ReactTestInstance | null
71
- ): ReactTestInstance[] {
72
- return typeof element?.type === 'string'
73
- ? [element]
74
- : getHostChildren(element);
78
+ ): HostTestInstance[] {
79
+ return isHostElement(element) ? [element] : getHostChildren(element);
75
80
  }
76
81
 
77
82
  /**
@@ -80,7 +85,7 @@ export function getHostSelves(
80
85
  */
81
86
  export function getHostSiblings(
82
87
  element: ReactTestInstance | null
83
- ): ReactTestInstance[] {
88
+ ): HostTestInstance[] {
84
89
  const hostParent = getHostParent(element);
85
90
  const hostSelves = getHostSelves(element);
86
91
  return getHostChildren(hostParent).filter(
@@ -1,6 +1,7 @@
1
1
  import { ReactTestInstance } from 'react-test-renderer';
2
2
  import { getConfig } from '../config';
3
3
  import { isHiddenFromAccessibility } from './accessiblity';
4
+ import { HostTestInstance, isHostElement } from './component-tree';
4
5
 
5
6
  interface FindAllOptions {
6
7
  /** Match elements hidden from accessibility */
@@ -17,7 +18,7 @@ export function findAll(
17
18
  root: ReactTestInstance,
18
19
  predicate: (element: ReactTestInstance) => boolean,
19
20
  options?: FindAllOptions
20
- ) {
21
+ ): HostTestInstance[] {
21
22
  const results = findAllInternal(root, predicate, options);
22
23
 
23
24
  const includeHiddenElements =
@@ -41,11 +42,11 @@ function findAllInternal(
41
42
  root: ReactTestInstance,
42
43
  predicate: (element: ReactTestInstance) => boolean,
43
44
  options?: FindAllOptions
44
- ): Array<ReactTestInstance> {
45
- const results: ReactTestInstance[] = [];
45
+ ): HostTestInstance[] {
46
+ const results: HostTestInstance[] = [];
46
47
 
47
48
  // Match descendants first but do not add them to results yet.
48
- const matchingDescendants: ReactTestInstance[] = [];
49
+ const matchingDescendants: HostTestInstance[] = [];
49
50
  root.children.forEach((child) => {
50
51
  if (typeof child === 'string') {
51
52
  return;
@@ -56,6 +57,7 @@ function findAllInternal(
56
57
  if (
57
58
  // When matchDeepestOnly = true: add current element only if no descendants match
58
59
  (!options?.matchDeepestOnly || matchingDescendants.length === 0) &&
60
+ isHostElement(root) &&
59
61
  predicate(root)
60
62
  ) {
61
63
  results.push(root);
@@ -3,6 +3,7 @@ import { ReactTestInstance } from 'react-test-renderer';
3
3
  import { Switch, Text, TextInput, View } from 'react-native';
4
4
  import { configureInternal, getConfig, HostComponentNames } from '../config';
5
5
  import { renderWithAct } from '../render-act';
6
+ import { HostTestInstance } from './component-tree';
6
7
 
7
8
  const userConfigErrorMessage = `There seems to be an issue with your configuration that prevents React Native Testing Library from working correctly.
8
9
  Please check if you are using compatible versions of React Native and React Native Testing Library.`;
@@ -66,10 +67,22 @@ function getByTestId(instance: ReactTestInstance, testID: string) {
66
67
  return nodes[0];
67
68
  }
68
69
 
69
- export function isHostText(element?: ReactTestInstance) {
70
+ /**
71
+ * Checks if the given element is a host Text.
72
+ * @param element The element to check.
73
+ */
74
+ export function isHostText(
75
+ element?: ReactTestInstance | null
76
+ ): element is HostTestInstance {
70
77
  return element?.type === getHostComponentNames().text;
71
78
  }
72
79
 
73
- export function isHostTextInput(element?: ReactTestInstance) {
80
+ /**
81
+ * Checks if the given element is a host TextInput.
82
+ * @param element The element to check.
83
+ */
84
+ export function isHostTextInput(
85
+ element?: ReactTestInstance | null
86
+ ): element is HostTestInstance {
74
87
  return element?.type === getHostComponentNames().textInput;
75
88
  }
@@ -43,7 +43,6 @@ function matchAccessibilityLabelledBy(
43
43
  findAll(
44
44
  root,
45
45
  (node) =>
46
- typeof node.type === 'string' &&
47
46
  node.props.nativeID === nativeId &&
48
47
  matchTextContent(node, text, options)
49
48
  ).length > 0
@@ -19,15 +19,11 @@ import { CommonQueryOptions } from './options';
19
19
 
20
20
  const queryAllByA11yState = (
21
21
  instance: ReactTestInstance
22
- ): ((
23
- matcher: AccessibilityStateMatcher,
24
- queryOptions?: CommonQueryOptions
25
- ) => Array<ReactTestInstance>) =>
22
+ ): QueryAllByQuery<AccessibilityStateMatcher, CommonQueryOptions> =>
26
23
  function queryAllByA11yStateFn(matcher, queryOptions) {
27
24
  return findAll(
28
25
  instance,
29
- (node) =>
30
- typeof node.type === 'string' && matchAccessibilityState(node, matcher),
26
+ (node) => matchAccessibilityState(node, matcher),
31
27
  queryOptions
32
28
  );
33
29
  };
@@ -19,15 +19,11 @@ import { CommonQueryOptions } from './options';
19
19
 
20
20
  const queryAllByA11yValue = (
21
21
  instance: ReactTestInstance
22
- ): ((
23
- value: AccessibilityValueMatcher,
24
- queryOptions?: CommonQueryOptions
25
- ) => Array<ReactTestInstance>) =>
22
+ ): QueryAllByQuery<AccessibilityValueMatcher, CommonQueryOptions> =>
26
23
  function queryAllByA11yValueFn(value, queryOptions) {
27
24
  return findAll(
28
25
  instance,
29
- (node) =>
30
- typeof node.type === 'string' && matchAccessibilityValue(node, value),
26
+ (node) => matchAccessibilityValue(node, value),
31
27
  queryOptions
32
28
  );
33
29
  };
@@ -1,8 +1,7 @@
1
1
  import type { ReactTestInstance } from 'react-test-renderer';
2
- import { filterNodeByType } from '../helpers/filterNodeByType';
3
2
  import { findAll } from '../helpers/findAll';
3
+ import { isHostTextInput } from '../helpers/host-component-names';
4
4
  import { matches, TextMatch, TextMatchOptions } from '../matches';
5
- import { getHostComponentNames } from '../helpers/host-component-names';
6
5
  import { makeQueries } from './makeQueries';
7
6
  import type {
8
7
  FindAllByQuery,
@@ -16,32 +15,26 @@ import type { CommonQueryOptions } from './options';
16
15
 
17
16
  type ByDisplayValueOptions = CommonQueryOptions & TextMatchOptions;
18
17
 
19
- const getTextInputNodeByDisplayValue = (
18
+ const matchDisplayValue = (
20
19
  node: ReactTestInstance,
21
20
  value: TextMatch,
22
21
  options: TextMatchOptions = {}
23
22
  ) => {
24
23
  const { exact, normalizer } = options;
25
- const nodeValue =
26
- node.props.value !== undefined ? node.props.value : node.props.defaultValue;
24
+ const nodeValue = node.props.value ?? node.props.defaultValue;
27
25
 
28
- return (
29
- filterNodeByType(node, getHostComponentNames().textInput) &&
30
- matches(value, nodeValue, normalizer, exact)
31
- );
26
+ return matches(value, nodeValue, normalizer, exact);
32
27
  };
33
28
 
34
29
  const queryAllByDisplayValue = (
35
30
  instance: ReactTestInstance
36
- ): ((
37
- displayValue: TextMatch,
38
- queryOptions?: ByDisplayValueOptions
39
- ) => Array<ReactTestInstance>) =>
31
+ ): QueryAllByQuery<TextMatch, ByDisplayValueOptions> =>
40
32
  function queryAllByDisplayValueFn(displayValue, queryOptions) {
41
33
  return findAll(
42
34
  instance,
43
35
  (node) =>
44
- getTextInputNodeByDisplayValue(node, displayValue, queryOptions),
36
+ isHostTextInput(node) &&
37
+ matchDisplayValue(node, displayValue, queryOptions),
45
38
  queryOptions
46
39
  );
47
40
  };
@@ -25,16 +25,11 @@ const getNodeByHintText = (
25
25
 
26
26
  const queryAllByHintText = (
27
27
  instance: ReactTestInstance
28
- ): ((
29
- hint: TextMatch,
30
- queryOptions?: ByHintTextOptions
31
- ) => Array<ReactTestInstance>) =>
28
+ ): QueryAllByQuery<TextMatch, ByHintTextOptions> =>
32
29
  function queryAllByA11yHintFn(hint, queryOptions) {
33
30
  return findAll(
34
31
  instance,
35
- (node) =>
36
- typeof node.type === 'string' &&
37
- getNodeByHintText(node, hint, queryOptions),
32
+ (node) => getNodeByHintText(node, hint, queryOptions),
38
33
  queryOptions
39
34
  );
40
35
  };
@@ -19,9 +19,7 @@ function queryAllByLabelText(instance: ReactTestInstance) {
19
19
  return (text: TextMatch, queryOptions?: ByLabelTextOptions) => {
20
20
  return findAll(
21
21
  instance,
22
- (node) =>
23
- typeof node.type === 'string' &&
24
- matchLabelText(instance, node, text, queryOptions),
22
+ (node) => matchLabelText(instance, node, text, queryOptions),
25
23
  queryOptions
26
24
  );
27
25
  };
@@ -1,8 +1,7 @@
1
1
  import type { ReactTestInstance } from 'react-test-renderer';
2
2
  import { findAll } from '../helpers/findAll';
3
3
  import { matches, TextMatch, TextMatchOptions } from '../matches';
4
- import { filterNodeByType } from '../helpers/filterNodeByType';
5
- import { getHostComponentNames } from '../helpers/host-component-names';
4
+ import { isHostTextInput } from '../helpers/host-component-names';
6
5
  import { makeQueries } from './makeQueries';
7
6
  import type {
8
7
  FindAllByQuery,
@@ -16,30 +15,24 @@ import type { CommonQueryOptions } from './options';
16
15
 
17
16
  type ByPlaceholderTextOptions = CommonQueryOptions & TextMatchOptions;
18
17
 
19
- const getTextInputNodeByPlaceholderText = (
18
+ const matchPlaceholderText = (
20
19
  node: ReactTestInstance,
21
20
  placeholder: TextMatch,
22
21
  options: TextMatchOptions = {}
23
22
  ) => {
24
23
  const { exact, normalizer } = options;
25
-
26
- return (
27
- filterNodeByType(node, getHostComponentNames().textInput) &&
28
- matches(placeholder, node.props.placeholder, normalizer, exact)
29
- );
24
+ return matches(placeholder, node.props.placeholder, normalizer, exact);
30
25
  };
31
26
 
32
27
  const queryAllByPlaceholderText = (
33
28
  instance: ReactTestInstance
34
- ): ((
35
- placeholder: TextMatch,
36
- queryOptions?: ByPlaceholderTextOptions
37
- ) => Array<ReactTestInstance>) =>
29
+ ): QueryAllByQuery<TextMatch, ByPlaceholderTextOptions> =>
38
30
  function queryAllByPlaceholderFn(placeholder, queryOptions) {
39
31
  return findAll(
40
32
  instance,
41
33
  (node) =>
42
- getTextInputNodeByPlaceholderText(node, placeholder, queryOptions),
34
+ isHostTextInput(node) &&
35
+ matchPlaceholderText(node, placeholder, queryOptions),
43
36
  queryOptions
44
37
  );
45
38
  };
@@ -61,13 +61,12 @@ const matchAccessibilityValueIfNeeded = (
61
61
 
62
62
  const queryAllByRole = (
63
63
  instance: ReactTestInstance
64
- ): ((role: TextMatch, options?: ByRoleOptions) => Array<ReactTestInstance>) =>
64
+ ): QueryAllByQuery<TextMatch, ByRoleOptions> =>
65
65
  function queryAllByRoleFn(role, options) {
66
66
  return findAll(
67
67
  instance,
68
68
  (node) =>
69
69
  // run the cheapest checks first, and early exit to avoid unneeded computations
70
- typeof node.type === 'string' &&
71
70
  isAccessibilityElement(node) &&
72
71
  matchStringProp(node.props.accessibilityRole, role) &&
73
72
  matchAccessibleStateIfNeeded(node, options) &&
@@ -14,27 +14,22 @@ import type { CommonQueryOptions } from './options';
14
14
 
15
15
  type ByTestIdOptions = CommonQueryOptions & TextMatchOptions;
16
16
 
17
- const getNodeByTestId = (
17
+ const matchTestId = (
18
18
  node: ReactTestInstance,
19
- testID: TextMatch,
19
+ testId: TextMatch,
20
20
  options: TextMatchOptions = {}
21
21
  ) => {
22
22
  const { exact, normalizer } = options;
23
- return matches(testID, node.props.testID, normalizer, exact);
23
+ return matches(testId, node.props.testID, normalizer, exact);
24
24
  };
25
25
 
26
26
  const queryAllByTestId = (
27
27
  instance: ReactTestInstance
28
- ): ((
29
- testId: TextMatch,
30
- queryOptions?: ByTestIdOptions
31
- ) => Array<ReactTestInstance>) =>
28
+ ): QueryAllByQuery<TextMatch, ByTestIdOptions> =>
32
29
  function queryAllByTestIdFn(testId, queryOptions) {
33
30
  return findAll(
34
31
  instance,
35
- (node) =>
36
- typeof node.type === 'string' &&
37
- getNodeByTestId(node, testId, queryOptions),
32
+ (node) => matchTestId(node, testId, queryOptions),
38
33
  queryOptions
39
34
  );
40
35
  };
@@ -1,7 +1,6 @@
1
1
  import type { ReactTestInstance } from 'react-test-renderer';
2
- import { filterNodeByType } from '../helpers/filterNodeByType';
3
2
  import { findAll } from '../helpers/findAll';
4
- import { getHostComponentNames } from '../helpers/host-component-names';
3
+ import { isHostText } from '../helpers/host-component-names';
5
4
  import { matchTextContent } from '../helpers/matchers/matchTextContent';
6
5
  import { TextMatch, TextMatchOptions } from '../matches';
7
6
  import { makeQueries } from './makeQueries';
@@ -19,13 +18,11 @@ type ByTextOptions = CommonQueryOptions & TextMatchOptions;
19
18
 
20
19
  const queryAllByText = (
21
20
  instance: ReactTestInstance
22
- ): ((text: TextMatch, options?: ByTextOptions) => Array<ReactTestInstance>) =>
21
+ ): QueryAllByQuery<TextMatch, ByTextOptions> =>
23
22
  function queryAllByTextFn(text, options = {}) {
24
23
  return findAll(
25
24
  instance,
26
- (node) =>
27
- filterNodeByType(node, getHostComponentNames().text) &&
28
- matchTextContent(node, text, options),
25
+ (node) => isHostText(node) && matchTextContent(node, text, options),
29
26
  {
30
27
  ...options,
31
28
  matchDeepestOnly: true,
package/src/render.tsx CHANGED
@@ -117,7 +117,7 @@ function buildRenderResult(
117
117
  rerender: update, // alias for `update`
118
118
  toJSON: renderer.toJSON,
119
119
  debug: debug(instance, renderer),
120
- get root() {
120
+ get root(): ReactTestInstance {
121
121
  return getHostChildren(instance)[0];
122
122
  },
123
123
  UNSAFE_root: instance,