@testing-library/react-native 12.6.1 → 12.7.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 (99) hide show
  1. package/build/cleanup.d.ts +1 -2
  2. package/build/cleanup.js +1 -1
  3. package/build/cleanup.js.map +1 -1
  4. package/build/config.d.ts +1 -0
  5. package/build/config.js.map +1 -1
  6. package/build/fire-event.js +31 -0
  7. package/build/fire-event.js.map +1 -1
  8. package/build/helpers/accessibility.d.ts +23 -14
  9. package/build/helpers/accessibility.js +104 -78
  10. package/build/helpers/accessibility.js.map +1 -1
  11. package/build/helpers/format-default.js +1 -1
  12. package/build/helpers/format-default.js.map +1 -1
  13. package/build/helpers/host-component-names.d.ts +14 -4
  14. package/build/helpers/host-component-names.js +25 -4
  15. package/build/helpers/host-component-names.js.map +1 -1
  16. package/build/helpers/matchers/match-accessibility-state.js +16 -18
  17. package/build/helpers/matchers/match-accessibility-state.js.map +1 -1
  18. package/build/helpers/matchers/match-accessibility-value.js +1 -1
  19. package/build/helpers/matchers/match-accessibility-value.js.map +1 -1
  20. package/build/helpers/matchers/match-label-text.js +3 -3
  21. package/build/helpers/matchers/match-label-text.js.map +1 -1
  22. package/build/helpers/text-input.js +2 -1
  23. package/build/helpers/text-input.js.map +1 -1
  24. package/build/matchers/extend-expect.js +1 -2
  25. package/build/matchers/extend-expect.js.map +1 -1
  26. package/build/matchers/index.d.ts +1 -2
  27. package/build/matchers/index.js +1 -2
  28. package/build/matchers/index.js.map +1 -1
  29. package/build/matchers/to-be-busy.d.ts +1 -1
  30. package/build/matchers/to-be-busy.js +1 -1
  31. package/build/matchers/to-be-busy.js.map +1 -1
  32. package/build/matchers/to-be-checked.js +7 -6
  33. package/build/matchers/to-be-checked.js.map +1 -1
  34. package/build/matchers/to-be-disabled.d.ts +1 -1
  35. package/build/matchers/to-be-disabled.js +4 -15
  36. package/build/matchers/to-be-disabled.js.map +1 -1
  37. package/build/matchers/to-be-expanded.d.ts +5 -1
  38. package/build/matchers/to-be-expanded.js +12 -1
  39. package/build/matchers/to-be-expanded.js.map +1 -1
  40. package/build/matchers/to-be-partially-checked.js +2 -2
  41. package/build/matchers/to-be-partially-checked.js.map +1 -1
  42. package/build/matchers/to-be-selected.d.ts +1 -1
  43. package/build/matchers/to-be-selected.js +1 -1
  44. package/build/matchers/to-be-selected.js.map +1 -1
  45. package/build/matchers/to-have-accessibility-value.js +1 -1
  46. package/build/matchers/to-have-accessibility-value.js.map +1 -1
  47. package/build/matchers/to-have-accessible-name.js +1 -1
  48. package/build/matchers/to-have-accessible-name.js.map +1 -1
  49. package/build/matchers/utils.js +1 -1
  50. package/build/matchers/utils.js.map +1 -1
  51. package/build/native-state.d.ts +12 -0
  52. package/build/native-state.js +17 -0
  53. package/build/native-state.js.map +1 -0
  54. package/build/queries/hint-text.js +2 -2
  55. package/build/queries/hint-text.js.map +1 -1
  56. package/build/queries/role.js +4 -3
  57. package/build/queries/role.js.map +1 -1
  58. package/build/queries/unsafe-props.js +1 -1
  59. package/build/queries/unsafe-props.js.map +1 -1
  60. package/build/queries/unsafe-type.js +1 -1
  61. package/build/queries/unsafe-type.js.map +1 -1
  62. package/build/render.js.map +1 -1
  63. package/build/types.d.ts +14 -0
  64. package/build/types.js.map +1 -1
  65. package/build/user-event/event-builder/index.d.ts +2 -2
  66. package/build/user-event/event-builder/scroll-view.d.ts +4 -16
  67. package/build/user-event/event-builder/scroll-view.js +0 -4
  68. package/build/user-event/event-builder/scroll-view.js.map +1 -1
  69. package/build/user-event/event-builder/text-input.d.ts +2 -2
  70. package/build/user-event/event-builder/text-input.js.map +1 -1
  71. package/build/user-event/paste.js +2 -0
  72. package/build/user-event/paste.js.map +1 -1
  73. package/build/user-event/press/press.js +0 -1
  74. package/build/user-event/press/press.js.map +1 -1
  75. package/build/user-event/scroll/scroll-to.d.ts +3 -8
  76. package/build/user-event/scroll/scroll-to.js +9 -6
  77. package/build/user-event/scroll/scroll-to.js.map +1 -1
  78. package/build/user-event/scroll/utils.d.ts +2 -2
  79. package/build/user-event/scroll/utils.js.map +1 -1
  80. package/build/user-event/type/type.js +2 -0
  81. package/build/user-event/type/type.js.map +1 -1
  82. package/build/user-event/utils/content-size.d.ts +2 -5
  83. package/build/user-event/utils/content-size.js +0 -1
  84. package/build/user-event/utils/content-size.js.map +1 -1
  85. package/build/user-event/utils/index.d.ts +0 -1
  86. package/build/user-event/utils/index.js +0 -11
  87. package/build/user-event/utils/index.js.map +1 -1
  88. package/build/wait-for-element-to-be-removed.js +1 -1
  89. package/build/wait-for-element-to-be-removed.js.map +1 -1
  90. package/package.json +3 -4
  91. package/build/matchers/to-be-collapsed.d.ts +0 -5
  92. package/build/matchers/to-be-collapsed.js +0 -20
  93. package/build/matchers/to-be-collapsed.js.map +0 -1
  94. package/build/user-event/scroll/state.d.ts +0 -4
  95. package/build/user-event/scroll/state.js +0 -18
  96. package/build/user-event/scroll/state.js.map +0 -1
  97. package/build/user-event/utils/warn-about-real-timers.d.ts +0 -1
  98. package/build/user-event/utils/warn-about-real-timers.js +0 -23
  99. package/build/user-event/utils/warn-about-real-timers.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"text-input.js","names":["_base","require","TextInputEventBuilder","exports","change","text","baseSyntheticEvent","nativeEvent","target","eventCount","keyPress","key","submitEditing","endEditing","selectionChange","start","end","selection","contentSizeChange","width","height","contentSize"],"sources":["../../../src/user-event/event-builder/text-input.ts"],"sourcesContent":["import { ContentSize } from '../utils/content-size';\nimport { TextRange } from '../utils/text-range';\nimport { baseSyntheticEvent } from './base';\n\nexport const TextInputEventBuilder = {\n /**\n * Experimental values:\n * - iOS: `{\"eventCount\": 4, \"target\": 75, \"text\": \"Test\"}`\n * - Android: `{\"eventCount\": 6, \"target\": 53, \"text\": \"Tes\"}`\n */\n change: (text: string) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { text, target: 0, eventCount: 0 },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"eventCount\": 3, \"key\": \"a\", \"target\": 75}`\n * - Android: `{\"key\": \"a\"}`\n */\n keyPress: (key: string) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { key },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"eventCount\": 4, \"target\": 75, \"text\": \"Test\"}`\n * - Android: `{\"target\": 53, \"text\": \"Test\"}`\n */\n submitEditing: (text: string) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { text, target: 0 },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"eventCount\": 4, \"target\": 75, \"text\": \"Test\"}`\n * - Android: `{\"target\": 53, \"text\": \"Test\"}`\n */\n endEditing: (text: string) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { text, target: 0 },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"selection\": {\"end\": 4, \"start\": 4}, \"target\": 75}`\n * - Android: `{\"selection\": {\"end\": 4, \"start\": 4}}`\n */\n selectionChange: ({ start, end }: TextRange) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { selection: { start, end } },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"contentSize\": {\"height\": 21.666666666666668, \"width\": 11.666666666666666}, \"target\": 75}`\n * - Android: `{\"contentSize\": {\"height\": 61.45454406738281, \"width\": 352.7272644042969}, \"target\": 53}`\n */\n contentSizeChange: ({ width, height }: ContentSize) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { contentSize: { width, height }, target: 0 },\n };\n },\n};\n"],"mappings":";;;;;;AAEA,IAAAA,KAAA,GAAAC,OAAA;AAEO,MAAMC,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,GAAG;EACnC;AACF;AACA;AACA;AACA;EACEE,MAAM,EAAGC,IAAY,IAAK;IACxB,OAAO;MACL,GAAG,IAAAC,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEF,IAAI;QAAEG,MAAM,EAAE,CAAC;QAAEC,UAAU,EAAE;MAAE;IAChD,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,QAAQ,EAAGC,GAAW,IAAK;IACzB,OAAO;MACL,GAAG,IAAAL,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEI;MAAI;IACrB,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,aAAa,EAAGP,IAAY,IAAK;IAC/B,OAAO;MACL,GAAG,IAAAC,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEF,IAAI;QAAEG,MAAM,EAAE;MAAE;IACjC,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEK,UAAU,EAAGR,IAAY,IAAK;IAC5B,OAAO;MACL,GAAG,IAAAC,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEF,IAAI;QAAEG,MAAM,EAAE;MAAE;IACjC,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEM,eAAe,EAAEA,CAAC;IAAEC,KAAK;IAAEC;EAAe,CAAC,KAAK;IAC9C,OAAO;MACL,GAAG,IAAAV,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEU,SAAS,EAAE;UAAEF,KAAK;UAAEC;QAAI;MAAE;IAC3C,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEE,iBAAiB,EAAEA,CAAC;IAAEC,KAAK;IAAEC;EAAoB,CAAC,KAAK;IACrD,OAAO;MACL,GAAG,IAAAd,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEc,WAAW,EAAE;UAAEF,KAAK;UAAEC;QAAO,CAAC;QAAEZ,MAAM,EAAE;MAAE;IAC3D,CAAC;EACH;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"text-input.js","names":["_base","require","TextInputEventBuilder","exports","change","text","baseSyntheticEvent","nativeEvent","target","eventCount","keyPress","key","submitEditing","endEditing","selectionChange","start","end","selection","contentSizeChange","width","height","contentSize"],"sources":["../../../src/user-event/event-builder/text-input.ts"],"sourcesContent":["import { Size } from '../../types';\nimport { TextRange } from '../utils/text-range';\nimport { baseSyntheticEvent } from './base';\n\nexport const TextInputEventBuilder = {\n /**\n * Experimental values:\n * - iOS: `{\"eventCount\": 4, \"target\": 75, \"text\": \"Test\"}`\n * - Android: `{\"eventCount\": 6, \"target\": 53, \"text\": \"Tes\"}`\n */\n change: (text: string) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { text, target: 0, eventCount: 0 },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"eventCount\": 3, \"key\": \"a\", \"target\": 75}`\n * - Android: `{\"key\": \"a\"}`\n */\n keyPress: (key: string) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { key },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"eventCount\": 4, \"target\": 75, \"text\": \"Test\"}`\n * - Android: `{\"target\": 53, \"text\": \"Test\"}`\n */\n submitEditing: (text: string) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { text, target: 0 },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"eventCount\": 4, \"target\": 75, \"text\": \"Test\"}`\n * - Android: `{\"target\": 53, \"text\": \"Test\"}`\n */\n endEditing: (text: string) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { text, target: 0 },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"selection\": {\"end\": 4, \"start\": 4}, \"target\": 75}`\n * - Android: `{\"selection\": {\"end\": 4, \"start\": 4}}`\n */\n selectionChange: ({ start, end }: TextRange) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { selection: { start, end } },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"contentSize\": {\"height\": 21.666666666666668, \"width\": 11.666666666666666}, \"target\": 75}`\n * - Android: `{\"contentSize\": {\"height\": 61.45454406738281, \"width\": 352.7272644042969}, \"target\": 53}`\n */\n contentSizeChange: ({ width, height }: Size) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { contentSize: { width, height }, target: 0 },\n };\n },\n};\n"],"mappings":";;;;;;AAEA,IAAAA,KAAA,GAAAC,OAAA;AAEO,MAAMC,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,GAAG;EACnC;AACF;AACA;AACA;AACA;EACEE,MAAM,EAAGC,IAAY,IAAK;IACxB,OAAO;MACL,GAAG,IAAAC,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEF,IAAI;QAAEG,MAAM,EAAE,CAAC;QAAEC,UAAU,EAAE;MAAE;IAChD,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,QAAQ,EAAGC,GAAW,IAAK;IACzB,OAAO;MACL,GAAG,IAAAL,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEI;MAAI;IACrB,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,aAAa,EAAGP,IAAY,IAAK;IAC/B,OAAO;MACL,GAAG,IAAAC,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEF,IAAI;QAAEG,MAAM,EAAE;MAAE;IACjC,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEK,UAAU,EAAGR,IAAY,IAAK;IAC5B,OAAO;MACL,GAAG,IAAAC,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEF,IAAI;QAAEG,MAAM,EAAE;MAAE;IACjC,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEM,eAAe,EAAEA,CAAC;IAAEC,KAAK;IAAEC;EAAe,CAAC,KAAK;IAC9C,OAAO;MACL,GAAG,IAAAV,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEU,SAAS,EAAE;UAAEF,KAAK;UAAEC;QAAI;MAAE;IAC3C,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEE,iBAAiB,EAAEA,CAAC;IAAEC,KAAK;IAAEC;EAAa,CAAC,KAAK;IAC9C,OAAO;MACL,GAAG,IAAAd,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEc,WAAW,EAAE;UAAEF,KAAK;UAAEC;QAAO,CAAC;QAAEZ,MAAM,EAAE;MAAE;IAC3D,CAAC;EACH;AACF,CAAC","ignoreList":[]}
@@ -8,6 +8,7 @@ var _errors = require("../helpers/errors");
8
8
  var _hostComponentNames = require("../helpers/host-component-names");
9
9
  var _pointerEvents = require("../helpers/pointer-events");
10
10
  var _textInput = require("../helpers/text-input");
11
+ var _nativeState = require("../native-state");
11
12
  var _eventBuilder = require("./event-builder");
12
13
  var _utils = require("./utils");
13
14
  async function paste(element, text) {
@@ -30,6 +31,7 @@ async function paste(element, text) {
30
31
  (0, _utils.dispatchEvent)(element, 'selectionChange', _eventBuilder.EventBuilder.TextInput.selectionChange(rangeToClear));
31
32
 
32
33
  // 3. Paste the text
34
+ _nativeState.nativeState.valueForElement.set(element, text);
33
35
  (0, _utils.dispatchEvent)(element, 'change', _eventBuilder.EventBuilder.TextInput.change(text));
34
36
  (0, _utils.dispatchEvent)(element, 'changeText', text);
35
37
  const rangeAfter = {
@@ -1 +1 @@
1
- {"version":3,"file":"paste.js","names":["_errors","require","_hostComponentNames","_pointerEvents","_textInput","_eventBuilder","_utils","paste","element","text","isHostTextInput","ErrorWithStack","type","isTextInputEditable","isPointerEventEnabled","dispatchEvent","EventBuilder","Common","focus","textToClear","props","value","defaultValue","rangeToClear","start","end","length","TextInput","selectionChange","change","rangeAfter","isMultiline","multiline","contentSize","getTextContentSize","contentSizeChange","wait","config","endEditing","blur"],"sources":["../../src/user-event/paste.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport { ErrorWithStack } from '../helpers/errors';\nimport { isHostTextInput } from '../helpers/host-component-names';\nimport { isPointerEventEnabled } from '../helpers/pointer-events';\nimport { isTextInputEditable } from '../helpers/text-input';\nimport { EventBuilder } from './event-builder';\nimport { UserEventInstance } from './setup';\nimport { dispatchEvent, getTextContentSize, wait } from './utils';\n\nexport async function paste(\n this: UserEventInstance,\n element: ReactTestInstance,\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 (!isTextInputEditable(element) || !isPointerEventEnabled(element)) {\n return;\n }\n\n // 1. Enter element\n dispatchEvent(element, 'focus', EventBuilder.Common.focus());\n\n // 2. Select all\n const textToClear = element.props.value ?? element.props.defaultValue ?? '';\n const rangeToClear = { start: 0, end: textToClear.length };\n dispatchEvent(element, 'selectionChange', EventBuilder.TextInput.selectionChange(rangeToClear));\n\n // 3. Paste the text\n dispatchEvent(element, 'change', EventBuilder.TextInput.change(text));\n dispatchEvent(element, 'changeText', text);\n\n const rangeAfter = { start: text.length, end: text.length };\n dispatchEvent(element, 'selectionChange', EventBuilder.TextInput.selectionChange(rangeAfter));\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 dispatchEvent(\n element,\n 'contentSizeChange',\n EventBuilder.TextInput.contentSizeChange(contentSize),\n );\n }\n\n // 4. Exit element\n await wait(this.config);\n dispatchEvent(element, 'endEditing', EventBuilder.TextInput.endEditing(text));\n dispatchEvent(element, 'blur', EventBuilder.Common.blur());\n}\n"],"mappings":";;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,aAAA,GAAAJ,OAAA;AAEA,IAAAK,MAAA,GAAAL,OAAA;AAEO,eAAeM,KAAKA,CAEzBC,OAA0B,EAC1BC,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,IAAAO,oBAAa,EAACP,OAAO,EAAE,OAAO,EAAEQ,0BAAY,CAACC,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;;EAE5D;EACA,MAAMC,WAAW,GAAGX,OAAO,CAACY,KAAK,CAACC,KAAK,IAAIb,OAAO,CAACY,KAAK,CAACE,YAAY,IAAI,EAAE;EAC3E,MAAMC,YAAY,GAAG;IAAEC,KAAK,EAAE,CAAC;IAAEC,GAAG,EAAEN,WAAW,CAACO;EAAO,CAAC;EAC1D,IAAAX,oBAAa,EAACP,OAAO,EAAE,iBAAiB,EAAEQ,0BAAY,CAACW,SAAS,CAACC,eAAe,CAACL,YAAY,CAAC,CAAC;;EAE/F;EACA,IAAAR,oBAAa,EAACP,OAAO,EAAE,QAAQ,EAAEQ,0BAAY,CAACW,SAAS,CAACE,MAAM,CAACpB,IAAI,CAAC,CAAC;EACrE,IAAAM,oBAAa,EAACP,OAAO,EAAE,YAAY,EAAEC,IAAI,CAAC;EAE1C,MAAMqB,UAAU,GAAG;IAAEN,KAAK,EAAEf,IAAI,CAACiB,MAAM;IAAED,GAAG,EAAEhB,IAAI,CAACiB;EAAO,CAAC;EAC3D,IAAAX,oBAAa,EAACP,OAAO,EAAE,iBAAiB,EAAEQ,0BAAY,CAACW,SAAS,CAACC,eAAe,CAACE,UAAU,CAAC,CAAC;;EAE7F;EACA;EACA,MAAMC,WAAW,GAAGvB,OAAO,CAACY,KAAK,CAACY,SAAS,KAAK,IAAI;EACpD,IAAID,WAAW,EAAE;IACf,MAAME,WAAW,GAAG,IAAAC,yBAAkB,EAACzB,IAAI,CAAC;IAC5C,IAAAM,oBAAa,EACXP,OAAO,EACP,mBAAmB,EACnBQ,0BAAY,CAACW,SAAS,CAACQ,iBAAiB,CAACF,WAAW,CACtD,CAAC;EACH;;EAEA;EACA,MAAM,IAAAG,WAAI,EAAC,IAAI,CAACC,MAAM,CAAC;EACvB,IAAAtB,oBAAa,EAACP,OAAO,EAAE,YAAY,EAAEQ,0BAAY,CAACW,SAAS,CAACW,UAAU,CAAC7B,IAAI,CAAC,CAAC;EAC7E,IAAAM,oBAAa,EAACP,OAAO,EAAE,MAAM,EAAEQ,0BAAY,CAACC,MAAM,CAACsB,IAAI,CAAC,CAAC,CAAC;AAC5D","ignoreList":[]}
1
+ {"version":3,"file":"paste.js","names":["_errors","require","_hostComponentNames","_pointerEvents","_textInput","_nativeState","_eventBuilder","_utils","paste","element","text","isHostTextInput","ErrorWithStack","type","isTextInputEditable","isPointerEventEnabled","dispatchEvent","EventBuilder","Common","focus","textToClear","props","value","defaultValue","rangeToClear","start","end","length","TextInput","selectionChange","nativeState","valueForElement","set","change","rangeAfter","isMultiline","multiline","contentSize","getTextContentSize","contentSizeChange","wait","config","endEditing","blur"],"sources":["../../src/user-event/paste.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport { ErrorWithStack } from '../helpers/errors';\nimport { isHostTextInput } from '../helpers/host-component-names';\nimport { isPointerEventEnabled } from '../helpers/pointer-events';\nimport { isTextInputEditable } from '../helpers/text-input';\nimport { nativeState } from '../native-state';\nimport { EventBuilder } from './event-builder';\nimport { UserEventInstance } from './setup';\nimport { dispatchEvent, getTextContentSize, wait } from './utils';\n\nexport async function paste(\n this: UserEventInstance,\n element: ReactTestInstance,\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 (!isTextInputEditable(element) || !isPointerEventEnabled(element)) {\n return;\n }\n\n // 1. Enter element\n dispatchEvent(element, 'focus', EventBuilder.Common.focus());\n\n // 2. Select all\n const textToClear = element.props.value ?? element.props.defaultValue ?? '';\n const rangeToClear = { start: 0, end: textToClear.length };\n dispatchEvent(element, 'selectionChange', EventBuilder.TextInput.selectionChange(rangeToClear));\n\n // 3. Paste the text\n nativeState.valueForElement.set(element, text);\n dispatchEvent(element, 'change', EventBuilder.TextInput.change(text));\n dispatchEvent(element, 'changeText', text);\n\n const rangeAfter = { start: text.length, end: text.length };\n dispatchEvent(element, 'selectionChange', EventBuilder.TextInput.selectionChange(rangeAfter));\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 dispatchEvent(\n element,\n 'contentSizeChange',\n EventBuilder.TextInput.contentSizeChange(contentSize),\n );\n }\n\n // 4. Exit element\n await wait(this.config);\n dispatchEvent(element, 'endEditing', EventBuilder.TextInput.endEditing(text));\n dispatchEvent(element, 'blur', EventBuilder.Common.blur());\n}\n"],"mappings":";;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,YAAA,GAAAJ,OAAA;AACA,IAAAK,aAAA,GAAAL,OAAA;AAEA,IAAAM,MAAA,GAAAN,OAAA;AAEO,eAAeO,KAAKA,CAEzBC,OAA0B,EAC1BC,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,IAAAO,oBAAa,EAACP,OAAO,EAAE,OAAO,EAAEQ,0BAAY,CAACC,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;;EAE5D;EACA,MAAMC,WAAW,GAAGX,OAAO,CAACY,KAAK,CAACC,KAAK,IAAIb,OAAO,CAACY,KAAK,CAACE,YAAY,IAAI,EAAE;EAC3E,MAAMC,YAAY,GAAG;IAAEC,KAAK,EAAE,CAAC;IAAEC,GAAG,EAAEN,WAAW,CAACO;EAAO,CAAC;EAC1D,IAAAX,oBAAa,EAACP,OAAO,EAAE,iBAAiB,EAAEQ,0BAAY,CAACW,SAAS,CAACC,eAAe,CAACL,YAAY,CAAC,CAAC;;EAE/F;EACAM,wBAAW,CAACC,eAAe,CAACC,GAAG,CAACvB,OAAO,EAAEC,IAAI,CAAC;EAC9C,IAAAM,oBAAa,EAACP,OAAO,EAAE,QAAQ,EAAEQ,0BAAY,CAACW,SAAS,CAACK,MAAM,CAACvB,IAAI,CAAC,CAAC;EACrE,IAAAM,oBAAa,EAACP,OAAO,EAAE,YAAY,EAAEC,IAAI,CAAC;EAE1C,MAAMwB,UAAU,GAAG;IAAET,KAAK,EAAEf,IAAI,CAACiB,MAAM;IAAED,GAAG,EAAEhB,IAAI,CAACiB;EAAO,CAAC;EAC3D,IAAAX,oBAAa,EAACP,OAAO,EAAE,iBAAiB,EAAEQ,0BAAY,CAACW,SAAS,CAACC,eAAe,CAACK,UAAU,CAAC,CAAC;;EAE7F;EACA;EACA,MAAMC,WAAW,GAAG1B,OAAO,CAACY,KAAK,CAACe,SAAS,KAAK,IAAI;EACpD,IAAID,WAAW,EAAE;IACf,MAAME,WAAW,GAAG,IAAAC,yBAAkB,EAAC5B,IAAI,CAAC;IAC5C,IAAAM,oBAAa,EACXP,OAAO,EACP,mBAAmB,EACnBQ,0BAAY,CAACW,SAAS,CAACW,iBAAiB,CAACF,WAAW,CACtD,CAAC;EACH;;EAEA;EACA,MAAM,IAAAG,WAAI,EAAC,IAAI,CAACC,MAAM,CAAC;EACvB,IAAAzB,oBAAa,EAACP,OAAO,EAAE,YAAY,EAAEQ,0BAAY,CAACW,SAAS,CAACc,UAAU,CAAChC,IAAI,CAAC,CAAC;EAC7E,IAAAM,oBAAa,EAACP,OAAO,EAAE,MAAM,EAAEQ,0BAAY,CAACC,MAAM,CAACyB,IAAI,CAAC,CAAC,CAAC;AAC5D","ignoreList":[]}
@@ -46,7 +46,6 @@ const basePress = async (config, element, options) => {
46
46
  await basePress(config, hostParentElement, options);
47
47
  };
48
48
  const emitPressablePressEvents = async (config, element, options) => {
49
- (0, _utils.warnAboutRealTimersIfNeeded)();
50
49
  await (0, _utils.wait)(config);
51
50
  (0, _utils.dispatchEvent)(element, 'responderGrant', _eventBuilder.EventBuilder.Common.responderGrant());
52
51
  await (0, _utils.wait)(config, options.duration);
@@ -1 +1 @@
1
- {"version":3,"file":"press.js","names":["_act","_interopRequireDefault","require","_componentTree","_textInput","_pointerEvents","_hostComponentNames","_eventBuilder","_utils","_constants","e","__esModule","default","press","element","basePress","config","type","duration","longPress","options","isPressableText","emitTextPressEvents","isHostTextInput","isTextInputEditable","isPointerEventEnabled","emitTextInputPressEvents","isEnabledTouchResponder","emitPressablePressEvents","hostParentElement","getHostParent","warnAboutRealTimersIfNeeded","wait","dispatchEvent","EventBuilder","Common","responderGrant","responderRelease","DEFAULT_MIN_PRESS_DURATION","act","props","onStartShouldSetResponder","hasPressEventHandler","Boolean","onPress","onLongPress","onPressIn","onPressOut","isHostText","disabled","touch"],"sources":["../../../src/user-event/press/press.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport act from '../../act';\nimport { getHostParent } from '../../helpers/component-tree';\nimport { isTextInputEditable } from '../../helpers/text-input';\nimport { isPointerEventEnabled } from '../../helpers/pointer-events';\nimport { isHostText, isHostTextInput } from '../../helpers/host-component-names';\nimport { EventBuilder } from '../event-builder';\nimport { UserEventConfig, UserEventInstance } from '../setup';\nimport { dispatchEvent, wait, warnAboutRealTimersIfNeeded } from '../utils';\nimport { DEFAULT_MIN_PRESS_DURATION } from './constants';\n\nexport interface PressOptions {\n duration?: number;\n}\n\nexport async function press(this: UserEventInstance, element: ReactTestInstance): Promise<void> {\n await basePress(this.config, element, {\n type: 'press',\n duration: 0,\n });\n}\n\nexport async function longPress(\n this: UserEventInstance,\n element: ReactTestInstance,\n options?: PressOptions,\n): Promise<void> {\n await basePress(this.config, element, {\n type: 'longPress',\n duration: options?.duration ?? 500,\n });\n}\n\ninterface BasePressOptions {\n type: 'press' | 'longPress';\n duration: number;\n}\n\nconst basePress = async (\n config: UserEventConfig,\n element: ReactTestInstance,\n options: BasePressOptions,\n): Promise<void> => {\n if (isPressableText(element)) {\n await emitTextPressEvents(config, element, options);\n return;\n }\n\n if (isHostTextInput(element) && isTextInputEditable(element) && isPointerEventEnabled(element)) {\n await emitTextInputPressEvents(config, element, options);\n return;\n }\n\n if (isEnabledTouchResponder(element)) {\n await emitPressablePressEvents(config, element, options);\n return;\n }\n\n const hostParentElement = getHostParent(element);\n if (!hostParentElement) {\n return;\n }\n\n await basePress(config, hostParentElement, options);\n};\n\nconst emitPressablePressEvents = async (\n config: UserEventConfig,\n element: ReactTestInstance,\n options: BasePressOptions,\n) => {\n warnAboutRealTimersIfNeeded();\n\n await wait(config);\n\n dispatchEvent(element, 'responderGrant', EventBuilder.Common.responderGrant());\n\n await wait(config, options.duration);\n\n 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 - options.duration > 0) {\n await act(async () => {\n await wait(config, DEFAULT_MIN_PRESS_DURATION - options.duration);\n });\n }\n};\n\nconst isEnabledTouchResponder = (element: ReactTestInstance) => {\n return isPointerEventEnabled(element) && element.props.onStartShouldSetResponder?.();\n};\n\nconst isPressableText = (element: ReactTestInstance) => {\n const hasPressEventHandler = Boolean(\n element.props.onPress ||\n element.props.onLongPress ||\n element.props.onPressIn ||\n element.props.onPressOut,\n );\n\n return (\n isHostText(element) &&\n isPointerEventEnabled(element) &&\n !element.props.disabled &&\n hasPressEventHandler\n );\n};\n\n/**\n * Dispatches a press event sequence for Text.\n */\nasync function emitTextPressEvents(\n config: UserEventConfig,\n element: ReactTestInstance,\n options: BasePressOptions,\n) {\n await wait(config);\n dispatchEvent(element, 'pressIn', EventBuilder.Common.touch());\n\n // Emit either `press` or `longPress`.\n dispatchEvent(element, options.type, EventBuilder.Common.touch());\n\n await wait(config, options.duration);\n dispatchEvent(element, 'pressOut', EventBuilder.Common.touch());\n}\n\n/**\n * Dispatches a press event sequence for TextInput.\n */\nasync function emitTextInputPressEvents(\n config: UserEventConfig,\n element: ReactTestInstance,\n options: BasePressOptions,\n) {\n await wait(config);\n dispatchEvent(element, 'pressIn', EventBuilder.Common.touch());\n\n // Note: TextInput does not have `onPress`/`onLongPress` props.\n\n await wait(config, options.duration);\n dispatchEvent(element, 'pressOut', EventBuilder.Common.touch());\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"press.js","names":["_act","_interopRequireDefault","require","_componentTree","_textInput","_pointerEvents","_hostComponentNames","_eventBuilder","_utils","_constants","e","__esModule","default","press","element","basePress","config","type","duration","longPress","options","isPressableText","emitTextPressEvents","isHostTextInput","isTextInputEditable","isPointerEventEnabled","emitTextInputPressEvents","isEnabledTouchResponder","emitPressablePressEvents","hostParentElement","getHostParent","wait","dispatchEvent","EventBuilder","Common","responderGrant","responderRelease","DEFAULT_MIN_PRESS_DURATION","act","props","onStartShouldSetResponder","hasPressEventHandler","Boolean","onPress","onLongPress","onPressIn","onPressOut","isHostText","disabled","touch"],"sources":["../../../src/user-event/press/press.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport act from '../../act';\nimport { getHostParent } from '../../helpers/component-tree';\nimport { isTextInputEditable } from '../../helpers/text-input';\nimport { isPointerEventEnabled } from '../../helpers/pointer-events';\nimport { isHostText, isHostTextInput } from '../../helpers/host-component-names';\nimport { EventBuilder } from '../event-builder';\nimport { UserEventConfig, UserEventInstance } from '../setup';\nimport { dispatchEvent, wait } from '../utils';\nimport { DEFAULT_MIN_PRESS_DURATION } from './constants';\n\nexport interface PressOptions {\n duration?: number;\n}\n\nexport async function press(this: UserEventInstance, element: ReactTestInstance): Promise<void> {\n await basePress(this.config, element, {\n type: 'press',\n duration: 0,\n });\n}\n\nexport async function longPress(\n this: UserEventInstance,\n element: ReactTestInstance,\n options?: PressOptions,\n): Promise<void> {\n await basePress(this.config, element, {\n type: 'longPress',\n duration: options?.duration ?? 500,\n });\n}\n\ninterface BasePressOptions {\n type: 'press' | 'longPress';\n duration: number;\n}\n\nconst basePress = async (\n config: UserEventConfig,\n element: ReactTestInstance,\n options: BasePressOptions,\n): Promise<void> => {\n if (isPressableText(element)) {\n await emitTextPressEvents(config, element, options);\n return;\n }\n\n if (isHostTextInput(element) && isTextInputEditable(element) && isPointerEventEnabled(element)) {\n await emitTextInputPressEvents(config, element, options);\n return;\n }\n\n if (isEnabledTouchResponder(element)) {\n await emitPressablePressEvents(config, element, options);\n return;\n }\n\n const hostParentElement = getHostParent(element);\n if (!hostParentElement) {\n return;\n }\n\n await basePress(config, hostParentElement, options);\n};\n\nconst emitPressablePressEvents = async (\n config: UserEventConfig,\n element: ReactTestInstance,\n options: BasePressOptions,\n) => {\n await wait(config);\n\n dispatchEvent(element, 'responderGrant', EventBuilder.Common.responderGrant());\n\n await wait(config, options.duration);\n\n 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 - options.duration > 0) {\n await act(async () => {\n await wait(config, DEFAULT_MIN_PRESS_DURATION - options.duration);\n });\n }\n};\n\nconst isEnabledTouchResponder = (element: ReactTestInstance) => {\n return isPointerEventEnabled(element) && element.props.onStartShouldSetResponder?.();\n};\n\nconst isPressableText = (element: ReactTestInstance) => {\n const hasPressEventHandler = Boolean(\n element.props.onPress ||\n element.props.onLongPress ||\n element.props.onPressIn ||\n element.props.onPressOut,\n );\n\n return (\n isHostText(element) &&\n isPointerEventEnabled(element) &&\n !element.props.disabled &&\n hasPressEventHandler\n );\n};\n\n/**\n * Dispatches a press event sequence for Text.\n */\nasync function emitTextPressEvents(\n config: UserEventConfig,\n element: ReactTestInstance,\n options: BasePressOptions,\n) {\n await wait(config);\n dispatchEvent(element, 'pressIn', EventBuilder.Common.touch());\n\n // Emit either `press` or `longPress`.\n dispatchEvent(element, options.type, EventBuilder.Common.touch());\n\n await wait(config, options.duration);\n dispatchEvent(element, 'pressOut', EventBuilder.Common.touch());\n}\n\n/**\n * Dispatches a press event sequence for TextInput.\n */\nasync function emitTextInputPressEvents(\n config: UserEventConfig,\n element: ReactTestInstance,\n options: BasePressOptions,\n) {\n await wait(config);\n dispatchEvent(element, 'pressIn', EventBuilder.Common.touch());\n\n // Note: TextInput does not have `onPress`/`onLongPress` props.\n\n await wait(config, options.duration);\n dispatchEvent(element, 'pressOut', EventBuilder.Common.touch());\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,14 +1,9 @@
1
1
  import { ReactTestInstance } from 'react-test-renderer';
2
2
  import { UserEventInstance } from '../setup';
3
+ import { Size } from '../../types';
3
4
  interface CommonScrollToOptions {
4
- contentSize?: {
5
- height: number;
6
- width: number;
7
- };
8
- layoutMeasurement?: {
9
- height: number;
10
- width: number;
11
- };
5
+ contentSize?: Size;
6
+ layoutMeasurement?: Size;
12
7
  }
13
8
  export interface VerticalScrollToOptions extends CommonScrollToOptions {
14
9
  y: number;
@@ -9,29 +9,32 @@ var _eventBuilder = require("../event-builder");
9
9
  var _errors = require("../../helpers/errors");
10
10
  var _hostComponentNames = require("../../helpers/host-component-names");
11
11
  var _object = require("../../helpers/object");
12
+ var _nativeState = require("../../native-state");
12
13
  var _utils = require("../utils");
13
14
  var _utils2 = require("./utils");
14
- var _state = require("./state");
15
15
  async function scrollTo(element, options) {
16
16
  if (!(0, _hostComponentNames.isHostScrollView)(element)) {
17
17
  throw new _errors.ErrorWithStack(`scrollTo() works only with host "ScrollView" elements. Passed element has type "${element.type}".`, scrollTo);
18
18
  }
19
19
  ensureScrollViewDirection(element, options);
20
20
  (0, _utils.dispatchEvent)(element, 'contentSizeChange', options.contentSize?.width ?? 0, options.contentSize?.height ?? 0);
21
- const initialPosition = (0, _state.getElementScrollOffset)(element);
21
+ const initialOffset = _nativeState.nativeState.contentOffsetForElement.get(element) ?? {
22
+ x: 0,
23
+ y: 0
24
+ };
22
25
  const dragSteps = (0, _utils2.createScrollSteps)({
23
26
  y: options.y,
24
27
  x: options.x
25
- }, initialPosition, _utils2.linearInterpolator);
28
+ }, initialOffset, _utils2.linearInterpolator);
26
29
  await emitDragScrollEvents(this.config, element, dragSteps, options);
27
- const momentumStart = dragSteps.at(-1) ?? initialPosition;
30
+ const momentumStart = dragSteps.at(-1) ?? initialOffset;
28
31
  const momentumSteps = (0, _utils2.createScrollSteps)({
29
32
  y: options.momentumY,
30
33
  x: options.momentumX
31
34
  }, momentumStart, _utils2.inertialInterpolator);
32
35
  await emitMomentumScrollEvents(this.config, element, momentumSteps, options);
33
- const finalPosition = momentumSteps.at(-1) ?? dragSteps.at(-1) ?? initialPosition;
34
- (0, _state.setElementScrollOffset)(element, finalPosition);
36
+ const finalOffset = momentumSteps.at(-1) ?? dragSteps.at(-1) ?? initialOffset;
37
+ _nativeState.nativeState.contentOffsetForElement.set(element, finalOffset);
35
38
  }
36
39
  async function emitDragScrollEvents(config, element, scrollSteps, scrollOptions) {
37
40
  if (scrollSteps.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"scroll-to.js","names":["_jestMatcherUtils","require","_eventBuilder","_errors","_hostComponentNames","_object","_utils","_utils2","_state","scrollTo","element","options","isHostScrollView","ErrorWithStack","type","ensureScrollViewDirection","dispatchEvent","contentSize","width","height","initialPosition","getElementScrollOffset","dragSteps","createScrollSteps","y","x","linearInterpolator","emitDragScrollEvents","config","momentumStart","at","momentumSteps","momentumY","momentumX","inertialInterpolator","emitMomentumScrollEvents","finalPosition","setElementScrollOffset","scrollSteps","scrollOptions","length","wait","EventBuilder","ScrollView","scroll","i","lastStep","isVerticalScrollView","props","horizontal","hasHorizontalScrollOptions","undefined","stringify","pick","hasVerticalScrollOptions"],"sources":["../../../src/user-event/scroll/scroll-to.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport { stringify } from 'jest-matcher-utils';\nimport { UserEventConfig, UserEventInstance } from '../setup';\nimport { EventBuilder } from '../event-builder';\nimport { ErrorWithStack } from '../../helpers/errors';\nimport { isHostScrollView } from '../../helpers/host-component-names';\nimport { pick } from '../../helpers/object';\nimport { ContentOffset } from '../event-builder/scroll-view';\nimport { dispatchEvent, wait } from '../utils';\nimport { createScrollSteps, inertialInterpolator, linearInterpolator } from './utils';\nimport { getElementScrollOffset, setElementScrollOffset } from './state';\n\ninterface CommonScrollToOptions {\n contentSize?: {\n height: number;\n width: number;\n };\n layoutMeasurement?: {\n height: number;\n width: number;\n };\n}\n\nexport interface VerticalScrollToOptions extends CommonScrollToOptions {\n y: number;\n momentumY?: number;\n\n // Vertical scroll should not contain horizontal scroll part.\n x?: never;\n momentumX?: never;\n}\n\nexport interface HorizontalScrollToOptions extends CommonScrollToOptions {\n x: number;\n momentumX?: number;\n\n // Horizontal scroll should not contain vertical scroll part.\n y?: never;\n momentumY?: never;\n}\n\nexport type ScrollToOptions = VerticalScrollToOptions | HorizontalScrollToOptions;\n\nexport async function scrollTo(\n this: UserEventInstance,\n element: ReactTestInstance,\n options: ScrollToOptions,\n): Promise<void> {\n if (!isHostScrollView(element)) {\n throw new ErrorWithStack(\n `scrollTo() works only with host \"ScrollView\" elements. Passed element has type \"${element.type}\".`,\n scrollTo,\n );\n }\n\n ensureScrollViewDirection(element, options);\n\n dispatchEvent(\n element,\n 'contentSizeChange',\n options.contentSize?.width ?? 0,\n options.contentSize?.height ?? 0,\n );\n\n const initialPosition = getElementScrollOffset(element);\n const dragSteps = createScrollSteps(\n { y: options.y, x: options.x },\n initialPosition,\n linearInterpolator,\n );\n await emitDragScrollEvents(this.config, element, dragSteps, options);\n\n const momentumStart = dragSteps.at(-1) ?? initialPosition;\n const momentumSteps = createScrollSteps(\n { y: options.momentumY, x: options.momentumX },\n momentumStart,\n inertialInterpolator,\n );\n await emitMomentumScrollEvents(this.config, element, momentumSteps, options);\n\n const finalPosition = momentumSteps.at(-1) ?? dragSteps.at(-1) ?? initialPosition;\n setElementScrollOffset(element, finalPosition);\n}\n\nasync function emitDragScrollEvents(\n config: UserEventConfig,\n element: ReactTestInstance,\n scrollSteps: ContentOffset[],\n scrollOptions: ScrollToOptions,\n) {\n if (scrollSteps.length === 0) {\n return;\n }\n\n await wait(config);\n dispatchEvent(\n element,\n 'scrollBeginDrag',\n EventBuilder.ScrollView.scroll(scrollSteps[0], scrollOptions),\n );\n\n // Note: experimentally, in case of drag scroll the last scroll step\n // will not trigger `scroll` event.\n // See: https://github.com/callstack/react-native-testing-library/wiki/ScrollView-Events\n for (let i = 1; i < scrollSteps.length - 1; i += 1) {\n await wait(config);\n dispatchEvent(element, 'scroll', EventBuilder.ScrollView.scroll(scrollSteps[i], scrollOptions));\n }\n\n await wait(config);\n const lastStep = scrollSteps.at(-1);\n dispatchEvent(element, 'scrollEndDrag', EventBuilder.ScrollView.scroll(lastStep, scrollOptions));\n}\n\nasync function emitMomentumScrollEvents(\n config: UserEventConfig,\n element: ReactTestInstance,\n scrollSteps: ContentOffset[],\n scrollOptions: ScrollToOptions,\n) {\n if (scrollSteps.length === 0) {\n return;\n }\n\n await wait(config);\n dispatchEvent(\n element,\n 'momentumScrollBegin',\n EventBuilder.ScrollView.scroll(scrollSteps[0], scrollOptions),\n );\n\n // Note: experimentally, in case of momentum scroll the last scroll step\n // will trigger `scroll` event.\n // See: https://github.com/callstack/react-native-testing-library/wiki/ScrollView-Events\n for (let i = 1; i < scrollSteps.length; i += 1) {\n await wait(config);\n dispatchEvent(element, 'scroll', EventBuilder.ScrollView.scroll(scrollSteps[i], scrollOptions));\n }\n\n await wait(config);\n const lastStep = scrollSteps.at(-1);\n dispatchEvent(\n element,\n 'momentumScrollEnd',\n EventBuilder.ScrollView.scroll(lastStep, scrollOptions),\n );\n}\n\nfunction ensureScrollViewDirection(element: ReactTestInstance, options: ScrollToOptions) {\n const isVerticalScrollView = element.props.horizontal !== true;\n\n const hasHorizontalScrollOptions = options.x !== undefined || options.momentumX !== undefined;\n if (isVerticalScrollView && hasHorizontalScrollOptions) {\n throw new ErrorWithStack(\n `scrollTo() expected only vertical scroll options: \"y\" and \"momentumY\" for vertical \"ScrollView\" element but received ${stringify(\n pick(options, ['x', 'momentumX']),\n )}`,\n scrollTo,\n );\n }\n\n const hasVerticalScrollOptions = options.y !== undefined || options.momentumY !== undefined;\n if (!isVerticalScrollView && hasVerticalScrollOptions) {\n throw new ErrorWithStack(\n `scrollTo() expected only horizontal scroll options: \"x\" and \"momentumX\" for horizontal \"ScrollView\" element but received ${stringify(\n pick(options, ['y', 'momentumY']),\n )}`,\n scrollTo,\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"scroll-to.js","names":["_jestMatcherUtils","require","_eventBuilder","_errors","_hostComponentNames","_object","_nativeState","_utils","_utils2","scrollTo","element","options","isHostScrollView","ErrorWithStack","type","ensureScrollViewDirection","dispatchEvent","contentSize","width","height","initialOffset","nativeState","contentOffsetForElement","get","x","y","dragSteps","createScrollSteps","linearInterpolator","emitDragScrollEvents","config","momentumStart","at","momentumSteps","momentumY","momentumX","inertialInterpolator","emitMomentumScrollEvents","finalOffset","set","scrollSteps","scrollOptions","length","wait","EventBuilder","ScrollView","scroll","i","lastStep","isVerticalScrollView","props","horizontal","hasHorizontalScrollOptions","undefined","stringify","pick","hasVerticalScrollOptions"],"sources":["../../../src/user-event/scroll/scroll-to.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport { stringify } from 'jest-matcher-utils';\nimport { UserEventConfig, UserEventInstance } from '../setup';\nimport { EventBuilder } from '../event-builder';\nimport { ErrorWithStack } from '../../helpers/errors';\nimport { isHostScrollView } from '../../helpers/host-component-names';\nimport { pick } from '../../helpers/object';\nimport { nativeState } from '../../native-state';\nimport { Point, Size } from '../../types';\nimport { dispatchEvent, wait } from '../utils';\nimport { createScrollSteps, inertialInterpolator, linearInterpolator } from './utils';\n\ninterface CommonScrollToOptions {\n contentSize?: Size;\n layoutMeasurement?: Size;\n}\n\nexport interface VerticalScrollToOptions extends CommonScrollToOptions {\n y: number;\n momentumY?: number;\n\n // Vertical scroll should not contain horizontal scroll part.\n x?: never;\n momentumX?: never;\n}\n\nexport interface HorizontalScrollToOptions extends CommonScrollToOptions {\n x: number;\n momentumX?: number;\n\n // Horizontal scroll should not contain vertical scroll part.\n y?: never;\n momentumY?: never;\n}\n\nexport type ScrollToOptions = VerticalScrollToOptions | HorizontalScrollToOptions;\n\nexport async function scrollTo(\n this: UserEventInstance,\n element: ReactTestInstance,\n options: ScrollToOptions,\n): Promise<void> {\n if (!isHostScrollView(element)) {\n throw new ErrorWithStack(\n `scrollTo() works only with host \"ScrollView\" elements. Passed element has type \"${element.type}\".`,\n scrollTo,\n );\n }\n\n ensureScrollViewDirection(element, options);\n\n dispatchEvent(\n element,\n 'contentSizeChange',\n options.contentSize?.width ?? 0,\n options.contentSize?.height ?? 0,\n );\n\n const initialOffset = nativeState.contentOffsetForElement.get(element) ?? { x: 0, y: 0 };\n const dragSteps = createScrollSteps(\n { y: options.y, x: options.x },\n initialOffset,\n linearInterpolator,\n );\n await emitDragScrollEvents(this.config, element, dragSteps, options);\n\n const momentumStart = dragSteps.at(-1) ?? initialOffset;\n const momentumSteps = createScrollSteps(\n { y: options.momentumY, x: options.momentumX },\n momentumStart,\n inertialInterpolator,\n );\n await emitMomentumScrollEvents(this.config, element, momentumSteps, options);\n\n const finalOffset = momentumSteps.at(-1) ?? dragSteps.at(-1) ?? initialOffset;\n nativeState.contentOffsetForElement.set(element, finalOffset);\n}\n\nasync function emitDragScrollEvents(\n config: UserEventConfig,\n element: ReactTestInstance,\n scrollSteps: Point[],\n scrollOptions: ScrollToOptions,\n) {\n if (scrollSteps.length === 0) {\n return;\n }\n\n await wait(config);\n dispatchEvent(\n element,\n 'scrollBeginDrag',\n EventBuilder.ScrollView.scroll(scrollSteps[0], scrollOptions),\n );\n\n // Note: experimentally, in case of drag scroll the last scroll step\n // will not trigger `scroll` event.\n // See: https://github.com/callstack/react-native-testing-library/wiki/ScrollView-Events\n for (let i = 1; i < scrollSteps.length - 1; i += 1) {\n await wait(config);\n dispatchEvent(element, 'scroll', EventBuilder.ScrollView.scroll(scrollSteps[i], scrollOptions));\n }\n\n await wait(config);\n const lastStep = scrollSteps.at(-1);\n dispatchEvent(element, 'scrollEndDrag', EventBuilder.ScrollView.scroll(lastStep, scrollOptions));\n}\n\nasync function emitMomentumScrollEvents(\n config: UserEventConfig,\n element: ReactTestInstance,\n scrollSteps: Point[],\n scrollOptions: ScrollToOptions,\n) {\n if (scrollSteps.length === 0) {\n return;\n }\n\n await wait(config);\n dispatchEvent(\n element,\n 'momentumScrollBegin',\n EventBuilder.ScrollView.scroll(scrollSteps[0], scrollOptions),\n );\n\n // Note: experimentally, in case of momentum scroll the last scroll step\n // will trigger `scroll` event.\n // See: https://github.com/callstack/react-native-testing-library/wiki/ScrollView-Events\n for (let i = 1; i < scrollSteps.length; i += 1) {\n await wait(config);\n dispatchEvent(element, 'scroll', EventBuilder.ScrollView.scroll(scrollSteps[i], scrollOptions));\n }\n\n await wait(config);\n const lastStep = scrollSteps.at(-1);\n dispatchEvent(\n element,\n 'momentumScrollEnd',\n EventBuilder.ScrollView.scroll(lastStep, scrollOptions),\n );\n}\n\nfunction ensureScrollViewDirection(element: ReactTestInstance, options: ScrollToOptions) {\n const isVerticalScrollView = element.props.horizontal !== true;\n\n const hasHorizontalScrollOptions = options.x !== undefined || options.momentumX !== undefined;\n if (isVerticalScrollView && hasHorizontalScrollOptions) {\n throw new ErrorWithStack(\n `scrollTo() expected only vertical scroll options: \"y\" and \"momentumY\" for vertical \"ScrollView\" element but received ${stringify(\n pick(options, ['x', 'momentumX']),\n )}`,\n scrollTo,\n );\n }\n\n const hasVerticalScrollOptions = options.y !== undefined || options.momentumY !== undefined;\n if (!isVerticalScrollView && hasVerticalScrollOptions) {\n throw new ErrorWithStack(\n `scrollTo() expected only horizontal scroll options: \"x\" and \"momentumX\" for horizontal \"ScrollView\" element but received ${stringify(\n pick(options, ['y', 'momentumY']),\n )}`,\n scrollTo,\n );\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,iBAAA,GAAAC,OAAA;AAEA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,mBAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,YAAA,GAAAL,OAAA;AAEA,IAAAM,MAAA,GAAAN,OAAA;AACA,IAAAO,OAAA,GAAAP,OAAA;AA2BO,eAAeQ,QAAQA,CAE5BC,OAA0B,EAC1BC,OAAwB,EACT;EACf,IAAI,CAAC,IAAAC,oCAAgB,EAACF,OAAO,CAAC,EAAE;IAC9B,MAAM,IAAIG,sBAAc,CACtB,mFAAmFH,OAAO,CAACI,IAAI,IAAI,EACnGL,QACF,CAAC;EACH;EAEAM,yBAAyB,CAACL,OAAO,EAAEC,OAAO,CAAC;EAE3C,IAAAK,oBAAa,EACXN,OAAO,EACP,mBAAmB,EACnBC,OAAO,CAACM,WAAW,EAAEC,KAAK,IAAI,CAAC,EAC/BP,OAAO,CAACM,WAAW,EAAEE,MAAM,IAAI,CACjC,CAAC;EAED,MAAMC,aAAa,GAAGC,wBAAW,CAACC,uBAAuB,CAACC,GAAG,CAACb,OAAO,CAAC,IAAI;IAAEc,CAAC,EAAE,CAAC;IAAEC,CAAC,EAAE;EAAE,CAAC;EACxF,MAAMC,SAAS,GAAG,IAAAC,yBAAiB,EACjC;IAAEF,CAAC,EAAEd,OAAO,CAACc,CAAC;IAAED,CAAC,EAAEb,OAAO,CAACa;EAAE,CAAC,EAC9BJ,aAAa,EACbQ,0BACF,CAAC;EACD,MAAMC,oBAAoB,CAAC,IAAI,CAACC,MAAM,EAAEpB,OAAO,EAAEgB,SAAS,EAAEf,OAAO,CAAC;EAEpE,MAAMoB,aAAa,GAAGL,SAAS,CAACM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAIZ,aAAa;EACvD,MAAMa,aAAa,GAAG,IAAAN,yBAAiB,EACrC;IAAEF,CAAC,EAAEd,OAAO,CAACuB,SAAS;IAAEV,CAAC,EAAEb,OAAO,CAACwB;EAAU,CAAC,EAC9CJ,aAAa,EACbK,4BACF,CAAC;EACD,MAAMC,wBAAwB,CAAC,IAAI,CAACP,MAAM,EAAEpB,OAAO,EAAEuB,aAAa,EAAEtB,OAAO,CAAC;EAE5E,MAAM2B,WAAW,GAAGL,aAAa,CAACD,EAAE,CAAC,CAAC,CAAC,CAAC,IAAIN,SAAS,CAACM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAIZ,aAAa;EAC7EC,wBAAW,CAACC,uBAAuB,CAACiB,GAAG,CAAC7B,OAAO,EAAE4B,WAAW,CAAC;AAC/D;AAEA,eAAeT,oBAAoBA,CACjCC,MAAuB,EACvBpB,OAA0B,EAC1B8B,WAAoB,EACpBC,aAA8B,EAC9B;EACA,IAAID,WAAW,CAACE,MAAM,KAAK,CAAC,EAAE;IAC5B;EACF;EAEA,MAAM,IAAAC,WAAI,EAACb,MAAM,CAAC;EAClB,IAAAd,oBAAa,EACXN,OAAO,EACP,iBAAiB,EACjBkC,0BAAY,CAACC,UAAU,CAACC,MAAM,CAACN,WAAW,CAAC,CAAC,CAAC,EAAEC,aAAa,CAC9D,CAAC;;EAED;EACA;EACA;EACA,KAAK,IAAIM,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,WAAW,CAACE,MAAM,GAAG,CAAC,EAAEK,CAAC,IAAI,CAAC,EAAE;IAClD,MAAM,IAAAJ,WAAI,EAACb,MAAM,CAAC;IAClB,IAAAd,oBAAa,EAACN,OAAO,EAAE,QAAQ,EAAEkC,0BAAY,CAACC,UAAU,CAACC,MAAM,CAACN,WAAW,CAACO,CAAC,CAAC,EAAEN,aAAa,CAAC,CAAC;EACjG;EAEA,MAAM,IAAAE,WAAI,EAACb,MAAM,CAAC;EAClB,MAAMkB,QAAQ,GAAGR,WAAW,CAACR,EAAE,CAAC,CAAC,CAAC,CAAC;EACnC,IAAAhB,oBAAa,EAACN,OAAO,EAAE,eAAe,EAAEkC,0BAAY,CAACC,UAAU,CAACC,MAAM,CAACE,QAAQ,EAAEP,aAAa,CAAC,CAAC;AAClG;AAEA,eAAeJ,wBAAwBA,CACrCP,MAAuB,EACvBpB,OAA0B,EAC1B8B,WAAoB,EACpBC,aAA8B,EAC9B;EACA,IAAID,WAAW,CAACE,MAAM,KAAK,CAAC,EAAE;IAC5B;EACF;EAEA,MAAM,IAAAC,WAAI,EAACb,MAAM,CAAC;EAClB,IAAAd,oBAAa,EACXN,OAAO,EACP,qBAAqB,EACrBkC,0BAAY,CAACC,UAAU,CAACC,MAAM,CAACN,WAAW,CAAC,CAAC,CAAC,EAAEC,aAAa,CAC9D,CAAC;;EAED;EACA;EACA;EACA,KAAK,IAAIM,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,WAAW,CAACE,MAAM,EAAEK,CAAC,IAAI,CAAC,EAAE;IAC9C,MAAM,IAAAJ,WAAI,EAACb,MAAM,CAAC;IAClB,IAAAd,oBAAa,EAACN,OAAO,EAAE,QAAQ,EAAEkC,0BAAY,CAACC,UAAU,CAACC,MAAM,CAACN,WAAW,CAACO,CAAC,CAAC,EAAEN,aAAa,CAAC,CAAC;EACjG;EAEA,MAAM,IAAAE,WAAI,EAACb,MAAM,CAAC;EAClB,MAAMkB,QAAQ,GAAGR,WAAW,CAACR,EAAE,CAAC,CAAC,CAAC,CAAC;EACnC,IAAAhB,oBAAa,EACXN,OAAO,EACP,mBAAmB,EACnBkC,0BAAY,CAACC,UAAU,CAACC,MAAM,CAACE,QAAQ,EAAEP,aAAa,CACxD,CAAC;AACH;AAEA,SAAS1B,yBAAyBA,CAACL,OAA0B,EAAEC,OAAwB,EAAE;EACvF,MAAMsC,oBAAoB,GAAGvC,OAAO,CAACwC,KAAK,CAACC,UAAU,KAAK,IAAI;EAE9D,MAAMC,0BAA0B,GAAGzC,OAAO,CAACa,CAAC,KAAK6B,SAAS,IAAI1C,OAAO,CAACwB,SAAS,KAAKkB,SAAS;EAC7F,IAAIJ,oBAAoB,IAAIG,0BAA0B,EAAE;IACtD,MAAM,IAAIvC,sBAAc,CACtB,wHAAwH,IAAAyC,2BAAS,EAC/H,IAAAC,YAAI,EAAC5C,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,CAClC,CAAC,EAAE,EACHF,QACF,CAAC;EACH;EAEA,MAAM+C,wBAAwB,GAAG7C,OAAO,CAACc,CAAC,KAAK4B,SAAS,IAAI1C,OAAO,CAACuB,SAAS,KAAKmB,SAAS;EAC3F,IAAI,CAACJ,oBAAoB,IAAIO,wBAAwB,EAAE;IACrD,MAAM,IAAI3C,sBAAc,CACtB,4HAA4H,IAAAyC,2BAAS,EACnI,IAAAC,YAAI,EAAC5C,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,CAClC,CAAC,EAAE,EACHF,QACF,CAAC;EACH;AACF","ignoreList":[]}
@@ -1,6 +1,6 @@
1
- import { ContentOffset } from '../event-builder/scroll-view';
1
+ import { Point } from '../../types';
2
2
  type InterpolatorFn = (end: number, start: number, steps: number) => number[];
3
- export declare function createScrollSteps(target: Partial<ContentOffset>, initialOffset: ContentOffset, interpolator: InterpolatorFn): ContentOffset[];
3
+ export declare function createScrollSteps(target: Partial<Point>, initialOffset: Point, interpolator: InterpolatorFn): Point[];
4
4
  /**
5
5
  * Generate linear scroll values (with equal steps).
6
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["DEFAULT_STEPS_COUNT","createScrollSteps","target","initialOffset","interpolator","y","map","x","linearInterpolator","end","start","steps","result","i","push","lerp","inertialInterpolator","factor","v0","v1","t"],"sources":["../../../src/user-event/scroll/utils.ts"],"sourcesContent":["import { ContentOffset } from '../event-builder/scroll-view';\n\nconst DEFAULT_STEPS_COUNT = 5;\n\ntype InterpolatorFn = (end: number, start: number, steps: number) => number[];\n\nexport function createScrollSteps(\n target: Partial<ContentOffset>,\n initialOffset: ContentOffset,\n interpolator: InterpolatorFn,\n): ContentOffset[] {\n if (target.y != null) {\n return interpolator(target.y, initialOffset.y, DEFAULT_STEPS_COUNT).map((y) => ({\n y,\n x: initialOffset.x,\n }));\n }\n\n if (target.x != null) {\n return interpolator(target.x, initialOffset.x, DEFAULT_STEPS_COUNT).map((x) => ({\n x,\n y: initialOffset.y,\n }));\n }\n\n return [];\n}\n\n/**\n * Generate linear scroll values (with equal steps).\n */\nexport function linearInterpolator(end: number, start: number, steps: number): number[] {\n if (end === start) {\n return [end, start];\n }\n\n const result = [];\n for (let i = 0; i < steps; i += 1) {\n result.push(lerp(start, end, i / (steps - 1)));\n }\n\n return result;\n}\n\n/**\n * Generate inertial scroll values (exponentially slowing down).\n */\nexport function inertialInterpolator(end: number, start: number, steps: number): number[] {\n if (end === start) {\n return [end, start];\n }\n\n const result = [];\n let factor = 1;\n for (let i = 0; i < steps - 1; i += 1) {\n result.push(lerp(end, start, factor));\n factor /= 2;\n }\n\n result.push(end);\n return result;\n}\n\n/**\n * Linear interpolation function\n * @param v0 initial value (when t = 0)\n * @param v1 final value (when t = 1)\n * @param t interpolation factor form 0 to 1\n * @returns interpolated value between v0 and v1\n */\nexport function lerp(v0: number, v1: number, t: number) {\n return v0 + t * (v1 - v0);\n}\n"],"mappings":";;;;;;;;;AAEA,MAAMA,mBAAmB,GAAG,CAAC;AAItB,SAASC,iBAAiBA,CAC/BC,MAA8B,EAC9BC,aAA4B,EAC5BC,YAA4B,EACX;EACjB,IAAIF,MAAM,CAACG,CAAC,IAAI,IAAI,EAAE;IACpB,OAAOD,YAAY,CAACF,MAAM,CAACG,CAAC,EAAEF,aAAa,CAACE,CAAC,EAAEL,mBAAmB,CAAC,CAACM,GAAG,CAAED,CAAC,KAAM;MAC9EA,CAAC;MACDE,CAAC,EAAEJ,aAAa,CAACI;IACnB,CAAC,CAAC,CAAC;EACL;EAEA,IAAIL,MAAM,CAACK,CAAC,IAAI,IAAI,EAAE;IACpB,OAAOH,YAAY,CAACF,MAAM,CAACK,CAAC,EAAEJ,aAAa,CAACI,CAAC,EAAEP,mBAAmB,CAAC,CAACM,GAAG,CAAEC,CAAC,KAAM;MAC9EA,CAAC;MACDF,CAAC,EAAEF,aAAa,CAACE;IACnB,CAAC,CAAC,CAAC;EACL;EAEA,OAAO,EAAE;AACX;;AAEA;AACA;AACA;AACO,SAASG,kBAAkBA,CAACC,GAAW,EAAEC,KAAa,EAAEC,KAAa,EAAY;EACtF,IAAIF,GAAG,KAAKC,KAAK,EAAE;IACjB,OAAO,CAACD,GAAG,EAAEC,KAAK,CAAC;EACrB;EAEA,MAAME,MAAM,GAAG,EAAE;EACjB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,KAAK,EAAEE,CAAC,IAAI,CAAC,EAAE;IACjCD,MAAM,CAACE,IAAI,CAACC,IAAI,CAACL,KAAK,EAAED,GAAG,EAAEI,CAAC,IAAIF,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;EAChD;EAEA,OAAOC,MAAM;AACf;;AAEA;AACA;AACA;AACO,SAASI,oBAAoBA,CAACP,GAAW,EAAEC,KAAa,EAAEC,KAAa,EAAY;EACxF,IAAIF,GAAG,KAAKC,KAAK,EAAE;IACjB,OAAO,CAACD,GAAG,EAAEC,KAAK,CAAC;EACrB;EAEA,MAAME,MAAM,GAAG,EAAE;EACjB,IAAIK,MAAM,GAAG,CAAC;EACd,KAAK,IAAIJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,KAAK,GAAG,CAAC,EAAEE,CAAC,IAAI,CAAC,EAAE;IACrCD,MAAM,CAACE,IAAI,CAACC,IAAI,CAACN,GAAG,EAAEC,KAAK,EAAEO,MAAM,CAAC,CAAC;IACrCA,MAAM,IAAI,CAAC;EACb;EAEAL,MAAM,CAACE,IAAI,CAACL,GAAG,CAAC;EAChB,OAAOG,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,IAAIA,CAACG,EAAU,EAAEC,EAAU,EAAEC,CAAS,EAAE;EACtD,OAAOF,EAAE,GAAGE,CAAC,IAAID,EAAE,GAAGD,EAAE,CAAC;AAC3B","ignoreList":[]}
1
+ {"version":3,"file":"utils.js","names":["DEFAULT_STEPS_COUNT","createScrollSteps","target","initialOffset","interpolator","y","map","x","linearInterpolator","end","start","steps","result","i","push","lerp","inertialInterpolator","factor","v0","v1","t"],"sources":["../../../src/user-event/scroll/utils.ts"],"sourcesContent":["import { Point } from '../../types';\n\nconst DEFAULT_STEPS_COUNT = 5;\n\ntype InterpolatorFn = (end: number, start: number, steps: number) => number[];\n\nexport function createScrollSteps(\n target: Partial<Point>,\n initialOffset: Point,\n interpolator: InterpolatorFn,\n): Point[] {\n if (target.y != null) {\n return interpolator(target.y, initialOffset.y, DEFAULT_STEPS_COUNT).map((y) => ({\n y,\n x: initialOffset.x,\n }));\n }\n\n if (target.x != null) {\n return interpolator(target.x, initialOffset.x, DEFAULT_STEPS_COUNT).map((x) => ({\n x,\n y: initialOffset.y,\n }));\n }\n\n return [];\n}\n\n/**\n * Generate linear scroll values (with equal steps).\n */\nexport function linearInterpolator(end: number, start: number, steps: number): number[] {\n if (end === start) {\n return [end, start];\n }\n\n const result = [];\n for (let i = 0; i < steps; i += 1) {\n result.push(lerp(start, end, i / (steps - 1)));\n }\n\n return result;\n}\n\n/**\n * Generate inertial scroll values (exponentially slowing down).\n */\nexport function inertialInterpolator(end: number, start: number, steps: number): number[] {\n if (end === start) {\n return [end, start];\n }\n\n const result = [];\n let factor = 1;\n for (let i = 0; i < steps - 1; i += 1) {\n result.push(lerp(end, start, factor));\n factor /= 2;\n }\n\n result.push(end);\n return result;\n}\n\n/**\n * Linear interpolation function\n * @param v0 initial value (when t = 0)\n * @param v1 final value (when t = 1)\n * @param t interpolation factor form 0 to 1\n * @returns interpolated value between v0 and v1\n */\nexport function lerp(v0: number, v1: number, t: number) {\n return v0 + t * (v1 - v0);\n}\n"],"mappings":";;;;;;;;;AAEA,MAAMA,mBAAmB,GAAG,CAAC;AAItB,SAASC,iBAAiBA,CAC/BC,MAAsB,EACtBC,aAAoB,EACpBC,YAA4B,EACnB;EACT,IAAIF,MAAM,CAACG,CAAC,IAAI,IAAI,EAAE;IACpB,OAAOD,YAAY,CAACF,MAAM,CAACG,CAAC,EAAEF,aAAa,CAACE,CAAC,EAAEL,mBAAmB,CAAC,CAACM,GAAG,CAAED,CAAC,KAAM;MAC9EA,CAAC;MACDE,CAAC,EAAEJ,aAAa,CAACI;IACnB,CAAC,CAAC,CAAC;EACL;EAEA,IAAIL,MAAM,CAACK,CAAC,IAAI,IAAI,EAAE;IACpB,OAAOH,YAAY,CAACF,MAAM,CAACK,CAAC,EAAEJ,aAAa,CAACI,CAAC,EAAEP,mBAAmB,CAAC,CAACM,GAAG,CAAEC,CAAC,KAAM;MAC9EA,CAAC;MACDF,CAAC,EAAEF,aAAa,CAACE;IACnB,CAAC,CAAC,CAAC;EACL;EAEA,OAAO,EAAE;AACX;;AAEA;AACA;AACA;AACO,SAASG,kBAAkBA,CAACC,GAAW,EAAEC,KAAa,EAAEC,KAAa,EAAY;EACtF,IAAIF,GAAG,KAAKC,KAAK,EAAE;IACjB,OAAO,CAACD,GAAG,EAAEC,KAAK,CAAC;EACrB;EAEA,MAAME,MAAM,GAAG,EAAE;EACjB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,KAAK,EAAEE,CAAC,IAAI,CAAC,EAAE;IACjCD,MAAM,CAACE,IAAI,CAACC,IAAI,CAACL,KAAK,EAAED,GAAG,EAAEI,CAAC,IAAIF,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;EAChD;EAEA,OAAOC,MAAM;AACf;;AAEA;AACA;AACA;AACO,SAASI,oBAAoBA,CAACP,GAAW,EAAEC,KAAa,EAAEC,KAAa,EAAY;EACxF,IAAIF,GAAG,KAAKC,KAAK,EAAE;IACjB,OAAO,CAACD,GAAG,EAAEC,KAAK,CAAC;EACrB;EAEA,MAAME,MAAM,GAAG,EAAE;EACjB,IAAIK,MAAM,GAAG,CAAC;EACd,KAAK,IAAIJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,KAAK,GAAG,CAAC,EAAEE,CAAC,IAAI,CAAC,EAAE;IACrCD,MAAM,CAACE,IAAI,CAACC,IAAI,CAACN,GAAG,EAAEC,KAAK,EAAEO,MAAM,CAAC,CAAC;IACrCA,MAAM,IAAI,CAAC;EACb;EAEAL,MAAM,CAACE,IAAI,CAACL,GAAG,CAAC;EAChB,OAAOG,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,IAAIA,CAACG,EAAU,EAAEC,EAAU,EAAEC,CAAS,EAAE;EACtD,OAAOF,EAAE,GAAGE,CAAC,IAAID,EAAE,GAAGD,EAAE,CAAC;AAC3B","ignoreList":[]}
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.emitTypingEvents = emitTypingEvents;
7
7
  exports.type = type;
8
8
  var _hostComponentNames = require("../../helpers/host-component-names");
9
+ var _nativeState = require("../../native-state");
9
10
  var _eventBuilder = require("../event-builder");
10
11
  var _errors = require("../../helpers/errors");
11
12
  var _textInput = require("../../helpers/text-input");
@@ -67,6 +68,7 @@ async function emitTypingEvents(element, {
67
68
  if (isAccepted === false) {
68
69
  return;
69
70
  }
71
+ _nativeState.nativeState.valueForElement.set(element, text);
70
72
  (0, _utils.dispatchEvent)(element, 'change', _eventBuilder.EventBuilder.TextInput.change(text));
71
73
  (0, _utils.dispatchEvent)(element, 'changeText', text);
72
74
  const selectionRange = {
@@ -1 +1 @@
1
- {"version":3,"file":"type.js","names":["_hostComponentNames","require","_eventBuilder","_errors","_textInput","_pointerEvents","_utils","_parseKeys","type","element","text","options","isHostTextInput","ErrorWithStack","isTextInputEditable","isPointerEventEnabled","keys","parseKeys","skipPress","dispatchEvent","EventBuilder","Common","touch","focus","wait","config","currentText","props","value","defaultValue","key","previousText","proposedText","applyKey","isAccepted","isTextChangeAccepted","emitTypingEvents","finalText","submitEditing","TextInput","endEditing","blur","isMultiline","multiline","keyPress","change","selectionRange","start","length","end","selectionChange","contentSize","getTextContentSize","contentSizeChange","slice","maxLength","undefined"],"sources":["../../../src/user-event/type/type.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport { isHostTextInput } from '../../helpers/host-component-names';\nimport { EventBuilder } from '../event-builder';\nimport { ErrorWithStack } from '../../helpers/errors';\nimport { isTextInputEditable } from '../../helpers/text-input';\nimport { isPointerEventEnabled } from '../../helpers/pointer-events';\nimport { UserEventConfig, UserEventInstance } from '../setup';\nimport { dispatchEvent, wait, getTextContentSize } from '../utils';\nimport { parseKeys } from './parse-keys';\n\nexport interface TypeOptions {\n skipPress?: boolean;\n submitEditing?: boolean;\n}\n\nexport async function type(\n this: UserEventInstance,\n element: ReactTestInstance,\n text: string,\n options?: TypeOptions,\n): Promise<void> {\n if (!isHostTextInput(element)) {\n throw new ErrorWithStack(\n `type() works only with host \"TextInput\" elements. Passed element has type \"${element.type}\".`,\n type,\n );\n }\n\n // Skip events if the element is disabled\n if (!isTextInputEditable(element) || !isPointerEventEnabled(element)) {\n return;\n }\n\n const keys = parseKeys(text);\n\n if (!options?.skipPress) {\n dispatchEvent(element, 'pressIn', EventBuilder.Common.touch());\n }\n\n dispatchEvent(element, 'focus', EventBuilder.Common.focus());\n\n if (!options?.skipPress) {\n await wait(this.config);\n dispatchEvent(element, 'pressOut', EventBuilder.Common.touch());\n }\n\n let currentText = element.props.value ?? element.props.defaultValue ?? '';\n for (const key of keys) {\n const previousText = element.props.value ?? currentText;\n const proposedText = applyKey(previousText, key);\n const isAccepted = isTextChangeAccepted(element, proposedText);\n currentText = isAccepted ? proposedText : previousText;\n\n await emitTypingEvents(element, {\n config: this.config,\n key,\n text: currentText,\n isAccepted,\n });\n }\n\n const finalText = element.props.value ?? currentText;\n await wait(this.config);\n\n if (options?.submitEditing) {\n dispatchEvent(element, 'submitEditing', EventBuilder.TextInput.submitEditing(finalText));\n }\n\n dispatchEvent(element, 'endEditing', EventBuilder.TextInput.endEditing(finalText));\n\n dispatchEvent(element, 'blur', EventBuilder.Common.blur());\n}\n\ntype EmitTypingEventsContext = {\n config: UserEventConfig;\n key: string;\n text: string;\n isAccepted?: boolean;\n};\n\nexport async function emitTypingEvents(\n element: ReactTestInstance,\n { config, key, text, isAccepted }: EmitTypingEventsContext,\n) {\n const isMultiline = element.props.multiline === true;\n\n await wait(config);\n dispatchEvent(element, 'keyPress', EventBuilder.TextInput.keyPress(key));\n\n // Platform difference (based on experiments):\n // - iOS and RN Web: TextInput emits only `keyPress` event when max length has been reached\n // - Android: TextInputs does not emit any events\n if (isAccepted === false) {\n return;\n }\n\n dispatchEvent(element, 'change', EventBuilder.TextInput.change(text));\n dispatchEvent(element, 'changeText', text);\n\n const selectionRange = {\n start: text.length,\n end: text.length,\n };\n dispatchEvent(element, 'selectionChange', EventBuilder.TextInput.selectionChange(selectionRange));\n\n // According to the docs only multiline TextInput emits contentSizeChange event\n // @see: https://reactnative.dev/docs/textinput#oncontentsizechange\n if (isMultiline) {\n const contentSize = getTextContentSize(text);\n dispatchEvent(\n element,\n 'contentSizeChange',\n EventBuilder.TextInput.contentSizeChange(contentSize),\n );\n }\n}\n\nfunction applyKey(text: string, key: string) {\n if (key === 'Enter') {\n return `${text}\\n`;\n }\n\n if (key === 'Backspace') {\n return text.slice(0, -1);\n }\n\n return text + key;\n}\n\nfunction isTextChangeAccepted(element: ReactTestInstance, text: string) {\n const maxLength = element.props.maxLength;\n return maxLength === undefined || text.length <= maxLength;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"type.js","names":["_hostComponentNames","require","_nativeState","_eventBuilder","_errors","_textInput","_pointerEvents","_utils","_parseKeys","type","element","text","options","isHostTextInput","ErrorWithStack","isTextInputEditable","isPointerEventEnabled","keys","parseKeys","skipPress","dispatchEvent","EventBuilder","Common","touch","focus","wait","config","currentText","props","value","defaultValue","key","previousText","proposedText","applyKey","isAccepted","isTextChangeAccepted","emitTypingEvents","finalText","submitEditing","TextInput","endEditing","blur","isMultiline","multiline","keyPress","nativeState","valueForElement","set","change","selectionRange","start","length","end","selectionChange","contentSize","getTextContentSize","contentSizeChange","slice","maxLength","undefined"],"sources":["../../../src/user-event/type/type.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport { isHostTextInput } from '../../helpers/host-component-names';\nimport { nativeState } from '../../native-state';\nimport { EventBuilder } from '../event-builder';\nimport { ErrorWithStack } from '../../helpers/errors';\nimport { isTextInputEditable } from '../../helpers/text-input';\nimport { isPointerEventEnabled } from '../../helpers/pointer-events';\nimport { UserEventConfig, UserEventInstance } from '../setup';\nimport { dispatchEvent, wait, getTextContentSize } from '../utils';\nimport { parseKeys } from './parse-keys';\n\nexport interface TypeOptions {\n skipPress?: boolean;\n submitEditing?: boolean;\n}\n\nexport async function type(\n this: UserEventInstance,\n element: ReactTestInstance,\n text: string,\n options?: TypeOptions,\n): Promise<void> {\n if (!isHostTextInput(element)) {\n throw new ErrorWithStack(\n `type() works only with host \"TextInput\" elements. Passed element has type \"${element.type}\".`,\n type,\n );\n }\n\n // Skip events if the element is disabled\n if (!isTextInputEditable(element) || !isPointerEventEnabled(element)) {\n return;\n }\n\n const keys = parseKeys(text);\n\n if (!options?.skipPress) {\n dispatchEvent(element, 'pressIn', EventBuilder.Common.touch());\n }\n\n dispatchEvent(element, 'focus', EventBuilder.Common.focus());\n\n if (!options?.skipPress) {\n await wait(this.config);\n dispatchEvent(element, 'pressOut', EventBuilder.Common.touch());\n }\n\n let currentText = element.props.value ?? element.props.defaultValue ?? '';\n for (const key of keys) {\n const previousText = element.props.value ?? currentText;\n const proposedText = applyKey(previousText, key);\n const isAccepted = isTextChangeAccepted(element, proposedText);\n currentText = isAccepted ? proposedText : previousText;\n\n await emitTypingEvents(element, {\n config: this.config,\n key,\n text: currentText,\n isAccepted,\n });\n }\n\n const finalText = element.props.value ?? currentText;\n await wait(this.config);\n\n if (options?.submitEditing) {\n dispatchEvent(element, 'submitEditing', EventBuilder.TextInput.submitEditing(finalText));\n }\n\n dispatchEvent(element, 'endEditing', EventBuilder.TextInput.endEditing(finalText));\n\n dispatchEvent(element, 'blur', EventBuilder.Common.blur());\n}\n\ntype EmitTypingEventsContext = {\n config: UserEventConfig;\n key: string;\n text: string;\n isAccepted?: boolean;\n};\n\nexport async function emitTypingEvents(\n element: ReactTestInstance,\n { config, key, text, isAccepted }: EmitTypingEventsContext,\n) {\n const isMultiline = element.props.multiline === true;\n\n await wait(config);\n dispatchEvent(element, 'keyPress', EventBuilder.TextInput.keyPress(key));\n\n // Platform difference (based on experiments):\n // - iOS and RN Web: TextInput emits only `keyPress` event when max length has been reached\n // - Android: TextInputs does not emit any events\n if (isAccepted === false) {\n return;\n }\n\n nativeState.valueForElement.set(element, text);\n dispatchEvent(element, 'change', EventBuilder.TextInput.change(text));\n dispatchEvent(element, 'changeText', text);\n\n const selectionRange = {\n start: text.length,\n end: text.length,\n };\n dispatchEvent(element, 'selectionChange', EventBuilder.TextInput.selectionChange(selectionRange));\n\n // According to the docs only multiline TextInput emits contentSizeChange event\n // @see: https://reactnative.dev/docs/textinput#oncontentsizechange\n if (isMultiline) {\n const contentSize = getTextContentSize(text);\n dispatchEvent(\n element,\n 'contentSizeChange',\n EventBuilder.TextInput.contentSizeChange(contentSize),\n );\n }\n}\n\nfunction applyKey(text: string, key: string) {\n if (key === 'Enter') {\n return `${text}\\n`;\n }\n\n if (key === 'Backspace') {\n return text.slice(0, -1);\n }\n\n return text + key;\n}\n\nfunction isTextChangeAccepted(element: ReactTestInstance, text: string) {\n const maxLength = element.props.maxLength;\n return maxLength === undefined || text.length <= maxLength;\n}\n"],"mappings":";;;;;;;AACA,IAAAA,mBAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,aAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AACA,IAAAK,cAAA,GAAAL,OAAA;AAEA,IAAAM,MAAA,GAAAN,OAAA;AACA,IAAAO,UAAA,GAAAP,OAAA;AAOO,eAAeQ,IAAIA,CAExBC,OAA0B,EAC1BC,IAAY,EACZC,OAAqB,EACN;EACf,IAAI,CAAC,IAAAC,mCAAe,EAACH,OAAO,CAAC,EAAE;IAC7B,MAAM,IAAII,sBAAc,CACtB,8EAA8EJ,OAAO,CAACD,IAAI,IAAI,EAC9FA,IACF,CAAC;EACH;;EAEA;EACA,IAAI,CAAC,IAAAM,8BAAmB,EAACL,OAAO,CAAC,IAAI,CAAC,IAAAM,oCAAqB,EAACN,OAAO,CAAC,EAAE;IACpE;EACF;EAEA,MAAMO,IAAI,GAAG,IAAAC,oBAAS,EAACP,IAAI,CAAC;EAE5B,IAAI,CAACC,OAAO,EAAEO,SAAS,EAAE;IACvB,IAAAC,oBAAa,EAACV,OAAO,EAAE,SAAS,EAAEW,0BAAY,CAACC,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;EAChE;EAEA,IAAAH,oBAAa,EAACV,OAAO,EAAE,OAAO,EAAEW,0BAAY,CAACC,MAAM,CAACE,KAAK,CAAC,CAAC,CAAC;EAE5D,IAAI,CAACZ,OAAO,EAAEO,SAAS,EAAE;IACvB,MAAM,IAAAM,WAAI,EAAC,IAAI,CAACC,MAAM,CAAC;IACvB,IAAAN,oBAAa,EAACV,OAAO,EAAE,UAAU,EAAEW,0BAAY,CAACC,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;EACjE;EAEA,IAAII,WAAW,GAAGjB,OAAO,CAACkB,KAAK,CAACC,KAAK,IAAInB,OAAO,CAACkB,KAAK,CAACE,YAAY,IAAI,EAAE;EACzE,KAAK,MAAMC,GAAG,IAAId,IAAI,EAAE;IACtB,MAAMe,YAAY,GAAGtB,OAAO,CAACkB,KAAK,CAACC,KAAK,IAAIF,WAAW;IACvD,MAAMM,YAAY,GAAGC,QAAQ,CAACF,YAAY,EAAED,GAAG,CAAC;IAChD,MAAMI,UAAU,GAAGC,oBAAoB,CAAC1B,OAAO,EAAEuB,YAAY,CAAC;IAC9DN,WAAW,GAAGQ,UAAU,GAAGF,YAAY,GAAGD,YAAY;IAEtD,MAAMK,gBAAgB,CAAC3B,OAAO,EAAE;MAC9BgB,MAAM,EAAE,IAAI,CAACA,MAAM;MACnBK,GAAG;MACHpB,IAAI,EAAEgB,WAAW;MACjBQ;IACF,CAAC,CAAC;EACJ;EAEA,MAAMG,SAAS,GAAG5B,OAAO,CAACkB,KAAK,CAACC,KAAK,IAAIF,WAAW;EACpD,MAAM,IAAAF,WAAI,EAAC,IAAI,CAACC,MAAM,CAAC;EAEvB,IAAId,OAAO,EAAE2B,aAAa,EAAE;IAC1B,IAAAnB,oBAAa,EAACV,OAAO,EAAE,eAAe,EAAEW,0BAAY,CAACmB,SAAS,CAACD,aAAa,CAACD,SAAS,CAAC,CAAC;EAC1F;EAEA,IAAAlB,oBAAa,EAACV,OAAO,EAAE,YAAY,EAAEW,0BAAY,CAACmB,SAAS,CAACC,UAAU,CAACH,SAAS,CAAC,CAAC;EAElF,IAAAlB,oBAAa,EAACV,OAAO,EAAE,MAAM,EAAEW,0BAAY,CAACC,MAAM,CAACoB,IAAI,CAAC,CAAC,CAAC;AAC5D;AASO,eAAeL,gBAAgBA,CACpC3B,OAA0B,EAC1B;EAAEgB,MAAM;EAAEK,GAAG;EAAEpB,IAAI;EAAEwB;AAAoC,CAAC,EAC1D;EACA,MAAMQ,WAAW,GAAGjC,OAAO,CAACkB,KAAK,CAACgB,SAAS,KAAK,IAAI;EAEpD,MAAM,IAAAnB,WAAI,EAACC,MAAM,CAAC;EAClB,IAAAN,oBAAa,EAACV,OAAO,EAAE,UAAU,EAAEW,0BAAY,CAACmB,SAAS,CAACK,QAAQ,CAACd,GAAG,CAAC,CAAC;;EAExE;EACA;EACA;EACA,IAAII,UAAU,KAAK,KAAK,EAAE;IACxB;EACF;EAEAW,wBAAW,CAACC,eAAe,CAACC,GAAG,CAACtC,OAAO,EAAEC,IAAI,CAAC;EAC9C,IAAAS,oBAAa,EAACV,OAAO,EAAE,QAAQ,EAAEW,0BAAY,CAACmB,SAAS,CAACS,MAAM,CAACtC,IAAI,CAAC,CAAC;EACrE,IAAAS,oBAAa,EAACV,OAAO,EAAE,YAAY,EAAEC,IAAI,CAAC;EAE1C,MAAMuC,cAAc,GAAG;IACrBC,KAAK,EAAExC,IAAI,CAACyC,MAAM;IAClBC,GAAG,EAAE1C,IAAI,CAACyC;EACZ,CAAC;EACD,IAAAhC,oBAAa,EAACV,OAAO,EAAE,iBAAiB,EAAEW,0BAAY,CAACmB,SAAS,CAACc,eAAe,CAACJ,cAAc,CAAC,CAAC;;EAEjG;EACA;EACA,IAAIP,WAAW,EAAE;IACf,MAAMY,WAAW,GAAG,IAAAC,yBAAkB,EAAC7C,IAAI,CAAC;IAC5C,IAAAS,oBAAa,EACXV,OAAO,EACP,mBAAmB,EACnBW,0BAAY,CAACmB,SAAS,CAACiB,iBAAiB,CAACF,WAAW,CACtD,CAAC;EACH;AACF;AAEA,SAASrB,QAAQA,CAACvB,IAAY,EAAEoB,GAAW,EAAE;EAC3C,IAAIA,GAAG,KAAK,OAAO,EAAE;IACnB,OAAO,GAAGpB,IAAI,IAAI;EACpB;EAEA,IAAIoB,GAAG,KAAK,WAAW,EAAE;IACvB,OAAOpB,IAAI,CAAC+C,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAC1B;EAEA,OAAO/C,IAAI,GAAGoB,GAAG;AACnB;AAEA,SAASK,oBAAoBA,CAAC1B,OAA0B,EAAEC,IAAY,EAAE;EACtE,MAAMgD,SAAS,GAAGjD,OAAO,CAACkB,KAAK,CAAC+B,SAAS;EACzC,OAAOA,SAAS,KAAKC,SAAS,IAAIjD,IAAI,CAACyC,MAAM,IAAIO,SAAS;AAC5D","ignoreList":[]}
@@ -1,7 +1,4 @@
1
- export interface ContentSize {
2
- width: number;
3
- height: number;
4
- }
1
+ import { Size } from '../../types';
5
2
  /**
6
3
  * Simple function for getting mock the size of given text.
7
4
  *
@@ -12,4 +9,4 @@ export interface ContentSize {
12
9
  * @param text text to be measure
13
10
  * @returns width and height of the text
14
11
  */
15
- export declare function getTextContentSize(text: string): ContentSize;
12
+ export declare function getTextContentSize(text: string): Size;
@@ -14,7 +14,6 @@ exports.getTextContentSize = getTextContentSize;
14
14
  * @param text text to be measure
15
15
  * @returns width and height of the text
16
16
  */
17
-
18
17
  function getTextContentSize(text) {
19
18
  const lines = text.split('\n');
20
19
  const maxLineLength = Math.max(...lines.map(line => line.length));
@@ -1 +1 @@
1
- {"version":3,"file":"content-size.js","names":["getTextContentSize","text","lines","split","maxLineLength","Math","max","map","line","length","width","height"],"sources":["../../../src/user-event/utils/content-size.ts"],"sourcesContent":["export interface ContentSize {\n width: number;\n height: number;\n}\n\n/**\n * Simple function for getting mock the size of given text.\n *\n * It works by calculating height based on number of lines and width based on\n * the longest line length. It does not take into account font size, font\n * family, as well as different letter sizes.\n *\n * @param text text to be measure\n * @returns width and height of the text\n */\n\nexport function getTextContentSize(text: string): ContentSize {\n const lines = text.split('\\n');\n const maxLineLength = Math.max(...lines.map((line) => line.length));\n\n return {\n width: maxLineLength * 5,\n height: lines.length * 16,\n };\n}\n"],"mappings":";;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,SAASA,kBAAkBA,CAACC,IAAY,EAAe;EAC5D,MAAMC,KAAK,GAAGD,IAAI,CAACE,KAAK,CAAC,IAAI,CAAC;EAC9B,MAAMC,aAAa,GAAGC,IAAI,CAACC,GAAG,CAAC,GAAGJ,KAAK,CAACK,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACC,MAAM,CAAC,CAAC;EAEnE,OAAO;IACLC,KAAK,EAAEN,aAAa,GAAG,CAAC;IACxBO,MAAM,EAAET,KAAK,CAACO,MAAM,GAAG;EACzB,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"file":"content-size.js","names":["getTextContentSize","text","lines","split","maxLineLength","Math","max","map","line","length","width","height"],"sources":["../../../src/user-event/utils/content-size.ts"],"sourcesContent":["import { Size } from '../../types';\n\n/**\n * Simple function for getting mock the size of given text.\n *\n * It works by calculating height based on number of lines and width based on\n * the longest line length. It does not take into account font size, font\n * family, as well as different letter sizes.\n *\n * @param text text to be measure\n * @returns width and height of the text\n */\nexport function getTextContentSize(text: string): Size {\n const lines = text.split('\\n');\n const maxLineLength = Math.max(...lines.map((line) => line.length));\n\n return {\n width: maxLineLength * 5,\n height: lines.length * 16,\n };\n}\n"],"mappings":";;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,kBAAkBA,CAACC,IAAY,EAAQ;EACrD,MAAMC,KAAK,GAAGD,IAAI,CAACE,KAAK,CAAC,IAAI,CAAC;EAC9B,MAAMC,aAAa,GAAGC,IAAI,CAACC,GAAG,CAAC,GAAGJ,KAAK,CAACK,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACC,MAAM,CAAC,CAAC;EAEnE,OAAO;IACLC,KAAK,EAAEN,aAAa,GAAG,CAAC;IACxBO,MAAM,EAAET,KAAK,CAACO,MAAM,GAAG;EACzB,CAAC;AACH","ignoreList":[]}
@@ -2,4 +2,3 @@ export * from './content-size';
2
2
  export * from './dispatch-event';
3
3
  export * from './text-range';
4
4
  export * from './wait';
5
- export * from './warn-about-real-timers';
@@ -47,15 +47,4 @@ Object.keys(_wait).forEach(function (key) {
47
47
  }
48
48
  });
49
49
  });
50
- var _warnAboutRealTimers = require("./warn-about-real-timers");
51
- Object.keys(_warnAboutRealTimers).forEach(function (key) {
52
- if (key === "default" || key === "__esModule") return;
53
- if (key in exports && exports[key] === _warnAboutRealTimers[key]) return;
54
- Object.defineProperty(exports, key, {
55
- enumerable: true,
56
- get: function () {
57
- return _warnAboutRealTimers[key];
58
- }
59
- });
60
- });
61
50
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_contentSize","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_dispatchEvent","_textRange","_wait","_warnAboutRealTimers"],"sources":["../../../src/user-event/utils/index.ts"],"sourcesContent":["export * from './content-size';\nexport * from './dispatch-event';\nexport * from './text-range';\nexport * from './wait';\nexport * from './warn-about-real-timers';\n"],"mappings":";;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,YAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,YAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,YAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,cAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,cAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,cAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,cAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,UAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,UAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,UAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,UAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,KAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,KAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,KAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,KAAA,CAAAP,GAAA;IAAA;EAAA;AAAA;AACA,IAAAQ,oBAAA,GAAAZ,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAU,oBAAA,EAAAT,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAQ,oBAAA,CAAAR,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAI,oBAAA,CAAAR,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_contentSize","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_dispatchEvent","_textRange","_wait"],"sources":["../../../src/user-event/utils/index.ts"],"sourcesContent":["export * from './content-size';\nexport * from './dispatch-event';\nexport * from './text-range';\nexport * from './wait';\n"],"mappings":";;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,YAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,YAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,YAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,cAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,cAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,cAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,cAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,UAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,UAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,UAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,UAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,KAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,KAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,KAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,KAAA,CAAAP,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -23,7 +23,7 @@ async function waitForElementToBeRemoved(expectation, options) {
23
23
  let result;
24
24
  try {
25
25
  result = expectation();
26
- } catch (error) {
26
+ } catch {
27
27
  return initialElements;
28
28
  }
29
29
  if (!isRemoved(result)) {
@@ -1 +1 @@
1
- {"version":3,"file":"wait-for-element-to-be-removed.js","names":["_waitFor","_interopRequireDefault","require","_errors","e","__esModule","default","isRemoved","result","Array","isArray","length","waitForElementToBeRemoved","expectation","options","timeoutError","ErrorWithStack","initialElements","waitFor","error"],"sources":["../src/wait-for-element-to-be-removed.ts"],"sourcesContent":["import waitFor from './wait-for';\nimport type { WaitForOptions } from './wait-for';\nimport { ErrorWithStack } from './helpers/errors';\n\nfunction isRemoved<T>(result: T): boolean {\n return !result || (Array.isArray(result) && !result.length);\n}\n\nexport default async function waitForElementToBeRemoved<T>(\n expectation: () => T,\n options?: WaitForOptions,\n): Promise<T> {\n // Created here so we get a nice stacktrace\n const timeoutError = new ErrorWithStack(\n 'Timed out in waitForElementToBeRemoved.',\n waitForElementToBeRemoved,\n );\n\n // Elements have to be present initally and then removed.\n const initialElements = expectation();\n if (isRemoved(initialElements)) {\n throw new ErrorWithStack(\n 'The element(s) given to waitForElementToBeRemoved are already removed. waitForElementToBeRemoved requires that the element(s) exist(s) before waiting for removal.',\n waitForElementToBeRemoved,\n );\n }\n\n return await waitFor(() => {\n let result;\n try {\n result = expectation();\n } catch (error) {\n return initialElements;\n }\n\n if (!isRemoved(result)) {\n throw timeoutError;\n }\n\n return initialElements;\n }, options);\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AAAkD,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAElD,SAASG,SAASA,CAAIC,MAAS,EAAW;EACxC,OAAO,CAACA,MAAM,IAAKC,KAAK,CAACC,OAAO,CAACF,MAAM,CAAC,IAAI,CAACA,MAAM,CAACG,MAAO;AAC7D;AAEe,eAAeC,yBAAyBA,CACrDC,WAAoB,EACpBC,OAAwB,EACZ;EACZ;EACA,MAAMC,YAAY,GAAG,IAAIC,sBAAc,CACrC,yCAAyC,EACzCJ,yBACF,CAAC;;EAED;EACA,MAAMK,eAAe,GAAGJ,WAAW,CAAC,CAAC;EACrC,IAAIN,SAAS,CAACU,eAAe,CAAC,EAAE;IAC9B,MAAM,IAAID,sBAAc,CACtB,oKAAoK,EACpKJ,yBACF,CAAC;EACH;EAEA,OAAO,MAAM,IAAAM,gBAAO,EAAC,MAAM;IACzB,IAAIV,MAAM;IACV,IAAI;MACFA,MAAM,GAAGK,WAAW,CAAC,CAAC;IACxB,CAAC,CAAC,OAAOM,KAAK,EAAE;MACd,OAAOF,eAAe;IACxB;IAEA,IAAI,CAACV,SAAS,CAACC,MAAM,CAAC,EAAE;MACtB,MAAMO,YAAY;IACpB;IAEA,OAAOE,eAAe;EACxB,CAAC,EAAEH,OAAO,CAAC;AACb","ignoreList":[]}
1
+ {"version":3,"file":"wait-for-element-to-be-removed.js","names":["_waitFor","_interopRequireDefault","require","_errors","e","__esModule","default","isRemoved","result","Array","isArray","length","waitForElementToBeRemoved","expectation","options","timeoutError","ErrorWithStack","initialElements","waitFor"],"sources":["../src/wait-for-element-to-be-removed.ts"],"sourcesContent":["import waitFor from './wait-for';\nimport type { WaitForOptions } from './wait-for';\nimport { ErrorWithStack } from './helpers/errors';\n\nfunction isRemoved<T>(result: T): boolean {\n return !result || (Array.isArray(result) && !result.length);\n}\n\nexport default async function waitForElementToBeRemoved<T>(\n expectation: () => T,\n options?: WaitForOptions,\n): Promise<T> {\n // Created here so we get a nice stacktrace\n const timeoutError = new ErrorWithStack(\n 'Timed out in waitForElementToBeRemoved.',\n waitForElementToBeRemoved,\n );\n\n // Elements have to be present initally and then removed.\n const initialElements = expectation();\n if (isRemoved(initialElements)) {\n throw new ErrorWithStack(\n 'The element(s) given to waitForElementToBeRemoved are already removed. waitForElementToBeRemoved requires that the element(s) exist(s) before waiting for removal.',\n waitForElementToBeRemoved,\n );\n }\n\n return await waitFor(() => {\n let result;\n try {\n result = expectation();\n } catch {\n return initialElements;\n }\n\n if (!isRemoved(result)) {\n throw timeoutError;\n }\n\n return initialElements;\n }, options);\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AAAkD,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAElD,SAASG,SAASA,CAAIC,MAAS,EAAW;EACxC,OAAO,CAACA,MAAM,IAAKC,KAAK,CAACC,OAAO,CAACF,MAAM,CAAC,IAAI,CAACA,MAAM,CAACG,MAAO;AAC7D;AAEe,eAAeC,yBAAyBA,CACrDC,WAAoB,EACpBC,OAAwB,EACZ;EACZ;EACA,MAAMC,YAAY,GAAG,IAAIC,sBAAc,CACrC,yCAAyC,EACzCJ,yBACF,CAAC;;EAED;EACA,MAAMK,eAAe,GAAGJ,WAAW,CAAC,CAAC;EACrC,IAAIN,SAAS,CAACU,eAAe,CAAC,EAAE;IAC9B,MAAM,IAAID,sBAAc,CACtB,oKAAoK,EACpKJ,yBACF,CAAC;EACH;EAEA,OAAO,MAAM,IAAAM,gBAAO,EAAC,MAAM;IACzB,IAAIV,MAAM;IACV,IAAI;MACFA,MAAM,GAAGK,WAAW,CAAC,CAAC;IACxB,CAAC,CAAC,MAAM;MACN,OAAOI,eAAe;IACxB;IAEA,IAAI,CAACV,SAAS,CAACC,MAAM,CAAC,EAAE;MACtB,MAAMO,YAAY;IACpB;IAEA,OAAOE,eAAe;EACxB,CAAC,EAAEH,OAAO,CAAC;AACb","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@testing-library/react-native",
3
- "version": "12.6.1",
3
+ "version": "12.7.1",
4
4
  "description": "Simple and complete React Native testing utilities that encourage good testing practices.",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -33,8 +33,7 @@
33
33
  "build:js": "babel src --out-dir build --extensions \".js,.ts,.jsx,.tsx\" --source-maps --ignore \"**/__tests__/**\"",
34
34
  "build:ts": "tsc --build tsconfig.release.json",
35
35
  "build": "yarn clean && yarn build:js && yarn build:ts && yarn copy-flowtypes",
36
- "prepublish": "yarn build",
37
- "publish": "release-it"
36
+ "publish": "yarn build && release-it"
38
37
  },
39
38
  "files": [
40
39
  "build/",
@@ -70,7 +69,7 @@
70
69
  "@babel/preset-flow": "^7.24.7",
71
70
  "@babel/preset-react": "^7.24.7",
72
71
  "@babel/preset-typescript": "^7.24.7",
73
- "@callstack/eslint-config": "^14.2.0",
72
+ "@callstack/eslint-config": "^15.0.0",
74
73
  "@release-it/conventional-changelog": "^8.0.1",
75
74
  "@relmify/jest-serializer-strip-ansi": "^1.0.2",
76
75
  "@types/jest": "^29.5.12",
@@ -1,5 +0,0 @@
1
- import { ReactTestInstance } from 'react-test-renderer';
2
- export declare function toBeCollapsed(this: jest.MatcherContext, element: ReactTestInstance): {
3
- pass: NonNullable<boolean | undefined>;
4
- message: () => string;
5
- };
@@ -1,20 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.toBeCollapsed = toBeCollapsed;
7
- var _jestMatcherUtils = require("jest-matcher-utils");
8
- var _accessibility = require("../helpers/accessibility");
9
- var _utils = require("./utils");
10
- function toBeCollapsed(element) {
11
- (0, _utils.checkHostElement)(element, toBeCollapsed, this);
12
- return {
13
- pass: (0, _accessibility.isElementCollapsed)(element),
14
- message: () => {
15
- const matcher = (0, _jestMatcherUtils.matcherHint)(`${this.isNot ? '.not' : ''}.toBeCollapsed`, 'element', '');
16
- return [matcher, '', `Received element is ${this.isNot ? '' : 'not '}collapsed:`, (0, _utils.formatElement)(element)].join('\n');
17
- }
18
- };
19
- }
20
- //# sourceMappingURL=to-be-collapsed.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"to-be-collapsed.js","names":["_jestMatcherUtils","require","_accessibility","_utils","toBeCollapsed","element","checkHostElement","pass","isElementCollapsed","message","matcher","matcherHint","isNot","formatElement","join"],"sources":["../../src/matchers/to-be-collapsed.tsx"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport { matcherHint } from 'jest-matcher-utils';\nimport { isElementCollapsed } from '../helpers/accessibility';\nimport { checkHostElement, formatElement } from './utils';\n\nexport function toBeCollapsed(this: jest.MatcherContext, element: ReactTestInstance) {\n checkHostElement(element, toBeCollapsed, this);\n\n return {\n pass: isElementCollapsed(element),\n message: () => {\n const matcher = matcherHint(`${this.isNot ? '.not' : ''}.toBeCollapsed`, 'element', '');\n return [\n matcher,\n '',\n `Received element is ${this.isNot ? '' : 'not '}collapsed:`,\n formatElement(element),\n ].join('\\n');\n },\n };\n}\n"],"mappings":";;;;;;AACA,IAAAA,iBAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAEO,SAASG,aAAaA,CAA4BC,OAA0B,EAAE;EACnF,IAAAC,uBAAgB,EAACD,OAAO,EAAED,aAAa,EAAE,IAAI,CAAC;EAE9C,OAAO;IACLG,IAAI,EAAE,IAAAC,iCAAkB,EAACH,OAAO,CAAC;IACjCI,OAAO,EAAEA,CAAA,KAAM;MACb,MAAMC,OAAO,GAAG,IAAAC,6BAAW,EAAC,GAAG,IAAI,CAACC,KAAK,GAAG,MAAM,GAAG,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE,CAAC;MACvF,OAAO,CACLF,OAAO,EACP,EAAE,EACF,uBAAuB,IAAI,CAACE,KAAK,GAAG,EAAE,GAAG,MAAM,YAAY,EAC3D,IAAAC,oBAAa,EAACR,OAAO,CAAC,CACvB,CAACS,IAAI,CAAC,IAAI,CAAC;IACd;EACF,CAAC;AACH","ignoreList":[]}
@@ -1,4 +0,0 @@
1
- import { ReactTestInstance } from 'react-test-renderer';
2
- import { ContentOffset } from '../event-builder/scroll-view';
3
- export declare function getElementScrollOffset(element: ReactTestInstance): ContentOffset;
4
- export declare function setElementScrollOffset(element: ReactTestInstance, scrollState: ContentOffset): void;
@@ -1,18 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.getElementScrollOffset = getElementScrollOffset;
7
- exports.setElementScrollOffset = setElementScrollOffset;
8
- const scrollOffsetForElement = new WeakMap();
9
- function getElementScrollOffset(element) {
10
- return scrollOffsetForElement.get(element) ?? {
11
- x: 0,
12
- y: 0
13
- };
14
- }
15
- function setElementScrollOffset(element, scrollState) {
16
- scrollOffsetForElement.set(element, scrollState);
17
- }
18
- //# sourceMappingURL=state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.js","names":["scrollOffsetForElement","WeakMap","getElementScrollOffset","element","get","x","y","setElementScrollOffset","scrollState","set"],"sources":["../../../src/user-event/scroll/state.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport { ContentOffset } from '../event-builder/scroll-view';\n\nconst scrollOffsetForElement = new WeakMap<ReactTestInstance, ContentOffset>();\n\nexport function getElementScrollOffset(element: ReactTestInstance): ContentOffset {\n return scrollOffsetForElement.get(element) ?? { x: 0, y: 0 };\n}\n\nexport function setElementScrollOffset(element: ReactTestInstance, scrollState: ContentOffset) {\n scrollOffsetForElement.set(element, scrollState);\n}\n"],"mappings":";;;;;;;AAGA,MAAMA,sBAAsB,GAAG,IAAIC,OAAO,CAAmC,CAAC;AAEvE,SAASC,sBAAsBA,CAACC,OAA0B,EAAiB;EAChF,OAAOH,sBAAsB,CAACI,GAAG,CAACD,OAAO,CAAC,IAAI;IAAEE,CAAC,EAAE,CAAC;IAAEC,CAAC,EAAE;EAAE,CAAC;AAC9D;AAEO,SAASC,sBAAsBA,CAACJ,OAA0B,EAAEK,WAA0B,EAAE;EAC7FR,sBAAsB,CAACS,GAAG,CAACN,OAAO,EAAEK,WAAW,CAAC;AAClD","ignoreList":[]}
@@ -1 +0,0 @@
1
- export declare const warnAboutRealTimersIfNeeded: () => void;
@@ -1,23 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.warnAboutRealTimersIfNeeded = void 0;
7
- var _timers = require("../../helpers/timers");
8
- const warnAboutRealTimersIfNeeded = () => {
9
- if (process.env.RNTL_SKIP_AUTO_DETECT_FAKE_TIMERS) {
10
- return;
11
- }
12
- const areFakeTimersEnabled = (0, _timers.jestFakeTimersAreEnabled)();
13
- if (areFakeTimersEnabled) {
14
- return;
15
- }
16
-
17
- // eslint-disable-next-line no-console
18
- console.warn(`It is recommended to use userEvent with fake timers
19
- Some events involve duration so your tests may take a long time to run.
20
- For instance calling userEvent.longPress with real timers will take 500 ms.`);
21
- };
22
- exports.warnAboutRealTimersIfNeeded = warnAboutRealTimersIfNeeded;
23
- //# sourceMappingURL=warn-about-real-timers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"warn-about-real-timers.js","names":["_timers","require","warnAboutRealTimersIfNeeded","process","env","RNTL_SKIP_AUTO_DETECT_FAKE_TIMERS","areFakeTimersEnabled","jestFakeTimersAreEnabled","console","warn","exports"],"sources":["../../../src/user-event/utils/warn-about-real-timers.ts"],"sourcesContent":["import { jestFakeTimersAreEnabled } from '../../helpers/timers';\n\nexport const warnAboutRealTimersIfNeeded = () => {\n if (process.env.RNTL_SKIP_AUTO_DETECT_FAKE_TIMERS) {\n return;\n }\n\n const areFakeTimersEnabled = jestFakeTimersAreEnabled();\n if (areFakeTimersEnabled) {\n return;\n }\n\n // eslint-disable-next-line no-console\n console.warn(`It is recommended to use userEvent with fake timers\nSome events involve duration so your tests may take a long time to run.\nFor instance calling userEvent.longPress with real timers will take 500 ms.`);\n};\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEO,MAAMC,2BAA2B,GAAGA,CAAA,KAAM;EAC/C,IAAIC,OAAO,CAACC,GAAG,CAACC,iCAAiC,EAAE;IACjD;EACF;EAEA,MAAMC,oBAAoB,GAAG,IAAAC,gCAAwB,EAAC,CAAC;EACvD,IAAID,oBAAoB,EAAE;IACxB;EACF;;EAEA;EACAE,OAAO,CAACC,IAAI,CAAC;AACf;AACA,4EAA4E,CAAC;AAC7E,CAAC;AAACC,OAAA,CAAAR,2BAAA,GAAAA,2BAAA","ignoreList":[]}