@testing-library/react-native 12.1.3 → 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 (194) hide show
  1. package/.eslintcache +1 -1
  2. package/.eslintignore +1 -0
  3. package/build/fireEvent.js +2 -5
  4. package/build/fireEvent.js.map +1 -1
  5. package/build/helpers/component-tree.d.ts +11 -5
  6. package/build/helpers/component-tree.js +5 -1
  7. package/build/helpers/component-tree.js.map +1 -1
  8. package/build/helpers/deprecation.js +1 -1
  9. package/build/helpers/deprecation.js.map +1 -1
  10. package/build/helpers/findAll.d.ts +2 -1
  11. package/build/helpers/findAll.js +2 -1
  12. package/build/helpers/findAll.js.map +1 -1
  13. package/build/helpers/host-component-names.d.ts +12 -0
  14. package/build/helpers/host-component-names.js +18 -0
  15. package/build/helpers/host-component-names.js.map +1 -1
  16. package/build/helpers/matchers/matchLabelText.js +1 -1
  17. package/build/helpers/matchers/matchLabelText.js.map +1 -1
  18. package/build/pure.d.ts +2 -0
  19. package/build/pure.js +7 -0
  20. package/build/pure.js.map +1 -1
  21. package/build/queries/a11yState.js +1 -1
  22. package/build/queries/a11yState.js.map +1 -1
  23. package/build/queries/a11yValue.js +1 -1
  24. package/build/queries/a11yValue.js.map +1 -1
  25. package/build/queries/displayValue.js +5 -6
  26. package/build/queries/displayValue.js.map +1 -1
  27. package/build/queries/hintText.js +1 -1
  28. package/build/queries/hintText.js.map +1 -1
  29. package/build/queries/labelText.js +1 -1
  30. package/build/queries/labelText.js.map +1 -1
  31. package/build/queries/placeholderText.js +3 -4
  32. package/build/queries/placeholderText.js.map +1 -1
  33. package/build/queries/role.js +1 -1
  34. package/build/queries/role.js.map +1 -1
  35. package/build/queries/testId.js +3 -3
  36. package/build/queries/testId.js.map +1 -1
  37. package/build/queries/text.js +1 -2
  38. package/build/queries/text.js.map +1 -1
  39. package/build/render.js.map +1 -1
  40. package/build/user-event/clear.d.ts +3 -0
  41. package/build/user-event/clear.js +41 -0
  42. package/build/user-event/clear.js.map +1 -0
  43. package/build/user-event/event-builder/common.d.ts +48 -6
  44. package/build/user-event/event-builder/common.js +37 -20
  45. package/build/user-event/event-builder/common.js.map +1 -1
  46. package/build/user-event/event-builder/index.d.ts +94 -0
  47. package/build/user-event/event-builder/index.js +3 -1
  48. package/build/user-event/event-builder/index.js.map +1 -1
  49. package/build/user-event/event-builder/text-input.d.ts +91 -0
  50. package/build/user-event/event-builder/text-input.js +117 -0
  51. package/build/user-event/event-builder/text-input.js.map +1 -0
  52. package/build/user-event/index.d.ts +5 -2
  53. package/build/user-event/index.js +8 -1
  54. package/build/user-event/index.js.map +1 -1
  55. package/build/user-event/press/index.d.ts +1 -1
  56. package/build/user-event/press/index.js +6 -0
  57. package/build/user-event/press/index.js.map +1 -1
  58. package/build/user-event/press/press.d.ts +3 -3
  59. package/build/user-event/press/press.js +54 -64
  60. package/build/user-event/press/press.js.map +1 -1
  61. package/build/user-event/setup/setup.d.ts +45 -3
  62. package/build/user-event/setup/setup.js +17 -2
  63. package/build/user-event/setup/setup.js.map +1 -1
  64. package/build/user-event/type/index.d.ts +1 -1
  65. package/build/user-event/type/index.js +6 -0
  66. package/build/user-event/type/index.js.map +1 -1
  67. package/build/user-event/type/parseKeys.d.ts +1 -0
  68. package/build/user-event/type/parseKeys.js +40 -0
  69. package/build/user-event/type/parseKeys.js.map +1 -0
  70. package/build/user-event/type/type.d.ts +7 -2
  71. package/build/user-event/type/type.js +70 -8
  72. package/build/user-event/type/type.js.map +1 -1
  73. package/build/user-event/utils/content-size.d.ts +15 -0
  74. package/build/user-event/utils/content-size.js +26 -0
  75. package/build/user-event/utils/content-size.js.map +1 -0
  76. package/build/user-event/utils/{events.d.ts → dispatch-event.d.ts} +2 -2
  77. package/build/user-event/utils/dispatch-event.js +36 -0
  78. package/build/user-event/utils/dispatch-event.js.map +1 -0
  79. package/build/user-event/utils/host-components.d.ts +2 -0
  80. package/build/user-event/utils/host-components.js +11 -0
  81. package/build/user-event/utils/host-components.js.map +1 -0
  82. package/build/user-event/utils/index.d.ts +5 -1
  83. package/build/user-event/utils/index.js +48 -4
  84. package/build/user-event/utils/index.js.map +1 -1
  85. package/build/user-event/utils/text-range.d.ts +4 -0
  86. package/build/user-event/utils/text-range.js +2 -0
  87. package/build/user-event/utils/text-range.js.map +1 -0
  88. package/build/user-event/utils/warn-about-real-timers.d.ts +1 -0
  89. package/build/user-event/utils/warn-about-real-timers.js +20 -0
  90. package/build/user-event/utils/warn-about-real-timers.js.map +1 -0
  91. package/examples/basic/.expo/README.md +15 -0
  92. package/examples/basic/.expo/packager-info.json +4 -0
  93. package/examples/basic/.expo/settings.json +10 -0
  94. package/examples/basic/__tests__/App.test.tsx +30 -12
  95. package/examples/basic/package.json +7 -7
  96. package/examples/basic/yarn.lock +7499 -0
  97. package/examples/react-navigation/README.md +2 -0
  98. package/examples/react-navigation/package.json +5 -5
  99. package/examples/react-navigation/yarn.lock +5018 -0
  100. package/examples/redux/README.md +5 -0
  101. package/examples/redux/package.json +7 -7
  102. package/examples/redux/yarn.lock +4819 -0
  103. package/experiments-app/.expo/packager-info.json +2 -2
  104. package/experiments-app/package.json +7 -9
  105. package/experiments-app/src/MainScreen.tsx +1 -0
  106. package/experiments-app/src/experiments.ts +20 -2
  107. package/experiments-app/src/screens/FlatListEvents.tsx +57 -0
  108. package/experiments-app/src/screens/ScrollViewEvents.tsx +65 -0
  109. package/experiments-app/src/screens/SectionListEvents.tsx +91 -0
  110. package/experiments-app/src/screens/TextInputEventPropagation.tsx +5 -17
  111. package/experiments-app/src/screens/TextInputEvents.tsx +13 -15
  112. package/experiments-app/src/utils/helpers.ts +13 -3
  113. package/experiments-app/yarn.lock +901 -1105
  114. package/experiments-rtl/.babelrc +8 -0
  115. package/experiments-rtl/.eslintrc.json +3 -0
  116. package/experiments-rtl/.gitignore +35 -0
  117. package/experiments-rtl/README.md +34 -0
  118. package/experiments-rtl/jest-setup.js +1 -0
  119. package/experiments-rtl/jest.config.js +4 -0
  120. package/experiments-rtl/next.config.js +4 -0
  121. package/experiments-rtl/package.json +38 -0
  122. package/experiments-rtl/postcss.config.js +6 -0
  123. package/experiments-rtl/public/next.svg +1 -0
  124. package/experiments-rtl/public/vercel.svg +1 -0
  125. package/experiments-rtl/src/app/__tests__/click.test.tsx +31 -0
  126. package/experiments-rtl/src/app/__tests__/managed-text-input.test.tsx +51 -0
  127. package/experiments-rtl/src/app/globals.css +27 -0
  128. package/experiments-rtl/src/app/layout.tsx +22 -0
  129. package/experiments-rtl/src/app/page.tsx +113 -0
  130. package/experiments-rtl/tailwind.config.ts +20 -0
  131. package/experiments-rtl/tsconfig.json +28 -0
  132. package/experiments-rtl/yarn.lock +5418 -0
  133. package/package.json +4 -2
  134. package/src/__tests__/act.test.tsx +4 -0
  135. package/src/fireEvent.ts +1 -5
  136. package/src/helpers/component-tree.ts +14 -9
  137. package/src/helpers/deprecation.ts +1 -1
  138. package/src/helpers/findAll.ts +6 -4
  139. package/src/helpers/host-component-names.tsx +21 -0
  140. package/src/helpers/matchers/matchLabelText.ts +0 -1
  141. package/src/pure.ts +2 -0
  142. package/src/queries/a11yState.ts +2 -6
  143. package/src/queries/a11yValue.ts +2 -6
  144. package/src/queries/displayValue.ts +7 -14
  145. package/src/queries/hintText.ts +2 -7
  146. package/src/queries/labelText.ts +1 -3
  147. package/src/queries/placeholderText.ts +6 -13
  148. package/src/queries/role.ts +1 -2
  149. package/src/queries/testId.ts +5 -10
  150. package/src/queries/text.ts +3 -6
  151. package/src/render.tsx +1 -1
  152. package/src/user-event/__tests__/__snapshots__/clear.test.tsx.snap +269 -0
  153. package/src/user-event/__tests__/clear.test.tsx +217 -0
  154. package/src/user-event/clear.ts +59 -0
  155. package/src/user-event/event-builder/common.ts +35 -19
  156. package/src/user-event/event-builder/index.ts +2 -0
  157. package/src/user-event/event-builder/text-input.ts +86 -0
  158. package/src/user-event/index.ts +7 -3
  159. package/src/user-event/press/__tests__/longPress.real-timers.test.tsx +4 -2
  160. package/src/user-event/press/__tests__/press.real-timers.test.tsx +4 -2
  161. package/src/user-event/press/__tests__/press.test.tsx +40 -5
  162. package/src/user-event/press/index.ts +1 -1
  163. package/src/user-event/press/press.ts +93 -64
  164. package/src/user-event/setup/setup.ts +54 -5
  165. package/src/user-event/type/__tests__/__snapshots__/type-managed.test.tsx.snap +339 -0
  166. package/src/user-event/type/__tests__/__snapshots__/type.test.tsx.snap +644 -2
  167. package/src/user-event/type/__tests__/parseKeys.test.ts +23 -0
  168. package/src/user-event/type/__tests__/type-managed.test.tsx +120 -0
  169. package/src/user-event/type/__tests__/type.test.tsx +299 -27
  170. package/src/user-event/type/index.ts +1 -1
  171. package/src/user-event/type/parseKeys.ts +41 -0
  172. package/src/user-event/type/type.ts +128 -10
  173. package/src/user-event/utils/__tests__/dispatch-event.test.tsx +41 -0
  174. package/src/user-event/utils/__tests__/wait.test.ts +0 -1
  175. package/src/user-event/utils/content-size.ts +25 -0
  176. package/src/user-event/utils/dispatch-event.ts +38 -0
  177. package/src/user-event/utils/host-components.ts +6 -0
  178. package/src/user-event/utils/index.ts +5 -1
  179. package/src/user-event/utils/text-range.ts +4 -0
  180. package/src/user-event/{press/utils/warnAboutRealTimers.ts → utils/warn-about-real-timers.ts} +8 -1
  181. package/website/docs/API.md +19 -25
  182. package/website/docs/Queries.md +64 -59
  183. package/website/docs/UserEvent.md +134 -9
  184. package/website/sidebars.js +1 -1
  185. package/build/helpers/filterNodeByType.d.ts +0 -3
  186. package/build/helpers/filterNodeByType.js +0 -9
  187. package/build/helpers/filterNodeByType.js.map +0 -1
  188. package/build/user-event/press/utils/warnAboutRealTimers.d.ts +0 -1
  189. package/build/user-event/press/utils/warnAboutRealTimers.js +0 -14
  190. package/build/user-event/press/utils/warnAboutRealTimers.js.map +0 -1
  191. package/build/user-event/utils/events.js +0 -44
  192. package/build/user-event/utils/events.js.map +0 -1
  193. package/src/helpers/filterNodeByType.ts +0 -7
  194. package/src/user-event/utils/events.ts +0 -54
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@testing-library/react-native",
3
- "version": "12.1.3",
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": [
@@ -50,3 +50,7 @@ test('should be able to await act', async () => {
50
50
  const result = await act(async () => {});
51
51
  expect(result).toBe(undefined);
52
52
  });
53
+
54
+ test('should be able to await act when promise rejects', async () => {
55
+ await expect(act(async () => Promise.reject('error'))).rejects.toBe('error');
56
+ });
package/src/fireEvent.ts CHANGED
@@ -8,15 +8,11 @@ import {
8
8
  } from 'react-native';
9
9
  import act from './act';
10
10
  import { isHostElement } from './helpers/component-tree';
11
- import { getHostComponentNames } from './helpers/host-component-names';
11
+ import { isHostTextInput } from './helpers/host-component-names';
12
12
  import { isPointerEventEnabled } from './helpers/pointer-events';
13
13
 
14
14
  type EventHandler = (...args: unknown[]) => unknown;
15
15
 
16
- const isHostTextInput = (element?: ReactTestInstance) => {
17
- return element?.type === getHostComponentNames().textInput;
18
- };
19
-
20
16
  export function isTouchResponder(element: ReactTestInstance) {
21
17
  if (!isHostElement(element)) {
22
18
  return false;
@@ -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(
@@ -37,7 +37,7 @@ function deprecateQuery<QueryFn extends (...args: any) => any>(
37
37
 
38
38
  const warned: { [functionName: string]: boolean } = {};
39
39
 
40
- // istambul ignore next: Occasionally used
40
+ /* istanbul ignore next: occasionally used */
41
41
  export function printDeprecationWarning(functionName: string) {
42
42
  if (warned[functionName]) {
43
43
  return;
@@ -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.`;
@@ -65,3 +66,23 @@ function getByTestId(instance: ReactTestInstance, testID: string) {
65
66
 
66
67
  return nodes[0];
67
68
  }
69
+
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 {
77
+ return element?.type === getHostComponentNames().text;
78
+ }
79
+
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 {
87
+ return element?.type === getHostComponentNames().textInput;
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
package/src/pure.ts CHANGED
@@ -14,6 +14,7 @@ export {
14
14
  export { getDefaultNormalizer } from './matches';
15
15
  export { renderHook } from './renderHook';
16
16
  export { screen } from './screen';
17
+ export { userEvent } from './user-event';
17
18
 
18
19
  export type {
19
20
  RenderOptions,
@@ -23,3 +24,4 @@ export type {
23
24
  } from './render';
24
25
  export type { RenderHookOptions, RenderHookResult } from './renderHook';
25
26
  export type { Config } from './config';
27
+ export type { UserEventConfig } from './user-event';
@@ -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,