@testing-library/react-native 14.0.0-alpha.6 → 14.0.0-beta.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 (214) hide show
  1. package/README.md +30 -30
  2. package/build/config.js +10 -4
  3. package/build/config.js.map +1 -1
  4. package/build/event-builder/base.d.ts +7 -0
  5. package/build/{user-event/event-builder → event-builder}/base.js +1 -1
  6. package/build/event-builder/base.js.map +1 -0
  7. package/build/event-builder/common.d.ts +152 -0
  8. package/build/event-builder/common.js +80 -0
  9. package/build/event-builder/common.js.map +1 -0
  10. package/build/event-builder/index.d.ts +3 -0
  11. package/build/event-builder/index.js +39 -0
  12. package/build/event-builder/index.js.map +1 -0
  13. package/build/event-builder/scroll.d.ts +56 -0
  14. package/build/event-builder/scroll.js +51 -0
  15. package/build/event-builder/scroll.js.map +1 -0
  16. package/build/event-builder/text.d.ts +162 -0
  17. package/build/event-builder/text.js +113 -0
  18. package/build/event-builder/text.js.map +1 -0
  19. package/build/event-handler.d.ts +0 -1
  20. package/build/event-handler.js +0 -1
  21. package/build/event-handler.js.map +1 -1
  22. package/build/fire-event.d.ts +6 -7
  23. package/build/fire-event.js +47 -28
  24. package/build/fire-event.js.map +1 -1
  25. package/build/helpers/accessibility.d.ts +18 -15
  26. package/build/helpers/accessibility.js +64 -47
  27. package/build/helpers/accessibility.js.map +1 -1
  28. package/build/helpers/component-tree.d.ts +9 -9
  29. package/build/helpers/component-tree.js +17 -17
  30. package/build/helpers/component-tree.js.map +1 -1
  31. package/build/helpers/errors.d.ts +1 -3
  32. package/build/helpers/errors.js +3 -36
  33. package/build/helpers/errors.js.map +1 -1
  34. package/build/helpers/find-all.d.ts +2 -2
  35. package/build/helpers/find-all.js +1 -1
  36. package/build/helpers/find-all.js.map +1 -1
  37. package/build/helpers/format-element.d.ts +5 -5
  38. package/build/helpers/format-element.js +9 -9
  39. package/build/helpers/format-element.js.map +1 -1
  40. package/build/helpers/host-component-names.d.ts +13 -13
  41. package/build/helpers/host-component-names.js +18 -18
  42. package/build/helpers/host-component-names.js.map +1 -1
  43. package/build/helpers/matchers/match-accessibility-state.d.ts +2 -2
  44. package/build/helpers/matchers/match-accessibility-state.js +6 -6
  45. package/build/helpers/matchers/match-accessibility-state.js.map +1 -1
  46. package/build/helpers/matchers/match-accessibility-value.d.ts +2 -2
  47. package/build/helpers/matchers/match-accessibility-value.js +2 -2
  48. package/build/helpers/matchers/match-accessibility-value.js.map +1 -1
  49. package/build/helpers/matchers/match-label-text.d.ts +2 -2
  50. package/build/helpers/matchers/match-label-text.js +2 -2
  51. package/build/helpers/matchers/match-label-text.js.map +1 -1
  52. package/build/helpers/matchers/match-text-content.d.ts +5 -5
  53. package/build/helpers/matchers/match-text-content.js +5 -5
  54. package/build/helpers/matchers/match-text-content.js.map +1 -1
  55. package/build/helpers/pointer-events.d.ts +2 -2
  56. package/build/helpers/pointer-events.js +4 -4
  57. package/build/helpers/pointer-events.js.map +1 -1
  58. package/build/helpers/text-content.d.ts +2 -2
  59. package/build/helpers/text-content.js +5 -5
  60. package/build/helpers/text-content.js.map +1 -1
  61. package/build/helpers/text-input.d.ts +3 -3
  62. package/build/helpers/text-input.js +6 -6
  63. package/build/helpers/text-input.js.map +1 -1
  64. package/build/helpers/validate-options.d.ts +9 -0
  65. package/build/helpers/validate-options.js +32 -0
  66. package/build/helpers/validate-options.js.map +1 -0
  67. package/build/matchers/to-be-busy.d.ts +2 -2
  68. package/build/matchers/to-be-busy.js +5 -5
  69. package/build/matchers/to-be-busy.js.map +1 -1
  70. package/build/matchers/to-be-checked.d.ts +2 -2
  71. package/build/matchers/to-be-checked.js +9 -9
  72. package/build/matchers/to-be-checked.js.map +1 -1
  73. package/build/matchers/to-be-disabled.d.ts +3 -3
  74. package/build/matchers/to-be-disabled.js +10 -10
  75. package/build/matchers/to-be-disabled.js.map +1 -1
  76. package/build/matchers/to-be-empty-element.d.ts +2 -2
  77. package/build/matchers/to-be-empty-element.js +4 -4
  78. package/build/matchers/to-be-empty-element.js.map +1 -1
  79. package/build/matchers/to-be-expanded.d.ts +3 -3
  80. package/build/matchers/to-be-expanded.js +10 -10
  81. package/build/matchers/to-be-expanded.js.map +1 -1
  82. package/build/matchers/to-be-on-the-screen.d.ts +2 -2
  83. package/build/matchers/to-be-on-the-screen.js +7 -7
  84. package/build/matchers/to-be-on-the-screen.js.map +1 -1
  85. package/build/matchers/to-be-partially-checked.d.ts +2 -2
  86. package/build/matchers/to-be-partially-checked.js +8 -8
  87. package/build/matchers/to-be-partially-checked.js.map +1 -1
  88. package/build/matchers/to-be-selected.d.ts +2 -2
  89. package/build/matchers/to-be-selected.js +4 -4
  90. package/build/matchers/to-be-selected.js.map +1 -1
  91. package/build/matchers/to-be-visible.d.ts +2 -2
  92. package/build/matchers/to-be-visible.js +12 -12
  93. package/build/matchers/to-be-visible.js.map +1 -1
  94. package/build/matchers/to-contain-element.d.ts +2 -2
  95. package/build/matchers/to-contain-element.js +6 -6
  96. package/build/matchers/to-contain-element.js.map +1 -1
  97. package/build/matchers/to-have-accessibility-value.d.ts +2 -2
  98. package/build/matchers/to-have-accessibility-value.js +6 -6
  99. package/build/matchers/to-have-accessibility-value.js.map +1 -1
  100. package/build/matchers/to-have-accessible-name.d.ts +2 -2
  101. package/build/matchers/to-have-accessible-name.js +5 -10
  102. package/build/matchers/to-have-accessible-name.js.map +1 -1
  103. package/build/matchers/to-have-display-value.d.ts +2 -2
  104. package/build/matchers/to-have-display-value.js +6 -6
  105. package/build/matchers/to-have-display-value.js.map +1 -1
  106. package/build/matchers/to-have-prop.d.ts +2 -2
  107. package/build/matchers/to-have-prop.js +6 -6
  108. package/build/matchers/to-have-prop.js.map +1 -1
  109. package/build/matchers/to-have-style.d.ts +2 -2
  110. package/build/matchers/to-have-style.js +5 -5
  111. package/build/matchers/to-have-style.js.map +1 -1
  112. package/build/matchers/to-have-text-content.d.ts +2 -2
  113. package/build/matchers/to-have-text-content.js +4 -4
  114. package/build/matchers/to-have-text-content.js.map +1 -1
  115. package/build/matchers/types.d.ts +20 -20
  116. package/build/matchers/types.js.map +1 -1
  117. package/build/matchers/utils.d.ts +4 -4
  118. package/build/matchers/utils.js +6 -6
  119. package/build/matchers/utils.js.map +1 -1
  120. package/build/native-state.d.ts +3 -3
  121. package/build/native-state.js +2 -2
  122. package/build/native-state.js.map +1 -1
  123. package/build/queries/display-value.d.ts +2 -2
  124. package/build/queries/display-value.js +12 -12
  125. package/build/queries/display-value.js.map +1 -1
  126. package/build/queries/hint-text.d.ts +2 -2
  127. package/build/queries/hint-text.js +11 -11
  128. package/build/queries/hint-text.js.map +1 -1
  129. package/build/queries/label-text.d.ts +2 -2
  130. package/build/queries/label-text.js +9 -9
  131. package/build/queries/label-text.js.map +1 -1
  132. package/build/queries/make-queries.d.ts +8 -8
  133. package/build/queries/make-queries.js +11 -11
  134. package/build/queries/make-queries.js.map +1 -1
  135. package/build/queries/placeholder-text.d.ts +2 -2
  136. package/build/queries/placeholder-text.js +11 -11
  137. package/build/queries/placeholder-text.js.map +1 -1
  138. package/build/queries/role.d.ts +2 -2
  139. package/build/queries/role.js +17 -27
  140. package/build/queries/role.js.map +1 -1
  141. package/build/queries/test-id.d.ts +2 -2
  142. package/build/queries/test-id.js +11 -11
  143. package/build/queries/test-id.js.map +1 -1
  144. package/build/queries/text.d.ts +2 -2
  145. package/build/queries/text.js +9 -9
  146. package/build/queries/text.js.map +1 -1
  147. package/build/render-hook.js +7 -1
  148. package/build/render-hook.js.map +1 -1
  149. package/build/render.d.ts +4 -5
  150. package/build/render.js +22 -6
  151. package/build/render.js.map +1 -1
  152. package/build/screen.js.map +1 -1
  153. package/build/test-utils/react-version-gates.d.ts +1 -0
  154. package/build/test-utils/react-version-gates.js +28 -0
  155. package/build/test-utils/react-version-gates.js.map +1 -0
  156. package/build/test-utils/timers.d.ts +2 -0
  157. package/build/test-utils/timers.js +20 -0
  158. package/build/test-utils/timers.js.map +1 -0
  159. package/build/types.d.ts +7 -0
  160. package/build/types.js.map +1 -1
  161. package/build/user-event/clear.d.ts +2 -2
  162. package/build/user-event/clear.js +13 -13
  163. package/build/user-event/clear.js.map +1 -1
  164. package/build/user-event/index.d.ts +7 -7
  165. package/build/user-event/index.js +6 -6
  166. package/build/user-event/index.js.map +1 -1
  167. package/build/user-event/paste.d.ts +2 -2
  168. package/build/user-event/paste.js +18 -18
  169. package/build/user-event/paste.js.map +1 -1
  170. package/build/user-event/press/press.d.ts +3 -3
  171. package/build/user-event/press/press.js +35 -35
  172. package/build/user-event/press/press.js.map +1 -1
  173. package/build/user-event/scroll/scroll-to.d.ts +2 -2
  174. package/build/user-event/scroll/scroll-to.js +20 -20
  175. package/build/user-event/scroll/scroll-to.js.map +1 -1
  176. package/build/user-event/setup/setup.d.ts +11 -11
  177. package/build/user-event/setup/setup.js +17 -3
  178. package/build/user-event/setup/setup.js.map +1 -1
  179. package/build/user-event/type/type.d.ts +3 -3
  180. package/build/user-event/type/type.js +27 -28
  181. package/build/user-event/type/type.js.map +1 -1
  182. package/build/user-event/utils/dispatch-event.d.ts +3 -3
  183. package/build/user-event/utils/dispatch-event.js +4 -4
  184. package/build/user-event/utils/dispatch-event.js.map +1 -1
  185. package/build/user-event/utils/index.d.ts +0 -1
  186. package/build/user-event/utils/index.js +0 -11
  187. package/build/user-event/utils/index.js.map +1 -1
  188. package/build/wait-for.js +8 -13
  189. package/build/wait-for.js.map +1 -1
  190. package/build/within.d.ts +3 -3
  191. package/build/within.js +10 -10
  192. package/build/within.js.map +1 -1
  193. package/package.json +38 -27
  194. package/build/react-versions.d.ts +0 -1
  195. package/build/react-versions.js +0 -14
  196. package/build/react-versions.js.map +0 -1
  197. package/build/tsconfig.release.tsbuildinfo +0 -1
  198. package/build/user-event/event-builder/base.d.ts +0 -3
  199. package/build/user-event/event-builder/base.js.map +0 -1
  200. package/build/user-event/event-builder/common.d.ts +0 -150
  201. package/build/user-event/event-builder/common.js +0 -77
  202. package/build/user-event/event-builder/common.js.map +0 -1
  203. package/build/user-event/event-builder/index.d.ts +0 -306
  204. package/build/user-event/event-builder/index.js +0 -15
  205. package/build/user-event/event-builder/index.js.map +0 -1
  206. package/build/user-event/event-builder/scroll-view.d.ts +0 -57
  207. package/build/user-event/event-builder/scroll-view.js +0 -53
  208. package/build/user-event/event-builder/scroll-view.js.map +0 -1
  209. package/build/user-event/event-builder/text-input.d.ts +0 -159
  210. package/build/user-event/event-builder/text-input.js +0 -105
  211. package/build/user-event/event-builder/text-input.js.map +0 -1
  212. package/build/user-event/utils/text-range.d.ts +0 -4
  213. package/build/user-event/utils/text-range.js +0 -6
  214. package/build/user-event/utils/text-range.js.map +0 -1
@@ -27,13 +27,13 @@ var _textContent = require("./text-content");
27
27
  var _textInput = require("./text-input");
28
28
  const accessibilityStateKeys = exports.accessibilityStateKeys = ['disabled', 'selected', 'checked', 'busy', 'expanded'];
29
29
  const accessibilityValueKeys = exports.accessibilityValueKeys = ['min', 'max', 'now', 'text'];
30
- function isHiddenFromAccessibility(element, {
30
+ function isHiddenFromAccessibility(instance, {
31
31
  cache
32
32
  } = {}) {
33
- if (element == null) {
33
+ if (instance == null) {
34
34
  return true;
35
35
  }
36
- let current = element;
36
+ let current = instance;
37
37
  while (current) {
38
38
  let isCurrentSubtreeInaccessible = cache?.get(current);
39
39
  if (isCurrentSubtreeInaccessible === undefined) {
@@ -50,54 +50,49 @@ function isHiddenFromAccessibility(element, {
50
50
 
51
51
  /** RTL-compatibility alias for `isHiddenFromAccessibility` */
52
52
  const isInaccessible = exports.isInaccessible = isHiddenFromAccessibility;
53
- function isSubtreeInaccessible(element) {
54
- // Null props can happen for React.Fragments
55
- if (element.props == null) {
56
- return false;
57
- }
58
-
53
+ function isSubtreeInaccessible(instance) {
59
54
  // See: https://reactnative.dev/docs/accessibility#aria-hidden
60
- if (element.props['aria-hidden']) {
55
+ if (instance.props['aria-hidden']) {
61
56
  return true;
62
57
  }
63
58
 
64
59
  // iOS: accessibilityElementsHidden
65
60
  // See: https://reactnative.dev/docs/accessibility#accessibilityelementshidden-ios
66
- if (element.props.accessibilityElementsHidden) {
61
+ if (instance.props.accessibilityElementsHidden) {
67
62
  return true;
68
63
  }
69
64
 
70
65
  // Android: importantForAccessibility
71
66
  // See: https://reactnative.dev/docs/accessibility#importantforaccessibility-android
72
- if (element.props.importantForAccessibility === 'no-hide-descendants') {
67
+ if (instance.props.importantForAccessibility === 'no-hide-descendants') {
73
68
  return true;
74
69
  }
75
70
 
76
71
  // Note that `opacity: 0` is not treated as inaccessible on iOS
77
- const flatStyle = _reactNative.StyleSheet.flatten(element.props.style) ?? {};
72
+ const flatStyle = _reactNative.StyleSheet.flatten(instance.props.style) ?? {};
78
73
  if (flatStyle.display === 'none') return true;
79
74
 
80
75
  // iOS: accessibilityViewIsModal or aria-modal
81
76
  // See: https://reactnative.dev/docs/accessibility#accessibilityviewismodal-ios
82
- const hostSiblings = (0, _componentTree.getHostSiblings)(element);
77
+ const hostSiblings = (0, _componentTree.getInstanceSiblings)(instance);
83
78
  if (hostSiblings.some(sibling => computeAriaModal(sibling))) {
84
79
  return true;
85
80
  }
86
81
  return false;
87
82
  }
88
- function isAccessibilityElement(element) {
89
- if (element == null) {
83
+ function isAccessibilityElement(instance) {
84
+ if (instance == null) {
90
85
  return false;
91
86
  }
92
87
 
93
88
  // https://github.com/facebook/react-native/blob/8dabed60f456e76a9e53273b601446f34de41fb5/packages/react-native/Libraries/Image/Image.ios.js#L172
94
- if ((0, _hostComponentNames.isHostImage)(element) && element.props.alt !== undefined) {
89
+ if ((0, _hostComponentNames.isHostImage)(instance) && instance.props.alt !== undefined) {
95
90
  return true;
96
91
  }
97
- if (element.props.accessible !== undefined) {
98
- return element.props.accessible;
92
+ if (instance.props.accessible !== undefined) {
93
+ return instance.props.accessible;
99
94
  }
100
- return (0, _hostComponentNames.isHostText)(element) || (0, _hostComponentNames.isHostTextInput)(element) || (0, _hostComponentNames.isHostSwitch)(element);
95
+ return (0, _hostComponentNames.isHostText)(instance) || (0, _hostComponentNames.isHostTextInput)(instance) || (0, _hostComponentNames.isHostSwitch)(instance);
101
96
  }
102
97
 
103
98
  /**
@@ -110,15 +105,15 @@ function isAccessibilityElement(element) {
110
105
  *
111
106
  * In all other cases this functions returns `none`.
112
107
  *
113
- * @param element
108
+ * @param instance
114
109
  * @returns
115
110
  */
116
- function getRole(element) {
117
- const explicitRole = element.props.role ?? element.props.accessibilityRole;
111
+ function getRole(instance) {
112
+ const explicitRole = instance.props.role ?? instance.props.accessibilityRole;
118
113
  if (explicitRole) {
119
114
  return normalizeRole(explicitRole);
120
115
  }
121
- if ((0, _hostComponentNames.isHostText)(element)) {
116
+ if ((0, _hostComponentNames.isHostText)(instance)) {
122
117
  return 'text';
123
118
  }
124
119
 
@@ -141,28 +136,28 @@ function normalizeRole(role) {
141
136
  }
142
137
  return role;
143
138
  }
144
- function computeAriaModal(element) {
145
- return element.props['aria-modal'] ?? element.props.accessibilityViewIsModal;
139
+ function computeAriaModal(instance) {
140
+ return instance.props['aria-modal'] ?? instance.props.accessibilityViewIsModal;
146
141
  }
147
- function computeAriaLabel(element) {
148
- const labelElementId = element.props['aria-labelledby'] ?? element.props.accessibilityLabelledBy;
142
+ function computeAriaLabel(instance) {
143
+ const labelElementId = instance.props['aria-labelledby'] ?? instance.props.accessibilityLabelledBy;
149
144
  if (labelElementId) {
150
- const container = (0, _componentTree.getContainerElement)(element);
151
- const labelElement = (0, _findAll.findAll)(container, node => (0, _componentTree.isHostElement)(node) && node.props.nativeID === labelElementId, {
145
+ const container = (0, _componentTree.getContainerInstance)(instance);
146
+ const labelInstance = (0, _findAll.findAll)(container, node => (0, _componentTree.isTestInstance)(node) && node.props.nativeID === labelElementId, {
152
147
  includeHiddenElements: true
153
148
  });
154
- if (labelElement.length > 0) {
155
- return (0, _textContent.getTextContent)(labelElement[0]);
149
+ if (labelInstance.length > 0) {
150
+ return (0, _textContent.getTextContent)(labelInstance[0]);
156
151
  }
157
152
  }
158
- const explicitLabel = element.props['aria-label'] ?? element.props.accessibilityLabel;
153
+ const explicitLabel = instance.props['aria-label'] ?? instance.props.accessibilityLabel;
159
154
  if (explicitLabel) {
160
155
  return explicitLabel;
161
156
  }
162
157
 
163
158
  //https://github.com/facebook/react-native/blob/8dabed60f456e76a9e53273b601446f34de41fb5/packages/react-native/Libraries/Image/Image.ios.js#L173
164
- if ((0, _hostComponentNames.isHostImage)(element) && element.props.alt) {
165
- return element.props.alt;
159
+ if ((0, _hostComponentNames.isHostImage)(instance) && instance.props.alt) {
160
+ return instance.props.alt;
166
161
  }
167
162
  return undefined;
168
163
  }
@@ -175,14 +170,14 @@ function computeAriaBusy({
175
170
  }
176
171
 
177
172
  // See: https://github.com/callstack/react-native-testing-library/wiki/Accessibility:-State#checked-state
178
- function computeAriaChecked(element) {
173
+ function computeAriaChecked(instance) {
179
174
  const {
180
175
  props
181
- } = element;
182
- if ((0, _hostComponentNames.isHostSwitch)(element)) {
176
+ } = instance;
177
+ if ((0, _hostComponentNames.isHostSwitch)(instance)) {
183
178
  return props.value;
184
179
  }
185
- const role = getRole(element);
180
+ const role = getRole(instance);
186
181
  if (!rolesSupportingCheckedState[role]) {
187
182
  return undefined;
188
183
  }
@@ -190,14 +185,14 @@ function computeAriaChecked(element) {
190
185
  }
191
186
 
192
187
  // See: https://github.com/callstack/react-native-testing-library/wiki/Accessibility:-State#disabled-state
193
- function computeAriaDisabled(element) {
194
- if ((0, _hostComponentNames.isHostTextInput)(element) && !(0, _textInput.isEditableTextInput)(element)) {
188
+ function computeAriaDisabled(instance) {
189
+ if ((0, _hostComponentNames.isHostTextInput)(instance) && !(0, _textInput.isEditableTextInput)(instance)) {
195
190
  return true;
196
191
  }
197
192
  const {
198
193
  props
199
- } = element;
200
- if ((0, _hostComponentNames.isHostText)(element) && props.disabled) {
194
+ } = instance;
195
+ if ((0, _hostComponentNames.isHostText)(instance) && props.disabled) {
201
196
  return true;
202
197
  }
203
198
  return props['aria-disabled'] ?? props.accessibilityState?.disabled ?? false;
@@ -216,14 +211,14 @@ function computeAriaSelected({
216
211
  }) {
217
212
  return props['aria-selected'] ?? props.accessibilityState?.selected ?? false;
218
213
  }
219
- function computeAriaValue(element) {
214
+ function computeAriaValue(instance) {
220
215
  const {
221
216
  accessibilityValue,
222
217
  'aria-valuemax': ariaValueMax,
223
218
  'aria-valuemin': ariaValueMin,
224
219
  'aria-valuenow': ariaValueNow,
225
220
  'aria-valuetext': ariaValueText
226
- } = element.props;
221
+ } = instance.props;
227
222
  return {
228
223
  max: ariaValueMax ?? accessibilityValue?.max,
229
224
  min: ariaValueMin ?? accessibilityValue?.min,
@@ -231,8 +226,30 @@ function computeAriaValue(element) {
231
226
  text: ariaValueText ?? accessibilityValue?.text
232
227
  };
233
228
  }
234
- function computeAccessibleName(element) {
235
- return computeAriaLabel(element) ?? (0, _textContent.getTextContent)(element);
229
+ function computeAccessibleName(instance, options) {
230
+ const label = computeAriaLabel(instance);
231
+ if (label) {
232
+ return label;
233
+ }
234
+ if ((0, _hostComponentNames.isHostTextInput)(instance) && instance.props.placeholder && options?.root !== false) {
235
+ return instance.props.placeholder;
236
+ }
237
+ const parts = [];
238
+ for (const child of instance.children) {
239
+ if (typeof child === 'string') {
240
+ if (child) {
241
+ parts.push(child);
242
+ }
243
+ } else {
244
+ const childLabel = computeAccessibleName(child, {
245
+ root: false
246
+ });
247
+ if (childLabel) {
248
+ parts.push(childLabel);
249
+ }
250
+ }
251
+ }
252
+ return parts.join(' ');
236
253
  }
237
254
  const rolesSupportingCheckedState = exports.rolesSupportingCheckedState = {
238
255
  checkbox: true,
@@ -1 +1 @@
1
- {"version":3,"file":"accessibility.js","names":["_reactNative","require","_componentTree","_findAll","_hostComponentNames","_textContent","_textInput","accessibilityStateKeys","exports","accessibilityValueKeys","isHiddenFromAccessibility","element","cache","current","isCurrentSubtreeInaccessible","get","undefined","isSubtreeInaccessible","set","parent","isInaccessible","props","accessibilityElementsHidden","importantForAccessibility","flatStyle","StyleSheet","flatten","style","display","hostSiblings","getHostSiblings","some","sibling","computeAriaModal","isAccessibilityElement","isHostImage","alt","accessible","isHostText","isHostTextInput","isHostSwitch","getRole","explicitRole","role","accessibilityRole","normalizeRole","accessibilityViewIsModal","computeAriaLabel","labelElementId","accessibilityLabelledBy","container","getContainerElement","labelElement","findAll","node","isHostElement","nativeID","includeHiddenElements","length","getTextContent","explicitLabel","accessibilityLabel","computeAriaBusy","accessibilityState","busy","computeAriaChecked","value","rolesSupportingCheckedState","checked","computeAriaDisabled","isEditableTextInput","disabled","computeAriaExpanded","expanded","computeAriaSelected","selected","computeAriaValue","accessibilityValue","ariaValueMax","ariaValueMin","ariaValueNow","ariaValueText","max","min","now","text","computeAccessibleName","checkbox","radio","switch"],"sources":["../../src/helpers/accessibility.ts"],"sourcesContent":["import type { AccessibilityRole, AccessibilityState, AccessibilityValue, Role } from 'react-native';\nimport { StyleSheet } from 'react-native';\nimport type { HostElement } from 'test-renderer';\n\nimport { getContainerElement, getHostSiblings, isHostElement } from './component-tree';\nimport { findAll } from './find-all';\nimport { isHostImage, isHostSwitch, isHostText, isHostTextInput } from './host-component-names';\nimport { getTextContent } from './text-content';\nimport { isEditableTextInput } from './text-input';\n\ntype IsInaccessibleOptions = {\n cache?: WeakMap<HostElement, boolean>;\n};\n\nexport const accessibilityStateKeys: (keyof AccessibilityState)[] = [\n 'disabled',\n 'selected',\n 'checked',\n 'busy',\n 'expanded',\n];\n\nexport const accessibilityValueKeys: (keyof AccessibilityValue)[] = ['min', 'max', 'now', 'text'];\n\nexport function isHiddenFromAccessibility(\n element: HostElement | null,\n { cache }: IsInaccessibleOptions = {},\n): boolean {\n if (element == null) {\n return true;\n }\n\n let current: HostElement | null = element;\n while (current) {\n let isCurrentSubtreeInaccessible = cache?.get(current);\n\n if (isCurrentSubtreeInaccessible === undefined) {\n isCurrentSubtreeInaccessible = isSubtreeInaccessible(current);\n cache?.set(current, isCurrentSubtreeInaccessible);\n }\n\n if (isCurrentSubtreeInaccessible) {\n return true;\n }\n\n current = current.parent;\n }\n\n return false;\n}\n\n/** RTL-compatibility alias for `isHiddenFromAccessibility` */\nexport const isInaccessible = isHiddenFromAccessibility;\n\nfunction isSubtreeInaccessible(element: HostElement): boolean {\n // Null props can happen for React.Fragments\n if (element.props == null) {\n return false;\n }\n\n // See: https://reactnative.dev/docs/accessibility#aria-hidden\n if (element.props['aria-hidden']) {\n return true;\n }\n\n // iOS: accessibilityElementsHidden\n // See: https://reactnative.dev/docs/accessibility#accessibilityelementshidden-ios\n if (element.props.accessibilityElementsHidden) {\n return true;\n }\n\n // Android: importantForAccessibility\n // See: https://reactnative.dev/docs/accessibility#importantforaccessibility-android\n if (element.props.importantForAccessibility === 'no-hide-descendants') {\n return true;\n }\n\n // Note that `opacity: 0` is not treated as inaccessible on iOS\n const flatStyle = StyleSheet.flatten(element.props.style) ?? {};\n if (flatStyle.display === 'none') return true;\n\n // iOS: accessibilityViewIsModal or aria-modal\n // See: https://reactnative.dev/docs/accessibility#accessibilityviewismodal-ios\n const hostSiblings = getHostSiblings(element);\n if (hostSiblings.some((sibling) => computeAriaModal(sibling))) {\n return true;\n }\n\n return false;\n}\n\nexport function isAccessibilityElement(element: HostElement | null): boolean {\n if (element == null) {\n return false;\n }\n\n // https://github.com/facebook/react-native/blob/8dabed60f456e76a9e53273b601446f34de41fb5/packages/react-native/Libraries/Image/Image.ios.js#L172\n if (isHostImage(element) && element.props.alt !== undefined) {\n return true;\n }\n\n if (element.props.accessible !== undefined) {\n return element.props.accessible;\n }\n\n return isHostText(element) || isHostTextInput(element) || isHostSwitch(element);\n}\n\n/**\n * Returns the accessibility role for given element. It will return explicit\n * role from either `role` or `accessibilityRole` props if set.\n *\n * If explicit role is not available, it would try to return default element\n * role:\n * - `text` for `Text` elements\n *\n * In all other cases this functions returns `none`.\n *\n * @param element\n * @returns\n */\nexport function getRole(element: HostElement): Role | AccessibilityRole {\n const explicitRole = element.props.role ?? element.props.accessibilityRole;\n if (explicitRole) {\n return normalizeRole(explicitRole);\n }\n\n if (isHostText(element)) {\n return 'text';\n }\n\n // Note: host Image elements report \"image\" role in screen reader only on Android, but not on iOS.\n // It's better to require explicit role for Image elements.\n\n return 'none';\n}\n\n/**\n * There are some duplications between (ARIA) `Role` and `AccessibilityRole` types.\n * Resolve them by using ARIA `Role` type where possible.\n *\n * @param role Role to normalize\n * @returns Normalized role\n */\nexport function normalizeRole(role: string): Role | AccessibilityRole {\n if (role === 'image') {\n return 'img';\n }\n\n return role as Role | AccessibilityRole;\n}\n\nexport function computeAriaModal(element: HostElement): boolean | undefined {\n return element.props['aria-modal'] ?? element.props.accessibilityViewIsModal;\n}\n\nexport function computeAriaLabel(element: HostElement): string | undefined {\n const labelElementId = element.props['aria-labelledby'] ?? element.props.accessibilityLabelledBy;\n if (labelElementId) {\n const container = getContainerElement(element);\n const labelElement = findAll(\n container,\n (node) => isHostElement(node) && node.props.nativeID === labelElementId,\n { includeHiddenElements: true },\n );\n if (labelElement.length > 0) {\n return getTextContent(labelElement[0]);\n }\n }\n\n const explicitLabel = element.props['aria-label'] ?? element.props.accessibilityLabel;\n if (explicitLabel) {\n return explicitLabel;\n }\n\n //https://github.com/facebook/react-native/blob/8dabed60f456e76a9e53273b601446f34de41fb5/packages/react-native/Libraries/Image/Image.ios.js#L173\n if (isHostImage(element) && element.props.alt) {\n return element.props.alt;\n }\n\n return undefined;\n}\n\n// See: https://github.com/callstack/react-native-testing-library/wiki/Accessibility:-State#busy-state\nexport function computeAriaBusy({ props }: HostElement): boolean {\n return props['aria-busy'] ?? props.accessibilityState?.busy ?? false;\n}\n\n// See: https://github.com/callstack/react-native-testing-library/wiki/Accessibility:-State#checked-state\nexport function computeAriaChecked(element: HostElement): AccessibilityState['checked'] {\n const { props } = element;\n\n if (isHostSwitch(element)) {\n return props.value;\n }\n\n const role = getRole(element);\n if (!rolesSupportingCheckedState[role]) {\n return undefined;\n }\n\n return props['aria-checked'] ?? props.accessibilityState?.checked;\n}\n\n// See: https://github.com/callstack/react-native-testing-library/wiki/Accessibility:-State#disabled-state\nexport function computeAriaDisabled(element: HostElement): boolean {\n if (isHostTextInput(element) && !isEditableTextInput(element)) {\n return true;\n }\n\n const { props } = element;\n\n if (isHostText(element) && props.disabled) {\n return true;\n }\n\n return props['aria-disabled'] ?? props.accessibilityState?.disabled ?? false;\n}\n\n// See: https://github.com/callstack/react-native-testing-library/wiki/Accessibility:-State#expanded-state\nexport function computeAriaExpanded({ props }: HostElement): boolean | undefined {\n return props['aria-expanded'] ?? props.accessibilityState?.expanded;\n}\n\n// See: https://github.com/callstack/react-native-testing-library/wiki/Accessibility:-State#selected-state\nexport function computeAriaSelected({ props }: HostElement): boolean {\n return props['aria-selected'] ?? props.accessibilityState?.selected ?? false;\n}\n\nexport function computeAriaValue(element: HostElement): AccessibilityValue {\n const {\n accessibilityValue,\n 'aria-valuemax': ariaValueMax,\n 'aria-valuemin': ariaValueMin,\n 'aria-valuenow': ariaValueNow,\n 'aria-valuetext': ariaValueText,\n } = element.props;\n\n return {\n max: ariaValueMax ?? accessibilityValue?.max,\n min: ariaValueMin ?? accessibilityValue?.min,\n now: ariaValueNow ?? accessibilityValue?.now,\n text: ariaValueText ?? accessibilityValue?.text,\n };\n}\n\nexport function computeAccessibleName(element: HostElement): string | undefined {\n return computeAriaLabel(element) ?? getTextContent(element);\n}\n\ntype RoleSupportMap = Partial<Record<Role | AccessibilityRole, true>>;\n\nexport const rolesSupportingCheckedState: RoleSupportMap = {\n checkbox: true,\n radio: true,\n switch: true,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"accessibility.js","names":["_reactNative","require","_componentTree","_findAll","_hostComponentNames","_textContent","_textInput","accessibilityStateKeys","exports","accessibilityValueKeys","isHiddenFromAccessibility","instance","cache","current","isCurrentSubtreeInaccessible","get","undefined","isSubtreeInaccessible","set","parent","isInaccessible","props","accessibilityElementsHidden","importantForAccessibility","flatStyle","StyleSheet","flatten","style","display","hostSiblings","getInstanceSiblings","some","sibling","computeAriaModal","isAccessibilityElement","isHostImage","alt","accessible","isHostText","isHostTextInput","isHostSwitch","getRole","explicitRole","role","accessibilityRole","normalizeRole","accessibilityViewIsModal","computeAriaLabel","labelElementId","accessibilityLabelledBy","container","getContainerInstance","labelInstance","findAll","node","isTestInstance","nativeID","includeHiddenElements","length","getTextContent","explicitLabel","accessibilityLabel","computeAriaBusy","accessibilityState","busy","computeAriaChecked","value","rolesSupportingCheckedState","checked","computeAriaDisabled","isEditableTextInput","disabled","computeAriaExpanded","expanded","computeAriaSelected","selected","computeAriaValue","accessibilityValue","ariaValueMax","ariaValueMin","ariaValueNow","ariaValueText","max","min","now","text","computeAccessibleName","options","label","placeholder","root","parts","child","children","push","childLabel","join","checkbox","radio","switch"],"sources":["../../src/helpers/accessibility.ts"],"sourcesContent":["import type { AccessibilityRole, AccessibilityState, AccessibilityValue, Role } from 'react-native';\nimport { StyleSheet } from 'react-native';\nimport type { TestInstance } from 'test-renderer';\n\nimport { getContainerInstance, getInstanceSiblings, isTestInstance } from './component-tree';\nimport { findAll } from './find-all';\nimport { isHostImage, isHostSwitch, isHostText, isHostTextInput } from './host-component-names';\nimport { getTextContent } from './text-content';\nimport { isEditableTextInput } from './text-input';\n\ntype IsInaccessibleOptions = {\n cache?: WeakMap<TestInstance, boolean>;\n};\n\nexport const accessibilityStateKeys: (keyof AccessibilityState)[] = [\n 'disabled',\n 'selected',\n 'checked',\n 'busy',\n 'expanded',\n];\n\nexport const accessibilityValueKeys: (keyof AccessibilityValue)[] = ['min', 'max', 'now', 'text'];\n\nexport function isHiddenFromAccessibility(\n instance: TestInstance | null,\n { cache }: IsInaccessibleOptions = {},\n): boolean {\n if (instance == null) {\n return true;\n }\n\n let current: TestInstance | null = instance;\n while (current) {\n let isCurrentSubtreeInaccessible = cache?.get(current);\n\n if (isCurrentSubtreeInaccessible === undefined) {\n isCurrentSubtreeInaccessible = isSubtreeInaccessible(current);\n cache?.set(current, isCurrentSubtreeInaccessible);\n }\n\n if (isCurrentSubtreeInaccessible) {\n return true;\n }\n\n current = current.parent;\n }\n\n return false;\n}\n\n/** RTL-compatibility alias for `isHiddenFromAccessibility` */\nexport const isInaccessible = isHiddenFromAccessibility;\n\nfunction isSubtreeInaccessible(instance: TestInstance): boolean {\n // See: https://reactnative.dev/docs/accessibility#aria-hidden\n if (instance.props['aria-hidden']) {\n return true;\n }\n\n // iOS: accessibilityElementsHidden\n // See: https://reactnative.dev/docs/accessibility#accessibilityelementshidden-ios\n if (instance.props.accessibilityElementsHidden) {\n return true;\n }\n\n // Android: importantForAccessibility\n // See: https://reactnative.dev/docs/accessibility#importantforaccessibility-android\n if (instance.props.importantForAccessibility === 'no-hide-descendants') {\n return true;\n }\n\n // Note that `opacity: 0` is not treated as inaccessible on iOS\n const flatStyle = StyleSheet.flatten(instance.props.style) ?? {};\n if (flatStyle.display === 'none') return true;\n\n // iOS: accessibilityViewIsModal or aria-modal\n // See: https://reactnative.dev/docs/accessibility#accessibilityviewismodal-ios\n const hostSiblings = getInstanceSiblings(instance);\n if (hostSiblings.some((sibling) => computeAriaModal(sibling))) {\n return true;\n }\n\n return false;\n}\n\nexport function isAccessibilityElement(instance: TestInstance | null): boolean {\n if (instance == null) {\n return false;\n }\n\n // https://github.com/facebook/react-native/blob/8dabed60f456e76a9e53273b601446f34de41fb5/packages/react-native/Libraries/Image/Image.ios.js#L172\n if (isHostImage(instance) && instance.props.alt !== undefined) {\n return true;\n }\n\n if (instance.props.accessible !== undefined) {\n return instance.props.accessible;\n }\n\n return isHostText(instance) || isHostTextInput(instance) || isHostSwitch(instance);\n}\n\n/**\n * Returns the accessibility role for given element. It will return explicit\n * role from either `role` or `accessibilityRole` props if set.\n *\n * If explicit role is not available, it would try to return default element\n * role:\n * - `text` for `Text` elements\n *\n * In all other cases this functions returns `none`.\n *\n * @param instance\n * @returns\n */\nexport function getRole(instance: TestInstance): Role | AccessibilityRole {\n const explicitRole = instance.props.role ?? instance.props.accessibilityRole;\n if (explicitRole) {\n return normalizeRole(explicitRole);\n }\n\n if (isHostText(instance)) {\n return 'text';\n }\n\n // Note: host Image elements report \"image\" role in screen reader only on Android, but not on iOS.\n // It's better to require explicit role for Image elements.\n\n return 'none';\n}\n\n/**\n * There are some duplications between (ARIA) `Role` and `AccessibilityRole` types.\n * Resolve them by using ARIA `Role` type where possible.\n *\n * @param role Role to normalize\n * @returns Normalized role\n */\nexport function normalizeRole(role: string): Role | AccessibilityRole {\n if (role === 'image') {\n return 'img';\n }\n\n return role as Role | AccessibilityRole;\n}\n\nexport function computeAriaModal(instance: TestInstance): boolean | undefined {\n return instance.props['aria-modal'] ?? instance.props.accessibilityViewIsModal;\n}\n\nexport function computeAriaLabel(instance: TestInstance): string | undefined {\n const labelElementId =\n instance.props['aria-labelledby'] ?? instance.props.accessibilityLabelledBy;\n if (labelElementId) {\n const container = getContainerInstance(instance);\n const labelInstance = findAll(\n container,\n (node) => isTestInstance(node) && node.props.nativeID === labelElementId,\n { includeHiddenElements: true },\n );\n if (labelInstance.length > 0) {\n return getTextContent(labelInstance[0]);\n }\n }\n\n const explicitLabel = instance.props['aria-label'] ?? instance.props.accessibilityLabel;\n if (explicitLabel) {\n return explicitLabel;\n }\n\n //https://github.com/facebook/react-native/blob/8dabed60f456e76a9e53273b601446f34de41fb5/packages/react-native/Libraries/Image/Image.ios.js#L173\n if (isHostImage(instance) && instance.props.alt) {\n return instance.props.alt;\n }\n\n return undefined;\n}\n\n// See: https://github.com/callstack/react-native-testing-library/wiki/Accessibility:-State#busy-state\nexport function computeAriaBusy({ props }: TestInstance): boolean {\n return props['aria-busy'] ?? props.accessibilityState?.busy ?? false;\n}\n\n// See: https://github.com/callstack/react-native-testing-library/wiki/Accessibility:-State#checked-state\nexport function computeAriaChecked(instance: TestInstance): AccessibilityState['checked'] {\n const { props } = instance;\n\n if (isHostSwitch(instance)) {\n return props.value;\n }\n\n const role = getRole(instance);\n if (!rolesSupportingCheckedState[role]) {\n return undefined;\n }\n\n return props['aria-checked'] ?? props.accessibilityState?.checked;\n}\n\n// See: https://github.com/callstack/react-native-testing-library/wiki/Accessibility:-State#disabled-state\nexport function computeAriaDisabled(instance: TestInstance): boolean {\n if (isHostTextInput(instance) && !isEditableTextInput(instance)) {\n return true;\n }\n\n const { props } = instance;\n\n if (isHostText(instance) && props.disabled) {\n return true;\n }\n\n return props['aria-disabled'] ?? props.accessibilityState?.disabled ?? false;\n}\n\n// See: https://github.com/callstack/react-native-testing-library/wiki/Accessibility:-State#expanded-state\nexport function computeAriaExpanded({ props }: TestInstance): boolean | undefined {\n return props['aria-expanded'] ?? props.accessibilityState?.expanded;\n}\n\n// See: https://github.com/callstack/react-native-testing-library/wiki/Accessibility:-State#selected-state\nexport function computeAriaSelected({ props }: TestInstance): boolean {\n return props['aria-selected'] ?? props.accessibilityState?.selected ?? false;\n}\n\nexport function computeAriaValue(instance: TestInstance): AccessibilityValue {\n const {\n accessibilityValue,\n 'aria-valuemax': ariaValueMax,\n 'aria-valuemin': ariaValueMin,\n 'aria-valuenow': ariaValueNow,\n 'aria-valuetext': ariaValueText,\n } = instance.props;\n\n return {\n max: ariaValueMax ?? accessibilityValue?.max,\n min: ariaValueMin ?? accessibilityValue?.min,\n now: ariaValueNow ?? accessibilityValue?.now,\n text: ariaValueText ?? accessibilityValue?.text,\n };\n}\n\ntype ComputeAccessibleNameOptions = {\n root?: boolean;\n};\n\nexport function computeAccessibleName(\n instance: TestInstance,\n options?: ComputeAccessibleNameOptions,\n): string | undefined {\n const label = computeAriaLabel(instance);\n if (label) {\n return label;\n }\n\n if (isHostTextInput(instance) && instance.props.placeholder && options?.root !== false) {\n return instance.props.placeholder;\n }\n\n const parts = [];\n for (const child of instance.children) {\n if (typeof child === 'string') {\n if (child) {\n parts.push(child);\n }\n } else {\n const childLabel = computeAccessibleName(child, { root: false });\n if (childLabel) {\n parts.push(childLabel);\n }\n }\n }\n\n return parts.join(' ');\n}\n\ntype RoleSupportMap = Partial<Record<Role | AccessibilityRole, true>>;\n\nexport const rolesSupportingCheckedState: RoleSupportMap = {\n checkbox: true,\n radio: true,\n switch: true,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,19 +1,19 @@
1
- import type { HostElement, HostNode } from 'test-renderer';
1
+ import type { TestInstance, TestNode } from 'test-renderer';
2
2
  /**
3
3
  * Checks if the given element is a host element.
4
- * @param element The element to check.
4
+ * @param node The element to check.
5
5
  */
6
- export declare function isHostElement(element?: HostNode | null): element is HostElement;
7
- export declare function isElementMounted(element: HostElement): boolean;
6
+ export declare function isTestInstance(node?: TestNode | null): node is TestInstance;
7
+ export declare function isInstanceMounted(instance: TestInstance): boolean;
8
8
  /**
9
9
  * Returns host siblings for given element.
10
- * @param element The element start traversing from.
10
+ * @param instance The element start traversing from.
11
11
  */
12
- export declare function getHostSiblings(element: HostElement): HostElement[];
12
+ export declare function getInstanceSiblings(instance: TestInstance): TestInstance[];
13
13
  /**
14
- * Returns the containerelement of the tree.
14
+ * Returns the container element of the tree.
15
15
  *
16
- * @param element The element start traversing from.
16
+ * @param instance The element start traversing from.
17
17
  * @returns The container element of the tree.
18
18
  */
19
- export declare function getContainerElement(element: HostElement): HostElement;
19
+ export declare function getContainerInstance(instance: TestInstance): TestInstance;
@@ -3,43 +3,43 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getContainerElement = getContainerElement;
7
- exports.getHostSiblings = getHostSiblings;
8
- exports.isElementMounted = isElementMounted;
9
- exports.isHostElement = isHostElement;
6
+ exports.getContainerInstance = getContainerInstance;
7
+ exports.getInstanceSiblings = getInstanceSiblings;
8
+ exports.isInstanceMounted = isInstanceMounted;
9
+ exports.isTestInstance = isTestInstance;
10
10
  var _screen = require("../screen");
11
11
  /**
12
12
  * Checks if the given element is a host element.
13
- * @param element The element to check.
13
+ * @param node The element to check.
14
14
  */
15
- function isHostElement(element) {
16
- return typeof element !== 'string' && typeof element?.type === 'string';
15
+ function isTestInstance(node) {
16
+ return typeof node !== 'string' && typeof node?.type === 'string';
17
17
  }
18
- function isElementMounted(element) {
19
- return getContainerElement(element) === _screen.screen.container;
18
+ function isInstanceMounted(instance) {
19
+ return getContainerInstance(instance) === _screen.screen.container;
20
20
  }
21
21
 
22
22
  /**
23
23
  * Returns host siblings for given element.
24
- * @param element The element start traversing from.
24
+ * @param instance The element start traversing from.
25
25
  */
26
- function getHostSiblings(element) {
26
+ function getInstanceSiblings(instance) {
27
27
  // Should not happen
28
- const parent = element.parent;
28
+ const parent = instance.parent;
29
29
  if (!parent) {
30
30
  return [];
31
31
  }
32
- return parent.children.filter(sibling => typeof sibling !== 'string' && sibling !== element);
32
+ return parent.children.filter(sibling => typeof sibling !== 'string' && sibling !== instance);
33
33
  }
34
34
 
35
35
  /**
36
- * Returns the containerelement of the tree.
36
+ * Returns the container element of the tree.
37
37
  *
38
- * @param element The element start traversing from.
38
+ * @param instance The element start traversing from.
39
39
  * @returns The container element of the tree.
40
40
  */
41
- function getContainerElement(element) {
42
- let current = element;
41
+ function getContainerInstance(instance) {
42
+ let current = instance;
43
43
  while (current.parent) {
44
44
  current = current.parent;
45
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"component-tree.js","names":["_screen","require","isHostElement","element","type","isElementMounted","getContainerElement","screen","container","getHostSiblings","parent","children","filter","sibling","current"],"sources":["../../src/helpers/component-tree.ts"],"sourcesContent":["import type { HostElement, HostNode } from 'test-renderer';\n\nimport { screen } from '../screen';\n\n/**\n * Checks if the given element is a host element.\n * @param element The element to check.\n */\nexport function isHostElement(element?: HostNode | null): element is HostElement {\n return typeof element !== 'string' && typeof element?.type === 'string';\n}\n\nexport function isElementMounted(element: HostElement) {\n return getContainerElement(element) === screen.container;\n}\n\n/**\n * Returns host siblings for given element.\n * @param element The element start traversing from.\n */\nexport function getHostSiblings(element: HostElement): HostElement[] {\n // Should not happen\n const parent = element.parent;\n if (!parent) {\n return [];\n }\n\n return parent.children.filter(\n (sibling) => typeof sibling !== 'string' && sibling !== element,\n ) as HostElement[];\n}\n\n/**\n * Returns the containerelement of the tree.\n *\n * @param element The element start traversing from.\n * @returns The container element of the tree.\n */\nexport function getContainerElement(element: HostElement) {\n let current = element;\n while (current.parent) {\n current = current.parent;\n }\n\n return current;\n}\n"],"mappings":";;;;;;;;;AAEA,IAAAA,OAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACO,SAASC,aAAaA,CAACC,OAAyB,EAA0B;EAC/E,OAAO,OAAOA,OAAO,KAAK,QAAQ,IAAI,OAAOA,OAAO,EAAEC,IAAI,KAAK,QAAQ;AACzE;AAEO,SAASC,gBAAgBA,CAACF,OAAoB,EAAE;EACrD,OAAOG,mBAAmB,CAACH,OAAO,CAAC,KAAKI,cAAM,CAACC,SAAS;AAC1D;;AAEA;AACA;AACA;AACA;AACO,SAASC,eAAeA,CAACN,OAAoB,EAAiB;EACnE;EACA,MAAMO,MAAM,GAAGP,OAAO,CAACO,MAAM;EAC7B,IAAI,CAACA,MAAM,EAAE;IACX,OAAO,EAAE;EACX;EAEA,OAAOA,MAAM,CAACC,QAAQ,CAACC,MAAM,CAC1BC,OAAO,IAAK,OAAOA,OAAO,KAAK,QAAQ,IAAIA,OAAO,KAAKV,OAC1D,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,mBAAmBA,CAACH,OAAoB,EAAE;EACxD,IAAIW,OAAO,GAAGX,OAAO;EACrB,OAAOW,OAAO,CAACJ,MAAM,EAAE;IACrBI,OAAO,GAAGA,OAAO,CAACJ,MAAM;EAC1B;EAEA,OAAOI,OAAO;AAChB","ignoreList":[]}
1
+ {"version":3,"file":"component-tree.js","names":["_screen","require","isTestInstance","node","type","isInstanceMounted","instance","getContainerInstance","screen","container","getInstanceSiblings","parent","children","filter","sibling","current"],"sources":["../../src/helpers/component-tree.ts"],"sourcesContent":["import type { TestInstance, TestNode } from 'test-renderer';\n\nimport { screen } from '../screen';\n\n/**\n * Checks if the given element is a host element.\n * @param node The element to check.\n */\nexport function isTestInstance(node?: TestNode | null): node is TestInstance {\n return typeof node !== 'string' && typeof node?.type === 'string';\n}\n\nexport function isInstanceMounted(instance: TestInstance) {\n return getContainerInstance(instance) === screen.container;\n}\n\n/**\n * Returns host siblings for given element.\n * @param instance The element start traversing from.\n */\nexport function getInstanceSiblings(instance: TestInstance): TestInstance[] {\n // Should not happen\n const parent = instance.parent;\n if (!parent) {\n return [];\n }\n\n return parent.children.filter(\n (sibling) => typeof sibling !== 'string' && sibling !== instance,\n ) as TestInstance[];\n}\n\n/**\n * Returns the container element of the tree.\n *\n * @param instance The element start traversing from.\n * @returns The container element of the tree.\n */\nexport function getContainerInstance(instance: TestInstance) {\n let current = instance;\n while (current.parent) {\n current = current.parent;\n }\n\n return current;\n}\n"],"mappings":";;;;;;;;;AAEA,IAAAA,OAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACO,SAASC,cAAcA,CAACC,IAAsB,EAAwB;EAC3E,OAAO,OAAOA,IAAI,KAAK,QAAQ,IAAI,OAAOA,IAAI,EAAEC,IAAI,KAAK,QAAQ;AACnE;AAEO,SAASC,iBAAiBA,CAACC,QAAsB,EAAE;EACxD,OAAOC,oBAAoB,CAACD,QAAQ,CAAC,KAAKE,cAAM,CAACC,SAAS;AAC5D;;AAEA;AACA;AACA;AACA;AACO,SAASC,mBAAmBA,CAACJ,QAAsB,EAAkB;EAC1E;EACA,MAAMK,MAAM,GAAGL,QAAQ,CAACK,MAAM;EAC9B,IAAI,CAACA,MAAM,EAAE;IACX,OAAO,EAAE;EACX;EAEA,OAAOA,MAAM,CAACC,QAAQ,CAACC,MAAM,CAC1BC,OAAO,IAAK,OAAOA,OAAO,KAAK,QAAQ,IAAIA,OAAO,KAAKR,QAC1D,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,oBAAoBA,CAACD,QAAsB,EAAE;EAC3D,IAAIS,OAAO,GAAGT,QAAQ;EACtB,OAAOS,OAAO,CAACJ,MAAM,EAAE;IACrBI,OAAO,GAAGA,OAAO,CAACJ,MAAM;EAC1B;EAEA,OAAOI,OAAO;AAChB","ignoreList":[]}
@@ -1,6 +1,4 @@
1
1
  export declare class ErrorWithStack extends Error {
2
2
  constructor(message: string | undefined, callsite: Function);
3
3
  }
4
- export declare const prepareErrorMessage: (error: unknown, name?: string, value?: unknown) => string;
5
- export declare const createQueryByError: (error: unknown, callsite: Function) => null;
6
- export declare function copyStackTrace(target: unknown, stackTraceSource: Error): void;
4
+ export declare function copyStackTraceIfNeeded(target: unknown, stackTraceSource: Error | undefined): void;
@@ -4,10 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ErrorWithStack = void 0;
7
- exports.copyStackTrace = copyStackTrace;
8
- exports.prepareErrorMessage = exports.createQueryByError = void 0;
9
- var _prettyFormat = _interopRequireDefault(require("pretty-format"));
10
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
+ exports.copyStackTraceIfNeeded = copyStackTraceIfNeeded;
11
8
  class ErrorWithStack extends Error {
12
9
  // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
13
10
  constructor(message, callsite) {
@@ -18,38 +15,8 @@ class ErrorWithStack extends Error {
18
15
  }
19
16
  }
20
17
  exports.ErrorWithStack = ErrorWithStack;
21
- const prepareErrorMessage = (error, name, value) => {
22
- let errorMessage;
23
- if (error instanceof Error) {
24
- // Strip info about custom predicate
25
- errorMessage = error.message.replace(/ matching custom predicate[^]*/gm, '');
26
- } else if (error && typeof error === 'object') {
27
- errorMessage = error.toString();
28
- } else {
29
- errorMessage = 'Caught unknown error';
30
- }
31
- if (name && value) {
32
- errorMessage += ` with ${name} ${(0, _prettyFormat.default)(value, {
33
- min: true
34
- })}`;
35
- }
36
- return errorMessage;
37
- };
38
-
39
- // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
40
- exports.prepareErrorMessage = prepareErrorMessage;
41
- const createQueryByError = (error, callsite) => {
42
- if (error instanceof Error) {
43
- if (error.message.includes('No instances found')) {
44
- return null;
45
- }
46
- throw new ErrorWithStack(error.message, callsite);
47
- }
48
- throw new ErrorWithStack(`Query: caught unknown error type: ${typeof error}, value: ${error}`, callsite);
49
- };
50
- exports.createQueryByError = createQueryByError;
51
- function copyStackTrace(target, stackTraceSource) {
52
- if (target instanceof Error && stackTraceSource.stack) {
18
+ function copyStackTraceIfNeeded(target, stackTraceSource) {
19
+ if (stackTraceSource != null && target instanceof Error && stackTraceSource.stack) {
53
20
  target.stack = stackTraceSource.stack.replace(stackTraceSource.message, target.message);
54
21
  }
55
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","names":["_prettyFormat","_interopRequireDefault","require","e","__esModule","default","ErrorWithStack","Error","constructor","message","callsite","captureStackTrace","exports","prepareErrorMessage","error","name","value","errorMessage","replace","toString","prettyFormat","min","createQueryByError","includes","copyStackTrace","target","stackTraceSource","stack"],"sources":["../../src/helpers/errors.ts"],"sourcesContent":["import prettyFormat from 'pretty-format';\n\nexport class ErrorWithStack extends Error {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n constructor(message: string | undefined, callsite: Function) {\n super(message);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, callsite);\n }\n }\n}\n\nexport const prepareErrorMessage = (\n // TS states that error caught in a catch close are of type `unknown`\n // most real cases will be `Error`, but better safe than sorry\n error: unknown,\n name?: string,\n value?: unknown,\n): string => {\n let errorMessage: string;\n if (error instanceof Error) {\n // Strip info about custom predicate\n errorMessage = error.message.replace(/ matching custom predicate[^]*/gm, '');\n } else if (error && typeof error === 'object') {\n errorMessage = error.toString();\n } else {\n errorMessage = 'Caught unknown error';\n }\n\n if (name && value) {\n errorMessage += ` with ${name} ${prettyFormat(value, { min: true })}`;\n }\n return errorMessage;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport const createQueryByError = (error: unknown, callsite: Function): null => {\n if (error instanceof Error) {\n if (error.message.includes('No instances found')) {\n return null;\n }\n throw new ErrorWithStack(error.message, callsite);\n }\n\n throw new ErrorWithStack(\n `Query: caught unknown error type: ${typeof error}, value: ${error}`,\n callsite,\n );\n};\n\nexport function copyStackTrace(target: unknown, stackTraceSource: Error) {\n if (target instanceof Error && stackTraceSource.stack) {\n target.stack = stackTraceSource.stack.replace(stackTraceSource.message, target.message);\n }\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAyC,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAElC,MAAMG,cAAc,SAASC,KAAK,CAAC;EACxC;EACAC,WAAWA,CAACC,OAA2B,EAAEC,QAAkB,EAAE;IAC3D,KAAK,CAACD,OAAO,CAAC;IACd,IAAIF,KAAK,CAACI,iBAAiB,EAAE;MAC3BJ,KAAK,CAACI,iBAAiB,CAAC,IAAI,EAAED,QAAQ,CAAC;IACzC;EACF;AACF;AAACE,OAAA,CAAAN,cAAA,GAAAA,cAAA;AAEM,MAAMO,mBAAmB,GAAGA,CAGjCC,KAAc,EACdC,IAAa,EACbC,KAAe,KACJ;EACX,IAAIC,YAAoB;EACxB,IAAIH,KAAK,YAAYP,KAAK,EAAE;IAC1B;IACAU,YAAY,GAAGH,KAAK,CAACL,OAAO,CAACS,OAAO,CAAC,kCAAkC,EAAE,EAAE,CAAC;EAC9E,CAAC,MAAM,IAAIJ,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7CG,YAAY,GAAGH,KAAK,CAACK,QAAQ,CAAC,CAAC;EACjC,CAAC,MAAM;IACLF,YAAY,GAAG,sBAAsB;EACvC;EAEA,IAAIF,IAAI,IAAIC,KAAK,EAAE;IACjBC,YAAY,IAAI,SAASF,IAAI,IAAI,IAAAK,qBAAY,EAACJ,KAAK,EAAE;MAAEK,GAAG,EAAE;IAAK,CAAC,CAAC,EAAE;EACvE;EACA,OAAOJ,YAAY;AACrB,CAAC;;AAED;AAAAL,OAAA,CAAAC,mBAAA,GAAAA,mBAAA;AACO,MAAMS,kBAAkB,GAAGA,CAACR,KAAc,EAAEJ,QAAkB,KAAW;EAC9E,IAAII,KAAK,YAAYP,KAAK,EAAE;IAC1B,IAAIO,KAAK,CAACL,OAAO,CAACc,QAAQ,CAAC,oBAAoB,CAAC,EAAE;MAChD,OAAO,IAAI;IACb;IACA,MAAM,IAAIjB,cAAc,CAACQ,KAAK,CAACL,OAAO,EAAEC,QAAQ,CAAC;EACnD;EAEA,MAAM,IAAIJ,cAAc,CACtB,qCAAqC,OAAOQ,KAAK,YAAYA,KAAK,EAAE,EACpEJ,QACF,CAAC;AACH,CAAC;AAACE,OAAA,CAAAU,kBAAA,GAAAA,kBAAA;AAEK,SAASE,cAAcA,CAACC,MAAe,EAAEC,gBAAuB,EAAE;EACvE,IAAID,MAAM,YAAYlB,KAAK,IAAImB,gBAAgB,CAACC,KAAK,EAAE;IACrDF,MAAM,CAACE,KAAK,GAAGD,gBAAgB,CAACC,KAAK,CAACT,OAAO,CAACQ,gBAAgB,CAACjB,OAAO,EAAEgB,MAAM,CAAChB,OAAO,CAAC;EACzF;AACF","ignoreList":[]}
1
+ {"version":3,"file":"errors.js","names":["ErrorWithStack","Error","constructor","message","callsite","captureStackTrace","exports","copyStackTraceIfNeeded","target","stackTraceSource","stack","replace"],"sources":["../../src/helpers/errors.ts"],"sourcesContent":["export class ErrorWithStack extends Error {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n constructor(message: string | undefined, callsite: Function) {\n super(message);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, callsite);\n }\n }\n}\n\nexport function copyStackTraceIfNeeded(target: unknown, stackTraceSource: Error | undefined) {\n if (stackTraceSource != null && target instanceof Error && stackTraceSource.stack) {\n target.stack = stackTraceSource.stack.replace(stackTraceSource.message, target.message);\n }\n}\n"],"mappings":";;;;;;;AAAO,MAAMA,cAAc,SAASC,KAAK,CAAC;EACxC;EACAC,WAAWA,CAACC,OAA2B,EAAEC,QAAkB,EAAE;IAC3D,KAAK,CAACD,OAAO,CAAC;IACd,IAAIF,KAAK,CAACI,iBAAiB,EAAE;MAC3BJ,KAAK,CAACI,iBAAiB,CAAC,IAAI,EAAED,QAAQ,CAAC;IACzC;EACF;AACF;AAACE,OAAA,CAAAN,cAAA,GAAAA,cAAA;AAEM,SAASO,sBAAsBA,CAACC,MAAe,EAAEC,gBAAmC,EAAE;EAC3F,IAAIA,gBAAgB,IAAI,IAAI,IAAID,MAAM,YAAYP,KAAK,IAAIQ,gBAAgB,CAACC,KAAK,EAAE;IACjFF,MAAM,CAACE,KAAK,GAAGD,gBAAgB,CAACC,KAAK,CAACC,OAAO,CAACF,gBAAgB,CAACN,OAAO,EAAEK,MAAM,CAACL,OAAO,CAAC;EACzF;AACF","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import type { HostElement } from 'test-renderer';
1
+ import type { TestInstance } from 'test-renderer';
2
2
  interface FindAllOptions {
3
3
  /** Match elements hidden from accessibility */
4
4
  includeHiddenElements?: boolean;
@@ -6,5 +6,5 @@ interface FindAllOptions {
6
6
  hidden?: boolean;
7
7
  matchDeepestOnly?: boolean;
8
8
  }
9
- export declare function findAll(root: HostElement, predicate: (element: HostElement) => boolean, options?: FindAllOptions): HostElement[];
9
+ export declare function findAll(root: TestInstance, predicate: (instance: TestInstance) => boolean, options?: FindAllOptions): TestInstance[];
10
10
  export {};
@@ -18,7 +18,7 @@ function findAll(root, predicate, options = {}) {
18
18
  return results;
19
19
  }
20
20
  const cache = new WeakMap();
21
- return results.filter(element => !(0, _accessibility.isHiddenFromAccessibility)(element, {
21
+ return results.filter(instance => !(0, _accessibility.isHiddenFromAccessibility)(instance, {
22
22
  cache
23
23
  }));
24
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"find-all.js","names":["_config","require","_accessibility","findAll","root","predicate","options","matchDeepestOnly","results","queryAll","includeHiddenElements","hidden","getConfig","defaultIncludeHiddenElements","cache","WeakMap","filter","element","isHiddenFromAccessibility"],"sources":["../../src/helpers/find-all.ts"],"sourcesContent":["import type { HostElement } from 'test-renderer';\n\nimport { getConfig } from '../config';\nimport { isHiddenFromAccessibility } from './accessibility';\n\ninterface FindAllOptions {\n /** Match elements hidden from accessibility */\n includeHiddenElements?: boolean;\n\n /** RTL-compatible alias to `includeHiddenElements` */\n hidden?: boolean;\n\n /* Exclude any ancestors of deepest matched elements even if they match the predicate */\n matchDeepestOnly?: boolean;\n}\n\nexport function findAll(\n root: HostElement,\n predicate: (element: HostElement) => boolean,\n options: FindAllOptions = {},\n): HostElement[] {\n const { matchDeepestOnly } = options;\n const results = root.queryAll(predicate, { matchDeepestOnly });\n\n const includeHiddenElements =\n options?.includeHiddenElements ?? options?.hidden ?? getConfig()?.defaultIncludeHiddenElements;\n\n if (includeHiddenElements) {\n return results;\n }\n\n const cache = new WeakMap<HostElement>();\n return results.filter((element) => !isHiddenFromAccessibility(element, { cache }));\n}\n"],"mappings":";;;;;;AAEA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AAaO,SAASE,OAAOA,CACrBC,IAAiB,EACjBC,SAA4C,EAC5CC,OAAuB,GAAG,CAAC,CAAC,EACb;EACf,MAAM;IAAEC;EAAiB,CAAC,GAAGD,OAAO;EACpC,MAAME,OAAO,GAAGJ,IAAI,CAACK,QAAQ,CAACJ,SAAS,EAAE;IAAEE;EAAiB,CAAC,CAAC;EAE9D,MAAMG,qBAAqB,GACzBJ,OAAO,EAAEI,qBAAqB,IAAIJ,OAAO,EAAEK,MAAM,IAAI,IAAAC,iBAAS,EAAC,CAAC,EAAEC,4BAA4B;EAEhG,IAAIH,qBAAqB,EAAE;IACzB,OAAOF,OAAO;EAChB;EAEA,MAAMM,KAAK,GAAG,IAAIC,OAAO,CAAc,CAAC;EACxC,OAAOP,OAAO,CAACQ,MAAM,CAAEC,OAAO,IAAK,CAAC,IAAAC,wCAAyB,EAACD,OAAO,EAAE;IAAEH;EAAM,CAAC,CAAC,CAAC;AACpF","ignoreList":[]}
1
+ {"version":3,"file":"find-all.js","names":["_config","require","_accessibility","findAll","root","predicate","options","matchDeepestOnly","results","queryAll","includeHiddenElements","hidden","getConfig","defaultIncludeHiddenElements","cache","WeakMap","filter","instance","isHiddenFromAccessibility"],"sources":["../../src/helpers/find-all.ts"],"sourcesContent":["import type { TestInstance } from 'test-renderer';\n\nimport { getConfig } from '../config';\nimport { isHiddenFromAccessibility } from './accessibility';\n\ninterface FindAllOptions {\n /** Match elements hidden from accessibility */\n includeHiddenElements?: boolean;\n\n /** RTL-compatible alias to `includeHiddenElements` */\n hidden?: boolean;\n\n /* Exclude any ancestors of deepest matched elements even if they match the predicate */\n matchDeepestOnly?: boolean;\n}\n\nexport function findAll(\n root: TestInstance,\n predicate: (instance: TestInstance) => boolean,\n options: FindAllOptions = {},\n): TestInstance[] {\n const { matchDeepestOnly } = options;\n const results = root.queryAll(predicate, { matchDeepestOnly });\n\n const includeHiddenElements =\n options?.includeHiddenElements ?? options?.hidden ?? getConfig()?.defaultIncludeHiddenElements;\n\n if (includeHiddenElements) {\n return results;\n }\n\n const cache = new WeakMap<TestInstance>();\n return results.filter((instance) => !isHiddenFromAccessibility(instance, { cache }));\n}\n"],"mappings":";;;;;;AAEA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AAaO,SAASE,OAAOA,CACrBC,IAAkB,EAClBC,SAA8C,EAC9CC,OAAuB,GAAG,CAAC,CAAC,EACZ;EAChB,MAAM;IAAEC;EAAiB,CAAC,GAAGD,OAAO;EACpC,MAAME,OAAO,GAAGJ,IAAI,CAACK,QAAQ,CAACJ,SAAS,EAAE;IAAEE;EAAiB,CAAC,CAAC;EAE9D,MAAMG,qBAAqB,GACzBJ,OAAO,EAAEI,qBAAqB,IAAIJ,OAAO,EAAEK,MAAM,IAAI,IAAAC,iBAAS,EAAC,CAAC,EAAEC,4BAA4B;EAEhG,IAAIH,qBAAqB,EAAE;IACzB,OAAOF,OAAO;EAChB;EAEA,MAAMM,KAAK,GAAG,IAAIC,OAAO,CAAe,CAAC;EACzC,OAAOP,OAAO,CAACQ,MAAM,CAAEC,QAAQ,IAAK,CAAC,IAAAC,wCAAyB,EAACD,QAAQ,EAAE;IAAEH;EAAM,CAAC,CAAC,CAAC;AACtF","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import type { HostElement, JsonNode } from 'test-renderer';
1
+ import type { JsonNode, TestInstance } from 'test-renderer';
2
2
  import type { MapPropsFunction } from './map-props';
3
3
  export type FormatElementOptions = {
4
4
  /** Minimize used space. */
@@ -9,10 +9,10 @@ export type FormatElementOptions = {
9
9
  mapProps?: MapPropsFunction | null;
10
10
  };
11
11
  /***
12
- * Format given element as a pretty-printed string.
12
+ * Format given instance as a pretty-printed string.
13
13
  *
14
- * @param element Element to format.
14
+ * @param instance Instance to format.
15
15
  */
16
- export declare function formatElement(element: HostElement | null, { compact, highlight, mapProps }?: FormatElementOptions): string;
17
- export declare function formatElementList(elements: HostElement[], options?: FormatElementOptions): string;
16
+ export declare function formatElement(instance: TestInstance | null, { compact, highlight, mapProps }?: FormatElementOptions): string;
17
+ export declare function formatElementList(instances: TestInstance[], options?: FormatElementOptions): string;
18
18
  export declare function formatJson(json: JsonNode | JsonNode[], { compact, highlight, mapProps }?: FormatElementOptions): string;
@@ -10,28 +10,28 @@ var _prettyFormat = _interopRequireWildcard(require("pretty-format"));
10
10
  var _mapProps = require("./map-props");
11
11
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
12
12
  /***
13
- * Format given element as a pretty-printed string.
13
+ * Format given instance as a pretty-printed string.
14
14
  *
15
- * @param element Element to format.
15
+ * @param instance Instance to format.
16
16
  */
17
- function formatElement(element, {
17
+ function formatElement(instance, {
18
18
  compact,
19
19
  highlight = true,
20
20
  mapProps = _mapProps.defaultMapProps
21
21
  } = {}) {
22
- if (element == null) {
22
+ if (instance == null) {
23
23
  return '(null)';
24
24
  }
25
25
  const {
26
26
  children,
27
27
  ...props
28
- } = element.props;
28
+ } = instance.props;
29
29
  const childrenToDisplay = typeof children === 'string' ? [children] : undefined;
30
30
  return (0, _prettyFormat.default)({
31
31
  // This prop is needed persuade the prettyFormat that the element is
32
32
  // a JsonNode instance, so it is formatted as JSX.
33
33
  $$typeof: Symbol.for('react.test.json'),
34
- type: `${element.type}`,
34
+ type: `${instance.type}`,
35
35
  props: mapProps ? mapProps(props) : props,
36
36
  children: childrenToDisplay
37
37
  },
@@ -44,11 +44,11 @@ function formatElement(element, {
44
44
  min: compact
45
45
  });
46
46
  }
47
- function formatElementList(elements, options) {
48
- if (elements.length === 0) {
47
+ function formatElementList(instances, options) {
48
+ if (instances.length === 0) {
49
49
  return '(no elements)';
50
50
  }
51
- return elements.map(element => formatElement(element, options)).join('\n');
51
+ return instances.map(instance => formatElement(instance, options)).join('\n');
52
52
  }
53
53
  function formatJson(json, {
54
54
  compact,