@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
@@ -4,43 +4,43 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.clear = clear;
7
+ var _eventBuilder = require("../event-builder");
7
8
  var _errors = require("../helpers/errors");
8
9
  var _hostComponentNames = require("../helpers/host-component-names");
9
10
  var _pointerEvents = require("../helpers/pointer-events");
10
11
  var _textInput = require("../helpers/text-input");
11
- var _eventBuilder = require("./event-builder");
12
12
  var _type = require("./type/type");
13
13
  var _utils = require("./utils");
14
- async function clear(element) {
15
- if (!(0, _hostComponentNames.isHostTextInput)(element)) {
16
- throw new _errors.ErrorWithStack(`clear() only supports host "TextInput" elements. Passed element has type: "${element.type}".`, clear);
14
+ async function clear(instance) {
15
+ if (!(0, _hostComponentNames.isHostTextInput)(instance)) {
16
+ throw new _errors.ErrorWithStack(`clear() only supports host "TextInput" instances. Passed instance has type: "${instance.type}".`, clear);
17
17
  }
18
- if (!(0, _textInput.isEditableTextInput)(element) || !(0, _pointerEvents.isPointerEventEnabled)(element)) {
18
+ if (!(0, _textInput.isEditableTextInput)(instance) || !(0, _pointerEvents.isPointerEventEnabled)(instance)) {
19
19
  return;
20
20
  }
21
21
 
22
- // 1. Enter element
23
- await (0, _utils.dispatchEvent)(element, 'focus', _eventBuilder.EventBuilder.Common.focus());
22
+ // 1. Enter instance
23
+ await (0, _utils.dispatchEvent)(instance, 'focus', (0, _eventBuilder.buildFocusEvent)());
24
24
 
25
25
  // 2. Select all
26
- const textToClear = (0, _textInput.getTextInputValue)(element);
26
+ const textToClear = (0, _textInput.getTextInputValue)(instance);
27
27
  const selectionRange = {
28
28
  start: 0,
29
29
  end: textToClear.length
30
30
  };
31
- await (0, _utils.dispatchEvent)(element, 'selectionChange', _eventBuilder.EventBuilder.TextInput.selectionChange(selectionRange));
31
+ await (0, _utils.dispatchEvent)(instance, 'selectionChange', (0, _eventBuilder.buildTextSelectionChangeEvent)(selectionRange));
32
32
 
33
33
  // 3. Press backspace with selected text
34
34
  const emptyText = '';
35
- await (0, _type.emitTypingEvents)(element, {
35
+ await (0, _type.emitTypingEvents)(instance, {
36
36
  config: this.config,
37
37
  key: 'Backspace',
38
38
  text: emptyText
39
39
  });
40
40
 
41
- // 4. Exit element
41
+ // 4. Exit instance
42
42
  await (0, _utils.wait)(this.config);
43
- await (0, _utils.dispatchEvent)(element, 'endEditing', _eventBuilder.EventBuilder.TextInput.endEditing(emptyText));
44
- await (0, _utils.dispatchEvent)(element, 'blur', _eventBuilder.EventBuilder.Common.blur());
43
+ await (0, _utils.dispatchEvent)(instance, 'endEditing', (0, _eventBuilder.buildEndEditingEvent)(emptyText));
44
+ await (0, _utils.dispatchEvent)(instance, 'blur', (0, _eventBuilder.buildBlurEvent)());
45
45
  }
46
46
  //# sourceMappingURL=clear.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clear.js","names":["_errors","require","_hostComponentNames","_pointerEvents","_textInput","_eventBuilder","_type","_utils","clear","element","isHostTextInput","ErrorWithStack","type","isEditableTextInput","isPointerEventEnabled","dispatchEvent","EventBuilder","Common","focus","textToClear","getTextInputValue","selectionRange","start","end","length","TextInput","selectionChange","emptyText","emitTypingEvents","config","key","text","wait","endEditing","blur"],"sources":["../../src/user-event/clear.ts"],"sourcesContent":["import type { HostElement } from 'test-renderer';\n\nimport { ErrorWithStack } from '../helpers/errors';\nimport { isHostTextInput } from '../helpers/host-component-names';\nimport { isPointerEventEnabled } from '../helpers/pointer-events';\nimport { getTextInputValue, isEditableTextInput } from '../helpers/text-input';\nimport { EventBuilder } from './event-builder';\nimport type { UserEventInstance } from './setup';\nimport { emitTypingEvents } from './type/type';\nimport { dispatchEvent, wait } from './utils';\n\nexport async function clear(this: UserEventInstance, element: HostElement): Promise<void> {\n if (!isHostTextInput(element)) {\n throw new ErrorWithStack(\n `clear() only supports host \"TextInput\" elements. Passed element has type: \"${element.type}\".`,\n clear,\n );\n }\n\n if (!isEditableTextInput(element) || !isPointerEventEnabled(element)) {\n return;\n }\n\n // 1. Enter element\n await dispatchEvent(element, 'focus', EventBuilder.Common.focus());\n\n // 2. Select all\n const textToClear = getTextInputValue(element);\n const selectionRange = {\n start: 0,\n end: textToClear.length,\n };\n await dispatchEvent(\n element,\n 'selectionChange',\n EventBuilder.TextInput.selectionChange(selectionRange),\n );\n\n // 3. Press backspace with selected text\n const emptyText = '';\n await emitTypingEvents(element, {\n config: this.config,\n key: 'Backspace',\n text: emptyText,\n });\n\n // 4. Exit element\n await wait(this.config);\n await dispatchEvent(element, 'endEditing', EventBuilder.TextInput.endEditing(emptyText));\n await dispatchEvent(element, 'blur', EventBuilder.Common.blur());\n}\n"],"mappings":";;;;;;AAEA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,aAAA,GAAAJ,OAAA;AAEA,IAAAK,KAAA,GAAAL,OAAA;AACA,IAAAM,MAAA,GAAAN,OAAA;AAEO,eAAeO,KAAKA,CAA0BC,OAAoB,EAAiB;EACxF,IAAI,CAAC,IAAAC,mCAAe,EAACD,OAAO,CAAC,EAAE;IAC7B,MAAM,IAAIE,sBAAc,CACtB,8EAA8EF,OAAO,CAACG,IAAI,IAAI,EAC9FJ,KACF,CAAC;EACH;EAEA,IAAI,CAAC,IAAAK,8BAAmB,EAACJ,OAAO,CAAC,IAAI,CAAC,IAAAK,oCAAqB,EAACL,OAAO,CAAC,EAAE;IACpE;EACF;;EAEA;EACA,MAAM,IAAAM,oBAAa,EAACN,OAAO,EAAE,OAAO,EAAEO,0BAAY,CAACC,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;;EAElE;EACA,MAAMC,WAAW,GAAG,IAAAC,4BAAiB,EAACX,OAAO,CAAC;EAC9C,MAAMY,cAAc,GAAG;IACrBC,KAAK,EAAE,CAAC;IACRC,GAAG,EAAEJ,WAAW,CAACK;EACnB,CAAC;EACD,MAAM,IAAAT,oBAAa,EACjBN,OAAO,EACP,iBAAiB,EACjBO,0BAAY,CAACS,SAAS,CAACC,eAAe,CAACL,cAAc,CACvD,CAAC;;EAED;EACA,MAAMM,SAAS,GAAG,EAAE;EACpB,MAAM,IAAAC,sBAAgB,EAACnB,OAAO,EAAE;IAC9BoB,MAAM,EAAE,IAAI,CAACA,MAAM;IACnBC,GAAG,EAAE,WAAW;IAChBC,IAAI,EAAEJ;EACR,CAAC,CAAC;;EAEF;EACA,MAAM,IAAAK,WAAI,EAAC,IAAI,CAACH,MAAM,CAAC;EACvB,MAAM,IAAAd,oBAAa,EAACN,OAAO,EAAE,YAAY,EAAEO,0BAAY,CAACS,SAAS,CAACQ,UAAU,CAACN,SAAS,CAAC,CAAC;EACxF,MAAM,IAAAZ,oBAAa,EAACN,OAAO,EAAE,MAAM,EAAEO,0BAAY,CAACC,MAAM,CAACiB,IAAI,CAAC,CAAC,CAAC;AAClE","ignoreList":[]}
1
+ {"version":3,"file":"clear.js","names":["_eventBuilder","require","_errors","_hostComponentNames","_pointerEvents","_textInput","_type","_utils","clear","instance","isHostTextInput","ErrorWithStack","type","isEditableTextInput","isPointerEventEnabled","dispatchEvent","buildFocusEvent","textToClear","getTextInputValue","selectionRange","start","end","length","buildTextSelectionChangeEvent","emptyText","emitTypingEvents","config","key","text","wait","buildEndEditingEvent","buildBlurEvent"],"sources":["../../src/user-event/clear.ts"],"sourcesContent":["import type { TestInstance } from 'test-renderer';\n\nimport {\n buildBlurEvent,\n buildEndEditingEvent,\n buildFocusEvent,\n buildTextSelectionChangeEvent,\n} from '../event-builder';\nimport { ErrorWithStack } from '../helpers/errors';\nimport { isHostTextInput } from '../helpers/host-component-names';\nimport { isPointerEventEnabled } from '../helpers/pointer-events';\nimport { getTextInputValue, isEditableTextInput } from '../helpers/text-input';\nimport type { UserEventInstance } from './setup';\nimport { emitTypingEvents } from './type/type';\nimport { dispatchEvent, wait } from './utils';\n\nexport async function clear(this: UserEventInstance, instance: TestInstance): Promise<void> {\n if (!isHostTextInput(instance)) {\n throw new ErrorWithStack(\n `clear() only supports host \"TextInput\" instances. Passed instance has type: \"${instance.type}\".`,\n clear,\n );\n }\n\n if (!isEditableTextInput(instance) || !isPointerEventEnabled(instance)) {\n return;\n }\n\n // 1. Enter instance\n await dispatchEvent(instance, 'focus', buildFocusEvent());\n\n // 2. Select all\n const textToClear = getTextInputValue(instance);\n const selectionRange = {\n start: 0,\n end: textToClear.length,\n };\n await dispatchEvent(instance, 'selectionChange', buildTextSelectionChangeEvent(selectionRange));\n\n // 3. Press backspace with selected text\n const emptyText = '';\n await emitTypingEvents(instance, {\n config: this.config,\n key: 'Backspace',\n text: emptyText,\n });\n\n // 4. Exit instance\n await wait(this.config);\n await dispatchEvent(instance, 'endEditing', buildEndEditingEvent(emptyText));\n await dispatchEvent(instance, 'blur', buildBlurEvent());\n}\n"],"mappings":";;;;;;AAEA,IAAAA,aAAA,GAAAC,OAAA;AAMA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,mBAAA,GAAAF,OAAA;AACA,IAAAG,cAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AAEA,IAAAK,KAAA,GAAAL,OAAA;AACA,IAAAM,MAAA,GAAAN,OAAA;AAEO,eAAeO,KAAKA,CAA0BC,QAAsB,EAAiB;EAC1F,IAAI,CAAC,IAAAC,mCAAe,EAACD,QAAQ,CAAC,EAAE;IAC9B,MAAM,IAAIE,sBAAc,CACtB,gFAAgFF,QAAQ,CAACG,IAAI,IAAI,EACjGJ,KACF,CAAC;EACH;EAEA,IAAI,CAAC,IAAAK,8BAAmB,EAACJ,QAAQ,CAAC,IAAI,CAAC,IAAAK,oCAAqB,EAACL,QAAQ,CAAC,EAAE;IACtE;EACF;;EAEA;EACA,MAAM,IAAAM,oBAAa,EAACN,QAAQ,EAAE,OAAO,EAAE,IAAAO,6BAAe,EAAC,CAAC,CAAC;;EAEzD;EACA,MAAMC,WAAW,GAAG,IAAAC,4BAAiB,EAACT,QAAQ,CAAC;EAC/C,MAAMU,cAAc,GAAG;IACrBC,KAAK,EAAE,CAAC;IACRC,GAAG,EAAEJ,WAAW,CAACK;EACnB,CAAC;EACD,MAAM,IAAAP,oBAAa,EAACN,QAAQ,EAAE,iBAAiB,EAAE,IAAAc,2CAA6B,EAACJ,cAAc,CAAC,CAAC;;EAE/F;EACA,MAAMK,SAAS,GAAG,EAAE;EACpB,MAAM,IAAAC,sBAAgB,EAAChB,QAAQ,EAAE;IAC/BiB,MAAM,EAAE,IAAI,CAACA,MAAM;IACnBC,GAAG,EAAE,WAAW;IAChBC,IAAI,EAAEJ;EACR,CAAC,CAAC;;EAEF;EACA,MAAM,IAAAK,WAAI,EAAC,IAAI,CAACH,MAAM,CAAC;EACvB,MAAM,IAAAX,oBAAa,EAACN,QAAQ,EAAE,YAAY,EAAE,IAAAqB,kCAAoB,EAACN,SAAS,CAAC,CAAC;EAC5E,MAAM,IAAAT,oBAAa,EAACN,QAAQ,EAAE,MAAM,EAAE,IAAAsB,4BAAc,EAAC,CAAC,CAAC;AACzD","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import type { HostElement } from 'test-renderer';
1
+ import type { TestInstance } from 'test-renderer';
2
2
  import type { PressOptions } from './press';
3
3
  import type { ScrollToOptions } from './scroll';
4
4
  import { setup } from './setup';
@@ -6,10 +6,10 @@ import type { TypeOptions } from './type';
6
6
  export { UserEventConfig } from './setup';
7
7
  export declare const userEvent: {
8
8
  setup: typeof setup;
9
- press: (element: HostElement) => Promise<void>;
10
- longPress: (element: HostElement, options?: PressOptions) => Promise<void>;
11
- type: (element: HostElement, text: string, options?: TypeOptions) => Promise<void>;
12
- clear: (element: HostElement) => Promise<void>;
13
- paste: (element: HostElement, text: string) => Promise<void>;
14
- scrollTo: (element: HostElement, options: ScrollToOptions) => Promise<void>;
9
+ press: (instance: TestInstance) => Promise<void>;
10
+ longPress: (instance: TestInstance, options?: PressOptions) => Promise<void>;
11
+ type: (instance: TestInstance, text: string, options?: TypeOptions) => Promise<void>;
12
+ clear: (instance: TestInstance) => Promise<void>;
13
+ paste: (instance: TestInstance, text: string) => Promise<void>;
14
+ scrollTo: (instance: TestInstance, options: ScrollToOptions) => Promise<void>;
15
15
  };
@@ -14,11 +14,11 @@ var _setup = require("./setup");
14
14
  const userEvent = exports.userEvent = {
15
15
  setup: _setup.setup,
16
16
  // Direct access for User Event v13 compatibility
17
- press: element => (0, _setup.setup)().press(element),
18
- longPress: (element, options) => (0, _setup.setup)().longPress(element, options),
19
- type: (element, text, options) => (0, _setup.setup)().type(element, text, options),
20
- clear: element => (0, _setup.setup)().clear(element),
21
- paste: (element, text) => (0, _setup.setup)().paste(element, text),
22
- scrollTo: (element, options) => (0, _setup.setup)().scrollTo(element, options)
17
+ press: instance => (0, _setup.setup)().press(instance),
18
+ longPress: (instance, options) => (0, _setup.setup)().longPress(instance, options),
19
+ type: (instance, text, options) => (0, _setup.setup)().type(instance, text, options),
20
+ clear: instance => (0, _setup.setup)().clear(instance),
21
+ paste: (instance, text) => (0, _setup.setup)().paste(instance, text),
22
+ scrollTo: (instance, options) => (0, _setup.setup)().scrollTo(instance, options)
23
23
  };
24
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_setup","require","userEvent","exports","setup","press","element","longPress","options","type","text","clear","paste","scrollTo"],"sources":["../../src/user-event/index.ts"],"sourcesContent":["import type { HostElement } from 'test-renderer';\n\nimport type { PressOptions } from './press';\nimport type { ScrollToOptions } from './scroll';\nimport { setup } from './setup';\nimport type { TypeOptions } from './type';\n\nexport { UserEventConfig } from './setup';\n\nexport const userEvent = {\n setup,\n\n // Direct access for User Event v13 compatibility\n press: (element: HostElement) => setup().press(element),\n longPress: (element: HostElement, options?: PressOptions) => setup().longPress(element, options),\n type: (element: HostElement, text: string, options?: TypeOptions) =>\n setup().type(element, text, options),\n clear: (element: HostElement) => setup().clear(element),\n paste: (element: HostElement, text: string) => setup().paste(element, text),\n scrollTo: (element: HostElement, options: ScrollToOptions) => setup().scrollTo(element, options),\n};\n"],"mappings":";;;;;;;;;;;;AAIA,IAAAA,MAAA,GAAAC,OAAA;AAKO,MAAMC,SAAS,GAAAC,OAAA,CAAAD,SAAA,GAAG;EACvBE,KAAK,EAALA,YAAK;EAEL;EACAC,KAAK,EAAGC,OAAoB,IAAK,IAAAF,YAAK,EAAC,CAAC,CAACC,KAAK,CAACC,OAAO,CAAC;EACvDC,SAAS,EAAEA,CAACD,OAAoB,EAAEE,OAAsB,KAAK,IAAAJ,YAAK,EAAC,CAAC,CAACG,SAAS,CAACD,OAAO,EAAEE,OAAO,CAAC;EAChGC,IAAI,EAAEA,CAACH,OAAoB,EAAEI,IAAY,EAAEF,OAAqB,KAC9D,IAAAJ,YAAK,EAAC,CAAC,CAACK,IAAI,CAACH,OAAO,EAAEI,IAAI,EAAEF,OAAO,CAAC;EACtCG,KAAK,EAAGL,OAAoB,IAAK,IAAAF,YAAK,EAAC,CAAC,CAACO,KAAK,CAACL,OAAO,CAAC;EACvDM,KAAK,EAAEA,CAACN,OAAoB,EAAEI,IAAY,KAAK,IAAAN,YAAK,EAAC,CAAC,CAACQ,KAAK,CAACN,OAAO,EAAEI,IAAI,CAAC;EAC3EG,QAAQ,EAAEA,CAACP,OAAoB,EAAEE,OAAwB,KAAK,IAAAJ,YAAK,EAAC,CAAC,CAACS,QAAQ,CAACP,OAAO,EAAEE,OAAO;AACjG,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_setup","require","userEvent","exports","setup","press","instance","longPress","options","type","text","clear","paste","scrollTo"],"sources":["../../src/user-event/index.ts"],"sourcesContent":["import type { TestInstance } from 'test-renderer';\n\nimport type { PressOptions } from './press';\nimport type { ScrollToOptions } from './scroll';\nimport { setup } from './setup';\nimport type { TypeOptions } from './type';\n\nexport { UserEventConfig } from './setup';\n\nexport const userEvent = {\n setup,\n\n // Direct access for User Event v13 compatibility\n press: (instance: TestInstance) => setup().press(instance),\n longPress: (instance: TestInstance, options?: PressOptions) =>\n setup().longPress(instance, options),\n type: (instance: TestInstance, text: string, options?: TypeOptions) =>\n setup().type(instance, text, options),\n clear: (instance: TestInstance) => setup().clear(instance),\n paste: (instance: TestInstance, text: string) => setup().paste(instance, text),\n scrollTo: (instance: TestInstance, options: ScrollToOptions) =>\n setup().scrollTo(instance, options),\n};\n"],"mappings":";;;;;;;;;;;;AAIA,IAAAA,MAAA,GAAAC,OAAA;AAKO,MAAMC,SAAS,GAAAC,OAAA,CAAAD,SAAA,GAAG;EACvBE,KAAK,EAALA,YAAK;EAEL;EACAC,KAAK,EAAGC,QAAsB,IAAK,IAAAF,YAAK,EAAC,CAAC,CAACC,KAAK,CAACC,QAAQ,CAAC;EAC1DC,SAAS,EAAEA,CAACD,QAAsB,EAAEE,OAAsB,KACxD,IAAAJ,YAAK,EAAC,CAAC,CAACG,SAAS,CAACD,QAAQ,EAAEE,OAAO,CAAC;EACtCC,IAAI,EAAEA,CAACH,QAAsB,EAAEI,IAAY,EAAEF,OAAqB,KAChE,IAAAJ,YAAK,EAAC,CAAC,CAACK,IAAI,CAACH,QAAQ,EAAEI,IAAI,EAAEF,OAAO,CAAC;EACvCG,KAAK,EAAGL,QAAsB,IAAK,IAAAF,YAAK,EAAC,CAAC,CAACO,KAAK,CAACL,QAAQ,CAAC;EAC1DM,KAAK,EAAEA,CAACN,QAAsB,EAAEI,IAAY,KAAK,IAAAN,YAAK,EAAC,CAAC,CAACQ,KAAK,CAACN,QAAQ,EAAEI,IAAI,CAAC;EAC9EG,QAAQ,EAAEA,CAACP,QAAsB,EAAEE,OAAwB,KACzD,IAAAJ,YAAK,EAAC,CAAC,CAACS,QAAQ,CAACP,QAAQ,EAAEE,OAAO;AACtC,CAAC","ignoreList":[]}
@@ -1,3 +1,3 @@
1
- import type { HostElement } from 'test-renderer';
1
+ import type { TestInstance } from 'test-renderer';
2
2
  import type { UserEventInstance } from './setup';
3
- export declare function paste(this: UserEventInstance, element: HostElement, text: string): Promise<void>;
3
+ export declare function paste(this: UserEventInstance, instance: TestInstance, text: string): Promise<void>;
@@ -4,53 +4,53 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.paste = paste;
7
+ var _eventBuilder = require("../event-builder");
7
8
  var _errors = require("../helpers/errors");
8
9
  var _hostComponentNames = require("../helpers/host-component-names");
9
10
  var _pointerEvents = require("../helpers/pointer-events");
10
11
  var _textInput = require("../helpers/text-input");
11
12
  var _nativeState = require("../native-state");
12
- var _eventBuilder = require("./event-builder");
13
13
  var _utils = require("./utils");
14
- async function paste(element, text) {
15
- if (!(0, _hostComponentNames.isHostTextInput)(element)) {
16
- throw new _errors.ErrorWithStack(`paste() only supports host "TextInput" elements. Passed element has type: "${element.type}".`, paste);
14
+ async function paste(instance, text) {
15
+ if (!(0, _hostComponentNames.isHostTextInput)(instance)) {
16
+ throw new _errors.ErrorWithStack(`paste() only supports host "TextInput" instances. Passed instance has type: "${instance.type}".`, paste);
17
17
  }
18
- if (!(0, _textInput.isEditableTextInput)(element) || !(0, _pointerEvents.isPointerEventEnabled)(element)) {
18
+ if (!(0, _textInput.isEditableTextInput)(instance) || !(0, _pointerEvents.isPointerEventEnabled)(instance)) {
19
19
  return;
20
20
  }
21
21
 
22
- // 1. Enter element
23
- await (0, _utils.dispatchEvent)(element, 'focus', _eventBuilder.EventBuilder.Common.focus());
22
+ // 1. Enter instance
23
+ await (0, _utils.dispatchEvent)(instance, 'focus', (0, _eventBuilder.buildFocusEvent)());
24
24
 
25
25
  // 2. Select all
26
- const textToClear = (0, _textInput.getTextInputValue)(element);
26
+ const textToClear = (0, _textInput.getTextInputValue)(instance);
27
27
  const rangeToClear = {
28
28
  start: 0,
29
29
  end: textToClear.length
30
30
  };
31
- await (0, _utils.dispatchEvent)(element, 'selectionChange', _eventBuilder.EventBuilder.TextInput.selectionChange(rangeToClear));
31
+ await (0, _utils.dispatchEvent)(instance, 'selectionChange', (0, _eventBuilder.buildTextSelectionChangeEvent)(rangeToClear));
32
32
 
33
33
  // 3. Paste the text
34
- _nativeState.nativeState.valueForElement.set(element, text);
35
- await (0, _utils.dispatchEvent)(element, 'change', _eventBuilder.EventBuilder.TextInput.change(text));
36
- await (0, _utils.dispatchEvent)(element, 'changeText', text);
34
+ _nativeState.nativeState.valueForInstance.set(instance, text);
35
+ await (0, _utils.dispatchEvent)(instance, 'change', (0, _eventBuilder.buildTextChangeEvent)(text));
36
+ await (0, _utils.dispatchEvent)(instance, 'changeText', text);
37
37
  const rangeAfter = {
38
38
  start: text.length,
39
39
  end: text.length
40
40
  };
41
- await (0, _utils.dispatchEvent)(element, 'selectionChange', _eventBuilder.EventBuilder.TextInput.selectionChange(rangeAfter));
41
+ await (0, _utils.dispatchEvent)(instance, 'selectionChange', (0, _eventBuilder.buildTextSelectionChangeEvent)(rangeAfter));
42
42
 
43
43
  // According to the docs only multiline TextInput emits contentSizeChange event
44
44
  // @see: https://reactnative.dev/docs/textinput#oncontentsizechange
45
- const isMultiline = element.props.multiline === true;
45
+ const isMultiline = instance.props.multiline === true;
46
46
  if (isMultiline) {
47
47
  const contentSize = (0, _utils.getTextContentSize)(text);
48
- await (0, _utils.dispatchEvent)(element, 'contentSizeChange', _eventBuilder.EventBuilder.TextInput.contentSizeChange(contentSize));
48
+ await (0, _utils.dispatchEvent)(instance, 'contentSizeChange', (0, _eventBuilder.buildContentSizeChangeEvent)(contentSize));
49
49
  }
50
50
 
51
- // 4. Exit element
51
+ // 4. Exit instance
52
52
  await (0, _utils.wait)(this.config);
53
- await (0, _utils.dispatchEvent)(element, 'endEditing', _eventBuilder.EventBuilder.TextInput.endEditing(text));
54
- await (0, _utils.dispatchEvent)(element, 'blur', _eventBuilder.EventBuilder.Common.blur());
53
+ await (0, _utils.dispatchEvent)(instance, 'endEditing', (0, _eventBuilder.buildEndEditingEvent)(text));
54
+ await (0, _utils.dispatchEvent)(instance, 'blur', (0, _eventBuilder.buildBlurEvent)());
55
55
  }
56
56
  //# sourceMappingURL=paste.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paste.js","names":["_errors","require","_hostComponentNames","_pointerEvents","_textInput","_nativeState","_eventBuilder","_utils","paste","element","text","isHostTextInput","ErrorWithStack","type","isEditableTextInput","isPointerEventEnabled","dispatchEvent","EventBuilder","Common","focus","textToClear","getTextInputValue","rangeToClear","start","end","length","TextInput","selectionChange","nativeState","valueForElement","set","change","rangeAfter","isMultiline","props","multiline","contentSize","getTextContentSize","contentSizeChange","wait","config","endEditing","blur"],"sources":["../../src/user-event/paste.ts"],"sourcesContent":["import type { HostElement } from 'test-renderer';\n\nimport { ErrorWithStack } from '../helpers/errors';\nimport { isHostTextInput } from '../helpers/host-component-names';\nimport { isPointerEventEnabled } from '../helpers/pointer-events';\nimport { getTextInputValue, isEditableTextInput } from '../helpers/text-input';\nimport { nativeState } from '../native-state';\nimport { EventBuilder } from './event-builder';\nimport type { UserEventInstance } from './setup';\nimport { dispatchEvent, getTextContentSize, wait } from './utils';\n\nexport async function paste(\n this: UserEventInstance,\n element: HostElement,\n text: string,\n): Promise<void> {\n if (!isHostTextInput(element)) {\n throw new ErrorWithStack(\n `paste() only supports host \"TextInput\" elements. Passed element has type: \"${element.type}\".`,\n paste,\n );\n }\n\n if (!isEditableTextInput(element) || !isPointerEventEnabled(element)) {\n return;\n }\n\n // 1. Enter element\n await dispatchEvent(element, 'focus', EventBuilder.Common.focus());\n\n // 2. Select all\n const textToClear = getTextInputValue(element);\n const rangeToClear = { start: 0, end: textToClear.length };\n await dispatchEvent(\n element,\n 'selectionChange',\n EventBuilder.TextInput.selectionChange(rangeToClear),\n );\n\n // 3. Paste the text\n nativeState.valueForElement.set(element, text);\n await dispatchEvent(element, 'change', EventBuilder.TextInput.change(text));\n await dispatchEvent(element, 'changeText', text);\n\n const rangeAfter = { start: text.length, end: text.length };\n await dispatchEvent(\n element,\n 'selectionChange',\n EventBuilder.TextInput.selectionChange(rangeAfter),\n );\n\n // According to the docs only multiline TextInput emits contentSizeChange event\n // @see: https://reactnative.dev/docs/textinput#oncontentsizechange\n const isMultiline = element.props.multiline === true;\n if (isMultiline) {\n const contentSize = getTextContentSize(text);\n await dispatchEvent(\n element,\n 'contentSizeChange',\n EventBuilder.TextInput.contentSizeChange(contentSize),\n );\n }\n\n // 4. Exit element\n await wait(this.config);\n await dispatchEvent(element, 'endEditing', EventBuilder.TextInput.endEditing(text));\n await dispatchEvent(element, 'blur', EventBuilder.Common.blur());\n}\n"],"mappings":";;;;;;AAEA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,YAAA,GAAAJ,OAAA;AACA,IAAAK,aAAA,GAAAL,OAAA;AAEA,IAAAM,MAAA,GAAAN,OAAA;AAEO,eAAeO,KAAKA,CAEzBC,OAAoB,EACpBC,IAAY,EACG;EACf,IAAI,CAAC,IAAAC,mCAAe,EAACF,OAAO,CAAC,EAAE;IAC7B,MAAM,IAAIG,sBAAc,CACtB,8EAA8EH,OAAO,CAACI,IAAI,IAAI,EAC9FL,KACF,CAAC;EACH;EAEA,IAAI,CAAC,IAAAM,8BAAmB,EAACL,OAAO,CAAC,IAAI,CAAC,IAAAM,oCAAqB,EAACN,OAAO,CAAC,EAAE;IACpE;EACF;;EAEA;EACA,MAAM,IAAAO,oBAAa,EAACP,OAAO,EAAE,OAAO,EAAEQ,0BAAY,CAACC,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;;EAElE;EACA,MAAMC,WAAW,GAAG,IAAAC,4BAAiB,EAACZ,OAAO,CAAC;EAC9C,MAAMa,YAAY,GAAG;IAAEC,KAAK,EAAE,CAAC;IAAEC,GAAG,EAAEJ,WAAW,CAACK;EAAO,CAAC;EAC1D,MAAM,IAAAT,oBAAa,EACjBP,OAAO,EACP,iBAAiB,EACjBQ,0BAAY,CAACS,SAAS,CAACC,eAAe,CAACL,YAAY,CACrD,CAAC;;EAED;EACAM,wBAAW,CAACC,eAAe,CAACC,GAAG,CAACrB,OAAO,EAAEC,IAAI,CAAC;EAC9C,MAAM,IAAAM,oBAAa,EAACP,OAAO,EAAE,QAAQ,EAAEQ,0BAAY,CAACS,SAAS,CAACK,MAAM,CAACrB,IAAI,CAAC,CAAC;EAC3E,MAAM,IAAAM,oBAAa,EAACP,OAAO,EAAE,YAAY,EAAEC,IAAI,CAAC;EAEhD,MAAMsB,UAAU,GAAG;IAAET,KAAK,EAAEb,IAAI,CAACe,MAAM;IAAED,GAAG,EAAEd,IAAI,CAACe;EAAO,CAAC;EAC3D,MAAM,IAAAT,oBAAa,EACjBP,OAAO,EACP,iBAAiB,EACjBQ,0BAAY,CAACS,SAAS,CAACC,eAAe,CAACK,UAAU,CACnD,CAAC;;EAED;EACA;EACA,MAAMC,WAAW,GAAGxB,OAAO,CAACyB,KAAK,CAACC,SAAS,KAAK,IAAI;EACpD,IAAIF,WAAW,EAAE;IACf,MAAMG,WAAW,GAAG,IAAAC,yBAAkB,EAAC3B,IAAI,CAAC;IAC5C,MAAM,IAAAM,oBAAa,EACjBP,OAAO,EACP,mBAAmB,EACnBQ,0BAAY,CAACS,SAAS,CAACY,iBAAiB,CAACF,WAAW,CACtD,CAAC;EACH;;EAEA;EACA,MAAM,IAAAG,WAAI,EAAC,IAAI,CAACC,MAAM,CAAC;EACvB,MAAM,IAAAxB,oBAAa,EAACP,OAAO,EAAE,YAAY,EAAEQ,0BAAY,CAACS,SAAS,CAACe,UAAU,CAAC/B,IAAI,CAAC,CAAC;EACnF,MAAM,IAAAM,oBAAa,EAACP,OAAO,EAAE,MAAM,EAAEQ,0BAAY,CAACC,MAAM,CAACwB,IAAI,CAAC,CAAC,CAAC;AAClE","ignoreList":[]}
1
+ {"version":3,"file":"paste.js","names":["_eventBuilder","require","_errors","_hostComponentNames","_pointerEvents","_textInput","_nativeState","_utils","paste","instance","text","isHostTextInput","ErrorWithStack","type","isEditableTextInput","isPointerEventEnabled","dispatchEvent","buildFocusEvent","textToClear","getTextInputValue","rangeToClear","start","end","length","buildTextSelectionChangeEvent","nativeState","valueForInstance","set","buildTextChangeEvent","rangeAfter","isMultiline","props","multiline","contentSize","getTextContentSize","buildContentSizeChangeEvent","wait","config","buildEndEditingEvent","buildBlurEvent"],"sources":["../../src/user-event/paste.ts"],"sourcesContent":["import type { TestInstance } from 'test-renderer';\n\nimport {\n buildBlurEvent,\n buildContentSizeChangeEvent,\n buildEndEditingEvent,\n buildFocusEvent,\n buildTextChangeEvent,\n buildTextSelectionChangeEvent,\n} from '../event-builder';\nimport { ErrorWithStack } from '../helpers/errors';\nimport { isHostTextInput } from '../helpers/host-component-names';\nimport { isPointerEventEnabled } from '../helpers/pointer-events';\nimport { getTextInputValue, isEditableTextInput } from '../helpers/text-input';\nimport { nativeState } from '../native-state';\nimport type { UserEventInstance } from './setup';\nimport { dispatchEvent, getTextContentSize, wait } from './utils';\n\nexport async function paste(\n this: UserEventInstance,\n instance: TestInstance,\n text: string,\n): Promise<void> {\n if (!isHostTextInput(instance)) {\n throw new ErrorWithStack(\n `paste() only supports host \"TextInput\" instances. Passed instance has type: \"${instance.type}\".`,\n paste,\n );\n }\n\n if (!isEditableTextInput(instance) || !isPointerEventEnabled(instance)) {\n return;\n }\n\n // 1. Enter instance\n await dispatchEvent(instance, 'focus', buildFocusEvent());\n\n // 2. Select all\n const textToClear = getTextInputValue(instance);\n const rangeToClear = { start: 0, end: textToClear.length };\n await dispatchEvent(instance, 'selectionChange', buildTextSelectionChangeEvent(rangeToClear));\n\n // 3. Paste the text\n nativeState.valueForInstance.set(instance, text);\n await dispatchEvent(instance, 'change', buildTextChangeEvent(text));\n await dispatchEvent(instance, 'changeText', text);\n\n const rangeAfter = { start: text.length, end: text.length };\n await dispatchEvent(instance, 'selectionChange', buildTextSelectionChangeEvent(rangeAfter));\n\n // According to the docs only multiline TextInput emits contentSizeChange event\n // @see: https://reactnative.dev/docs/textinput#oncontentsizechange\n const isMultiline = instance.props.multiline === true;\n if (isMultiline) {\n const contentSize = getTextContentSize(text);\n await dispatchEvent(instance, 'contentSizeChange', buildContentSizeChangeEvent(contentSize));\n }\n\n // 4. Exit instance\n await wait(this.config);\n await dispatchEvent(instance, 'endEditing', buildEndEditingEvent(text));\n await dispatchEvent(instance, 'blur', buildBlurEvent());\n}\n"],"mappings":";;;;;;AAEA,IAAAA,aAAA,GAAAC,OAAA;AAQA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,mBAAA,GAAAF,OAAA;AACA,IAAAG,cAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AACA,IAAAK,YAAA,GAAAL,OAAA;AAEA,IAAAM,MAAA,GAAAN,OAAA;AAEO,eAAeO,KAAKA,CAEzBC,QAAsB,EACtBC,IAAY,EACG;EACf,IAAI,CAAC,IAAAC,mCAAe,EAACF,QAAQ,CAAC,EAAE;IAC9B,MAAM,IAAIG,sBAAc,CACtB,gFAAgFH,QAAQ,CAACI,IAAI,IAAI,EACjGL,KACF,CAAC;EACH;EAEA,IAAI,CAAC,IAAAM,8BAAmB,EAACL,QAAQ,CAAC,IAAI,CAAC,IAAAM,oCAAqB,EAACN,QAAQ,CAAC,EAAE;IACtE;EACF;;EAEA;EACA,MAAM,IAAAO,oBAAa,EAACP,QAAQ,EAAE,OAAO,EAAE,IAAAQ,6BAAe,EAAC,CAAC,CAAC;;EAEzD;EACA,MAAMC,WAAW,GAAG,IAAAC,4BAAiB,EAACV,QAAQ,CAAC;EAC/C,MAAMW,YAAY,GAAG;IAAEC,KAAK,EAAE,CAAC;IAAEC,GAAG,EAAEJ,WAAW,CAACK;EAAO,CAAC;EAC1D,MAAM,IAAAP,oBAAa,EAACP,QAAQ,EAAE,iBAAiB,EAAE,IAAAe,2CAA6B,EAACJ,YAAY,CAAC,CAAC;;EAE7F;EACAK,wBAAW,CAACC,gBAAgB,CAACC,GAAG,CAAClB,QAAQ,EAAEC,IAAI,CAAC;EAChD,MAAM,IAAAM,oBAAa,EAACP,QAAQ,EAAE,QAAQ,EAAE,IAAAmB,kCAAoB,EAAClB,IAAI,CAAC,CAAC;EACnE,MAAM,IAAAM,oBAAa,EAACP,QAAQ,EAAE,YAAY,EAAEC,IAAI,CAAC;EAEjD,MAAMmB,UAAU,GAAG;IAAER,KAAK,EAAEX,IAAI,CAACa,MAAM;IAAED,GAAG,EAAEZ,IAAI,CAACa;EAAO,CAAC;EAC3D,MAAM,IAAAP,oBAAa,EAACP,QAAQ,EAAE,iBAAiB,EAAE,IAAAe,2CAA6B,EAACK,UAAU,CAAC,CAAC;;EAE3F;EACA;EACA,MAAMC,WAAW,GAAGrB,QAAQ,CAACsB,KAAK,CAACC,SAAS,KAAK,IAAI;EACrD,IAAIF,WAAW,EAAE;IACf,MAAMG,WAAW,GAAG,IAAAC,yBAAkB,EAACxB,IAAI,CAAC;IAC5C,MAAM,IAAAM,oBAAa,EAACP,QAAQ,EAAE,mBAAmB,EAAE,IAAA0B,yCAA2B,EAACF,WAAW,CAAC,CAAC;EAC9F;;EAEA;EACA,MAAM,IAAAG,WAAI,EAAC,IAAI,CAACC,MAAM,CAAC;EACvB,MAAM,IAAArB,oBAAa,EAACP,QAAQ,EAAE,YAAY,EAAE,IAAA6B,kCAAoB,EAAC5B,IAAI,CAAC,CAAC;EACvE,MAAM,IAAAM,oBAAa,EAACP,QAAQ,EAAE,MAAM,EAAE,IAAA8B,4BAAc,EAAC,CAAC,CAAC;AACzD","ignoreList":[]}
@@ -1,9 +1,9 @@
1
- import type { HostElement } from 'test-renderer';
1
+ import type { TestInstance } from 'test-renderer';
2
2
  import type { UserEventInstance } from '../setup';
3
3
  export declare const DEFAULT_MIN_PRESS_DURATION = 130;
4
4
  export declare const DEFAULT_LONG_PRESS_DELAY_MS = 500;
5
5
  export interface PressOptions {
6
6
  duration?: number;
7
7
  }
8
- export declare function press(this: UserEventInstance, element: HostElement): Promise<void>;
9
- export declare function longPress(this: UserEventInstance, element: HostElement, options?: PressOptions): Promise<void>;
8
+ export declare function press(this: UserEventInstance, instance: TestInstance): Promise<void>;
9
+ export declare function longPress(this: UserEventInstance, instance: TestInstance, options?: PressOptions): Promise<void>;
@@ -7,95 +7,95 @@ exports.DEFAULT_MIN_PRESS_DURATION = exports.DEFAULT_LONG_PRESS_DELAY_MS = void
7
7
  exports.longPress = longPress;
8
8
  exports.press = press;
9
9
  var _act = require("../../act");
10
+ var _eventBuilder = require("../../event-builder");
10
11
  var _eventHandler = require("../../event-handler");
11
12
  var _componentTree = require("../../helpers/component-tree");
12
13
  var _errors = require("../../helpers/errors");
13
14
  var _hostComponentNames = require("../../helpers/host-component-names");
14
15
  var _pointerEvents = require("../../helpers/pointer-events");
15
- var _eventBuilder = require("../event-builder");
16
16
  var _utils = require("../utils");
17
17
  // These are constants defined in the React Native repo
18
18
  // See: https://github.com/facebook/react-native/blob/50e38cc9f1e6713228a91ad50f426c4f65e65e1a/packages/react-native/Libraries/Pressability/Pressability.js#L264
19
19
  const DEFAULT_MIN_PRESS_DURATION = exports.DEFAULT_MIN_PRESS_DURATION = 130;
20
20
  const DEFAULT_LONG_PRESS_DELAY_MS = exports.DEFAULT_LONG_PRESS_DELAY_MS = 500;
21
- async function press(element) {
22
- if (!(0, _componentTree.isHostElement)(element)) {
23
- throw new _errors.ErrorWithStack(`press() works only with host elements.`, press);
21
+ async function press(instance) {
22
+ if (!(0, _componentTree.isTestInstance)(instance)) {
23
+ throw new _errors.ErrorWithStack(`press() works only with host instances.`, press);
24
24
  }
25
- await basePress(this.config, element, {
25
+ await basePress(this.config, instance, {
26
26
  type: 'press'
27
27
  });
28
28
  }
29
- async function longPress(element, options) {
30
- if (!(0, _componentTree.isHostElement)(element)) {
31
- throw new _errors.ErrorWithStack(`longPress() works only with host elements.`, longPress);
29
+ async function longPress(instance, options) {
30
+ if (!(0, _componentTree.isTestInstance)(instance)) {
31
+ throw new _errors.ErrorWithStack(`longPress() works only with host instances.`, longPress);
32
32
  }
33
- await basePress(this.config, element, {
33
+ await basePress(this.config, instance, {
34
34
  type: 'longPress',
35
35
  duration: options?.duration ?? DEFAULT_LONG_PRESS_DELAY_MS
36
36
  });
37
37
  }
38
- const basePress = async (config, element, options) => {
39
- if (isEnabledHostElement(element) && hasPressEventHandler(element)) {
40
- await emitDirectPressEvents(config, element, options);
38
+ const basePress = async (config, instance, options) => {
39
+ if (isEnabledHostElement(instance) && hasPressEventHandler(instance)) {
40
+ await emitDirectPressEvents(config, instance, options);
41
41
  return;
42
42
  }
43
- if (isEnabledTouchResponder(element)) {
44
- await emitPressabilityPressEvents(config, element, options);
43
+ if (isEnabledTouchResponder(instance)) {
44
+ await emitPressabilityPressEvents(config, instance, options);
45
45
  return;
46
46
  }
47
- if (!element.parent) {
47
+ if (!instance.parent) {
48
48
  return;
49
49
  }
50
- await basePress(config, element.parent, options);
50
+ await basePress(config, instance.parent, options);
51
51
  };
52
- function isEnabledHostElement(element) {
53
- if (!(0, _pointerEvents.isPointerEventEnabled)(element)) {
52
+ function isEnabledHostElement(instance) {
53
+ if (!(0, _pointerEvents.isPointerEventEnabled)(instance)) {
54
54
  return false;
55
55
  }
56
- if ((0, _hostComponentNames.isHostText)(element)) {
57
- return element.props.disabled !== true;
56
+ if ((0, _hostComponentNames.isHostText)(instance)) {
57
+ return instance.props.disabled !== true;
58
58
  }
59
- if ((0, _hostComponentNames.isHostTextInput)(element)) {
60
- return element.props.editable !== false;
59
+ if ((0, _hostComponentNames.isHostTextInput)(instance)) {
60
+ return instance.props.editable !== false;
61
61
  }
62
62
  return true;
63
63
  }
64
- function isEnabledTouchResponder(element) {
65
- return (0, _pointerEvents.isPointerEventEnabled)(element) && element.props.onStartShouldSetResponder?.();
64
+ function isEnabledTouchResponder(instance) {
65
+ return (0, _pointerEvents.isPointerEventEnabled)(instance) && instance.props.onStartShouldSetResponder?.();
66
66
  }
67
- function hasPressEventHandler(element) {
68
- return (0, _eventHandler.getEventHandlerFromProps)(element.props, 'press') || (0, _eventHandler.getEventHandlerFromProps)(element.props, 'longPress') || (0, _eventHandler.getEventHandlerFromProps)(element.props, 'pressIn') || (0, _eventHandler.getEventHandlerFromProps)(element.props, 'pressOut');
67
+ function hasPressEventHandler(instance) {
68
+ return (0, _eventHandler.getEventHandlerFromProps)(instance.props, 'press') || (0, _eventHandler.getEventHandlerFromProps)(instance.props, 'longPress') || (0, _eventHandler.getEventHandlerFromProps)(instance.props, 'pressIn') || (0, _eventHandler.getEventHandlerFromProps)(instance.props, 'pressOut');
69
69
  }
70
70
 
71
71
  /**
72
- * Dispatches a press event sequence for host elements that have `onPress*` event handlers.
72
+ * Dispatches a press event sequence for host instances that have `onPress*` event handlers.
73
73
  */
74
- async function emitDirectPressEvents(config, element, options) {
74
+ async function emitDirectPressEvents(config, instance, options) {
75
75
  await (0, _utils.wait)(config);
76
- await (0, _utils.dispatchEvent)(element, 'pressIn', _eventBuilder.EventBuilder.Common.touch());
76
+ await (0, _utils.dispatchEvent)(instance, 'pressIn', (0, _eventBuilder.buildTouchEvent)());
77
77
  await (0, _utils.wait)(config, options.duration);
78
78
 
79
79
  // Long press events are emitted before `pressOut`.
80
80
  if (options.type === 'longPress') {
81
- await (0, _utils.dispatchEvent)(element, 'longPress', _eventBuilder.EventBuilder.Common.touch());
81
+ await (0, _utils.dispatchEvent)(instance, 'longPress', (0, _eventBuilder.buildTouchEvent)());
82
82
  }
83
- await (0, _utils.dispatchEvent)(element, 'pressOut', _eventBuilder.EventBuilder.Common.touch());
83
+ await (0, _utils.dispatchEvent)(instance, 'pressOut', (0, _eventBuilder.buildTouchEvent)());
84
84
 
85
85
  // Regular press events are emitted after `pressOut` according to the React Native docs.
86
86
  // See: https://reactnative.dev/docs/pressable#onpress
87
87
  // Experimentally for very short presses (< 130ms) `press` events are actually emitted before `onPressOut`, but
88
88
  // we will ignore that as in reality most pressed would be above the 130ms threshold.
89
89
  if (options.type === 'press') {
90
- await (0, _utils.dispatchEvent)(element, 'press', _eventBuilder.EventBuilder.Common.touch());
90
+ await (0, _utils.dispatchEvent)(instance, 'press', (0, _eventBuilder.buildTouchEvent)());
91
91
  }
92
92
  }
93
- async function emitPressabilityPressEvents(config, element, options) {
93
+ async function emitPressabilityPressEvents(config, instance, options) {
94
94
  await (0, _utils.wait)(config);
95
- await (0, _utils.dispatchEvent)(element, 'responderGrant', _eventBuilder.EventBuilder.Common.responderGrant());
95
+ await (0, _utils.dispatchEvent)(instance, 'responderGrant', (0, _eventBuilder.buildResponderGrantEvent)());
96
96
  const duration = options.duration ?? DEFAULT_MIN_PRESS_DURATION;
97
97
  await (0, _utils.wait)(config, duration);
98
- await (0, _utils.dispatchEvent)(element, 'responderRelease', _eventBuilder.EventBuilder.Common.responderRelease());
98
+ await (0, _utils.dispatchEvent)(instance, 'responderRelease', (0, _eventBuilder.buildResponderReleaseEvent)());
99
99
 
100
100
  // React Native will wait for minimal delay of DEFAULT_MIN_PRESS_DURATION
101
101
  // before emitting the `pressOut` event. We need to wait here, so that
@@ -1 +1 @@
1
- {"version":3,"file":"press.js","names":["_act","require","_eventHandler","_componentTree","_errors","_hostComponentNames","_pointerEvents","_eventBuilder","_utils","DEFAULT_MIN_PRESS_DURATION","exports","DEFAULT_LONG_PRESS_DELAY_MS","press","element","isHostElement","ErrorWithStack","basePress","config","type","longPress","options","duration","isEnabledHostElement","hasPressEventHandler","emitDirectPressEvents","isEnabledTouchResponder","emitPressabilityPressEvents","parent","isPointerEventEnabled","isHostText","props","disabled","isHostTextInput","editable","onStartShouldSetResponder","getEventHandlerFromProps","wait","dispatchEvent","EventBuilder","Common","touch","responderGrant","responderRelease","act"],"sources":["../../../src/user-event/press/press.ts"],"sourcesContent":["import type { HostElement } from 'test-renderer';\n\nimport { act } from '../../act';\nimport { getEventHandlerFromProps } from '../../event-handler';\nimport { isHostElement } from '../../helpers/component-tree';\nimport { ErrorWithStack } from '../../helpers/errors';\nimport { isHostText, isHostTextInput } from '../../helpers/host-component-names';\nimport { isPointerEventEnabled } from '../../helpers/pointer-events';\nimport { EventBuilder } from '../event-builder';\nimport type { UserEventConfig, UserEventInstance } from '../setup';\nimport { dispatchEvent, wait } from '../utils';\n\n// These are constants defined in the React Native repo\n// See: https://github.com/facebook/react-native/blob/50e38cc9f1e6713228a91ad50f426c4f65e65e1a/packages/react-native/Libraries/Pressability/Pressability.js#L264\nexport const DEFAULT_MIN_PRESS_DURATION = 130;\nexport const DEFAULT_LONG_PRESS_DELAY_MS = 500;\n\nexport interface PressOptions {\n duration?: number;\n}\n\nexport async function press(this: UserEventInstance, element: HostElement): Promise<void> {\n if (!isHostElement(element)) {\n throw new ErrorWithStack(`press() works only with host elements.`, press);\n }\n\n await basePress(this.config, element, {\n type: 'press',\n });\n}\n\nexport async function longPress(\n this: UserEventInstance,\n element: HostElement,\n options?: PressOptions,\n): Promise<void> {\n if (!isHostElement(element)) {\n throw new ErrorWithStack(`longPress() works only with host elements.`, longPress);\n }\n\n await basePress(this.config, element, {\n type: 'longPress',\n duration: options?.duration ?? DEFAULT_LONG_PRESS_DELAY_MS,\n });\n}\n\ninterface BasePressOptions {\n type: 'press' | 'longPress';\n duration?: number;\n}\n\nconst basePress = async (\n config: UserEventConfig,\n element: HostElement,\n options: BasePressOptions,\n): Promise<void> => {\n if (isEnabledHostElement(element) && hasPressEventHandler(element)) {\n await emitDirectPressEvents(config, element, options);\n return;\n }\n\n if (isEnabledTouchResponder(element)) {\n await emitPressabilityPressEvents(config, element, options);\n return;\n }\n\n if (!element.parent) {\n return;\n }\n\n await basePress(config, element.parent, options);\n};\n\nfunction isEnabledHostElement(element: HostElement) {\n if (!isPointerEventEnabled(element)) {\n return false;\n }\n\n if (isHostText(element)) {\n return element.props.disabled !== true;\n }\n\n if (isHostTextInput(element)) {\n return element.props.editable !== false;\n }\n\n return true;\n}\n\nfunction isEnabledTouchResponder(element: HostElement) {\n return isPointerEventEnabled(element) && element.props.onStartShouldSetResponder?.();\n}\n\nfunction hasPressEventHandler(element: HostElement) {\n return (\n getEventHandlerFromProps(element.props, 'press') ||\n getEventHandlerFromProps(element.props, 'longPress') ||\n getEventHandlerFromProps(element.props, 'pressIn') ||\n getEventHandlerFromProps(element.props, 'pressOut')\n );\n}\n\n/**\n * Dispatches a press event sequence for host elements that have `onPress*` event handlers.\n */\nasync function emitDirectPressEvents(\n config: UserEventConfig,\n element: HostElement,\n options: BasePressOptions,\n) {\n await wait(config);\n await dispatchEvent(element, 'pressIn', EventBuilder.Common.touch());\n\n await wait(config, options.duration);\n\n // Long press events are emitted before `pressOut`.\n if (options.type === 'longPress') {\n await dispatchEvent(element, 'longPress', EventBuilder.Common.touch());\n }\n\n await dispatchEvent(element, 'pressOut', EventBuilder.Common.touch());\n\n // Regular press events are emitted after `pressOut` according to the React Native docs.\n // See: https://reactnative.dev/docs/pressable#onpress\n // Experimentally for very short presses (< 130ms) `press` events are actually emitted before `onPressOut`, but\n // we will ignore that as in reality most pressed would be above the 130ms threshold.\n if (options.type === 'press') {\n await dispatchEvent(element, 'press', EventBuilder.Common.touch());\n }\n}\n\nasync function emitPressabilityPressEvents(\n config: UserEventConfig,\n element: HostElement,\n options: BasePressOptions,\n) {\n await wait(config);\n\n await dispatchEvent(element, 'responderGrant', EventBuilder.Common.responderGrant());\n\n const duration = options.duration ?? DEFAULT_MIN_PRESS_DURATION;\n await wait(config, duration);\n\n await dispatchEvent(element, 'responderRelease', EventBuilder.Common.responderRelease());\n\n // React Native will wait for minimal delay of DEFAULT_MIN_PRESS_DURATION\n // before emitting the `pressOut` event. We need to wait here, so that\n // `press()` function does not return before that.\n if (DEFAULT_MIN_PRESS_DURATION - duration > 0) {\n await act(() => wait(config, DEFAULT_MIN_PRESS_DURATION - duration));\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"press.js","names":["_act","require","_eventBuilder","_eventHandler","_componentTree","_errors","_hostComponentNames","_pointerEvents","_utils","DEFAULT_MIN_PRESS_DURATION","exports","DEFAULT_LONG_PRESS_DELAY_MS","press","instance","isTestInstance","ErrorWithStack","basePress","config","type","longPress","options","duration","isEnabledHostElement","hasPressEventHandler","emitDirectPressEvents","isEnabledTouchResponder","emitPressabilityPressEvents","parent","isPointerEventEnabled","isHostText","props","disabled","isHostTextInput","editable","onStartShouldSetResponder","getEventHandlerFromProps","wait","dispatchEvent","buildTouchEvent","buildResponderGrantEvent","buildResponderReleaseEvent","act"],"sources":["../../../src/user-event/press/press.ts"],"sourcesContent":["import type { TestInstance } from 'test-renderer';\n\nimport { act } from '../../act';\nimport {\n buildResponderGrantEvent,\n buildResponderReleaseEvent,\n buildTouchEvent,\n} from '../../event-builder';\nimport { getEventHandlerFromProps } from '../../event-handler';\nimport { isTestInstance } from '../../helpers/component-tree';\nimport { ErrorWithStack } from '../../helpers/errors';\nimport { isHostText, isHostTextInput } from '../../helpers/host-component-names';\nimport { isPointerEventEnabled } from '../../helpers/pointer-events';\nimport type { UserEventConfig, UserEventInstance } from '../setup';\nimport { dispatchEvent, wait } from '../utils';\n\n// These are constants defined in the React Native repo\n// See: https://github.com/facebook/react-native/blob/50e38cc9f1e6713228a91ad50f426c4f65e65e1a/packages/react-native/Libraries/Pressability/Pressability.js#L264\nexport const DEFAULT_MIN_PRESS_DURATION = 130;\nexport const DEFAULT_LONG_PRESS_DELAY_MS = 500;\n\nexport interface PressOptions {\n duration?: number;\n}\n\nexport async function press(this: UserEventInstance, instance: TestInstance): Promise<void> {\n if (!isTestInstance(instance)) {\n throw new ErrorWithStack(`press() works only with host instances.`, press);\n }\n\n await basePress(this.config, instance, {\n type: 'press',\n });\n}\n\nexport async function longPress(\n this: UserEventInstance,\n instance: TestInstance,\n options?: PressOptions,\n): Promise<void> {\n if (!isTestInstance(instance)) {\n throw new ErrorWithStack(`longPress() works only with host instances.`, longPress);\n }\n\n await basePress(this.config, instance, {\n type: 'longPress',\n duration: options?.duration ?? DEFAULT_LONG_PRESS_DELAY_MS,\n });\n}\n\ninterface BasePressOptions {\n type: 'press' | 'longPress';\n duration?: number;\n}\n\nconst basePress = async (\n config: UserEventConfig,\n instance: TestInstance,\n options: BasePressOptions,\n): Promise<void> => {\n if (isEnabledHostElement(instance) && hasPressEventHandler(instance)) {\n await emitDirectPressEvents(config, instance, options);\n return;\n }\n\n if (isEnabledTouchResponder(instance)) {\n await emitPressabilityPressEvents(config, instance, options);\n return;\n }\n\n if (!instance.parent) {\n return;\n }\n\n await basePress(config, instance.parent, options);\n};\n\nfunction isEnabledHostElement(instance: TestInstance) {\n if (!isPointerEventEnabled(instance)) {\n return false;\n }\n\n if (isHostText(instance)) {\n return instance.props.disabled !== true;\n }\n\n if (isHostTextInput(instance)) {\n return instance.props.editable !== false;\n }\n\n return true;\n}\n\nfunction isEnabledTouchResponder(instance: TestInstance) {\n return isPointerEventEnabled(instance) && instance.props.onStartShouldSetResponder?.();\n}\n\nfunction hasPressEventHandler(instance: TestInstance) {\n return (\n getEventHandlerFromProps(instance.props, 'press') ||\n getEventHandlerFromProps(instance.props, 'longPress') ||\n getEventHandlerFromProps(instance.props, 'pressIn') ||\n getEventHandlerFromProps(instance.props, 'pressOut')\n );\n}\n\n/**\n * Dispatches a press event sequence for host instances that have `onPress*` event handlers.\n */\nasync function emitDirectPressEvents(\n config: UserEventConfig,\n instance: TestInstance,\n options: BasePressOptions,\n) {\n await wait(config);\n await dispatchEvent(instance, 'pressIn', buildTouchEvent());\n\n await wait(config, options.duration);\n\n // Long press events are emitted before `pressOut`.\n if (options.type === 'longPress') {\n await dispatchEvent(instance, 'longPress', buildTouchEvent());\n }\n\n await dispatchEvent(instance, 'pressOut', buildTouchEvent());\n\n // Regular press events are emitted after `pressOut` according to the React Native docs.\n // See: https://reactnative.dev/docs/pressable#onpress\n // Experimentally for very short presses (< 130ms) `press` events are actually emitted before `onPressOut`, but\n // we will ignore that as in reality most pressed would be above the 130ms threshold.\n if (options.type === 'press') {\n await dispatchEvent(instance, 'press', buildTouchEvent());\n }\n}\n\nasync function emitPressabilityPressEvents(\n config: UserEventConfig,\n instance: TestInstance,\n options: BasePressOptions,\n) {\n await wait(config);\n\n await dispatchEvent(instance, 'responderGrant', buildResponderGrantEvent());\n\n const duration = options.duration ?? DEFAULT_MIN_PRESS_DURATION;\n await wait(config, duration);\n\n await dispatchEvent(instance, 'responderRelease', buildResponderReleaseEvent());\n\n // React Native will wait for minimal delay of DEFAULT_MIN_PRESS_DURATION\n // before emitting the `pressOut` event. We need to wait here, so that\n // `press()` function does not return before that.\n if (DEFAULT_MIN_PRESS_DURATION - duration > 0) {\n await act(() => wait(config, DEFAULT_MIN_PRESS_DURATION - duration));\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import type { HostElement } from 'test-renderer';
1
+ import type { TestInstance } from 'test-renderer';
2
2
  import type { Size } from '../../types';
3
3
  import type { UserEventInstance } from '../setup';
4
4
  interface CommonScrollToOptions {
@@ -18,5 +18,5 @@ export interface HorizontalScrollToOptions extends CommonScrollToOptions {
18
18
  momentumY?: never;
19
19
  }
20
20
  export type ScrollToOptions = VerticalScrollToOptions | HorizontalScrollToOptions;
21
- export declare function scrollTo(this: UserEventInstance, element: HostElement, options: ScrollToOptions): Promise<void>;
21
+ export declare function scrollTo(this: UserEventInstance, instance: TestInstance, options: ScrollToOptions): Promise<void>;
22
22
  export {};
@@ -5,20 +5,20 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.scrollTo = scrollTo;
7
7
  var _jestMatcherUtils = require("jest-matcher-utils");
8
+ var _eventBuilder = require("../../event-builder");
8
9
  var _errors = require("../../helpers/errors");
9
10
  var _hostComponentNames = require("../../helpers/host-component-names");
10
11
  var _object = require("../../helpers/object");
11
12
  var _nativeState = require("../../native-state");
12
- var _eventBuilder = require("../event-builder");
13
13
  var _utils = require("../utils");
14
14
  var _utils2 = require("./utils");
15
- async function scrollTo(element, options) {
16
- if (!(0, _hostComponentNames.isHostScrollView)(element)) {
17
- throw new _errors.ErrorWithStack(`scrollTo() works only with host "ScrollView" elements. Passed element has type "${element.type}".`, scrollTo);
15
+ async function scrollTo(instance, options) {
16
+ if (!(0, _hostComponentNames.isHostScrollView)(instance)) {
17
+ throw new _errors.ErrorWithStack(`scrollTo() works only with host "ScrollView" instances. Passed instance has type "${instance.type}".`, scrollTo);
18
18
  }
19
- ensureScrollViewDirection(element, options);
20
- await (0, _utils.dispatchEvent)(element, 'contentSizeChange', options.contentSize?.width ?? 0, options.contentSize?.height ?? 0);
21
- const initialOffset = _nativeState.nativeState.contentOffsetForElement.get(element) ?? {
19
+ ensureScrollViewDirection(instance, options);
20
+ await (0, _utils.dispatchEvent)(instance, 'contentSizeChange', options.contentSize?.width ?? 0, options.contentSize?.height ?? 0);
21
+ const initialOffset = _nativeState.nativeState.contentOffsetForInstance.get(instance) ?? {
22
22
  x: 0,
23
23
  y: 0
24
24
  };
@@ -26,54 +26,54 @@ async function scrollTo(element, options) {
26
26
  y: options.y,
27
27
  x: options.x
28
28
  }, initialOffset, _utils2.linearInterpolator);
29
- await emitDragScrollEvents(this.config, element, dragSteps, options);
29
+ await emitDragScrollEvents(this.config, instance, dragSteps, options);
30
30
  const momentumStart = dragSteps.at(-1) ?? initialOffset;
31
31
  const momentumSteps = (0, _utils2.createScrollSteps)({
32
32
  y: options.momentumY,
33
33
  x: options.momentumX
34
34
  }, momentumStart, _utils2.inertialInterpolator);
35
- await emitMomentumScrollEvents(this.config, element, momentumSteps, options);
35
+ await emitMomentumScrollEvents(this.config, instance, momentumSteps, options);
36
36
  const finalOffset = momentumSteps.at(-1) ?? dragSteps.at(-1) ?? initialOffset;
37
- _nativeState.nativeState.contentOffsetForElement.set(element, finalOffset);
37
+ _nativeState.nativeState.contentOffsetForInstance.set(instance, finalOffset);
38
38
  }
39
- async function emitDragScrollEvents(config, element, scrollSteps, scrollOptions) {
39
+ async function emitDragScrollEvents(config, instance, scrollSteps, scrollOptions) {
40
40
  if (scrollSteps.length === 0) {
41
41
  return;
42
42
  }
43
43
  await (0, _utils.wait)(config);
44
- await (0, _utils.dispatchEvent)(element, 'scrollBeginDrag', _eventBuilder.EventBuilder.ScrollView.scroll(scrollSteps[0], scrollOptions));
44
+ await (0, _utils.dispatchEvent)(instance, 'scrollBeginDrag', (0, _eventBuilder.buildScrollEvent)(scrollSteps[0], scrollOptions));
45
45
 
46
46
  // Note: experimentally, in case of drag scroll the last scroll step
47
47
  // will not trigger `scroll` event.
48
48
  // See: https://github.com/callstack/react-native-testing-library/wiki/ScrollView-Events
49
49
  for (let i = 1; i < scrollSteps.length - 1; i += 1) {
50
50
  await (0, _utils.wait)(config);
51
- await (0, _utils.dispatchEvent)(element, 'scroll', _eventBuilder.EventBuilder.ScrollView.scroll(scrollSteps[i], scrollOptions));
51
+ await (0, _utils.dispatchEvent)(instance, 'scroll', (0, _eventBuilder.buildScrollEvent)(scrollSteps[i], scrollOptions));
52
52
  }
53
53
  await (0, _utils.wait)(config);
54
54
  const lastStep = scrollSteps.at(-1);
55
- await (0, _utils.dispatchEvent)(element, 'scrollEndDrag', _eventBuilder.EventBuilder.ScrollView.scroll(lastStep, scrollOptions));
55
+ await (0, _utils.dispatchEvent)(instance, 'scrollEndDrag', (0, _eventBuilder.buildScrollEvent)(lastStep, scrollOptions));
56
56
  }
57
- async function emitMomentumScrollEvents(config, element, scrollSteps, scrollOptions) {
57
+ async function emitMomentumScrollEvents(config, instance, scrollSteps, scrollOptions) {
58
58
  if (scrollSteps.length === 0) {
59
59
  return;
60
60
  }
61
61
  await (0, _utils.wait)(config);
62
- await (0, _utils.dispatchEvent)(element, 'momentumScrollBegin', _eventBuilder.EventBuilder.ScrollView.scroll(scrollSteps[0], scrollOptions));
62
+ await (0, _utils.dispatchEvent)(instance, 'momentumScrollBegin', (0, _eventBuilder.buildScrollEvent)(scrollSteps[0], scrollOptions));
63
63
 
64
64
  // Note: experimentally, in case of momentum scroll the last scroll step
65
65
  // will trigger `scroll` event.
66
66
  // See: https://github.com/callstack/react-native-testing-library/wiki/ScrollView-Events
67
67
  for (let i = 1; i < scrollSteps.length; i += 1) {
68
68
  await (0, _utils.wait)(config);
69
- await (0, _utils.dispatchEvent)(element, 'scroll', _eventBuilder.EventBuilder.ScrollView.scroll(scrollSteps[i], scrollOptions));
69
+ await (0, _utils.dispatchEvent)(instance, 'scroll', (0, _eventBuilder.buildScrollEvent)(scrollSteps[i], scrollOptions));
70
70
  }
71
71
  await (0, _utils.wait)(config);
72
72
  const lastStep = scrollSteps.at(-1);
73
- await (0, _utils.dispatchEvent)(element, 'momentumScrollEnd', _eventBuilder.EventBuilder.ScrollView.scroll(lastStep, scrollOptions));
73
+ await (0, _utils.dispatchEvent)(instance, 'momentumScrollEnd', (0, _eventBuilder.buildScrollEvent)(lastStep, scrollOptions));
74
74
  }
75
- function ensureScrollViewDirection(element, options) {
76
- const isVerticalScrollView = element.props.horizontal !== true;
75
+ function ensureScrollViewDirection(instance, options) {
76
+ const isVerticalScrollView = instance.props.horizontal !== true;
77
77
  const hasHorizontalScrollOptions = options.x !== undefined || options.momentumX !== undefined;
78
78
  if (isVerticalScrollView && hasHorizontalScrollOptions) {
79
79
  throw new _errors.ErrorWithStack(`scrollTo() expected only vertical scroll options: "y" and "momentumY" for vertical "ScrollView" element but received ${(0, _jestMatcherUtils.stringify)((0, _object.pick)(options, ['x', 'momentumX']))}`, scrollTo);