@testing-library/react-native 13.2.1 → 13.3.0-beta.0

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 (42) hide show
  1. package/build/fire-event.d.ts +7 -0
  2. package/build/fire-event.js +24 -4
  3. package/build/fire-event.js.map +1 -1
  4. package/build/helpers/accessibility.js +3 -0
  5. package/build/helpers/accessibility.js.map +1 -1
  6. package/build/pure.d.ts +3 -1
  7. package/build/pure.js +15 -1
  8. package/build/pure.js.map +1 -1
  9. package/build/render-act.d.ts +1 -0
  10. package/build/render-act.js +13 -0
  11. package/build/render-act.js.map +1 -1
  12. package/build/render-async.d.ts +104 -0
  13. package/build/render-async.js +104 -0
  14. package/build/render-async.js.map +1 -0
  15. package/build/render.d.ts +8 -2
  16. package/build/render.js +24 -11
  17. package/build/render.js.map +1 -1
  18. package/build/screen.js +4 -1
  19. package/build/screen.js.map +1 -1
  20. package/build/test-utils/console.d.ts +1 -0
  21. package/build/test-utils/console.js +17 -0
  22. package/build/test-utils/console.js.map +1 -0
  23. package/build/tsconfig.release.tsbuildinfo +1 -1
  24. package/build/user-event/clear.js +4 -4
  25. package/build/user-event/clear.js.map +1 -1
  26. package/build/user-event/paste.js +8 -8
  27. package/build/user-event/paste.js.map +1 -1
  28. package/build/user-event/press/press.js +6 -6
  29. package/build/user-event/press/press.js.map +1 -1
  30. package/build/user-event/scroll/scroll-to.js +7 -7
  31. package/build/user-event/scroll/scroll-to.js.map +1 -1
  32. package/build/user-event/type/type.js +11 -11
  33. package/build/user-event/type/type.js.map +1 -1
  34. package/build/user-event/utils/dispatch-event.d.ts +1 -1
  35. package/build/user-event/utils/dispatch-event.js +3 -3
  36. package/build/user-event/utils/dispatch-event.js.map +1 -1
  37. package/build/wait-for.js +3 -1
  38. package/build/wait-for.js.map +1 -1
  39. package/package.json +3 -3
  40. package/build/test-utils/index.d.ts +0 -1
  41. package/build/test-utils/index.js +0 -17
  42. package/build/test-utils/index.js.map +0 -1
package/build/render.js CHANGED
@@ -65,20 +65,40 @@ function renderWithStringValidation(component, options = {}) {
65
65
  return buildRenderResult(renderer, wrap);
66
66
  }
67
67
  function buildRenderResult(renderer, wrap) {
68
- const update = updateWithAct(renderer, wrap);
69
68
  const instance = renderer.root;
69
+ const rerender = component => {
70
+ void (0, _act.default)(() => {
71
+ renderer.update(wrap(component));
72
+ });
73
+ };
74
+ const rerenderAsync = async component => {
75
+ // eslint-disable-next-line require-await
76
+ await (0, _act.default)(async () => {
77
+ renderer.update(wrap(component));
78
+ });
79
+ };
70
80
  const unmount = () => {
71
81
  void (0, _act.default)(() => {
72
82
  renderer.unmount();
73
83
  });
74
84
  };
85
+ const unmountAsync = async () => {
86
+ // eslint-disable-next-line require-await
87
+ await (0, _act.default)(async () => {
88
+ renderer.unmount();
89
+ });
90
+ };
75
91
  (0, _cleanup.addToCleanupQueue)(unmount);
76
92
  const result = {
77
93
  ...(0, _within.getQueriesForElement)(instance),
78
- update,
94
+ rerender,
95
+ rerenderAsync,
96
+ update: rerender,
97
+ // alias for 'rerender'
98
+ updateAsync: rerenderAsync,
99
+ // alias for `rerenderAsync`
79
100
  unmount,
80
- rerender: update,
81
- // alias for `update`
101
+ unmountAsync,
82
102
  toJSON: renderer.toJSON,
83
103
  debug: makeDebug(renderer),
84
104
  get root() {
@@ -98,13 +118,6 @@ function buildRenderResult(renderer, wrap) {
98
118
  (0, _screen.setRenderResult)(result);
99
119
  return result;
100
120
  }
101
- function updateWithAct(renderer, wrap) {
102
- return function (component) {
103
- void (0, _act.default)(() => {
104
- renderer.update(wrap(component));
105
- });
106
- };
107
- }
108
121
  function makeDebug(renderer) {
109
122
  function debugImpl(options) {
110
123
  const {
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","names":["React","_interopRequireWildcard","require","_act","_interopRequireDefault","_cleanup","_config","_componentTree","_debug","_stringValidation","_renderAct","_screen","_within","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","render","component","options","renderInternal","wrapper","Wrapper","concurrentRoot","unstable_validateStringsRenderedWithinText","rest","testRendererOptions","unstable_isConcurrent","getConfig","renderWithStringValidation","wrap","element","createElement","renderer","renderWithAct","buildRenderResult","Profiler","id","onRender","handleRender","_","phase","validateStringsRenderedWithinText","toJSON","update","updateWithAct","instance","root","unmount","act","addToCleanupQueue","result","getQueriesForElement","rerender","debug","makeDebug","getHostSelves","UNSAFE_root","enumerable","Error","setRenderResult","debugImpl","defaultDebugOptions","debugOptions","json"],"sources":["../src/render.tsx"],"sourcesContent":["import * as React from 'react';\nimport type {\n ReactTestInstance,\n ReactTestRenderer,\n TestRendererOptions,\n} from 'react-test-renderer';\n\nimport act from './act';\nimport { addToCleanupQueue } from './cleanup';\nimport { getConfig } from './config';\nimport { getHostSelves } from './helpers/component-tree';\nimport type { DebugOptions } from './helpers/debug';\nimport { debug } from './helpers/debug';\nimport { validateStringsRenderedWithinText } from './helpers/string-validation';\nimport { renderWithAct } from './render-act';\nimport { setRenderResult } from './screen';\nimport { getQueriesForElement } from './within';\n\nexport interface RenderOptions {\n /**\n * Pass a React Component as the wrapper option to have it rendered around the inner element. This is most useful for creating\n * reusable custom render functions for common data providers.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrapper?: React.ComponentType<any>;\n\n /**\n * Set to `false` to disable concurrent rendering.\n * Otherwise `render` will default to concurrent rendering.\n */\n concurrentRoot?: boolean;\n\n createNodeMock?: (element: React.ReactElement) => unknown;\n unstable_validateStringsRenderedWithinText?: boolean;\n}\n\nexport type RenderResult = ReturnType<typeof render>;\n\n/**\n * Renders test component deeply using React Test Renderer and exposes helpers\n * to assert on the output.\n */\nexport default function render<T>(component: React.ReactElement<T>, options: RenderOptions = {}) {\n return renderInternal(component, options);\n}\n\nexport function renderInternal<T>(component: React.ReactElement<T>, options?: RenderOptions) {\n const {\n wrapper: Wrapper,\n concurrentRoot,\n unstable_validateStringsRenderedWithinText,\n ...rest\n } = options || {};\n\n const testRendererOptions: TestRendererOptions = {\n ...rest,\n // @ts-expect-error incomplete typing on RTR package\n unstable_isConcurrent: concurrentRoot ?? getConfig().concurrentRoot,\n };\n\n if (unstable_validateStringsRenderedWithinText) {\n return renderWithStringValidation(component, {\n wrapper: Wrapper,\n ...testRendererOptions,\n });\n }\n\n const wrap = (element: React.ReactElement) => (Wrapper ? <Wrapper>{element}</Wrapper> : element);\n const renderer = renderWithAct(wrap(component), testRendererOptions);\n return buildRenderResult(renderer, wrap);\n}\n\nfunction renderWithStringValidation<T>(\n component: React.ReactElement<T>,\n options: Omit<RenderOptions, 'unstable_validateStringsRenderedWithinText'> = {},\n) {\n const { wrapper: Wrapper, ...testRendererOptions } = options ?? {};\n\n const wrap = (element: React.ReactElement) => (\n <React.Profiler id=\"renderProfiler\" onRender={handleRender}>\n {Wrapper ? <Wrapper>{element}</Wrapper> : element}\n </React.Profiler>\n );\n\n const handleRender: React.ProfilerOnRenderCallback = (_, phase) => {\n if (renderer && phase === 'update') {\n validateStringsRenderedWithinText(renderer.toJSON());\n }\n };\n\n const renderer: ReactTestRenderer = renderWithAct(wrap(component), testRendererOptions);\n validateStringsRenderedWithinText(renderer.toJSON());\n\n return buildRenderResult(renderer, wrap);\n}\n\nfunction buildRenderResult(\n renderer: ReactTestRenderer,\n wrap: (element: React.ReactElement) => React.JSX.Element,\n) {\n const update = updateWithAct(renderer, wrap);\n const instance = renderer.root;\n\n const unmount = () => {\n void act(() => {\n renderer.unmount();\n });\n };\n\n addToCleanupQueue(unmount);\n\n const result = {\n ...getQueriesForElement(instance),\n update,\n unmount,\n rerender: update, // alias for `update`\n toJSON: renderer.toJSON,\n debug: makeDebug(renderer),\n get root(): ReactTestInstance {\n return getHostSelves(instance)[0];\n },\n UNSAFE_root: instance,\n };\n\n // Add as non-enumerable property, so that it's safe to enumerate\n // `render` result, e.g. using destructuring rest syntax.\n Object.defineProperty(result, 'container', {\n enumerable: false,\n get() {\n throw new Error(\n \"'container' property has been renamed to 'UNSAFE_root'.\\n\\n\" +\n \"Consider using 'root' property which returns root host element.\",\n );\n },\n });\n\n setRenderResult(result);\n\n return result;\n}\n\nfunction updateWithAct(\n renderer: ReactTestRenderer,\n wrap: (innerElement: React.ReactElement) => React.ReactElement,\n) {\n return function (component: React.ReactElement) {\n void act(() => {\n renderer.update(wrap(component));\n });\n };\n}\n\nexport type DebugFunction = (options?: DebugOptions) => void;\n\nfunction makeDebug(renderer: ReactTestRenderer): DebugFunction {\n function debugImpl(options?: DebugOptions) {\n const { defaultDebugOptions } = getConfig();\n const debugOptions = { ...defaultDebugOptions, ...options };\n const json = renderer.toJSON();\n if (json) {\n return debug(json, debugOptions);\n }\n }\n return debugImpl;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"render.js","names":["React","_interopRequireWildcard","require","_act","_interopRequireDefault","_cleanup","_config","_componentTree","_debug","_stringValidation","_renderAct","_screen","_within","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","render","component","options","renderInternal","wrapper","Wrapper","concurrentRoot","unstable_validateStringsRenderedWithinText","rest","testRendererOptions","unstable_isConcurrent","getConfig","renderWithStringValidation","wrap","element","createElement","renderer","renderWithAct","buildRenderResult","Profiler","id","onRender","handleRender","_","phase","validateStringsRenderedWithinText","toJSON","instance","root","rerender","act","update","rerenderAsync","unmount","unmountAsync","addToCleanupQueue","result","getQueriesForElement","updateAsync","debug","makeDebug","getHostSelves","UNSAFE_root","enumerable","Error","setRenderResult","debugImpl","defaultDebugOptions","debugOptions","json"],"sources":["../src/render.tsx"],"sourcesContent":["import * as React from 'react';\nimport type {\n ReactTestInstance,\n ReactTestRenderer,\n TestRendererOptions,\n} from 'react-test-renderer';\n\nimport act from './act';\nimport { addToCleanupQueue } from './cleanup';\nimport { getConfig } from './config';\nimport { getHostSelves } from './helpers/component-tree';\nimport type { DebugOptions } from './helpers/debug';\nimport { debug } from './helpers/debug';\nimport { validateStringsRenderedWithinText } from './helpers/string-validation';\nimport { renderWithAct } from './render-act';\nimport { setRenderResult } from './screen';\nimport { getQueriesForElement } from './within';\n\nexport interface RenderOptions {\n /**\n * Pass a React Component as the wrapper option to have it rendered around the inner element. This is most useful for creating\n * reusable custom render functions for common data providers.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrapper?: React.ComponentType<any>;\n\n /**\n * Set to `false` to disable concurrent rendering.\n * Otherwise `render` will default to concurrent rendering.\n */\n concurrentRoot?: boolean;\n\n createNodeMock?: (element: React.ReactElement) => unknown;\n unstable_validateStringsRenderedWithinText?: boolean;\n}\n\nexport type RenderResult = ReturnType<typeof render>;\n\n/**\n * Renders test component deeply using React Test Renderer and exposes helpers\n * to assert on the output.\n */\nexport default function render<T>(component: React.ReactElement<T>, options: RenderOptions = {}) {\n return renderInternal(component, options);\n}\n\nexport function renderInternal<T>(component: React.ReactElement<T>, options?: RenderOptions) {\n const {\n wrapper: Wrapper,\n concurrentRoot,\n unstable_validateStringsRenderedWithinText,\n ...rest\n } = options || {};\n\n const testRendererOptions: TestRendererOptions = {\n ...rest,\n // @ts-expect-error incomplete typing on RTR package\n unstable_isConcurrent: concurrentRoot ?? getConfig().concurrentRoot,\n };\n\n if (unstable_validateStringsRenderedWithinText) {\n return renderWithStringValidation(component, {\n wrapper: Wrapper,\n ...testRendererOptions,\n });\n }\n\n const wrap = (element: React.ReactElement) => (Wrapper ? <Wrapper>{element}</Wrapper> : element);\n const renderer = renderWithAct(wrap(component), testRendererOptions);\n return buildRenderResult(renderer, wrap);\n}\n\nfunction renderWithStringValidation<T>(\n component: React.ReactElement<T>,\n options: Omit<RenderOptions, 'unstable_validateStringsRenderedWithinText'> = {},\n) {\n const { wrapper: Wrapper, ...testRendererOptions } = options ?? {};\n\n const wrap = (element: React.ReactElement) => (\n <React.Profiler id=\"renderProfiler\" onRender={handleRender}>\n {Wrapper ? <Wrapper>{element}</Wrapper> : element}\n </React.Profiler>\n );\n\n const handleRender: React.ProfilerOnRenderCallback = (_, phase) => {\n if (renderer && phase === 'update') {\n validateStringsRenderedWithinText(renderer.toJSON());\n }\n };\n\n const renderer: ReactTestRenderer = renderWithAct(wrap(component), testRendererOptions);\n validateStringsRenderedWithinText(renderer.toJSON());\n\n return buildRenderResult(renderer, wrap);\n}\n\nfunction buildRenderResult(\n renderer: ReactTestRenderer,\n wrap: (element: React.ReactElement) => React.JSX.Element,\n) {\n const instance = renderer.root;\n\n const rerender = (component: React.ReactElement) => {\n void act(() => {\n renderer.update(wrap(component));\n });\n };\n const rerenderAsync = async (component: React.ReactElement) => {\n // eslint-disable-next-line require-await\n await act(async () => {\n renderer.update(wrap(component));\n });\n };\n\n const unmount = () => {\n void act(() => {\n renderer.unmount();\n });\n };\n const unmountAsync = async () => {\n // eslint-disable-next-line require-await\n await act(async () => {\n renderer.unmount();\n });\n };\n\n addToCleanupQueue(unmount);\n\n const result = {\n ...getQueriesForElement(instance),\n rerender,\n rerenderAsync,\n update: rerender, // alias for 'rerender'\n updateAsync: rerenderAsync, // alias for `rerenderAsync`\n unmount,\n unmountAsync,\n toJSON: renderer.toJSON,\n debug: makeDebug(renderer),\n get root(): ReactTestInstance {\n return getHostSelves(instance)[0];\n },\n UNSAFE_root: instance,\n };\n\n // Add as non-enumerable property, so that it's safe to enumerate\n // `render` result, e.g. using destructuring rest syntax.\n Object.defineProperty(result, 'container', {\n enumerable: false,\n get() {\n throw new Error(\n \"'container' property has been renamed to 'UNSAFE_root'.\\n\\n\" +\n \"Consider using 'root' property which returns root host element.\",\n );\n },\n });\n\n setRenderResult(result);\n\n return result;\n}\n\nexport type DebugFunction = (options?: DebugOptions) => void;\n\nfunction makeDebug(renderer: ReactTestRenderer): DebugFunction {\n function debugImpl(options?: DebugOptions) {\n const { defaultDebugOptions } = getConfig();\n const debugOptions = { ...defaultDebugOptions, ...options };\n const json = renderer.toJSON();\n if (json) {\n return debug(json, debugOptions);\n }\n }\n return debugImpl;\n}\n"],"mappings":"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","ignoreList":[]}
package/build/screen.js CHANGED
@@ -22,9 +22,12 @@ const defaultScreen = {
22
22
  throw new Error(SCREEN_ERROR);
23
23
  },
24
24
  debug: notImplementedDebug,
25
+ rerender: notImplemented,
26
+ rerenderAsync: notImplemented,
25
27
  update: notImplemented,
28
+ updateAsync: notImplemented,
26
29
  unmount: notImplemented,
27
- rerender: notImplemented,
30
+ unmountAsync: notImplemented,
28
31
  toJSON: notImplemented,
29
32
  getByLabelText: notImplemented,
30
33
  getAllByLabelText: notImplemented,
@@ -1 +1 @@
1
- {"version":3,"file":"screen.js","names":["SCREEN_ERROR","notImplemented","Error","notImplementedDebug","defaultScreen","isDetached","root","UNSAFE_root","debug","update","unmount","rerender","toJSON","getByLabelText","getAllByLabelText","queryByLabelText","queryAllByLabelText","findByLabelText","findAllByLabelText","getByHintText","getAllByHintText","queryByHintText","queryAllByHintText","findByHintText","findAllByHintText","getByA11yHint","getAllByA11yHint","queryByA11yHint","queryAllByA11yHint","findByA11yHint","findAllByA11yHint","getByAccessibilityHint","getAllByAccessibilityHint","queryByAccessibilityHint","queryAllByAccessibilityHint","findByAccessibilityHint","findAllByAccessibilityHint","getByRole","getAllByRole","queryByRole","queryAllByRole","findByRole","findAllByRole","UNSAFE_getByProps","UNSAFE_getAllByProps","UNSAFE_queryByProps","UNSAFE_queryAllByProps","UNSAFE_getByType","UNSAFE_getAllByType","UNSAFE_queryByType","UNSAFE_queryAllByType","getByPlaceholderText","getAllByPlaceholderText","queryByPlaceholderText","queryAllByPlaceholderText","findByPlaceholderText","findAllByPlaceholderText","getByDisplayValue","getAllByDisplayValue","queryByDisplayValue","queryAllByDisplayValue","findByDisplayValue","findAllByDisplayValue","getByTestId","getAllByTestId","queryByTestId","queryAllByTestId","findByTestId","findAllByTestId","getByText","getAllByText","queryByText","queryAllByText","findByText","findAllByText","screen","exports","setRenderResult","renderResult","clearRenderResult"],"sources":["../src/screen.ts"],"sourcesContent":["import type { ReactTestInstance } from 'react-test-renderer';\n\nimport type { RenderResult } from './render';\n\nconst SCREEN_ERROR = '`render` method has not been called';\n\nconst notImplemented = () => {\n throw new Error(SCREEN_ERROR);\n};\n\nconst notImplementedDebug = () => {\n throw new Error(SCREEN_ERROR);\n};\n\ninterface Screen extends RenderResult {\n isDetached?: boolean;\n}\n\nconst defaultScreen: Screen = {\n isDetached: true,\n get root(): ReactTestInstance {\n throw new Error(SCREEN_ERROR);\n },\n get UNSAFE_root(): ReactTestInstance {\n throw new Error(SCREEN_ERROR);\n },\n debug: notImplementedDebug,\n update: notImplemented,\n unmount: notImplemented,\n rerender: notImplemented,\n toJSON: notImplemented,\n getByLabelText: notImplemented,\n getAllByLabelText: notImplemented,\n queryByLabelText: notImplemented,\n queryAllByLabelText: notImplemented,\n findByLabelText: notImplemented,\n findAllByLabelText: notImplemented,\n getByHintText: notImplemented,\n getAllByHintText: notImplemented,\n queryByHintText: notImplemented,\n queryAllByHintText: notImplemented,\n findByHintText: notImplemented,\n findAllByHintText: notImplemented,\n getByA11yHint: notImplemented,\n getAllByA11yHint: notImplemented,\n queryByA11yHint: notImplemented,\n queryAllByA11yHint: notImplemented,\n findByA11yHint: notImplemented,\n findAllByA11yHint: notImplemented,\n getByAccessibilityHint: notImplemented,\n getAllByAccessibilityHint: notImplemented,\n queryByAccessibilityHint: notImplemented,\n queryAllByAccessibilityHint: notImplemented,\n findByAccessibilityHint: notImplemented,\n findAllByAccessibilityHint: notImplemented,\n getByRole: notImplemented,\n getAllByRole: notImplemented,\n queryByRole: notImplemented,\n queryAllByRole: notImplemented,\n findByRole: notImplemented,\n findAllByRole: notImplemented,\n UNSAFE_getByProps: notImplemented,\n UNSAFE_getAllByProps: notImplemented,\n UNSAFE_queryByProps: notImplemented,\n UNSAFE_queryAllByProps: notImplemented,\n UNSAFE_getByType: notImplemented,\n UNSAFE_getAllByType: notImplemented,\n UNSAFE_queryByType: notImplemented,\n UNSAFE_queryAllByType: notImplemented,\n getByPlaceholderText: notImplemented,\n getAllByPlaceholderText: notImplemented,\n queryByPlaceholderText: notImplemented,\n queryAllByPlaceholderText: notImplemented,\n findByPlaceholderText: notImplemented,\n findAllByPlaceholderText: notImplemented,\n getByDisplayValue: notImplemented,\n getAllByDisplayValue: notImplemented,\n queryByDisplayValue: notImplemented,\n queryAllByDisplayValue: notImplemented,\n findByDisplayValue: notImplemented,\n findAllByDisplayValue: notImplemented,\n getByTestId: notImplemented,\n getAllByTestId: notImplemented,\n queryByTestId: notImplemented,\n queryAllByTestId: notImplemented,\n findByTestId: notImplemented,\n findAllByTestId: notImplemented,\n getByText: notImplemented,\n getAllByText: notImplemented,\n queryByText: notImplemented,\n queryAllByText: notImplemented,\n findByText: notImplemented,\n findAllByText: notImplemented,\n};\n\nexport let screen: Screen = defaultScreen;\n\nexport function setRenderResult(renderResult: RenderResult) {\n screen = renderResult;\n}\n\nexport function clearRenderResult() {\n screen = defaultScreen;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"screen.js","names":["SCREEN_ERROR","notImplemented","Error","notImplementedDebug","defaultScreen","isDetached","root","UNSAFE_root","debug","rerender","rerenderAsync","update","updateAsync","unmount","unmountAsync","toJSON","getByLabelText","getAllByLabelText","queryByLabelText","queryAllByLabelText","findByLabelText","findAllByLabelText","getByHintText","getAllByHintText","queryByHintText","queryAllByHintText","findByHintText","findAllByHintText","getByA11yHint","getAllByA11yHint","queryByA11yHint","queryAllByA11yHint","findByA11yHint","findAllByA11yHint","getByAccessibilityHint","getAllByAccessibilityHint","queryByAccessibilityHint","queryAllByAccessibilityHint","findByAccessibilityHint","findAllByAccessibilityHint","getByRole","getAllByRole","queryByRole","queryAllByRole","findByRole","findAllByRole","UNSAFE_getByProps","UNSAFE_getAllByProps","UNSAFE_queryByProps","UNSAFE_queryAllByProps","UNSAFE_getByType","UNSAFE_getAllByType","UNSAFE_queryByType","UNSAFE_queryAllByType","getByPlaceholderText","getAllByPlaceholderText","queryByPlaceholderText","queryAllByPlaceholderText","findByPlaceholderText","findAllByPlaceholderText","getByDisplayValue","getAllByDisplayValue","queryByDisplayValue","queryAllByDisplayValue","findByDisplayValue","findAllByDisplayValue","getByTestId","getAllByTestId","queryByTestId","queryAllByTestId","findByTestId","findAllByTestId","getByText","getAllByText","queryByText","queryAllByText","findByText","findAllByText","screen","exports","setRenderResult","renderResult","clearRenderResult"],"sources":["../src/screen.ts"],"sourcesContent":["import type { ReactTestInstance } from 'react-test-renderer';\n\nimport type { RenderResult } from './render';\n\nconst SCREEN_ERROR = '`render` method has not been called';\n\nconst notImplemented = () => {\n throw new Error(SCREEN_ERROR);\n};\n\nconst notImplementedDebug = () => {\n throw new Error(SCREEN_ERROR);\n};\n\ninterface Screen extends RenderResult {\n isDetached?: boolean;\n}\n\nconst defaultScreen: Screen = {\n isDetached: true,\n get root(): ReactTestInstance {\n throw new Error(SCREEN_ERROR);\n },\n get UNSAFE_root(): ReactTestInstance {\n throw new Error(SCREEN_ERROR);\n },\n debug: notImplementedDebug,\n rerender: notImplemented,\n rerenderAsync: notImplemented,\n update: notImplemented,\n updateAsync: notImplemented,\n unmount: notImplemented,\n unmountAsync: notImplemented,\n toJSON: notImplemented,\n getByLabelText: notImplemented,\n getAllByLabelText: notImplemented,\n queryByLabelText: notImplemented,\n queryAllByLabelText: notImplemented,\n findByLabelText: notImplemented,\n findAllByLabelText: notImplemented,\n getByHintText: notImplemented,\n getAllByHintText: notImplemented,\n queryByHintText: notImplemented,\n queryAllByHintText: notImplemented,\n findByHintText: notImplemented,\n findAllByHintText: notImplemented,\n getByA11yHint: notImplemented,\n getAllByA11yHint: notImplemented,\n queryByA11yHint: notImplemented,\n queryAllByA11yHint: notImplemented,\n findByA11yHint: notImplemented,\n findAllByA11yHint: notImplemented,\n getByAccessibilityHint: notImplemented,\n getAllByAccessibilityHint: notImplemented,\n queryByAccessibilityHint: notImplemented,\n queryAllByAccessibilityHint: notImplemented,\n findByAccessibilityHint: notImplemented,\n findAllByAccessibilityHint: notImplemented,\n getByRole: notImplemented,\n getAllByRole: notImplemented,\n queryByRole: notImplemented,\n queryAllByRole: notImplemented,\n findByRole: notImplemented,\n findAllByRole: notImplemented,\n UNSAFE_getByProps: notImplemented,\n UNSAFE_getAllByProps: notImplemented,\n UNSAFE_queryByProps: notImplemented,\n UNSAFE_queryAllByProps: notImplemented,\n UNSAFE_getByType: notImplemented,\n UNSAFE_getAllByType: notImplemented,\n UNSAFE_queryByType: notImplemented,\n UNSAFE_queryAllByType: notImplemented,\n getByPlaceholderText: notImplemented,\n getAllByPlaceholderText: notImplemented,\n queryByPlaceholderText: notImplemented,\n queryAllByPlaceholderText: notImplemented,\n findByPlaceholderText: notImplemented,\n findAllByPlaceholderText: notImplemented,\n getByDisplayValue: notImplemented,\n getAllByDisplayValue: notImplemented,\n queryByDisplayValue: notImplemented,\n queryAllByDisplayValue: notImplemented,\n findByDisplayValue: notImplemented,\n findAllByDisplayValue: notImplemented,\n getByTestId: notImplemented,\n getAllByTestId: notImplemented,\n queryByTestId: notImplemented,\n queryAllByTestId: notImplemented,\n findByTestId: notImplemented,\n findAllByTestId: notImplemented,\n getByText: notImplemented,\n getAllByText: notImplemented,\n queryByText: notImplemented,\n queryAllByText: notImplemented,\n findByText: notImplemented,\n findAllByText: notImplemented,\n};\n\nexport let screen: Screen = defaultScreen;\n\nexport function setRenderResult(renderResult: RenderResult) {\n screen = renderResult;\n}\n\nexport function clearRenderResult() {\n screen = defaultScreen;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare function excludeConsoleMessage(logFn: (...args: unknown[]) => void, excludeMessage: string): (...args: unknown[]) => void;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.excludeConsoleMessage = excludeConsoleMessage;
7
+ var _util = require("util");
8
+ function excludeConsoleMessage(logFn, excludeMessage) {
9
+ return (...args) => {
10
+ const message = (0, _util.format)(...args);
11
+ if (message.includes(excludeMessage)) {
12
+ return;
13
+ }
14
+ logFn(...args);
15
+ };
16
+ }
17
+ //# sourceMappingURL=console.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.js","names":["_util","require","excludeConsoleMessage","logFn","excludeMessage","args","message","format","includes"],"sources":["../../src/test-utils/console.ts"],"sourcesContent":["import { format } from 'util';\n\nexport function excludeConsoleMessage(logFn: (...args: unknown[]) => void, excludeMessage: string) {\n return (...args: unknown[]) => {\n const message = format(...args);\n if (message.includes(excludeMessage)) {\n return;\n }\n\n logFn(...args);\n };\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAEO,SAASC,qBAAqBA,CAACC,KAAmC,EAAEC,cAAsB,EAAE;EACjG,OAAO,CAAC,GAAGC,IAAe,KAAK;IAC7B,MAAMC,OAAO,GAAG,IAAAC,YAAM,EAAC,GAAGF,IAAI,CAAC;IAC/B,IAAIC,OAAO,CAACE,QAAQ,CAACJ,cAAc,CAAC,EAAE;MACpC;IACF;IAEAD,KAAK,CAAC,GAAGE,IAAI,CAAC;EAChB,CAAC;AACH","ignoreList":[]}
@@ -1 +1 @@
1
- {"root":["../src/act.ts","../src/cleanup.ts","../src/config.ts","../src/event-handler.ts","../src/fire-event.ts","../src/flush-micro-tasks.ts","../src/index.ts","../src/matches.ts","../src/native-state.ts","../src/pure.ts","../src/react-versions.ts","../src/render-act.ts","../src/render-hook.tsx","../src/render.tsx","../src/screen.ts","../src/types.ts","../src/wait-for-element-to-be-removed.ts","../src/wait-for.ts","../src/within.ts","../src/helpers/accessibility.ts","../src/helpers/component-tree.ts","../src/helpers/debug.ts","../src/helpers/ensure-peer-deps.ts","../src/helpers/errors.ts","../src/helpers/find-all.ts","../src/helpers/format-element.ts","../src/helpers/host-component-names.ts","../src/helpers/logger.ts","../src/helpers/map-props.ts","../src/helpers/object.ts","../src/helpers/pointer-events.ts","../src/helpers/string-validation.ts","../src/helpers/text-content.ts","../src/helpers/text-input.ts","../src/helpers/timers.ts","../src/helpers/wrap-async.ts","../src/helpers/matchers/match-accessibility-state.ts","../src/helpers/matchers/match-accessibility-value.ts","../src/helpers/matchers/match-array-prop.ts","../src/helpers/matchers/match-label-text.ts","../src/helpers/matchers/match-object-prop.ts","../src/helpers/matchers/match-string-prop.ts","../src/helpers/matchers/match-text-content.ts","../src/matchers/extend-expect.ts","../src/matchers/index.ts","../src/matchers/to-be-busy.ts","../src/matchers/to-be-checked.ts","../src/matchers/to-be-disabled.ts","../src/matchers/to-be-empty-element.ts","../src/matchers/to-be-expanded.ts","../src/matchers/to-be-on-the-screen.ts","../src/matchers/to-be-partially-checked.ts","../src/matchers/to-be-selected.ts","../src/matchers/to-be-visible.ts","../src/matchers/to-contain-element.ts","../src/matchers/to-have-accessibility-value.ts","../src/matchers/to-have-accessible-name.ts","../src/matchers/to-have-display-value.ts","../src/matchers/to-have-prop.ts","../src/matchers/to-have-style.ts","../src/matchers/to-have-text-content.ts","../src/matchers/types.ts","../src/matchers/utils.ts","../src/queries/display-value.ts","../src/queries/hint-text.ts","../src/queries/label-text.ts","../src/queries/make-queries.ts","../src/queries/options.ts","../src/queries/placeholder-text.ts","../src/queries/role.ts","../src/queries/test-id.ts","../src/queries/text.ts","../src/queries/unsafe-props.ts","../src/queries/unsafe-type.ts","../src/test-utils/events.ts","../src/test-utils/index.ts","../src/user-event/clear.ts","../src/user-event/index.ts","../src/user-event/paste.ts","../src/user-event/event-builder/base.ts","../src/user-event/event-builder/common.ts","../src/user-event/event-builder/index.ts","../src/user-event/event-builder/scroll-view.ts","../src/user-event/event-builder/text-input.ts","../src/user-event/press/index.ts","../src/user-event/press/press.ts","../src/user-event/scroll/index.ts","../src/user-event/scroll/scroll-to.ts","../src/user-event/scroll/utils.ts","../src/user-event/setup/index.ts","../src/user-event/setup/setup.ts","../src/user-event/type/index.ts","../src/user-event/type/parse-keys.ts","../src/user-event/type/type.ts","../src/user-event/utils/content-size.ts","../src/user-event/utils/dispatch-event.ts","../src/user-event/utils/index.ts","../src/user-event/utils/text-range.ts","../src/user-event/utils/wait.ts"],"version":"5.8.3"}
1
+ {"root":["../src/act.ts","../src/cleanup.ts","../src/config.ts","../src/event-handler.ts","../src/fire-event.ts","../src/flush-micro-tasks.ts","../src/index.ts","../src/matches.ts","../src/native-state.ts","../src/pure.ts","../src/react-versions.ts","../src/render-act.ts","../src/render-async.tsx","../src/render-hook.tsx","../src/render.tsx","../src/screen.ts","../src/types.ts","../src/wait-for-element-to-be-removed.ts","../src/wait-for.ts","../src/within.ts","../src/helpers/accessibility.ts","../src/helpers/component-tree.ts","../src/helpers/debug.ts","../src/helpers/ensure-peer-deps.ts","../src/helpers/errors.ts","../src/helpers/find-all.ts","../src/helpers/format-element.ts","../src/helpers/host-component-names.ts","../src/helpers/logger.ts","../src/helpers/map-props.ts","../src/helpers/object.ts","../src/helpers/pointer-events.ts","../src/helpers/string-validation.ts","../src/helpers/text-content.ts","../src/helpers/text-input.ts","../src/helpers/timers.ts","../src/helpers/wrap-async.ts","../src/helpers/matchers/match-accessibility-state.ts","../src/helpers/matchers/match-accessibility-value.ts","../src/helpers/matchers/match-array-prop.ts","../src/helpers/matchers/match-label-text.ts","../src/helpers/matchers/match-object-prop.ts","../src/helpers/matchers/match-string-prop.ts","../src/helpers/matchers/match-text-content.ts","../src/matchers/extend-expect.ts","../src/matchers/index.ts","../src/matchers/to-be-busy.ts","../src/matchers/to-be-checked.ts","../src/matchers/to-be-disabled.ts","../src/matchers/to-be-empty-element.ts","../src/matchers/to-be-expanded.ts","../src/matchers/to-be-on-the-screen.ts","../src/matchers/to-be-partially-checked.ts","../src/matchers/to-be-selected.ts","../src/matchers/to-be-visible.ts","../src/matchers/to-contain-element.ts","../src/matchers/to-have-accessibility-value.ts","../src/matchers/to-have-accessible-name.ts","../src/matchers/to-have-display-value.ts","../src/matchers/to-have-prop.ts","../src/matchers/to-have-style.ts","../src/matchers/to-have-text-content.ts","../src/matchers/types.ts","../src/matchers/utils.ts","../src/queries/display-value.ts","../src/queries/hint-text.ts","../src/queries/label-text.ts","../src/queries/make-queries.ts","../src/queries/options.ts","../src/queries/placeholder-text.ts","../src/queries/role.ts","../src/queries/test-id.ts","../src/queries/text.ts","../src/queries/unsafe-props.ts","../src/queries/unsafe-type.ts","../src/test-utils/console.ts","../src/test-utils/events.ts","../src/user-event/clear.ts","../src/user-event/index.ts","../src/user-event/paste.ts","../src/user-event/event-builder/base.ts","../src/user-event/event-builder/common.ts","../src/user-event/event-builder/index.ts","../src/user-event/event-builder/scroll-view.ts","../src/user-event/event-builder/text-input.ts","../src/user-event/press/index.ts","../src/user-event/press/press.ts","../src/user-event/scroll/index.ts","../src/user-event/scroll/scroll-to.ts","../src/user-event/scroll/utils.ts","../src/user-event/setup/index.ts","../src/user-event/setup/setup.ts","../src/user-event/type/index.ts","../src/user-event/type/parse-keys.ts","../src/user-event/type/type.ts","../src/user-event/utils/content-size.ts","../src/user-event/utils/dispatch-event.ts","../src/user-event/utils/index.ts","../src/user-event/utils/text-range.ts","../src/user-event/utils/wait.ts"],"version":"5.8.3"}
@@ -20,7 +20,7 @@ async function clear(element) {
20
20
  }
21
21
 
22
22
  // 1. Enter element
23
- (0, _utils.dispatchEvent)(element, 'focus', _eventBuilder.EventBuilder.Common.focus());
23
+ await (0, _utils.dispatchEvent)(element, 'focus', _eventBuilder.EventBuilder.Common.focus());
24
24
 
25
25
  // 2. Select all
26
26
  const textToClear = (0, _textInput.getTextInputValue)(element);
@@ -28,7 +28,7 @@ async function clear(element) {
28
28
  start: 0,
29
29
  end: textToClear.length
30
30
  };
31
- (0, _utils.dispatchEvent)(element, 'selectionChange', _eventBuilder.EventBuilder.TextInput.selectionChange(selectionRange));
31
+ await (0, _utils.dispatchEvent)(element, 'selectionChange', _eventBuilder.EventBuilder.TextInput.selectionChange(selectionRange));
32
32
 
33
33
  // 3. Press backspace with selected text
34
34
  const emptyText = '';
@@ -40,7 +40,7 @@ async function clear(element) {
40
40
 
41
41
  // 4. Exit element
42
42
  await (0, _utils.wait)(this.config);
43
- (0, _utils.dispatchEvent)(element, 'endEditing', _eventBuilder.EventBuilder.TextInput.endEditing(emptyText));
44
- (0, _utils.dispatchEvent)(element, 'blur', _eventBuilder.EventBuilder.Common.blur());
43
+ await (0, _utils.dispatchEvent)(element, 'endEditing', _eventBuilder.EventBuilder.TextInput.endEditing(emptyText));
44
+ await (0, _utils.dispatchEvent)(element, 'blur', _eventBuilder.EventBuilder.Common.blur());
45
45
  }
46
46
  //# sourceMappingURL=clear.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clear.js","names":["_errors","require","_hostComponentNames","_pointerEvents","_textInput","_eventBuilder","_type","_utils","clear","element","isHostTextInput","ErrorWithStack","type","isEditableTextInput","isPointerEventEnabled","dispatchEvent","EventBuilder","Common","focus","textToClear","getTextInputValue","selectionRange","start","end","length","TextInput","selectionChange","emptyText","emitTypingEvents","config","key","text","wait","endEditing","blur"],"sources":["../../src/user-event/clear.ts"],"sourcesContent":["import type { ReactTestInstance } from 'react-test-renderer';\n\nimport { ErrorWithStack } from '../helpers/errors';\nimport { isHostTextInput } from '../helpers/host-component-names';\nimport { isPointerEventEnabled } from '../helpers/pointer-events';\nimport { getTextInputValue, isEditableTextInput } from '../helpers/text-input';\nimport { EventBuilder } from './event-builder';\nimport type { UserEventInstance } from './setup';\nimport { emitTypingEvents } from './type/type';\nimport { dispatchEvent, wait } from './utils';\n\nexport async function clear(this: UserEventInstance, element: ReactTestInstance): Promise<void> {\n if (!isHostTextInput(element)) {\n throw new ErrorWithStack(\n `clear() only supports host \"TextInput\" elements. Passed element has type: \"${element.type}\".`,\n clear,\n );\n }\n\n if (!isEditableTextInput(element) || !isPointerEventEnabled(element)) {\n return;\n }\n\n // 1. Enter element\n dispatchEvent(element, 'focus', EventBuilder.Common.focus());\n\n // 2. Select all\n const textToClear = getTextInputValue(element);\n const selectionRange = {\n start: 0,\n end: textToClear.length,\n };\n dispatchEvent(element, 'selectionChange', EventBuilder.TextInput.selectionChange(selectionRange));\n\n // 3. Press backspace with selected text\n const emptyText = '';\n await emitTypingEvents(element, {\n config: this.config,\n key: 'Backspace',\n text: emptyText,\n });\n\n // 4. Exit element\n await wait(this.config);\n dispatchEvent(element, 'endEditing', EventBuilder.TextInput.endEditing(emptyText));\n dispatchEvent(element, 'blur', EventBuilder.Common.blur());\n}\n"],"mappings":";;;;;;AAEA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,aAAA,GAAAJ,OAAA;AAEA,IAAAK,KAAA,GAAAL,OAAA;AACA,IAAAM,MAAA,GAAAN,OAAA;AAEO,eAAeO,KAAKA,CAA0BC,OAA0B,EAAiB;EAC9F,IAAI,CAAC,IAAAC,mCAAe,EAACD,OAAO,CAAC,EAAE;IAC7B,MAAM,IAAIE,sBAAc,CACtB,8EAA8EF,OAAO,CAACG,IAAI,IAAI,EAC9FJ,KACF,CAAC;EACH;EAEA,IAAI,CAAC,IAAAK,8BAAmB,EAACJ,OAAO,CAAC,IAAI,CAAC,IAAAK,oCAAqB,EAACL,OAAO,CAAC,EAAE;IACpE;EACF;;EAEA;EACA,IAAAM,oBAAa,EAACN,OAAO,EAAE,OAAO,EAAEO,0BAAY,CAACC,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;;EAE5D;EACA,MAAMC,WAAW,GAAG,IAAAC,4BAAiB,EAACX,OAAO,CAAC;EAC9C,MAAMY,cAAc,GAAG;IACrBC,KAAK,EAAE,CAAC;IACRC,GAAG,EAAEJ,WAAW,CAACK;EACnB,CAAC;EACD,IAAAT,oBAAa,EAACN,OAAO,EAAE,iBAAiB,EAAEO,0BAAY,CAACS,SAAS,CAACC,eAAe,CAACL,cAAc,CAAC,CAAC;;EAEjG;EACA,MAAMM,SAAS,GAAG,EAAE;EACpB,MAAM,IAAAC,sBAAgB,EAACnB,OAAO,EAAE;IAC9BoB,MAAM,EAAE,IAAI,CAACA,MAAM;IACnBC,GAAG,EAAE,WAAW;IAChBC,IAAI,EAAEJ;EACR,CAAC,CAAC;;EAEF;EACA,MAAM,IAAAK,WAAI,EAAC,IAAI,CAACH,MAAM,CAAC;EACvB,IAAAd,oBAAa,EAACN,OAAO,EAAE,YAAY,EAAEO,0BAAY,CAACS,SAAS,CAACQ,UAAU,CAACN,SAAS,CAAC,CAAC;EAClF,IAAAZ,oBAAa,EAACN,OAAO,EAAE,MAAM,EAAEO,0BAAY,CAACC,MAAM,CAACiB,IAAI,CAAC,CAAC,CAAC;AAC5D","ignoreList":[]}
1
+ {"version":3,"file":"clear.js","names":["_errors","require","_hostComponentNames","_pointerEvents","_textInput","_eventBuilder","_type","_utils","clear","element","isHostTextInput","ErrorWithStack","type","isEditableTextInput","isPointerEventEnabled","dispatchEvent","EventBuilder","Common","focus","textToClear","getTextInputValue","selectionRange","start","end","length","TextInput","selectionChange","emptyText","emitTypingEvents","config","key","text","wait","endEditing","blur"],"sources":["../../src/user-event/clear.ts"],"sourcesContent":["import type { ReactTestInstance } from 'react-test-renderer';\n\nimport { ErrorWithStack } from '../helpers/errors';\nimport { isHostTextInput } from '../helpers/host-component-names';\nimport { isPointerEventEnabled } from '../helpers/pointer-events';\nimport { getTextInputValue, isEditableTextInput } from '../helpers/text-input';\nimport { EventBuilder } from './event-builder';\nimport type { UserEventInstance } from './setup';\nimport { emitTypingEvents } from './type/type';\nimport { dispatchEvent, wait } from './utils';\n\nexport async function clear(this: UserEventInstance, element: ReactTestInstance): Promise<void> {\n if (!isHostTextInput(element)) {\n throw new ErrorWithStack(\n `clear() only supports host \"TextInput\" elements. Passed element has type: \"${element.type}\".`,\n clear,\n );\n }\n\n if (!isEditableTextInput(element) || !isPointerEventEnabled(element)) {\n return;\n }\n\n // 1. Enter element\n await dispatchEvent(element, 'focus', EventBuilder.Common.focus());\n\n // 2. Select all\n const textToClear = getTextInputValue(element);\n const selectionRange = {\n start: 0,\n end: textToClear.length,\n };\n await dispatchEvent(\n element,\n 'selectionChange',\n EventBuilder.TextInput.selectionChange(selectionRange),\n );\n\n // 3. Press backspace with selected text\n const emptyText = '';\n await emitTypingEvents(element, {\n config: this.config,\n key: 'Backspace',\n text: emptyText,\n });\n\n // 4. Exit element\n await wait(this.config);\n await dispatchEvent(element, 'endEditing', EventBuilder.TextInput.endEditing(emptyText));\n await dispatchEvent(element, 'blur', EventBuilder.Common.blur());\n}\n"],"mappings":";;;;;;AAEA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,aAAA,GAAAJ,OAAA;AAEA,IAAAK,KAAA,GAAAL,OAAA;AACA,IAAAM,MAAA,GAAAN,OAAA;AAEO,eAAeO,KAAKA,CAA0BC,OAA0B,EAAiB;EAC9F,IAAI,CAAC,IAAAC,mCAAe,EAACD,OAAO,CAAC,EAAE;IAC7B,MAAM,IAAIE,sBAAc,CACtB,8EAA8EF,OAAO,CAACG,IAAI,IAAI,EAC9FJ,KACF,CAAC;EACH;EAEA,IAAI,CAAC,IAAAK,8BAAmB,EAACJ,OAAO,CAAC,IAAI,CAAC,IAAAK,oCAAqB,EAACL,OAAO,CAAC,EAAE;IACpE;EACF;;EAEA;EACA,MAAM,IAAAM,oBAAa,EAACN,OAAO,EAAE,OAAO,EAAEO,0BAAY,CAACC,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;;EAElE;EACA,MAAMC,WAAW,GAAG,IAAAC,4BAAiB,EAACX,OAAO,CAAC;EAC9C,MAAMY,cAAc,GAAG;IACrBC,KAAK,EAAE,CAAC;IACRC,GAAG,EAAEJ,WAAW,CAACK;EACnB,CAAC;EACD,MAAM,IAAAT,oBAAa,EACjBN,OAAO,EACP,iBAAiB,EACjBO,0BAAY,CAACS,SAAS,CAACC,eAAe,CAACL,cAAc,CACvD,CAAC;;EAED;EACA,MAAMM,SAAS,GAAG,EAAE;EACpB,MAAM,IAAAC,sBAAgB,EAACnB,OAAO,EAAE;IAC9BoB,MAAM,EAAE,IAAI,CAACA,MAAM;IACnBC,GAAG,EAAE,WAAW;IAChBC,IAAI,EAAEJ;EACR,CAAC,CAAC;;EAEF;EACA,MAAM,IAAAK,WAAI,EAAC,IAAI,CAACH,MAAM,CAAC;EACvB,MAAM,IAAAd,oBAAa,EAACN,OAAO,EAAE,YAAY,EAAEO,0BAAY,CAACS,SAAS,CAACQ,UAAU,CAACN,SAAS,CAAC,CAAC;EACxF,MAAM,IAAAZ,oBAAa,EAACN,OAAO,EAAE,MAAM,EAAEO,0BAAY,CAACC,MAAM,CAACiB,IAAI,CAAC,CAAC,CAAC;AAClE","ignoreList":[]}
@@ -20,7 +20,7 @@ async function paste(element, text) {
20
20
  }
21
21
 
22
22
  // 1. Enter element
23
- (0, _utils.dispatchEvent)(element, 'focus', _eventBuilder.EventBuilder.Common.focus());
23
+ await (0, _utils.dispatchEvent)(element, 'focus', _eventBuilder.EventBuilder.Common.focus());
24
24
 
25
25
  // 2. Select all
26
26
  const textToClear = (0, _textInput.getTextInputValue)(element);
@@ -28,29 +28,29 @@ async function paste(element, text) {
28
28
  start: 0,
29
29
  end: textToClear.length
30
30
  };
31
- (0, _utils.dispatchEvent)(element, 'selectionChange', _eventBuilder.EventBuilder.TextInput.selectionChange(rangeToClear));
31
+ await (0, _utils.dispatchEvent)(element, 'selectionChange', _eventBuilder.EventBuilder.TextInput.selectionChange(rangeToClear));
32
32
 
33
33
  // 3. Paste the text
34
34
  _nativeState.nativeState.valueForElement.set(element, text);
35
- (0, _utils.dispatchEvent)(element, 'change', _eventBuilder.EventBuilder.TextInput.change(text));
36
- (0, _utils.dispatchEvent)(element, 'changeText', text);
35
+ await (0, _utils.dispatchEvent)(element, 'change', _eventBuilder.EventBuilder.TextInput.change(text));
36
+ await (0, _utils.dispatchEvent)(element, 'changeText', text);
37
37
  const rangeAfter = {
38
38
  start: text.length,
39
39
  end: text.length
40
40
  };
41
- (0, _utils.dispatchEvent)(element, 'selectionChange', _eventBuilder.EventBuilder.TextInput.selectionChange(rangeAfter));
41
+ await (0, _utils.dispatchEvent)(element, 'selectionChange', _eventBuilder.EventBuilder.TextInput.selectionChange(rangeAfter));
42
42
 
43
43
  // According to the docs only multiline TextInput emits contentSizeChange event
44
44
  // @see: https://reactnative.dev/docs/textinput#oncontentsizechange
45
45
  const isMultiline = element.props.multiline === true;
46
46
  if (isMultiline) {
47
47
  const contentSize = (0, _utils.getTextContentSize)(text);
48
- (0, _utils.dispatchEvent)(element, 'contentSizeChange', _eventBuilder.EventBuilder.TextInput.contentSizeChange(contentSize));
48
+ await (0, _utils.dispatchEvent)(element, 'contentSizeChange', _eventBuilder.EventBuilder.TextInput.contentSizeChange(contentSize));
49
49
  }
50
50
 
51
51
  // 4. Exit element
52
52
  await (0, _utils.wait)(this.config);
53
- (0, _utils.dispatchEvent)(element, 'endEditing', _eventBuilder.EventBuilder.TextInput.endEditing(text));
54
- (0, _utils.dispatchEvent)(element, 'blur', _eventBuilder.EventBuilder.Common.blur());
53
+ await (0, _utils.dispatchEvent)(element, 'endEditing', _eventBuilder.EventBuilder.TextInput.endEditing(text));
54
+ await (0, _utils.dispatchEvent)(element, 'blur', _eventBuilder.EventBuilder.Common.blur());
55
55
  }
56
56
  //# sourceMappingURL=paste.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paste.js","names":["_errors","require","_hostComponentNames","_pointerEvents","_textInput","_nativeState","_eventBuilder","_utils","paste","element","text","isHostTextInput","ErrorWithStack","type","isEditableTextInput","isPointerEventEnabled","dispatchEvent","EventBuilder","Common","focus","textToClear","getTextInputValue","rangeToClear","start","end","length","TextInput","selectionChange","nativeState","valueForElement","set","change","rangeAfter","isMultiline","props","multiline","contentSize","getTextContentSize","contentSizeChange","wait","config","endEditing","blur"],"sources":["../../src/user-event/paste.ts"],"sourcesContent":["import type { ReactTestInstance } from 'react-test-renderer';\n\nimport { ErrorWithStack } from '../helpers/errors';\nimport { isHostTextInput } from '../helpers/host-component-names';\nimport { isPointerEventEnabled } from '../helpers/pointer-events';\nimport { getTextInputValue, isEditableTextInput } from '../helpers/text-input';\nimport { nativeState } from '../native-state';\nimport { EventBuilder } from './event-builder';\nimport type { UserEventInstance } from './setup';\nimport { dispatchEvent, getTextContentSize, wait } from './utils';\n\nexport async function paste(\n this: UserEventInstance,\n element: 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 (!isEditableTextInput(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 = getTextInputValue(element);\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":";;;;;;AAEA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,YAAA,GAAAJ,OAAA;AACA,IAAAK,aAAA,GAAAL,OAAA;AAEA,IAAAM,MAAA,GAAAN,OAAA;AAEO,eAAeO,KAAKA,CAEzBC,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,GAAG,IAAAC,4BAAiB,EAACZ,OAAO,CAAC;EAC9C,MAAMa,YAAY,GAAG;IAAEC,KAAK,EAAE,CAAC;IAAEC,GAAG,EAAEJ,WAAW,CAACK;EAAO,CAAC;EAC1D,IAAAT,oBAAa,EAACP,OAAO,EAAE,iBAAiB,EAAEQ,0BAAY,CAACS,SAAS,CAACC,eAAe,CAACL,YAAY,CAAC,CAAC;;EAE/F;EACAM,wBAAW,CAACC,eAAe,CAACC,GAAG,CAACrB,OAAO,EAAEC,IAAI,CAAC;EAC9C,IAAAM,oBAAa,EAACP,OAAO,EAAE,QAAQ,EAAEQ,0BAAY,CAACS,SAAS,CAACK,MAAM,CAACrB,IAAI,CAAC,CAAC;EACrE,IAAAM,oBAAa,EAACP,OAAO,EAAE,YAAY,EAAEC,IAAI,CAAC;EAE1C,MAAMsB,UAAU,GAAG;IAAET,KAAK,EAAEb,IAAI,CAACe,MAAM;IAAED,GAAG,EAAEd,IAAI,CAACe;EAAO,CAAC;EAC3D,IAAAT,oBAAa,EAACP,OAAO,EAAE,iBAAiB,EAAEQ,0BAAY,CAACS,SAAS,CAACC,eAAe,CAACK,UAAU,CAAC,CAAC;;EAE7F;EACA;EACA,MAAMC,WAAW,GAAGxB,OAAO,CAACyB,KAAK,CAACC,SAAS,KAAK,IAAI;EACpD,IAAIF,WAAW,EAAE;IACf,MAAMG,WAAW,GAAG,IAAAC,yBAAkB,EAAC3B,IAAI,CAAC;IAC5C,IAAAM,oBAAa,EACXP,OAAO,EACP,mBAAmB,EACnBQ,0BAAY,CAACS,SAAS,CAACY,iBAAiB,CAACF,WAAW,CACtD,CAAC;EACH;;EAEA;EACA,MAAM,IAAAG,WAAI,EAAC,IAAI,CAACC,MAAM,CAAC;EACvB,IAAAxB,oBAAa,EAACP,OAAO,EAAE,YAAY,EAAEQ,0BAAY,CAACS,SAAS,CAACe,UAAU,CAAC/B,IAAI,CAAC,CAAC;EAC7E,IAAAM,oBAAa,EAACP,OAAO,EAAE,MAAM,EAAEQ,0BAAY,CAACC,MAAM,CAACwB,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","isEditableTextInput","isPointerEventEnabled","dispatchEvent","EventBuilder","Common","focus","textToClear","getTextInputValue","rangeToClear","start","end","length","TextInput","selectionChange","nativeState","valueForElement","set","change","rangeAfter","isMultiline","props","multiline","contentSize","getTextContentSize","contentSizeChange","wait","config","endEditing","blur"],"sources":["../../src/user-event/paste.ts"],"sourcesContent":["import type { ReactTestInstance } from 'react-test-renderer';\n\nimport { ErrorWithStack } from '../helpers/errors';\nimport { isHostTextInput } from '../helpers/host-component-names';\nimport { isPointerEventEnabled } from '../helpers/pointer-events';\nimport { getTextInputValue, isEditableTextInput } from '../helpers/text-input';\nimport { nativeState } from '../native-state';\nimport { EventBuilder } from './event-builder';\nimport type { UserEventInstance } from './setup';\nimport { dispatchEvent, getTextContentSize, wait } from './utils';\n\nexport async function paste(\n this: UserEventInstance,\n element: 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 (!isEditableTextInput(element) || !isPointerEventEnabled(element)) {\n return;\n }\n\n // 1. Enter element\n await dispatchEvent(element, 'focus', EventBuilder.Common.focus());\n\n // 2. Select all\n const textToClear = getTextInputValue(element);\n const rangeToClear = { start: 0, end: textToClear.length };\n await dispatchEvent(\n element,\n 'selectionChange',\n EventBuilder.TextInput.selectionChange(rangeToClear),\n );\n\n // 3. Paste the text\n nativeState.valueForElement.set(element, text);\n await dispatchEvent(element, 'change', EventBuilder.TextInput.change(text));\n await dispatchEvent(element, 'changeText', text);\n\n const rangeAfter = { start: text.length, end: text.length };\n await dispatchEvent(\n element,\n 'selectionChange',\n EventBuilder.TextInput.selectionChange(rangeAfter),\n );\n\n // According to the docs only multiline TextInput emits contentSizeChange event\n // @see: https://reactnative.dev/docs/textinput#oncontentsizechange\n const isMultiline = element.props.multiline === true;\n if (isMultiline) {\n const contentSize = getTextContentSize(text);\n await dispatchEvent(\n element,\n 'contentSizeChange',\n EventBuilder.TextInput.contentSizeChange(contentSize),\n );\n }\n\n // 4. Exit element\n await wait(this.config);\n await dispatchEvent(element, 'endEditing', EventBuilder.TextInput.endEditing(text));\n await dispatchEvent(element, 'blur', EventBuilder.Common.blur());\n}\n"],"mappings":";;;;;;AAEA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,YAAA,GAAAJ,OAAA;AACA,IAAAK,aAAA,GAAAL,OAAA;AAEA,IAAAM,MAAA,GAAAN,OAAA;AAEO,eAAeO,KAAKA,CAEzBC,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,MAAM,IAAAO,oBAAa,EAACP,OAAO,EAAE,OAAO,EAAEQ,0BAAY,CAACC,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;;EAElE;EACA,MAAMC,WAAW,GAAG,IAAAC,4BAAiB,EAACZ,OAAO,CAAC;EAC9C,MAAMa,YAAY,GAAG;IAAEC,KAAK,EAAE,CAAC;IAAEC,GAAG,EAAEJ,WAAW,CAACK;EAAO,CAAC;EAC1D,MAAM,IAAAT,oBAAa,EACjBP,OAAO,EACP,iBAAiB,EACjBQ,0BAAY,CAACS,SAAS,CAACC,eAAe,CAACL,YAAY,CACrD,CAAC;;EAED;EACAM,wBAAW,CAACC,eAAe,CAACC,GAAG,CAACrB,OAAO,EAAEC,IAAI,CAAC;EAC9C,MAAM,IAAAM,oBAAa,EAACP,OAAO,EAAE,QAAQ,EAAEQ,0BAAY,CAACS,SAAS,CAACK,MAAM,CAACrB,IAAI,CAAC,CAAC;EAC3E,MAAM,IAAAM,oBAAa,EAACP,OAAO,EAAE,YAAY,EAAEC,IAAI,CAAC;EAEhD,MAAMsB,UAAU,GAAG;IAAET,KAAK,EAAEb,IAAI,CAACe,MAAM;IAAED,GAAG,EAAEd,IAAI,CAACe;EAAO,CAAC;EAC3D,MAAM,IAAAT,oBAAa,EACjBP,OAAO,EACP,iBAAiB,EACjBQ,0BAAY,CAACS,SAAS,CAACC,eAAe,CAACK,UAAU,CACnD,CAAC;;EAED;EACA;EACA,MAAMC,WAAW,GAAGxB,OAAO,CAACyB,KAAK,CAACC,SAAS,KAAK,IAAI;EACpD,IAAIF,WAAW,EAAE;IACf,MAAMG,WAAW,GAAG,IAAAC,yBAAkB,EAAC3B,IAAI,CAAC;IAC5C,MAAM,IAAAM,oBAAa,EACjBP,OAAO,EACP,mBAAmB,EACnBQ,0BAAY,CAACS,SAAS,CAACY,iBAAiB,CAACF,WAAW,CACtD,CAAC;EACH;;EAEA;EACA,MAAM,IAAAG,WAAI,EAAC,IAAI,CAACC,MAAM,CAAC;EACvB,MAAM,IAAAxB,oBAAa,EAACP,OAAO,EAAE,YAAY,EAAEQ,0BAAY,CAACS,SAAS,CAACe,UAAU,CAAC/B,IAAI,CAAC,CAAC;EACnF,MAAM,IAAAM,oBAAa,EAACP,OAAO,EAAE,MAAM,EAAEQ,0BAAY,CAACC,MAAM,CAACwB,IAAI,CAAC,CAAC,CAAC;AAClE","ignoreList":[]}
@@ -76,29 +76,29 @@ function hasPressEventHandler(element) {
76
76
  */
77
77
  async function emitDirectPressEvents(config, element, options) {
78
78
  await (0, _utils.wait)(config);
79
- (0, _utils.dispatchEvent)(element, 'pressIn', _eventBuilder.EventBuilder.Common.touch());
79
+ await (0, _utils.dispatchEvent)(element, 'pressIn', _eventBuilder.EventBuilder.Common.touch());
80
80
  await (0, _utils.wait)(config, options.duration);
81
81
 
82
82
  // Long press events are emitted before `pressOut`.
83
83
  if (options.type === 'longPress') {
84
- (0, _utils.dispatchEvent)(element, 'longPress', _eventBuilder.EventBuilder.Common.touch());
84
+ await (0, _utils.dispatchEvent)(element, 'longPress', _eventBuilder.EventBuilder.Common.touch());
85
85
  }
86
- (0, _utils.dispatchEvent)(element, 'pressOut', _eventBuilder.EventBuilder.Common.touch());
86
+ await (0, _utils.dispatchEvent)(element, 'pressOut', _eventBuilder.EventBuilder.Common.touch());
87
87
 
88
88
  // Regular press events are emitted after `pressOut` according to the React Native docs.
89
89
  // See: https://reactnative.dev/docs/pressable#onpress
90
90
  // Experimentally for very short presses (< 130ms) `press` events are actually emitted before `onPressOut`, but
91
91
  // we will ignore that as in reality most pressed would be above the 130ms threshold.
92
92
  if (options.type === 'press') {
93
- (0, _utils.dispatchEvent)(element, 'press', _eventBuilder.EventBuilder.Common.touch());
93
+ await (0, _utils.dispatchEvent)(element, 'press', _eventBuilder.EventBuilder.Common.touch());
94
94
  }
95
95
  }
96
96
  async function emitPressabilityPressEvents(config, element, options) {
97
97
  await (0, _utils.wait)(config);
98
- (0, _utils.dispatchEvent)(element, 'responderGrant', _eventBuilder.EventBuilder.Common.responderGrant());
98
+ await (0, _utils.dispatchEvent)(element, 'responderGrant', _eventBuilder.EventBuilder.Common.responderGrant());
99
99
  const duration = options.duration ?? DEFAULT_MIN_PRESS_DURATION;
100
100
  await (0, _utils.wait)(config, duration);
101
- (0, _utils.dispatchEvent)(element, 'responderRelease', _eventBuilder.EventBuilder.Common.responderRelease());
101
+ await (0, _utils.dispatchEvent)(element, 'responderRelease', _eventBuilder.EventBuilder.Common.responderRelease());
102
102
 
103
103
  // React Native will wait for minimal delay of DEFAULT_MIN_PRESS_DURATION
104
104
  // before emitting the `pressOut` event. We need to wait here, so that
@@ -1 +1 @@
1
- {"version":3,"file":"press.js","names":["_act","_interopRequireDefault","require","_eventHandler","_componentTree","_errors","_hostComponentNames","_pointerEvents","_eventBuilder","_utils","e","__esModule","default","DEFAULT_MIN_PRESS_DURATION","exports","DEFAULT_LONG_PRESS_DELAY_MS","press","element","isHostElement","ErrorWithStack","type","basePress","config","longPress","options","duration","isEnabledHostElement","hasPressEventHandler","emitDirectPressEvents","isEnabledTouchResponder","emitPressabilityPressEvents","hostParentElement","getHostParent","isPointerEventEnabled","isHostText","props","disabled","isHostTextInput","editable","onStartShouldSetResponder","getEventHandler","wait","dispatchEvent","EventBuilder","Common","touch","responderGrant","responderRelease","act"],"sources":["../../../src/user-event/press/press.ts"],"sourcesContent":["import type { ReactTestInstance } from 'react-test-renderer';\n\nimport act from '../../act';\nimport { getEventHandler } from '../../event-handler';\nimport type { HostTestInstance } from '../../helpers/component-tree';\nimport { getHostParent, isHostElement } from '../../helpers/component-tree';\nimport { ErrorWithStack } from '../../helpers/errors';\nimport { isHostText, isHostTextInput } from '../../helpers/host-component-names';\nimport { isPointerEventEnabled } from '../../helpers/pointer-events';\nimport { EventBuilder } from '../event-builder';\nimport type { UserEventConfig, UserEventInstance } from '../setup';\nimport { dispatchEvent, wait } from '../utils';\n\n// These are constants defined in the React Native repo\n// See: https://github.com/facebook/react-native/blob/50e38cc9f1e6713228a91ad50f426c4f65e65e1a/packages/react-native/Libraries/Pressability/Pressability.js#L264\nexport const DEFAULT_MIN_PRESS_DURATION = 130;\nexport const DEFAULT_LONG_PRESS_DELAY_MS = 500;\n\nexport interface PressOptions {\n duration?: number;\n}\n\nexport async function press(this: UserEventInstance, element: ReactTestInstance): Promise<void> {\n if (!isHostElement(element)) {\n throw new ErrorWithStack(\n `press() works only with host elements. Passed element has type \"${element.type}\".`,\n press,\n );\n }\n\n await basePress(this.config, element, {\n type: 'press',\n });\n}\n\nexport async function longPress(\n this: UserEventInstance,\n element: ReactTestInstance,\n options?: PressOptions,\n): Promise<void> {\n if (!isHostElement(element)) {\n throw new ErrorWithStack(\n `longPress() works only with host elements. Passed element has type \"${element.type}\".`,\n longPress,\n );\n }\n\n await basePress(this.config, element, {\n type: 'longPress',\n duration: options?.duration ?? DEFAULT_LONG_PRESS_DELAY_MS,\n });\n}\n\ninterface BasePressOptions {\n type: 'press' | 'longPress';\n duration?: number;\n}\n\nconst basePress = async (\n config: UserEventConfig,\n element: HostTestInstance,\n options: BasePressOptions,\n): Promise<void> => {\n if (isEnabledHostElement(element) && hasPressEventHandler(element)) {\n await emitDirectPressEvents(config, element, options);\n return;\n }\n\n if (isEnabledTouchResponder(element)) {\n await emitPressabilityPressEvents(config, element, options);\n return;\n }\n\n const hostParentElement = getHostParent(element);\n if (!hostParentElement) {\n return;\n }\n\n await basePress(config, hostParentElement, options);\n};\n\nfunction isEnabledHostElement(element: HostTestInstance) {\n if (!isPointerEventEnabled(element)) {\n return false;\n }\n\n if (isHostText(element)) {\n return element.props.disabled !== true;\n }\n\n if (isHostTextInput(element)) {\n // @ts-expect-error - workaround incorrect ReactTestInstance type\n return element.props.editable !== false;\n }\n\n return true;\n}\n\nfunction isEnabledTouchResponder(element: HostTestInstance) {\n return isPointerEventEnabled(element) && element.props.onStartShouldSetResponder?.();\n}\n\nfunction hasPressEventHandler(element: HostTestInstance) {\n return (\n getEventHandler(element, 'press') ||\n getEventHandler(element, 'longPress') ||\n getEventHandler(element, 'pressIn') ||\n getEventHandler(element, 'pressOut')\n );\n}\n\n/**\n * Dispatches a press event sequence for host elements that have `onPress*` event handlers.\n */\nasync function emitDirectPressEvents(\n config: UserEventConfig,\n element: HostTestInstance,\n options: BasePressOptions,\n) {\n await wait(config);\n dispatchEvent(element, 'pressIn', EventBuilder.Common.touch());\n\n await wait(config, options.duration);\n\n // Long press events are emitted before `pressOut`.\n if (options.type === 'longPress') {\n dispatchEvent(element, 'longPress', EventBuilder.Common.touch());\n }\n\n dispatchEvent(element, 'pressOut', EventBuilder.Common.touch());\n\n // Regular press events are emitted after `pressOut` according to the React Native docs.\n // See: https://reactnative.dev/docs/pressable#onpress\n // Experimentally for very short presses (< 130ms) `press` events are actually emitted before `onPressOut`, but\n // we will ignore that as in reality most pressed would be above the 130ms threshold.\n if (options.type === 'press') {\n dispatchEvent(element, 'press', EventBuilder.Common.touch());\n }\n}\n\nasync function emitPressabilityPressEvents(\n config: UserEventConfig,\n element: HostTestInstance,\n options: BasePressOptions,\n) {\n await wait(config);\n\n dispatchEvent(element, 'responderGrant', EventBuilder.Common.responderGrant());\n\n const duration = options.duration ?? DEFAULT_MIN_PRESS_DURATION;\n await wait(config, 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 - duration > 0) {\n await act(() => wait(config, DEFAULT_MIN_PRESS_DURATION - duration));\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"press.js","names":["_act","_interopRequireDefault","require","_eventHandler","_componentTree","_errors","_hostComponentNames","_pointerEvents","_eventBuilder","_utils","e","__esModule","default","DEFAULT_MIN_PRESS_DURATION","exports","DEFAULT_LONG_PRESS_DELAY_MS","press","element","isHostElement","ErrorWithStack","type","basePress","config","longPress","options","duration","isEnabledHostElement","hasPressEventHandler","emitDirectPressEvents","isEnabledTouchResponder","emitPressabilityPressEvents","hostParentElement","getHostParent","isPointerEventEnabled","isHostText","props","disabled","isHostTextInput","editable","onStartShouldSetResponder","getEventHandler","wait","dispatchEvent","EventBuilder","Common","touch","responderGrant","responderRelease","act"],"sources":["../../../src/user-event/press/press.ts"],"sourcesContent":["import type { ReactTestInstance } from 'react-test-renderer';\n\nimport act from '../../act';\nimport { getEventHandler } from '../../event-handler';\nimport type { HostTestInstance } from '../../helpers/component-tree';\nimport { getHostParent, isHostElement } from '../../helpers/component-tree';\nimport { ErrorWithStack } from '../../helpers/errors';\nimport { isHostText, isHostTextInput } from '../../helpers/host-component-names';\nimport { isPointerEventEnabled } from '../../helpers/pointer-events';\nimport { EventBuilder } from '../event-builder';\nimport type { UserEventConfig, UserEventInstance } from '../setup';\nimport { dispatchEvent, wait } from '../utils';\n\n// These are constants defined in the React Native repo\n// See: https://github.com/facebook/react-native/blob/50e38cc9f1e6713228a91ad50f426c4f65e65e1a/packages/react-native/Libraries/Pressability/Pressability.js#L264\nexport const DEFAULT_MIN_PRESS_DURATION = 130;\nexport const DEFAULT_LONG_PRESS_DELAY_MS = 500;\n\nexport interface PressOptions {\n duration?: number;\n}\n\nexport async function press(this: UserEventInstance, element: ReactTestInstance): Promise<void> {\n if (!isHostElement(element)) {\n throw new ErrorWithStack(\n `press() works only with host elements. Passed element has type \"${element.type}\".`,\n press,\n );\n }\n\n await basePress(this.config, element, {\n type: 'press',\n });\n}\n\nexport async function longPress(\n this: UserEventInstance,\n element: ReactTestInstance,\n options?: PressOptions,\n): Promise<void> {\n if (!isHostElement(element)) {\n throw new ErrorWithStack(\n `longPress() works only with host elements. Passed element has type \"${element.type}\".`,\n longPress,\n );\n }\n\n await basePress(this.config, element, {\n type: 'longPress',\n duration: options?.duration ?? DEFAULT_LONG_PRESS_DELAY_MS,\n });\n}\n\ninterface BasePressOptions {\n type: 'press' | 'longPress';\n duration?: number;\n}\n\nconst basePress = async (\n config: UserEventConfig,\n element: HostTestInstance,\n options: BasePressOptions,\n): Promise<void> => {\n if (isEnabledHostElement(element) && hasPressEventHandler(element)) {\n await emitDirectPressEvents(config, element, options);\n return;\n }\n\n if (isEnabledTouchResponder(element)) {\n await emitPressabilityPressEvents(config, element, options);\n return;\n }\n\n const hostParentElement = getHostParent(element);\n if (!hostParentElement) {\n return;\n }\n\n await basePress(config, hostParentElement, options);\n};\n\nfunction isEnabledHostElement(element: HostTestInstance) {\n if (!isPointerEventEnabled(element)) {\n return false;\n }\n\n if (isHostText(element)) {\n return element.props.disabled !== true;\n }\n\n if (isHostTextInput(element)) {\n // @ts-expect-error - workaround incorrect ReactTestInstance type\n return element.props.editable !== false;\n }\n\n return true;\n}\n\nfunction isEnabledTouchResponder(element: HostTestInstance) {\n return isPointerEventEnabled(element) && element.props.onStartShouldSetResponder?.();\n}\n\nfunction hasPressEventHandler(element: HostTestInstance) {\n return (\n getEventHandler(element, 'press') ||\n getEventHandler(element, 'longPress') ||\n getEventHandler(element, 'pressIn') ||\n getEventHandler(element, 'pressOut')\n );\n}\n\n/**\n * Dispatches a press event sequence for host elements that have `onPress*` event handlers.\n */\nasync function emitDirectPressEvents(\n config: UserEventConfig,\n element: HostTestInstance,\n options: BasePressOptions,\n) {\n await wait(config);\n await dispatchEvent(element, 'pressIn', EventBuilder.Common.touch());\n\n await wait(config, options.duration);\n\n // Long press events are emitted before `pressOut`.\n if (options.type === 'longPress') {\n await dispatchEvent(element, 'longPress', EventBuilder.Common.touch());\n }\n\n await dispatchEvent(element, 'pressOut', EventBuilder.Common.touch());\n\n // Regular press events are emitted after `pressOut` according to the React Native docs.\n // See: https://reactnative.dev/docs/pressable#onpress\n // Experimentally for very short presses (< 130ms) `press` events are actually emitted before `onPressOut`, but\n // we will ignore that as in reality most pressed would be above the 130ms threshold.\n if (options.type === 'press') {\n await dispatchEvent(element, 'press', EventBuilder.Common.touch());\n }\n}\n\nasync function emitPressabilityPressEvents(\n config: UserEventConfig,\n element: HostTestInstance,\n options: BasePressOptions,\n) {\n await wait(config);\n\n await dispatchEvent(element, 'responderGrant', EventBuilder.Common.responderGrant());\n\n const duration = options.duration ?? DEFAULT_MIN_PRESS_DURATION;\n await wait(config, duration);\n\n await dispatchEvent(element, 'responderRelease', EventBuilder.Common.responderRelease());\n\n // React Native will wait for minimal delay of DEFAULT_MIN_PRESS_DURATION\n // before emitting the `pressOut` event. We need to wait here, so that\n // `press()` function does not return before that.\n if (DEFAULT_MIN_PRESS_DURATION - duration > 0) {\n await act(() => wait(config, DEFAULT_MIN_PRESS_DURATION - duration));\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -17,7 +17,7 @@ async function scrollTo(element, options) {
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
- (0, _utils.dispatchEvent)(element, 'contentSizeChange', options.contentSize?.width ?? 0, options.contentSize?.height ?? 0);
20
+ await (0, _utils.dispatchEvent)(element, 'contentSizeChange', options.contentSize?.width ?? 0, options.contentSize?.height ?? 0);
21
21
  const initialOffset = _nativeState.nativeState.contentOffsetForElement.get(element) ?? {
22
22
  x: 0,
23
23
  y: 0
@@ -41,36 +41,36 @@ async function emitDragScrollEvents(config, element, scrollSteps, scrollOptions)
41
41
  return;
42
42
  }
43
43
  await (0, _utils.wait)(config);
44
- (0, _utils.dispatchEvent)(element, 'scrollBeginDrag', _eventBuilder.EventBuilder.ScrollView.scroll(scrollSteps[0], scrollOptions));
44
+ await (0, _utils.dispatchEvent)(element, 'scrollBeginDrag', _eventBuilder.EventBuilder.ScrollView.scroll(scrollSteps[0], scrollOptions));
45
45
 
46
46
  // Note: experimentally, in case of drag scroll the last scroll step
47
47
  // will not trigger `scroll` event.
48
48
  // See: https://github.com/callstack/react-native-testing-library/wiki/ScrollView-Events
49
49
  for (let i = 1; i < scrollSteps.length - 1; i += 1) {
50
50
  await (0, _utils.wait)(config);
51
- (0, _utils.dispatchEvent)(element, 'scroll', _eventBuilder.EventBuilder.ScrollView.scroll(scrollSteps[i], scrollOptions));
51
+ await (0, _utils.dispatchEvent)(element, 'scroll', _eventBuilder.EventBuilder.ScrollView.scroll(scrollSteps[i], scrollOptions));
52
52
  }
53
53
  await (0, _utils.wait)(config);
54
54
  const lastStep = scrollSteps.at(-1);
55
- (0, _utils.dispatchEvent)(element, 'scrollEndDrag', _eventBuilder.EventBuilder.ScrollView.scroll(lastStep, scrollOptions));
55
+ await (0, _utils.dispatchEvent)(element, 'scrollEndDrag', _eventBuilder.EventBuilder.ScrollView.scroll(lastStep, scrollOptions));
56
56
  }
57
57
  async function emitMomentumScrollEvents(config, element, scrollSteps, scrollOptions) {
58
58
  if (scrollSteps.length === 0) {
59
59
  return;
60
60
  }
61
61
  await (0, _utils.wait)(config);
62
- (0, _utils.dispatchEvent)(element, 'momentumScrollBegin', _eventBuilder.EventBuilder.ScrollView.scroll(scrollSteps[0], scrollOptions));
62
+ await (0, _utils.dispatchEvent)(element, 'momentumScrollBegin', _eventBuilder.EventBuilder.ScrollView.scroll(scrollSteps[0], scrollOptions));
63
63
 
64
64
  // Note: experimentally, in case of momentum scroll the last scroll step
65
65
  // will trigger `scroll` event.
66
66
  // See: https://github.com/callstack/react-native-testing-library/wiki/ScrollView-Events
67
67
  for (let i = 1; i < scrollSteps.length; i += 1) {
68
68
  await (0, _utils.wait)(config);
69
- (0, _utils.dispatchEvent)(element, 'scroll', _eventBuilder.EventBuilder.ScrollView.scroll(scrollSteps[i], scrollOptions));
69
+ await (0, _utils.dispatchEvent)(element, 'scroll', _eventBuilder.EventBuilder.ScrollView.scroll(scrollSteps[i], scrollOptions));
70
70
  }
71
71
  await (0, _utils.wait)(config);
72
72
  const lastStep = scrollSteps.at(-1);
73
- (0, _utils.dispatchEvent)(element, 'momentumScrollEnd', _eventBuilder.EventBuilder.ScrollView.scroll(lastStep, scrollOptions));
73
+ await (0, _utils.dispatchEvent)(element, 'momentumScrollEnd', _eventBuilder.EventBuilder.ScrollView.scroll(lastStep, scrollOptions));
74
74
  }
75
75
  function ensureScrollViewDirection(element, options) {
76
76
  const isVerticalScrollView = element.props.horizontal !== true;
@@ -1 +1 @@
1
- {"version":3,"file":"scroll-to.js","names":["_jestMatcherUtils","require","_errors","_hostComponentNames","_object","_nativeState","_eventBuilder","_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 type { ReactTestInstance } from 'react-test-renderer';\nimport { stringify } from 'jest-matcher-utils';\n\nimport { ErrorWithStack } from '../../helpers/errors';\nimport { isHostScrollView } from '../../helpers/host-component-names';\nimport { pick } from '../../helpers/object';\nimport { nativeState } from '../../native-state';\nimport type { Point, Size } from '../../types';\nimport { EventBuilder } from '../event-builder';\nimport type { UserEventConfig, UserEventInstance } from '../setup';\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":"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","ignoreList":[]}
1
+ {"version":3,"file":"scroll-to.js","names":["_jestMatcherUtils","require","_errors","_hostComponentNames","_object","_nativeState","_eventBuilder","_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 type { ReactTestInstance } from 'react-test-renderer';\nimport { stringify } from 'jest-matcher-utils';\n\nimport { ErrorWithStack } from '../../helpers/errors';\nimport { isHostScrollView } from '../../helpers/host-component-names';\nimport { pick } from '../../helpers/object';\nimport { nativeState } from '../../native-state';\nimport type { Point, Size } from '../../types';\nimport { EventBuilder } from '../event-builder';\nimport type { UserEventConfig, UserEventInstance } from '../setup';\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 await 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 await 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 await dispatchEvent(\n element,\n 'scroll',\n EventBuilder.ScrollView.scroll(scrollSteps[i], scrollOptions),\n );\n }\n\n await wait(config);\n const lastStep = scrollSteps.at(-1);\n await dispatchEvent(\n element,\n 'scrollEndDrag',\n EventBuilder.ScrollView.scroll(lastStep, scrollOptions),\n );\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 await 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 await dispatchEvent(\n element,\n 'scroll',\n EventBuilder.ScrollView.scroll(scrollSteps[i], scrollOptions),\n );\n }\n\n await wait(config);\n const lastStep = scrollSteps.at(-1);\n await 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":[]}