@testing-library/react-native 12.4.0 → 12.4.2
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.
- package/build/helpers/accessiblity.d.ts +14 -1
- package/build/helpers/accessiblity.js +23 -2
- package/build/helpers/accessiblity.js.map +1 -1
- package/build/matchers/extend-expect.d.ts +1 -2
- package/build/matchers/extend-expect.js +0 -2
- package/build/matchers/extend-expect.js.map +1 -1
- package/build/matchers/types.d.ts +38 -0
- package/build/matchers/types.js +2 -0
- package/build/matchers/types.js.map +1 -0
- package/build/user-event/event-builder/common.d.ts +19 -12
- package/build/user-event/event-builder/common.js +12 -7
- package/build/user-event/event-builder/common.js.map +1 -1
- package/build/user-event/event-builder/index.d.ts +36 -13
- package/build/user-event/event-builder/scroll-view.d.ts +21 -6
- package/build/user-event/event-builder/scroll-view.js +15 -10
- package/build/user-event/event-builder/scroll-view.js.map +1 -1
- package/build/user-event/event-builder/text-input.d.ts +14 -0
- package/build/user-event/event-builder/text-input.js +21 -7
- package/build/user-event/event-builder/text-input.js.map +1 -1
- package/build/user-event/scroll/scroll-to.d.ts +13 -2
- package/build/user-event/scroll/scroll-to.js +11 -10
- package/build/user-event/scroll/scroll-to.js.map +1 -1
- package/build/user-event/utils/dispatch-event.d.ts +2 -2
- package/build/user-event/utils/dispatch-event.js +3 -3
- package/build/user-event/utils/dispatch-event.js.map +1 -1
- package/package.json +52 -46
- package/build/matchers/extend-expect.d.js +0 -2
- package/build/matchers/extend-expect.d.js.map +0 -1
- package/src/matchers/extend-expect.d.ts +0 -40
|
@@ -9,7 +9,20 @@ export declare function isHiddenFromAccessibility(element: ReactTestInstance | n
|
|
|
9
9
|
/** RTL-compatitibility alias for `isHiddenFromAccessibility` */
|
|
10
10
|
export declare const isInaccessible: typeof isHiddenFromAccessibility;
|
|
11
11
|
export declare function isAccessibilityElement(element: ReactTestInstance | null): boolean;
|
|
12
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Returns the accessibility role for given element. It will return explicit
|
|
14
|
+
* role from either `role` or `accessibilityRole` props if set.
|
|
15
|
+
*
|
|
16
|
+
* If explicit role is not available, it would try to return default element
|
|
17
|
+
* role:
|
|
18
|
+
* - `text` for `Text` elements
|
|
19
|
+
*
|
|
20
|
+
* In all other cases this functions returns `none`.
|
|
21
|
+
*
|
|
22
|
+
* @param element
|
|
23
|
+
* @returns
|
|
24
|
+
*/
|
|
25
|
+
export declare function getAccessibilityRole(element: ReactTestInstance): any;
|
|
13
26
|
export declare function getAccessibilityViewIsModal(element: ReactTestInstance): any;
|
|
14
27
|
export declare function getAccessibilityLabel(element: ReactTestInstance): string | undefined;
|
|
15
28
|
export declare function getAccessibilityLabelledBy(element: ReactTestInstance): string | undefined;
|
|
@@ -20,9 +20,9 @@ exports.isElementSelected = isElementSelected;
|
|
|
20
20
|
exports.isHiddenFromAccessibility = isHiddenFromAccessibility;
|
|
21
21
|
exports.isInaccessible = void 0;
|
|
22
22
|
var _reactNative = require("react-native");
|
|
23
|
-
var _textContent = require("./text-content");
|
|
24
23
|
var _componentTree = require("./component-tree");
|
|
25
24
|
var _hostComponentNames = require("./host-component-names");
|
|
25
|
+
var _textContent = require("./text-content");
|
|
26
26
|
const accessibilityStateKeys = exports.accessibilityStateKeys = ['disabled', 'selected', 'checked', 'busy', 'expanded'];
|
|
27
27
|
const accessiblityValueKeys = exports.accessiblityValueKeys = ['min', 'max', 'now', 'text'];
|
|
28
28
|
function isHiddenFromAccessibility(element, {
|
|
@@ -93,8 +93,29 @@ function isAccessibilityElement(element) {
|
|
|
93
93
|
const hostComponentNames = (0, _hostComponentNames.getHostComponentNames)();
|
|
94
94
|
return element?.type === hostComponentNames?.text || element?.type === hostComponentNames?.textInput || element?.type === hostComponentNames?.switch;
|
|
95
95
|
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Returns the accessibility role for given element. It will return explicit
|
|
99
|
+
* role from either `role` or `accessibilityRole` props if set.
|
|
100
|
+
*
|
|
101
|
+
* If explicit role is not available, it would try to return default element
|
|
102
|
+
* role:
|
|
103
|
+
* - `text` for `Text` elements
|
|
104
|
+
*
|
|
105
|
+
* In all other cases this functions returns `none`.
|
|
106
|
+
*
|
|
107
|
+
* @param element
|
|
108
|
+
* @returns
|
|
109
|
+
*/
|
|
96
110
|
function getAccessibilityRole(element) {
|
|
97
|
-
|
|
111
|
+
const explicitRole = element.props.role ?? element.props.accessibilityRole;
|
|
112
|
+
if (explicitRole) {
|
|
113
|
+
return explicitRole;
|
|
114
|
+
}
|
|
115
|
+
if ((0, _hostComponentNames.isHostText)(element)) {
|
|
116
|
+
return 'text';
|
|
117
|
+
}
|
|
118
|
+
return 'none';
|
|
98
119
|
}
|
|
99
120
|
function getAccessibilityViewIsModal(element) {
|
|
100
121
|
return element.props['aria-modal'] ?? element.props.accessibilityViewIsModal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessiblity.js","names":["_reactNative","require","_textContent","_componentTree","_hostComponentNames","accessibilityStateKeys","exports","accessiblityValueKeys","isHiddenFromAccessibility","element","cache","current","isCurrentSubtreeInaccessible","get","undefined","isSubtreeInaccessible","set","parent","isInaccessible","props","accessibilityElementsHidden","importantForAccessibility","flatStyle","StyleSheet","flatten","style","display","hostSiblings","getHostSiblings","some","sibling","getAccessibilityViewIsModal","isAccessibilityElement","accessible","hostComponentNames","getHostComponentNames","type","text","textInput","switch","getAccessibilityRole","role","accessibilityRole","accessibilityViewIsModal","getAccessibilityLabel","accessibilityLabel","getAccessibilityLabelledBy","accessibilityLabelledBy","getAccessibilityState","accessibilityState","ariaBusy","ariaChecked","ariaDisabled","ariaExpanded","ariaSelected","hasAnyAccessibilityStateProps","busy","checked","disabled","expanded","selected","getAccessibilityCheckedState","getAccessibilityValue","accessibilityValue","ariaValueMax","ariaValueMin","ariaValueNow","ariaValueText","hasAnyAccessibilityValueProps","max","min","now","isElementBusy","isElementCollapsed","isElementExpanded","isElementSelected","getAccessibleName","label","labelElementId","rootElement","getUnsafeRootElement","labelElement","findByProps","nativeID","getTextContent"],"sources":["../../src/helpers/accessiblity.ts"],"sourcesContent":["import {\n AccessibilityState,\n AccessibilityValue,\n StyleSheet,\n} from 'react-native';\nimport { ReactTestInstance } from 'react-test-renderer';\nimport { getTextContent } from './text-content';\nimport { getHostSiblings, getUnsafeRootElement } from './component-tree';\nimport { getHostComponentNames } from './host-component-names';\n\ntype IsInaccessibleOptions = {\n cache?: WeakMap<ReactTestInstance, boolean>;\n};\n\nexport const accessibilityStateKeys: (keyof AccessibilityState)[] = [\n 'disabled',\n 'selected',\n 'checked',\n 'busy',\n 'expanded',\n];\n\nexport const accessiblityValueKeys: (keyof AccessibilityValue)[] = [\n 'min',\n 'max',\n 'now',\n 'text',\n];\n\nexport function isHiddenFromAccessibility(\n element: ReactTestInstance | null,\n { cache }: IsInaccessibleOptions = {}\n): boolean {\n if (element == null) {\n return true;\n }\n\n let current: ReactTestInstance | null = element;\n while (current) {\n let isCurrentSubtreeInaccessible = cache?.get(current);\n\n if (isCurrentSubtreeInaccessible === undefined) {\n isCurrentSubtreeInaccessible = isSubtreeInaccessible(current);\n cache?.set(current, isCurrentSubtreeInaccessible);\n }\n\n if (isCurrentSubtreeInaccessible) {\n return true;\n }\n\n current = current.parent;\n }\n\n return false;\n}\n\n/** RTL-compatitibility alias for `isHiddenFromAccessibility` */\nexport const isInaccessible = isHiddenFromAccessibility;\n\nfunction isSubtreeInaccessible(element: ReactTestInstance): boolean {\n // Null props can happen for React.Fragments\n if (element.props == null) {\n return false;\n }\n\n // See: https://reactnative.dev/docs/accessibility#aria-hidden\n if (element.props['aria-hidden']) {\n return true;\n }\n\n // iOS: accessibilityElementsHidden\n // See: https://reactnative.dev/docs/accessibility#accessibilityelementshidden-ios\n if (element.props.accessibilityElementsHidden) {\n return true;\n }\n\n // Android: importantForAccessibility\n // See: https://reactnative.dev/docs/accessibility#importantforaccessibility-android\n if (element.props.importantForAccessibility === 'no-hide-descendants') {\n return true;\n }\n\n // Note that `opacity: 0` is not treated as inaccessible on iOS\n const flatStyle = StyleSheet.flatten(element.props.style) ?? {};\n if (flatStyle.display === 'none') return true;\n\n // iOS: accessibilityViewIsModal or aria-modal\n // See: https://reactnative.dev/docs/accessibility#accessibilityviewismodal-ios\n const hostSiblings = getHostSiblings(element);\n if (hostSiblings.some((sibling) => getAccessibilityViewIsModal(sibling))) {\n return true;\n }\n\n return false;\n}\n\nexport function isAccessibilityElement(\n element: ReactTestInstance | null\n): boolean {\n if (element == null) {\n return false;\n }\n\n if (element.props.accessible !== undefined) {\n return element.props.accessible;\n }\n\n const hostComponentNames = getHostComponentNames();\n return (\n element?.type === hostComponentNames?.text ||\n element?.type === hostComponentNames?.textInput ||\n element?.type === hostComponentNames?.switch\n );\n}\n\nexport function getAccessibilityRole(\n element: ReactTestInstance\n): string | undefined {\n return element.props.role ?? element.props.accessibilityRole;\n}\n\nexport function getAccessibilityViewIsModal(element: ReactTestInstance) {\n return element.props['aria-modal'] ?? element.props.accessibilityViewIsModal;\n}\n\nexport function getAccessibilityLabel(\n element: ReactTestInstance\n): string | undefined {\n return element.props['aria-label'] ?? element.props.accessibilityLabel;\n}\n\nexport function getAccessibilityLabelledBy(\n element: ReactTestInstance\n): string | undefined {\n return (\n element.props['aria-labelledby'] ?? element.props.accessibilityLabelledBy\n );\n}\n\nexport function getAccessibilityState(\n element: ReactTestInstance\n): AccessibilityState | undefined {\n const {\n accessibilityState,\n 'aria-busy': ariaBusy,\n 'aria-checked': ariaChecked,\n 'aria-disabled': ariaDisabled,\n 'aria-expanded': ariaExpanded,\n 'aria-selected': ariaSelected,\n } = element.props;\n\n const hasAnyAccessibilityStateProps =\n accessibilityState != null ||\n ariaBusy != null ||\n ariaChecked != null ||\n ariaDisabled != null ||\n ariaExpanded != null ||\n ariaSelected != null;\n\n if (!hasAnyAccessibilityStateProps) {\n return undefined;\n }\n\n return {\n busy: ariaBusy ?? accessibilityState?.busy,\n checked: ariaChecked ?? accessibilityState?.checked,\n disabled: ariaDisabled ?? accessibilityState?.disabled,\n expanded: ariaExpanded ?? accessibilityState?.expanded,\n selected: ariaSelected ?? accessibilityState?.selected,\n };\n}\n\nexport function getAccessibilityCheckedState(\n element: ReactTestInstance\n): AccessibilityState['checked'] {\n const { accessibilityState, 'aria-checked': ariaChecked } = element.props;\n return ariaChecked ?? accessibilityState?.checked;\n}\n\nexport function getAccessibilityValue(\n element: ReactTestInstance\n): AccessibilityValue | undefined {\n const {\n accessibilityValue,\n 'aria-valuemax': ariaValueMax,\n 'aria-valuemin': ariaValueMin,\n 'aria-valuenow': ariaValueNow,\n 'aria-valuetext': ariaValueText,\n } = element.props;\n\n const hasAnyAccessibilityValueProps =\n accessibilityValue != null ||\n ariaValueMax != null ||\n ariaValueMin != null ||\n ariaValueNow != null ||\n ariaValueText != null;\n\n if (!hasAnyAccessibilityValueProps) {\n return undefined;\n }\n\n return {\n max: ariaValueMax ?? accessibilityValue?.max,\n min: ariaValueMin ?? accessibilityValue?.min,\n now: ariaValueNow ?? accessibilityValue?.now,\n text: ariaValueText ?? accessibilityValue?.text,\n };\n}\n\nexport function isElementBusy(\n element: ReactTestInstance\n): NonNullable<AccessibilityState['busy']> {\n const { accessibilityState, 'aria-busy': ariaBusy } = element.props;\n return ariaBusy ?? accessibilityState?.busy ?? false;\n}\n\nexport function isElementCollapsed(\n element: ReactTestInstance\n): NonNullable<AccessibilityState['expanded']> {\n const { accessibilityState, 'aria-expanded': ariaExpanded } = element.props;\n return (ariaExpanded ?? accessibilityState?.expanded) === false;\n}\n\nexport function isElementExpanded(\n element: ReactTestInstance\n): NonNullable<AccessibilityState['expanded']> {\n const { accessibilityState, 'aria-expanded': ariaExpanded } = element.props;\n return ariaExpanded ?? accessibilityState?.expanded ?? false;\n}\n\nexport function isElementSelected(\n element: ReactTestInstance\n): NonNullable<AccessibilityState['selected']> {\n const { accessibilityState, 'aria-selected': ariaSelected } = element.props;\n return ariaSelected ?? accessibilityState?.selected ?? false;\n}\n\nexport function getAccessibleName(\n element: ReactTestInstance\n): string | undefined {\n const label = getAccessibilityLabel(element);\n if (label) {\n return label;\n }\n\n const labelElementId = getAccessibilityLabelledBy(element);\n if (labelElementId) {\n const rootElement = getUnsafeRootElement(element);\n const labelElement = rootElement?.findByProps({ nativeID: labelElementId });\n if (labelElement) {\n return getTextContent(labelElement);\n }\n }\n\n return getTextContent(element);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"accessiblity.js","names":["_reactNative","require","_componentTree","_hostComponentNames","_textContent","accessibilityStateKeys","exports","accessiblityValueKeys","isHiddenFromAccessibility","element","cache","current","isCurrentSubtreeInaccessible","get","undefined","isSubtreeInaccessible","set","parent","isInaccessible","props","accessibilityElementsHidden","importantForAccessibility","flatStyle","StyleSheet","flatten","style","display","hostSiblings","getHostSiblings","some","sibling","getAccessibilityViewIsModal","isAccessibilityElement","accessible","hostComponentNames","getHostComponentNames","type","text","textInput","switch","getAccessibilityRole","explicitRole","role","accessibilityRole","isHostText","accessibilityViewIsModal","getAccessibilityLabel","accessibilityLabel","getAccessibilityLabelledBy","accessibilityLabelledBy","getAccessibilityState","accessibilityState","ariaBusy","ariaChecked","ariaDisabled","ariaExpanded","ariaSelected","hasAnyAccessibilityStateProps","busy","checked","disabled","expanded","selected","getAccessibilityCheckedState","getAccessibilityValue","accessibilityValue","ariaValueMax","ariaValueMin","ariaValueNow","ariaValueText","hasAnyAccessibilityValueProps","max","min","now","isElementBusy","isElementCollapsed","isElementExpanded","isElementSelected","getAccessibleName","label","labelElementId","rootElement","getUnsafeRootElement","labelElement","findByProps","nativeID","getTextContent"],"sources":["../../src/helpers/accessiblity.ts"],"sourcesContent":["import {\n AccessibilityState,\n AccessibilityValue,\n StyleSheet,\n} from 'react-native';\nimport { ReactTestInstance } from 'react-test-renderer';\nimport { getHostSiblings, getUnsafeRootElement } from './component-tree';\nimport { getHostComponentNames, isHostText } from './host-component-names';\nimport { getTextContent } from './text-content';\n\ntype IsInaccessibleOptions = {\n cache?: WeakMap<ReactTestInstance, boolean>;\n};\n\nexport const accessibilityStateKeys: (keyof AccessibilityState)[] = [\n 'disabled',\n 'selected',\n 'checked',\n 'busy',\n 'expanded',\n];\n\nexport const accessiblityValueKeys: (keyof AccessibilityValue)[] = [\n 'min',\n 'max',\n 'now',\n 'text',\n];\n\nexport function isHiddenFromAccessibility(\n element: ReactTestInstance | null,\n { cache }: IsInaccessibleOptions = {}\n): boolean {\n if (element == null) {\n return true;\n }\n\n let current: ReactTestInstance | null = element;\n while (current) {\n let isCurrentSubtreeInaccessible = cache?.get(current);\n\n if (isCurrentSubtreeInaccessible === undefined) {\n isCurrentSubtreeInaccessible = isSubtreeInaccessible(current);\n cache?.set(current, isCurrentSubtreeInaccessible);\n }\n\n if (isCurrentSubtreeInaccessible) {\n return true;\n }\n\n current = current.parent;\n }\n\n return false;\n}\n\n/** RTL-compatitibility alias for `isHiddenFromAccessibility` */\nexport const isInaccessible = isHiddenFromAccessibility;\n\nfunction isSubtreeInaccessible(element: ReactTestInstance): boolean {\n // Null props can happen for React.Fragments\n if (element.props == null) {\n return false;\n }\n\n // See: https://reactnative.dev/docs/accessibility#aria-hidden\n if (element.props['aria-hidden']) {\n return true;\n }\n\n // iOS: accessibilityElementsHidden\n // See: https://reactnative.dev/docs/accessibility#accessibilityelementshidden-ios\n if (element.props.accessibilityElementsHidden) {\n return true;\n }\n\n // Android: importantForAccessibility\n // See: https://reactnative.dev/docs/accessibility#importantforaccessibility-android\n if (element.props.importantForAccessibility === 'no-hide-descendants') {\n return true;\n }\n\n // Note that `opacity: 0` is not treated as inaccessible on iOS\n const flatStyle = StyleSheet.flatten(element.props.style) ?? {};\n if (flatStyle.display === 'none') return true;\n\n // iOS: accessibilityViewIsModal or aria-modal\n // See: https://reactnative.dev/docs/accessibility#accessibilityviewismodal-ios\n const hostSiblings = getHostSiblings(element);\n if (hostSiblings.some((sibling) => getAccessibilityViewIsModal(sibling))) {\n return true;\n }\n\n return false;\n}\n\nexport function isAccessibilityElement(\n element: ReactTestInstance | null\n): boolean {\n if (element == null) {\n return false;\n }\n\n if (element.props.accessible !== undefined) {\n return element.props.accessible;\n }\n\n const hostComponentNames = getHostComponentNames();\n return (\n element?.type === hostComponentNames?.text ||\n element?.type === hostComponentNames?.textInput ||\n element?.type === hostComponentNames?.switch\n );\n}\n\n/**\n * Returns the accessibility role for given element. It will return explicit\n * role from either `role` or `accessibilityRole` props if set.\n *\n * If explicit role is not available, it would try to return default element\n * role:\n * - `text` for `Text` elements\n *\n * In all other cases this functions returns `none`.\n *\n * @param element\n * @returns\n */\nexport function getAccessibilityRole(element: ReactTestInstance) {\n const explicitRole = element.props.role ?? element.props.accessibilityRole;\n if (explicitRole) {\n return explicitRole;\n }\n\n if (isHostText(element)) {\n return 'text';\n }\n\n return 'none';\n}\n\nexport function getAccessibilityViewIsModal(element: ReactTestInstance) {\n return element.props['aria-modal'] ?? element.props.accessibilityViewIsModal;\n}\n\nexport function getAccessibilityLabel(\n element: ReactTestInstance\n): string | undefined {\n return element.props['aria-label'] ?? element.props.accessibilityLabel;\n}\n\nexport function getAccessibilityLabelledBy(\n element: ReactTestInstance\n): string | undefined {\n return (\n element.props['aria-labelledby'] ?? element.props.accessibilityLabelledBy\n );\n}\n\nexport function getAccessibilityState(\n element: ReactTestInstance\n): AccessibilityState | undefined {\n const {\n accessibilityState,\n 'aria-busy': ariaBusy,\n 'aria-checked': ariaChecked,\n 'aria-disabled': ariaDisabled,\n 'aria-expanded': ariaExpanded,\n 'aria-selected': ariaSelected,\n } = element.props;\n\n const hasAnyAccessibilityStateProps =\n accessibilityState != null ||\n ariaBusy != null ||\n ariaChecked != null ||\n ariaDisabled != null ||\n ariaExpanded != null ||\n ariaSelected != null;\n\n if (!hasAnyAccessibilityStateProps) {\n return undefined;\n }\n\n return {\n busy: ariaBusy ?? accessibilityState?.busy,\n checked: ariaChecked ?? accessibilityState?.checked,\n disabled: ariaDisabled ?? accessibilityState?.disabled,\n expanded: ariaExpanded ?? accessibilityState?.expanded,\n selected: ariaSelected ?? accessibilityState?.selected,\n };\n}\n\nexport function getAccessibilityCheckedState(\n element: ReactTestInstance\n): AccessibilityState['checked'] {\n const { accessibilityState, 'aria-checked': ariaChecked } = element.props;\n return ariaChecked ?? accessibilityState?.checked;\n}\n\nexport function getAccessibilityValue(\n element: ReactTestInstance\n): AccessibilityValue | undefined {\n const {\n accessibilityValue,\n 'aria-valuemax': ariaValueMax,\n 'aria-valuemin': ariaValueMin,\n 'aria-valuenow': ariaValueNow,\n 'aria-valuetext': ariaValueText,\n } = element.props;\n\n const hasAnyAccessibilityValueProps =\n accessibilityValue != null ||\n ariaValueMax != null ||\n ariaValueMin != null ||\n ariaValueNow != null ||\n ariaValueText != null;\n\n if (!hasAnyAccessibilityValueProps) {\n return undefined;\n }\n\n return {\n max: ariaValueMax ?? accessibilityValue?.max,\n min: ariaValueMin ?? accessibilityValue?.min,\n now: ariaValueNow ?? accessibilityValue?.now,\n text: ariaValueText ?? accessibilityValue?.text,\n };\n}\n\nexport function isElementBusy(\n element: ReactTestInstance\n): NonNullable<AccessibilityState['busy']> {\n const { accessibilityState, 'aria-busy': ariaBusy } = element.props;\n return ariaBusy ?? accessibilityState?.busy ?? false;\n}\n\nexport function isElementCollapsed(\n element: ReactTestInstance\n): NonNullable<AccessibilityState['expanded']> {\n const { accessibilityState, 'aria-expanded': ariaExpanded } = element.props;\n return (ariaExpanded ?? accessibilityState?.expanded) === false;\n}\n\nexport function isElementExpanded(\n element: ReactTestInstance\n): NonNullable<AccessibilityState['expanded']> {\n const { accessibilityState, 'aria-expanded': ariaExpanded } = element.props;\n return ariaExpanded ?? accessibilityState?.expanded ?? false;\n}\n\nexport function isElementSelected(\n element: ReactTestInstance\n): NonNullable<AccessibilityState['selected']> {\n const { accessibilityState, 'aria-selected': ariaSelected } = element.props;\n return ariaSelected ?? accessibilityState?.selected ?? false;\n}\n\nexport function getAccessibleName(\n element: ReactTestInstance\n): string | undefined {\n const label = getAccessibilityLabel(element);\n if (label) {\n return label;\n }\n\n const labelElementId = getAccessibilityLabelledBy(element);\n if (labelElementId) {\n const rootElement = getUnsafeRootElement(element);\n const labelElement = rootElement?.findByProps({ nativeID: labelElementId });\n if (labelElement) {\n return getTextContent(labelElement);\n }\n }\n\n return getTextContent(element);\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export {};
|
|
1
|
+
export type * from './types';
|
|
@@ -17,8 +17,6 @@ var _toHaveDisplayValue = require("./to-have-display-value");
|
|
|
17
17
|
var _toHaveProp = require("./to-have-prop");
|
|
18
18
|
var _toHaveStyle = require("./to-have-style");
|
|
19
19
|
var _toHaveTextContent = require("./to-have-text-content");
|
|
20
|
-
/// <reference path="./extend-expect.d.ts" />
|
|
21
|
-
|
|
22
20
|
expect.extend({
|
|
23
21
|
toBeOnTheScreen: _toBeOnTheScreen.toBeOnTheScreen,
|
|
24
22
|
toBeChecked: _toBeChecked.toBeChecked,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extend-expect.js","names":["_toBeOnTheScreen","require","_toBeChecked","_toBeCollapsed","_toBeDisabled","_toBeBusy","_toBeEmptyElement","_toBeExpanded","_toBePartiallyChecked","_toBeSelected","_toBeVisible","_toContainElement","_toHaveAccessibilityValue","_toHaveAccessibleName","_toHaveDisplayValue","_toHaveProp","_toHaveStyle","_toHaveTextContent","expect","extend","toBeOnTheScreen","toBeChecked","toBeCollapsed","toBeDisabled","toBeBusy","toBeEmptyElement","toBeEnabled","toBeExpanded","toBePartiallyChecked","toBeSelected","toBeVisible","toContainElement","toHaveAccessibilityValue","toHaveAccessibleName","toHaveDisplayValue","toHaveProp","toHaveStyle","toHaveTextContent"],"sources":["../../src/matchers/extend-expect.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"extend-expect.js","names":["_toBeOnTheScreen","require","_toBeChecked","_toBeCollapsed","_toBeDisabled","_toBeBusy","_toBeEmptyElement","_toBeExpanded","_toBePartiallyChecked","_toBeSelected","_toBeVisible","_toContainElement","_toHaveAccessibilityValue","_toHaveAccessibleName","_toHaveDisplayValue","_toHaveProp","_toHaveStyle","_toHaveTextContent","expect","extend","toBeOnTheScreen","toBeChecked","toBeCollapsed","toBeDisabled","toBeBusy","toBeEmptyElement","toBeEnabled","toBeExpanded","toBePartiallyChecked","toBeSelected","toBeVisible","toContainElement","toHaveAccessibilityValue","toHaveAccessibleName","toHaveDisplayValue","toHaveProp","toHaveStyle","toHaveTextContent"],"sources":["../../src/matchers/extend-expect.ts"],"sourcesContent":["import { toBeOnTheScreen } from './to-be-on-the-screen';\nimport { toBeChecked } from './to-be-checked';\nimport { toBeCollapsed } from './to-be-collapsed';\nimport { toBeDisabled, toBeEnabled } from './to-be-disabled';\nimport { toBeBusy } from './to-be-busy';\nimport { toBeEmptyElement } from './to-be-empty-element';\nimport { toBeExpanded } from './to-be-expanded';\nimport { toBePartiallyChecked } from './to-be-partially-checked';\nimport { toBeSelected } from './to-be-selected';\nimport { toBeVisible } from './to-be-visible';\nimport { toContainElement } from './to-contain-element';\nimport { toHaveAccessibilityValue } from './to-have-accessibility-value';\nimport { toHaveAccessibleName } from './to-have-accessible-name';\nimport { toHaveDisplayValue } from './to-have-display-value';\nimport { toHaveProp } from './to-have-prop';\nimport { toHaveStyle } from './to-have-style';\nimport { toHaveTextContent } from './to-have-text-content';\n\nexport type * from './types';\n\nexpect.extend({\n toBeOnTheScreen,\n toBeChecked,\n toBeCollapsed,\n toBeDisabled,\n toBeBusy,\n toBeEmptyElement,\n toBeEnabled,\n toBeExpanded,\n toBePartiallyChecked,\n toBeSelected,\n toBeVisible,\n toContainElement,\n toHaveAccessibilityValue,\n toHaveAccessibleName,\n toHaveDisplayValue,\n toHaveProp,\n toHaveStyle,\n toHaveTextContent,\n});\n"],"mappings":";;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AACA,IAAAK,iBAAA,GAAAL,OAAA;AACA,IAAAM,aAAA,GAAAN,OAAA;AACA,IAAAO,qBAAA,GAAAP,OAAA;AACA,IAAAQ,aAAA,GAAAR,OAAA;AACA,IAAAS,YAAA,GAAAT,OAAA;AACA,IAAAU,iBAAA,GAAAV,OAAA;AACA,IAAAW,yBAAA,GAAAX,OAAA;AACA,IAAAY,qBAAA,GAAAZ,OAAA;AACA,IAAAa,mBAAA,GAAAb,OAAA;AACA,IAAAc,WAAA,GAAAd,OAAA;AACA,IAAAe,YAAA,GAAAf,OAAA;AACA,IAAAgB,kBAAA,GAAAhB,OAAA;AAIAiB,MAAM,CAACC,MAAM,CAAC;EACZC,eAAe,EAAfA,gCAAe;EACfC,WAAW,EAAXA,wBAAW;EACXC,aAAa,EAAbA,4BAAa;EACbC,YAAY,EAAZA,0BAAY;EACZC,QAAQ,EAARA,kBAAQ;EACRC,gBAAgB,EAAhBA,kCAAgB;EAChBC,WAAW,EAAXA,yBAAW;EACXC,YAAY,EAAZA,0BAAY;EACZC,oBAAoB,EAApBA,0CAAoB;EACpBC,YAAY,EAAZA,0BAAY;EACZC,WAAW,EAAXA,wBAAW;EACXC,gBAAgB,EAAhBA,kCAAgB;EAChBC,wBAAwB,EAAxBA,kDAAwB;EACxBC,oBAAoB,EAApBA,0CAAoB;EACpBC,kBAAkB,EAAlBA,sCAAkB;EAClBC,UAAU,EAAVA,sBAAU;EACVC,WAAW,EAAXA,wBAAW;EACXC,iBAAiB,EAAjBA;AACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { StyleProp } from 'react-native';
|
|
2
|
+
import type { ReactTestInstance } from 'react-test-renderer';
|
|
3
|
+
import { AccessibilityValueMatcher } from '../helpers/matchers/match-accessibility-value';
|
|
4
|
+
import { TextMatch, TextMatchOptions } from '../matches';
|
|
5
|
+
import { Style } from './to-have-style';
|
|
6
|
+
export interface JestNativeMatchers<R> {
|
|
7
|
+
/**
|
|
8
|
+
* Assert whether an element is present in the element tree or not.
|
|
9
|
+
*/
|
|
10
|
+
toBeOnTheScreen(): R;
|
|
11
|
+
toBeChecked(): R;
|
|
12
|
+
toBeCollapsed(): R;
|
|
13
|
+
toBeDisabled(): R;
|
|
14
|
+
toBeBusy(): R;
|
|
15
|
+
toBeEmptyElement(): R;
|
|
16
|
+
toBeEnabled(): R;
|
|
17
|
+
toBeExpanded(): R;
|
|
18
|
+
toBePartiallyChecked(): R;
|
|
19
|
+
toBeSelected(): R;
|
|
20
|
+
toBeVisible(): R;
|
|
21
|
+
toContainElement(element: ReactTestInstance | null): R;
|
|
22
|
+
toHaveAccessibilityValue(expectedValue: AccessibilityValueMatcher): R;
|
|
23
|
+
toHaveAccessibleName(expectedName?: TextMatch, options?: TextMatchOptions): R;
|
|
24
|
+
toHaveDisplayValue(expectedValue: TextMatch, options?: TextMatchOptions): R;
|
|
25
|
+
toHaveProp(name: string, expectedValue?: unknown): R;
|
|
26
|
+
toHaveStyle(style: StyleProp<Style>): R;
|
|
27
|
+
toHaveTextContent(expectedText: TextMatch, options?: TextMatchOptions): R;
|
|
28
|
+
}
|
|
29
|
+
declare global {
|
|
30
|
+
namespace jest {
|
|
31
|
+
interface Matchers<R, T = {}> extends JestNativeMatchers<R> {
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
declare module '@jest/expect' {
|
|
36
|
+
interface Matchers<R extends void | Promise<void>> extends JestNativeMatchers<R> {
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../src/matchers/types.ts"],"sourcesContent":["import type { StyleProp } from 'react-native';\nimport type { ReactTestInstance } from 'react-test-renderer';\nimport { AccessibilityValueMatcher } from '../helpers/matchers/match-accessibility-value';\nimport { TextMatch, TextMatchOptions } from '../matches';\nimport { Style } from './to-have-style';\n\nexport interface JestNativeMatchers<R> {\n /**\n * Assert whether an element is present in the element tree or not.\n */\n toBeOnTheScreen(): R;\n\n toBeChecked(): R;\n toBeCollapsed(): R;\n toBeDisabled(): R;\n toBeBusy(): R;\n toBeEmptyElement(): R;\n toBeEnabled(): R;\n toBeExpanded(): R;\n toBePartiallyChecked(): R;\n toBeSelected(): R;\n toBeVisible(): R;\n toContainElement(element: ReactTestInstance | null): R;\n toHaveAccessibilityValue(expectedValue: AccessibilityValueMatcher): R;\n toHaveAccessibleName(expectedName?: TextMatch, options?: TextMatchOptions): R;\n toHaveDisplayValue(expectedValue: TextMatch, options?: TextMatchOptions): R;\n toHaveProp(name: string, expectedValue?: unknown): R;\n toHaveStyle(style: StyleProp<Style>): R;\n toHaveTextContent(expectedText: TextMatch, options?: TextMatchOptions): R;\n}\n\n// Implicit Jest global `expect`.\ndeclare global {\n namespace jest {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface Matchers<R, T = {}> extends JestNativeMatchers<R> {}\n }\n}\n\n// Explicit `@jest/globals` `expect` matchers.\n// @ts-ignore\ndeclare module '@jest/expect' {\n interface Matchers<R extends void | Promise<void>>\n extends JestNativeMatchers<R> {}\n}\n"],"mappings":""}
|
|
@@ -5,10 +5,6 @@
|
|
|
5
5
|
* - Android: `{"changedTouches": [[Circular]], "identifier": 0, "locationX": 160, "locationY": 40.3636360168457, "pageX": 180, "pageY": 140.36363220214844, "target": 53, "targetSurface": -1, "timestamp": 10290805, "touches": [[Circular]]}`
|
|
6
6
|
*/
|
|
7
7
|
declare function touch(): {
|
|
8
|
-
persist: jest.Mock<any, any, any>;
|
|
9
|
-
currentTarget: {
|
|
10
|
-
measure: jest.Mock<any, any, any>;
|
|
11
|
-
};
|
|
12
8
|
nativeEvent: {
|
|
13
9
|
changedTouches: never[];
|
|
14
10
|
identifier: number;
|
|
@@ -20,6 +16,11 @@ declare function touch(): {
|
|
|
20
16
|
timestamp: number;
|
|
21
17
|
touches: never[];
|
|
22
18
|
};
|
|
19
|
+
persist: jest.Mock<any, any, any>;
|
|
20
|
+
currentTarget: {
|
|
21
|
+
measure: jest.Mock<any, any, any>;
|
|
22
|
+
};
|
|
23
|
+
target: {};
|
|
23
24
|
};
|
|
24
25
|
export declare const CommonEventBuilder: {
|
|
25
26
|
touch: typeof touch;
|
|
@@ -27,10 +28,6 @@ export declare const CommonEventBuilder: {
|
|
|
27
28
|
dispatchConfig: {
|
|
28
29
|
registrationName: string;
|
|
29
30
|
};
|
|
30
|
-
persist: jest.Mock<any, any, any>;
|
|
31
|
-
currentTarget: {
|
|
32
|
-
measure: jest.Mock<any, any, any>;
|
|
33
|
-
};
|
|
34
31
|
nativeEvent: {
|
|
35
32
|
changedTouches: never[];
|
|
36
33
|
identifier: number;
|
|
@@ -42,15 +39,16 @@ export declare const CommonEventBuilder: {
|
|
|
42
39
|
timestamp: number;
|
|
43
40
|
touches: never[];
|
|
44
41
|
};
|
|
42
|
+
persist: jest.Mock<any, any, any>;
|
|
43
|
+
currentTarget: {
|
|
44
|
+
measure: jest.Mock<any, any, any>;
|
|
45
|
+
};
|
|
46
|
+
target: {};
|
|
45
47
|
};
|
|
46
48
|
responderRelease: () => {
|
|
47
49
|
dispatchConfig: {
|
|
48
50
|
registrationName: string;
|
|
49
51
|
};
|
|
50
|
-
persist: jest.Mock<any, any, any>;
|
|
51
|
-
currentTarget: {
|
|
52
|
-
measure: jest.Mock<any, any, any>;
|
|
53
|
-
};
|
|
54
52
|
nativeEvent: {
|
|
55
53
|
changedTouches: never[];
|
|
56
54
|
identifier: number;
|
|
@@ -62,6 +60,11 @@ export declare const CommonEventBuilder: {
|
|
|
62
60
|
timestamp: number;
|
|
63
61
|
touches: never[];
|
|
64
62
|
};
|
|
63
|
+
persist: jest.Mock<any, any, any>;
|
|
64
|
+
currentTarget: {
|
|
65
|
+
measure: jest.Mock<any, any, any>;
|
|
66
|
+
};
|
|
67
|
+
target: {};
|
|
65
68
|
};
|
|
66
69
|
/**
|
|
67
70
|
* Experimental values:
|
|
@@ -72,6 +75,8 @@ export declare const CommonEventBuilder: {
|
|
|
72
75
|
nativeEvent: {
|
|
73
76
|
target: number;
|
|
74
77
|
};
|
|
78
|
+
currentTarget: {};
|
|
79
|
+
target: {};
|
|
75
80
|
};
|
|
76
81
|
/**
|
|
77
82
|
* Experimental values:
|
|
@@ -82,6 +87,8 @@ export declare const CommonEventBuilder: {
|
|
|
82
87
|
nativeEvent: {
|
|
83
88
|
target: number;
|
|
84
89
|
};
|
|
90
|
+
currentTarget: {};
|
|
91
|
+
target: {};
|
|
85
92
|
};
|
|
86
93
|
};
|
|
87
94
|
export {};
|
|
@@ -11,10 +11,6 @@ exports.CommonEventBuilder = void 0;
|
|
|
11
11
|
*/
|
|
12
12
|
function touch() {
|
|
13
13
|
return {
|
|
14
|
-
persist: jest.fn(),
|
|
15
|
-
currentTarget: {
|
|
16
|
-
measure: jest.fn()
|
|
17
|
-
},
|
|
18
14
|
nativeEvent: {
|
|
19
15
|
changedTouches: [],
|
|
20
16
|
identifier: 0,
|
|
@@ -25,7 +21,12 @@ function touch() {
|
|
|
25
21
|
target: 0,
|
|
26
22
|
timestamp: Date.now(),
|
|
27
23
|
touches: []
|
|
28
|
-
}
|
|
24
|
+
},
|
|
25
|
+
persist: jest.fn(),
|
|
26
|
+
currentTarget: {
|
|
27
|
+
measure: jest.fn()
|
|
28
|
+
},
|
|
29
|
+
target: {}
|
|
29
30
|
};
|
|
30
31
|
}
|
|
31
32
|
const CommonEventBuilder = exports.CommonEventBuilder = {
|
|
@@ -55,7 +56,9 @@ const CommonEventBuilder = exports.CommonEventBuilder = {
|
|
|
55
56
|
return {
|
|
56
57
|
nativeEvent: {
|
|
57
58
|
target: 0
|
|
58
|
-
}
|
|
59
|
+
},
|
|
60
|
+
currentTarget: {},
|
|
61
|
+
target: {}
|
|
59
62
|
};
|
|
60
63
|
},
|
|
61
64
|
/**
|
|
@@ -67,7 +70,9 @@ const CommonEventBuilder = exports.CommonEventBuilder = {
|
|
|
67
70
|
return {
|
|
68
71
|
nativeEvent: {
|
|
69
72
|
target: 0
|
|
70
|
-
}
|
|
73
|
+
},
|
|
74
|
+
currentTarget: {},
|
|
75
|
+
target: {}
|
|
71
76
|
};
|
|
72
77
|
}
|
|
73
78
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","names":["touch","
|
|
1
|
+
{"version":3,"file":"common.js","names":["touch","nativeEvent","changedTouches","identifier","locationX","locationY","pageX","pageY","target","timestamp","Date","now","touches","persist","jest","fn","currentTarget","measure","CommonEventBuilder","exports","responderGrant","dispatchConfig","registrationName","responderRelease","focus","blur"],"sources":["../../../src/user-event/event-builder/common.ts"],"sourcesContent":["/**\n * Experimental values:\n * - iOS: `{\"changedTouches\": [[Circular]], \"identifier\": 1, \"locationX\": 253, \"locationY\": 30.333328247070312, \"pageX\": 273, \"pageY\": 141.3333282470703, \"target\": 75, \"timestamp\": 875928682.0450834, \"touches\": [[Circular]]}`\n * - Android: `{\"changedTouches\": [[Circular]], \"identifier\": 0, \"locationX\": 160, \"locationY\": 40.3636360168457, \"pageX\": 180, \"pageY\": 140.36363220214844, \"target\": 53, \"targetSurface\": -1, \"timestamp\": 10290805, \"touches\": [[Circular]]}`\n */\nfunction touch() {\n return {\n nativeEvent: {\n changedTouches: [],\n identifier: 0,\n locationX: 0,\n locationY: 0,\n pageX: 0,\n pageY: 0,\n target: 0,\n timestamp: Date.now(),\n touches: [],\n },\n persist: jest.fn(),\n currentTarget: { measure: jest.fn() },\n target: {},\n };\n}\n\nexport const CommonEventBuilder = {\n touch,\n\n responderGrant: () => {\n return {\n ...touch(),\n dispatchConfig: { registrationName: 'onResponderGrant' },\n };\n },\n\n responderRelease: () => {\n return {\n ...touch(),\n dispatchConfig: { registrationName: 'onResponderRelease' },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"eventCount\": 0, \"target\": 75, \"text\": \"\"}`\n * - Android: `{\"target\": 53}`\n */\n focus: () => {\n return {\n nativeEvent: {\n target: 0,\n },\n currentTarget: {},\n target: {},\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"eventCount\": 0, \"target\": 75, \"text\": \"\"}`\n * - Android: `{\"target\": 53}`\n */\n blur: () => {\n return {\n nativeEvent: {\n target: 0,\n },\n currentTarget: {},\n target: {},\n };\n },\n};\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA,SAASA,KAAKA,CAAA,EAAG;EACf,OAAO;IACLC,WAAW,EAAE;MACXC,cAAc,EAAE,EAAE;MAClBC,UAAU,EAAE,CAAC;MACbC,SAAS,EAAE,CAAC;MACZC,SAAS,EAAE,CAAC;MACZC,KAAK,EAAE,CAAC;MACRC,KAAK,EAAE,CAAC;MACRC,MAAM,EAAE,CAAC;MACTC,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC;MACrBC,OAAO,EAAE;IACX,CAAC;IACDC,OAAO,EAAEC,IAAI,CAACC,EAAE,CAAC,CAAC;IAClBC,aAAa,EAAE;MAAEC,OAAO,EAAEH,IAAI,CAACC,EAAE,CAAC;IAAE,CAAC;IACrCP,MAAM,EAAE,CAAC;EACX,CAAC;AACH;AAEO,MAAMU,kBAAkB,GAAAC,OAAA,CAAAD,kBAAA,GAAG;EAChClB,KAAK;EAELoB,cAAc,EAAEA,CAAA,KAAM;IACpB,OAAO;MACL,GAAGpB,KAAK,CAAC,CAAC;MACVqB,cAAc,EAAE;QAAEC,gBAAgB,EAAE;MAAmB;IACzD,CAAC;EACH,CAAC;EAEDC,gBAAgB,EAAEA,CAAA,KAAM;IACtB,OAAO;MACL,GAAGvB,KAAK,CAAC,CAAC;MACVqB,cAAc,EAAE;QAAEC,gBAAgB,EAAE;MAAqB;IAC3D,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEE,KAAK,EAAEA,CAAA,KAAM;IACX,OAAO;MACLvB,WAAW,EAAE;QACXO,MAAM,EAAE;MACV,CAAC;MACDQ,aAAa,EAAE,CAAC,CAAC;MACjBR,MAAM,EAAE,CAAC;IACX,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEiB,IAAI,EAAEA,CAAA,KAAM;IACV,OAAO;MACLxB,WAAW,EAAE;QACXO,MAAM,EAAE;MACV,CAAC;MACDQ,aAAa,EAAE,CAAC,CAAC;MACjBR,MAAM,EAAE,CAAC;IACX,CAAC;EACH;AACF,CAAC"}
|
|
@@ -2,10 +2,6 @@
|
|
|
2
2
|
export declare const EventBuilder: {
|
|
3
3
|
Common: {
|
|
4
4
|
touch: () => {
|
|
5
|
-
persist: jest.Mock<any, any, any>;
|
|
6
|
-
currentTarget: {
|
|
7
|
-
measure: jest.Mock<any, any, any>;
|
|
8
|
-
};
|
|
9
5
|
nativeEvent: {
|
|
10
6
|
changedTouches: never[];
|
|
11
7
|
identifier: number;
|
|
@@ -17,15 +13,16 @@ export declare const EventBuilder: {
|
|
|
17
13
|
timestamp: number;
|
|
18
14
|
touches: never[];
|
|
19
15
|
};
|
|
16
|
+
persist: jest.Mock<any, any, any>;
|
|
17
|
+
currentTarget: {
|
|
18
|
+
measure: jest.Mock<any, any, any>;
|
|
19
|
+
};
|
|
20
|
+
target: {};
|
|
20
21
|
};
|
|
21
22
|
responderGrant: () => {
|
|
22
23
|
dispatchConfig: {
|
|
23
24
|
registrationName: string;
|
|
24
25
|
};
|
|
25
|
-
persist: jest.Mock<any, any, any>;
|
|
26
|
-
currentTarget: {
|
|
27
|
-
measure: jest.Mock<any, any, any>;
|
|
28
|
-
};
|
|
29
26
|
nativeEvent: {
|
|
30
27
|
changedTouches: never[];
|
|
31
28
|
identifier: number;
|
|
@@ -37,15 +34,16 @@ export declare const EventBuilder: {
|
|
|
37
34
|
timestamp: number;
|
|
38
35
|
touches: never[];
|
|
39
36
|
};
|
|
37
|
+
persist: jest.Mock<any, any, any>;
|
|
38
|
+
currentTarget: {
|
|
39
|
+
measure: jest.Mock<any, any, any>;
|
|
40
|
+
};
|
|
41
|
+
target: {};
|
|
40
42
|
};
|
|
41
43
|
responderRelease: () => {
|
|
42
44
|
dispatchConfig: {
|
|
43
45
|
registrationName: string;
|
|
44
46
|
};
|
|
45
|
-
persist: jest.Mock<any, any, any>;
|
|
46
|
-
currentTarget: {
|
|
47
|
-
measure: jest.Mock<any, any, any>;
|
|
48
|
-
};
|
|
49
47
|
nativeEvent: {
|
|
50
48
|
changedTouches: never[];
|
|
51
49
|
identifier: number;
|
|
@@ -57,20 +55,29 @@ export declare const EventBuilder: {
|
|
|
57
55
|
timestamp: number;
|
|
58
56
|
touches: never[];
|
|
59
57
|
};
|
|
58
|
+
persist: jest.Mock<any, any, any>;
|
|
59
|
+
currentTarget: {
|
|
60
|
+
measure: jest.Mock<any, any, any>;
|
|
61
|
+
};
|
|
62
|
+
target: {};
|
|
60
63
|
};
|
|
61
64
|
focus: () => {
|
|
62
65
|
nativeEvent: {
|
|
63
66
|
target: number;
|
|
64
67
|
};
|
|
68
|
+
currentTarget: {};
|
|
69
|
+
target: {};
|
|
65
70
|
};
|
|
66
71
|
blur: () => {
|
|
67
72
|
nativeEvent: {
|
|
68
73
|
target: number;
|
|
69
74
|
};
|
|
75
|
+
currentTarget: {};
|
|
76
|
+
target: {};
|
|
70
77
|
};
|
|
71
78
|
};
|
|
72
79
|
ScrollView: {
|
|
73
|
-
scroll: (offset?: import("./scroll-view").ContentOffset) => {
|
|
80
|
+
scroll: (offset?: import("./scroll-view").ContentOffset, options?: import("./scroll-view").ScrollEventOptions | undefined) => {
|
|
74
81
|
nativeEvent: {
|
|
75
82
|
contentInset: {
|
|
76
83
|
bottom: number;
|
|
@@ -97,6 +104,8 @@ export declare const EventBuilder: {
|
|
|
97
104
|
x: number;
|
|
98
105
|
};
|
|
99
106
|
};
|
|
107
|
+
currentTarget: {};
|
|
108
|
+
target: {};
|
|
100
109
|
};
|
|
101
110
|
};
|
|
102
111
|
TextInput: {
|
|
@@ -106,23 +115,31 @@ export declare const EventBuilder: {
|
|
|
106
115
|
target: number;
|
|
107
116
|
eventCount: number;
|
|
108
117
|
};
|
|
118
|
+
currentTarget: {};
|
|
119
|
+
target: {};
|
|
109
120
|
};
|
|
110
121
|
keyPress: (key: string) => {
|
|
111
122
|
nativeEvent: {
|
|
112
123
|
key: string;
|
|
113
124
|
};
|
|
125
|
+
currentTarget: {};
|
|
126
|
+
target: {};
|
|
114
127
|
};
|
|
115
128
|
submitEditing: (text: string) => {
|
|
116
129
|
nativeEvent: {
|
|
117
130
|
text: string;
|
|
118
131
|
target: number;
|
|
119
132
|
};
|
|
133
|
+
currentTarget: {};
|
|
134
|
+
target: {};
|
|
120
135
|
};
|
|
121
136
|
endEditing: (text: string) => {
|
|
122
137
|
nativeEvent: {
|
|
123
138
|
text: string;
|
|
124
139
|
target: number;
|
|
125
140
|
};
|
|
141
|
+
currentTarget: {};
|
|
142
|
+
target: {};
|
|
126
143
|
};
|
|
127
144
|
selectionChange: ({ start, end }: import("../utils").TextRange) => {
|
|
128
145
|
nativeEvent: {
|
|
@@ -131,6 +148,8 @@ export declare const EventBuilder: {
|
|
|
131
148
|
end: number;
|
|
132
149
|
};
|
|
133
150
|
};
|
|
151
|
+
currentTarget: {};
|
|
152
|
+
target: {};
|
|
134
153
|
};
|
|
135
154
|
textInput: (text: string, previousText: string) => {
|
|
136
155
|
nativeEvent: {
|
|
@@ -142,6 +161,8 @@ export declare const EventBuilder: {
|
|
|
142
161
|
};
|
|
143
162
|
target: number;
|
|
144
163
|
};
|
|
164
|
+
currentTarget: {};
|
|
165
|
+
target: {};
|
|
145
166
|
};
|
|
146
167
|
contentSizeChange: ({ width, height }: import("../utils").ContentSize) => {
|
|
147
168
|
nativeEvent: {
|
|
@@ -151,6 +172,8 @@ export declare const EventBuilder: {
|
|
|
151
172
|
};
|
|
152
173
|
target: number;
|
|
153
174
|
};
|
|
175
|
+
currentTarget: {};
|
|
176
|
+
target: {};
|
|
154
177
|
};
|
|
155
178
|
};
|
|
156
179
|
};
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Experimental values:
|
|
3
|
-
* - iOS: `{"contentInset": {"bottom": 0, "left": 0, "right": 0, "top": 0}, "contentOffset": {"x": 0, "y": 5.333333333333333}, "contentSize": {"height": 1676.6666259765625, "width": 390}, "layoutMeasurement": {"height": 753, "width": 390}, "zoomScale": 1}`
|
|
4
|
-
* - Android: `{"contentInset": {"bottom": 0, "left": 0, "right": 0, "top": 0}, "contentOffset": {"x": 0, "y": 31.619047164916992}, "contentSize": {"height": 1624.761962890625, "width": 411.4285583496094}, "layoutMeasurement": {"height": 785.5238037109375, "width": 411.4285583496094}, "responderIgnoreScroll": true, "target": 139, "velocity": {"x": -1.3633992671966553, "y": -1.3633992671966553}}`
|
|
5
|
-
*/
|
|
6
1
|
/**
|
|
7
2
|
* Scroll position of a scrollable element.
|
|
8
3
|
*/
|
|
@@ -10,8 +5,26 @@ export interface ContentOffset {
|
|
|
10
5
|
y: number;
|
|
11
6
|
x: number;
|
|
12
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* Other options for constructing a scroll event.
|
|
10
|
+
*/
|
|
11
|
+
export type ScrollEventOptions = {
|
|
12
|
+
contentSize?: {
|
|
13
|
+
height: number;
|
|
14
|
+
width: number;
|
|
15
|
+
};
|
|
16
|
+
layoutMeasurement?: {
|
|
17
|
+
height: number;
|
|
18
|
+
width: number;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Experimental values:
|
|
23
|
+
* - iOS: `{"contentInset": {"bottom": 0, "left": 0, "right": 0, "top": 0}, "contentOffset": {"x": 0, "y": 5.333333333333333}, "contentSize": {"height": 1676.6666259765625, "width": 390}, "layoutMeasurement": {"height": 753, "width": 390}, "zoomScale": 1}`
|
|
24
|
+
* - Android: `{"contentInset": {"bottom": 0, "left": 0, "right": 0, "top": 0}, "contentOffset": {"x": 0, "y": 31.619047164916992}, "contentSize": {"height": 1624.761962890625, "width": 411.4285583496094}, "layoutMeasurement": {"height": 785.5238037109375, "width": 411.4285583496094}, "responderIgnoreScroll": true, "target": 139, "velocity": {"x": -1.3633992671966553, "y": -1.3633992671966553}}`
|
|
25
|
+
*/
|
|
13
26
|
export declare const ScrollViewEventBuilder: {
|
|
14
|
-
scroll: (offset?: ContentOffset) => {
|
|
27
|
+
scroll: (offset?: ContentOffset, options?: ScrollEventOptions) => {
|
|
15
28
|
nativeEvent: {
|
|
16
29
|
contentInset: {
|
|
17
30
|
bottom: number;
|
|
@@ -38,5 +51,7 @@ export declare const ScrollViewEventBuilder: {
|
|
|
38
51
|
x: number;
|
|
39
52
|
};
|
|
40
53
|
};
|
|
54
|
+
currentTarget: {};
|
|
55
|
+
target: {};
|
|
41
56
|
};
|
|
42
57
|
};
|
|
@@ -5,20 +5,23 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.ScrollViewEventBuilder = void 0;
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
* - iOS: `{"contentInset": {"bottom": 0, "left": 0, "right": 0, "top": 0}, "contentOffset": {"x": 0, "y": 5.333333333333333}, "contentSize": {"height": 1676.6666259765625, "width": 390}, "layoutMeasurement": {"height": 753, "width": 390}, "zoomScale": 1}`
|
|
10
|
-
* - Android: `{"contentInset": {"bottom": 0, "left": 0, "right": 0, "top": 0}, "contentOffset": {"x": 0, "y": 31.619047164916992}, "contentSize": {"height": 1624.761962890625, "width": 411.4285583496094}, "layoutMeasurement": {"height": 785.5238037109375, "width": 411.4285583496094}, "responderIgnoreScroll": true, "target": 139, "velocity": {"x": -1.3633992671966553, "y": -1.3633992671966553}}`
|
|
8
|
+
* Scroll position of a scrollable element.
|
|
11
9
|
*/
|
|
12
10
|
|
|
13
11
|
/**
|
|
14
|
-
*
|
|
12
|
+
* Other options for constructing a scroll event.
|
|
15
13
|
*/
|
|
16
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Experimental values:
|
|
17
|
+
* - iOS: `{"contentInset": {"bottom": 0, "left": 0, "right": 0, "top": 0}, "contentOffset": {"x": 0, "y": 5.333333333333333}, "contentSize": {"height": 1676.6666259765625, "width": 390}, "layoutMeasurement": {"height": 753, "width": 390}, "zoomScale": 1}`
|
|
18
|
+
* - Android: `{"contentInset": {"bottom": 0, "left": 0, "right": 0, "top": 0}, "contentOffset": {"x": 0, "y": 31.619047164916992}, "contentSize": {"height": 1624.761962890625, "width": 411.4285583496094}, "layoutMeasurement": {"height": 785.5238037109375, "width": 411.4285583496094}, "responderIgnoreScroll": true, "target": 139, "velocity": {"x": -1.3633992671966553, "y": -1.3633992671966553}}`
|
|
19
|
+
*/
|
|
17
20
|
const ScrollViewEventBuilder = exports.ScrollViewEventBuilder = {
|
|
18
21
|
scroll: (offset = {
|
|
19
22
|
y: 0,
|
|
20
23
|
x: 0
|
|
21
|
-
}) => {
|
|
24
|
+
}, options) => {
|
|
22
25
|
return {
|
|
23
26
|
nativeEvent: {
|
|
24
27
|
contentInset: {
|
|
@@ -32,12 +35,12 @@ const ScrollViewEventBuilder = exports.ScrollViewEventBuilder = {
|
|
|
32
35
|
x: offset.x
|
|
33
36
|
},
|
|
34
37
|
contentSize: {
|
|
35
|
-
height: 0,
|
|
36
|
-
width: 0
|
|
38
|
+
height: options?.contentSize?.height ?? 0,
|
|
39
|
+
width: options?.contentSize?.width ?? 0
|
|
37
40
|
},
|
|
38
41
|
layoutMeasurement: {
|
|
39
|
-
height: 0,
|
|
40
|
-
width: 0
|
|
42
|
+
height: options?.layoutMeasurement?.height ?? 0,
|
|
43
|
+
width: options?.layoutMeasurement?.width ?? 0
|
|
41
44
|
},
|
|
42
45
|
responderIgnoreScroll: true,
|
|
43
46
|
target: 0,
|
|
@@ -45,7 +48,9 @@ const ScrollViewEventBuilder = exports.ScrollViewEventBuilder = {
|
|
|
45
48
|
y: 0,
|
|
46
49
|
x: 0
|
|
47
50
|
}
|
|
48
|
-
}
|
|
51
|
+
},
|
|
52
|
+
currentTarget: {},
|
|
53
|
+
target: {}
|
|
49
54
|
};
|
|
50
55
|
}
|
|
51
56
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll-view.js","names":["ScrollViewEventBuilder","exports","scroll","offset","y","x","nativeEvent","contentInset","bottom","left","right","top","contentOffset","contentSize","height","width","layoutMeasurement","responderIgnoreScroll","target","velocity"],"sources":["../../../src/user-event/event-builder/scroll-view.ts"],"sourcesContent":["/**\n * Experimental values:\n * - iOS: `{\"contentInset\": {\"bottom\": 0, \"left\": 0, \"right\": 0, \"top\": 0}, \"contentOffset\": {\"x\": 0, \"y\": 5.333333333333333}, \"contentSize\": {\"height\": 1676.6666259765625, \"width\": 390}, \"layoutMeasurement\": {\"height\": 753, \"width\": 390}, \"zoomScale\": 1}`\n * - Android: `{\"contentInset\": {\"bottom\": 0, \"left\": 0, \"right\": 0, \"top\": 0}, \"contentOffset\": {\"x\": 0, \"y\": 31.619047164916992}, \"contentSize\": {\"height\": 1624.761962890625, \"width\": 411.4285583496094}, \"layoutMeasurement\": {\"height\": 785.5238037109375, \"width\": 411.4285583496094}, \"responderIgnoreScroll\": true, \"target\": 139, \"velocity\": {\"x\": -1.3633992671966553, \"y\": -1.3633992671966553}}`\n */\
|
|
1
|
+
{"version":3,"file":"scroll-view.js","names":["ScrollViewEventBuilder","exports","scroll","offset","y","x","options","nativeEvent","contentInset","bottom","left","right","top","contentOffset","contentSize","height","width","layoutMeasurement","responderIgnoreScroll","target","velocity","currentTarget"],"sources":["../../../src/user-event/event-builder/scroll-view.ts"],"sourcesContent":["/**\n * Scroll position of a scrollable element.\n */\nexport interface ContentOffset {\n y: number;\n x: number;\n}\n\n/**\n * Other options for constructing a scroll event.\n */\nexport type ScrollEventOptions = {\n contentSize?: {\n height: number;\n width: number;\n };\n layoutMeasurement?: {\n height: number;\n width: number;\n };\n};\n\n/**\n * Experimental values:\n * - iOS: `{\"contentInset\": {\"bottom\": 0, \"left\": 0, \"right\": 0, \"top\": 0}, \"contentOffset\": {\"x\": 0, \"y\": 5.333333333333333}, \"contentSize\": {\"height\": 1676.6666259765625, \"width\": 390}, \"layoutMeasurement\": {\"height\": 753, \"width\": 390}, \"zoomScale\": 1}`\n * - Android: `{\"contentInset\": {\"bottom\": 0, \"left\": 0, \"right\": 0, \"top\": 0}, \"contentOffset\": {\"x\": 0, \"y\": 31.619047164916992}, \"contentSize\": {\"height\": 1624.761962890625, \"width\": 411.4285583496094}, \"layoutMeasurement\": {\"height\": 785.5238037109375, \"width\": 411.4285583496094}, \"responderIgnoreScroll\": true, \"target\": 139, \"velocity\": {\"x\": -1.3633992671966553, \"y\": -1.3633992671966553}}`\n */\nexport const ScrollViewEventBuilder = {\n scroll: (\n offset: ContentOffset = { y: 0, x: 0 },\n options?: ScrollEventOptions\n ) => {\n return {\n nativeEvent: {\n contentInset: { bottom: 0, left: 0, right: 0, top: 0 },\n contentOffset: { y: offset.y, x: offset.x },\n contentSize: {\n height: options?.contentSize?.height ?? 0,\n width: options?.contentSize?.width ?? 0,\n },\n layoutMeasurement: {\n height: options?.layoutMeasurement?.height ?? 0,\n width: options?.layoutMeasurement?.width ?? 0,\n },\n responderIgnoreScroll: true,\n target: 0,\n velocity: { y: 0, x: 0 },\n },\n currentTarget: {},\n target: {},\n };\n },\n};\n"],"mappings":";;;;;;AAAA;AACA;AACA;;AAMA;AACA;AACA;;AAYA;AACA;AACA;AACA;AACA;AACO,MAAMA,sBAAsB,GAAAC,OAAA,CAAAD,sBAAA,GAAG;EACpCE,MAAM,EAAEA,CACNC,MAAqB,GAAG;IAAEC,CAAC,EAAE,CAAC;IAAEC,CAAC,EAAE;EAAE,CAAC,EACtCC,OAA4B,KACzB;IACH,OAAO;MACLC,WAAW,EAAE;QACXC,YAAY,EAAE;UAAEC,MAAM,EAAE,CAAC;UAAEC,IAAI,EAAE,CAAC;UAAEC,KAAK,EAAE,CAAC;UAAEC,GAAG,EAAE;QAAE,CAAC;QACtDC,aAAa,EAAE;UAAET,CAAC,EAAED,MAAM,CAACC,CAAC;UAAEC,CAAC,EAAEF,MAAM,CAACE;QAAE,CAAC;QAC3CS,WAAW,EAAE;UACXC,MAAM,EAAET,OAAO,EAAEQ,WAAW,EAAEC,MAAM,IAAI,CAAC;UACzCC,KAAK,EAAEV,OAAO,EAAEQ,WAAW,EAAEE,KAAK,IAAI;QACxC,CAAC;QACDC,iBAAiB,EAAE;UACjBF,MAAM,EAAET,OAAO,EAAEW,iBAAiB,EAAEF,MAAM,IAAI,CAAC;UAC/CC,KAAK,EAAEV,OAAO,EAAEW,iBAAiB,EAAED,KAAK,IAAI;QAC9C,CAAC;QACDE,qBAAqB,EAAE,IAAI;QAC3BC,MAAM,EAAE,CAAC;QACTC,QAAQ,EAAE;UAAEhB,CAAC,EAAE,CAAC;UAAEC,CAAC,EAAE;QAAE;MACzB,CAAC;MACDgB,aAAa,EAAE,CAAC,CAAC;MACjBF,MAAM,EAAE,CAAC;IACX,CAAC;EACH;AACF,CAAC"}
|
|
@@ -12,6 +12,8 @@ export declare const TextInputEventBuilder: {
|
|
|
12
12
|
target: number;
|
|
13
13
|
eventCount: number;
|
|
14
14
|
};
|
|
15
|
+
currentTarget: {};
|
|
16
|
+
target: {};
|
|
15
17
|
};
|
|
16
18
|
/**
|
|
17
19
|
* Experimental values:
|
|
@@ -22,6 +24,8 @@ export declare const TextInputEventBuilder: {
|
|
|
22
24
|
nativeEvent: {
|
|
23
25
|
key: string;
|
|
24
26
|
};
|
|
27
|
+
currentTarget: {};
|
|
28
|
+
target: {};
|
|
25
29
|
};
|
|
26
30
|
/**
|
|
27
31
|
* Experimental values:
|
|
@@ -33,6 +37,8 @@ export declare const TextInputEventBuilder: {
|
|
|
33
37
|
text: string;
|
|
34
38
|
target: number;
|
|
35
39
|
};
|
|
40
|
+
currentTarget: {};
|
|
41
|
+
target: {};
|
|
36
42
|
};
|
|
37
43
|
/**
|
|
38
44
|
* Experimental values:
|
|
@@ -44,6 +50,8 @@ export declare const TextInputEventBuilder: {
|
|
|
44
50
|
text: string;
|
|
45
51
|
target: number;
|
|
46
52
|
};
|
|
53
|
+
currentTarget: {};
|
|
54
|
+
target: {};
|
|
47
55
|
};
|
|
48
56
|
/**
|
|
49
57
|
* Experimental values:
|
|
@@ -57,6 +65,8 @@ export declare const TextInputEventBuilder: {
|
|
|
57
65
|
end: number;
|
|
58
66
|
};
|
|
59
67
|
};
|
|
68
|
+
currentTarget: {};
|
|
69
|
+
target: {};
|
|
60
70
|
};
|
|
61
71
|
/**
|
|
62
72
|
* Experimental values:
|
|
@@ -73,6 +83,8 @@ export declare const TextInputEventBuilder: {
|
|
|
73
83
|
};
|
|
74
84
|
target: number;
|
|
75
85
|
};
|
|
86
|
+
currentTarget: {};
|
|
87
|
+
target: {};
|
|
76
88
|
};
|
|
77
89
|
/**
|
|
78
90
|
* Experimental values:
|
|
@@ -87,5 +99,7 @@ export declare const TextInputEventBuilder: {
|
|
|
87
99
|
};
|
|
88
100
|
target: number;
|
|
89
101
|
};
|
|
102
|
+
currentTarget: {};
|
|
103
|
+
target: {};
|
|
90
104
|
};
|
|
91
105
|
};
|
|
@@ -16,7 +16,9 @@ const TextInputEventBuilder = exports.TextInputEventBuilder = {
|
|
|
16
16
|
text,
|
|
17
17
|
target: 0,
|
|
18
18
|
eventCount: 0
|
|
19
|
-
}
|
|
19
|
+
},
|
|
20
|
+
currentTarget: {},
|
|
21
|
+
target: {}
|
|
20
22
|
};
|
|
21
23
|
},
|
|
22
24
|
/**
|
|
@@ -28,7 +30,9 @@ const TextInputEventBuilder = exports.TextInputEventBuilder = {
|
|
|
28
30
|
return {
|
|
29
31
|
nativeEvent: {
|
|
30
32
|
key
|
|
31
|
-
}
|
|
33
|
+
},
|
|
34
|
+
currentTarget: {},
|
|
35
|
+
target: {}
|
|
32
36
|
};
|
|
33
37
|
},
|
|
34
38
|
/**
|
|
@@ -41,7 +45,9 @@ const TextInputEventBuilder = exports.TextInputEventBuilder = {
|
|
|
41
45
|
nativeEvent: {
|
|
42
46
|
text,
|
|
43
47
|
target: 0
|
|
44
|
-
}
|
|
48
|
+
},
|
|
49
|
+
currentTarget: {},
|
|
50
|
+
target: {}
|
|
45
51
|
};
|
|
46
52
|
},
|
|
47
53
|
/**
|
|
@@ -54,7 +60,9 @@ const TextInputEventBuilder = exports.TextInputEventBuilder = {
|
|
|
54
60
|
nativeEvent: {
|
|
55
61
|
text,
|
|
56
62
|
target: 0
|
|
57
|
-
}
|
|
63
|
+
},
|
|
64
|
+
currentTarget: {},
|
|
65
|
+
target: {}
|
|
58
66
|
};
|
|
59
67
|
},
|
|
60
68
|
/**
|
|
@@ -72,7 +80,9 @@ const TextInputEventBuilder = exports.TextInputEventBuilder = {
|
|
|
72
80
|
start,
|
|
73
81
|
end
|
|
74
82
|
}
|
|
75
|
-
}
|
|
83
|
+
},
|
|
84
|
+
currentTarget: {},
|
|
85
|
+
target: {}
|
|
76
86
|
};
|
|
77
87
|
},
|
|
78
88
|
/**
|
|
@@ -90,7 +100,9 @@ const TextInputEventBuilder = exports.TextInputEventBuilder = {
|
|
|
90
100
|
end: text.length
|
|
91
101
|
},
|
|
92
102
|
target: 0
|
|
93
|
-
}
|
|
103
|
+
},
|
|
104
|
+
currentTarget: {},
|
|
105
|
+
target: {}
|
|
94
106
|
};
|
|
95
107
|
},
|
|
96
108
|
/**
|
|
@@ -109,7 +121,9 @@ const TextInputEventBuilder = exports.TextInputEventBuilder = {
|
|
|
109
121
|
height
|
|
110
122
|
},
|
|
111
123
|
target: 0
|
|
112
|
-
}
|
|
124
|
+
},
|
|
125
|
+
currentTarget: {},
|
|
126
|
+
target: {}
|
|
113
127
|
};
|
|
114
128
|
}
|
|
115
129
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-input.js","names":["TextInputEventBuilder","exports","change","text","nativeEvent","target","eventCount","keyPress","key","submitEditing","endEditing","selectionChange","start","end","selection","textInput","previousText","range","length","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';\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 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 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 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 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 nativeEvent: { selection: { start, end } },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"eventCount\": 2, \"previousText\": \"Te\", \"range\": {\"end\": 2, \"start\": 2}, \"target\": 75, \"text\": \"s\"}`\n * - Android: `{\"previousText\": \"Te\", \"range\": {\"end\": 2, \"start\": 0}, \"target\": 53, \"text\": \"Tes\"}`\n */\n textInput: (text: string, previousText: string) => {\n return {\n nativeEvent: {\n text,\n previousText,\n range: { start: text.length, end: text.length },\n target: 0,\n },\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 nativeEvent: { contentSize: { width, height }, target: 0 },\n };\n },\n};\n"],"mappings":";;;;;;AAGO,MAAMA,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,GAAG;EACnC;AACF;AACA;AACA;AACA;EACEE,MAAM,EAAGC,IAAY,IAAK;IACxB,OAAO;MACLC,WAAW,EAAE;QAAED,IAAI;QAAEE,MAAM,EAAE,CAAC;QAAEC,UAAU,EAAE;MAAE;
|
|
1
|
+
{"version":3,"file":"text-input.js","names":["TextInputEventBuilder","exports","change","text","nativeEvent","target","eventCount","currentTarget","keyPress","key","submitEditing","endEditing","selectionChange","start","end","selection","textInput","previousText","range","length","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';\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 nativeEvent: { text, target: 0, eventCount: 0 },\n currentTarget: {},\n target: {},\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 nativeEvent: { key },\n currentTarget: {},\n target: {},\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 nativeEvent: { text, target: 0 },\n currentTarget: {},\n target: {},\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 nativeEvent: { text, target: 0 },\n currentTarget: {},\n target: {},\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 nativeEvent: { selection: { start, end } },\n currentTarget: {},\n target: {},\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"eventCount\": 2, \"previousText\": \"Te\", \"range\": {\"end\": 2, \"start\": 2}, \"target\": 75, \"text\": \"s\"}`\n * - Android: `{\"previousText\": \"Te\", \"range\": {\"end\": 2, \"start\": 0}, \"target\": 53, \"text\": \"Tes\"}`\n */\n textInput: (text: string, previousText: string) => {\n return {\n nativeEvent: {\n text,\n previousText,\n range: { start: text.length, end: text.length },\n target: 0,\n },\n currentTarget: {},\n target: {},\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 nativeEvent: { contentSize: { width, height }, target: 0 },\n currentTarget: {},\n target: {},\n };\n },\n};\n"],"mappings":";;;;;;AAGO,MAAMA,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,GAAG;EACnC;AACF;AACA;AACA;AACA;EACEE,MAAM,EAAGC,IAAY,IAAK;IACxB,OAAO;MACLC,WAAW,EAAE;QAAED,IAAI;QAAEE,MAAM,EAAE,CAAC;QAAEC,UAAU,EAAE;MAAE,CAAC;MAC/CC,aAAa,EAAE,CAAC,CAAC;MACjBF,MAAM,EAAE,CAAC;IACX,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEG,QAAQ,EAAGC,GAAW,IAAK;IACzB,OAAO;MACLL,WAAW,EAAE;QAAEK;MAAI,CAAC;MACpBF,aAAa,EAAE,CAAC,CAAC;MACjBF,MAAM,EAAE,CAAC;IACX,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEK,aAAa,EAAGP,IAAY,IAAK;IAC/B,OAAO;MACLC,WAAW,EAAE;QAAED,IAAI;QAAEE,MAAM,EAAE;MAAE,CAAC;MAChCE,aAAa,EAAE,CAAC,CAAC;MACjBF,MAAM,EAAE,CAAC;IACX,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEM,UAAU,EAAGR,IAAY,IAAK;IAC5B,OAAO;MACLC,WAAW,EAAE;QAAED,IAAI;QAAEE,MAAM,EAAE;MAAE,CAAC;MAChCE,aAAa,EAAE,CAAC,CAAC;MACjBF,MAAM,EAAE,CAAC;IACX,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEO,eAAe,EAAEA,CAAC;IAAEC,KAAK;IAAEC;EAAe,CAAC,KAAK;IAC9C,OAAO;MACLV,WAAW,EAAE;QAAEW,SAAS,EAAE;UAAEF,KAAK;UAAEC;QAAI;MAAE,CAAC;MAC1CP,aAAa,EAAE,CAAC,CAAC;MACjBF,MAAM,EAAE,CAAC;IACX,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEW,SAAS,EAAEA,CAACb,IAAY,EAAEc,YAAoB,KAAK;IACjD,OAAO;MACLb,WAAW,EAAE;QACXD,IAAI;QACJc,YAAY;QACZC,KAAK,EAAE;UAAEL,KAAK,EAAEV,IAAI,CAACgB,MAAM;UAAEL,GAAG,EAAEX,IAAI,CAACgB;QAAO,CAAC;QAC/Cd,MAAM,EAAE;MACV,CAAC;MACDE,aAAa,EAAE,CAAC,CAAC;MACjBF,MAAM,EAAE,CAAC;IACX,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEe,iBAAiB,EAAEA,CAAC;IAAEC,KAAK;IAAEC;EAAoB,CAAC,KAAK;IACrD,OAAO;MACLlB,WAAW,EAAE;QAAEmB,WAAW,EAAE;UAAEF,KAAK;UAAEC;QAAO,CAAC;QAAEjB,MAAM,EAAE;MAAE,CAAC;MAC1DE,aAAa,EAAE,CAAC,CAAC;MACjBF,MAAM,EAAE,CAAC;IACX,CAAC;EACH;AACF,CAAC"}
|
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
import { ReactTestInstance } from 'react-test-renderer';
|
|
2
2
|
import { UserEventInstance } from '../setup';
|
|
3
|
-
|
|
3
|
+
interface CommonScrollToOptions {
|
|
4
|
+
contentSize?: {
|
|
5
|
+
height: number;
|
|
6
|
+
width: number;
|
|
7
|
+
};
|
|
8
|
+
layoutMeasurement?: {
|
|
9
|
+
height: number;
|
|
10
|
+
width: number;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export interface VerticalScrollToOptions extends CommonScrollToOptions {
|
|
4
14
|
y: number;
|
|
5
15
|
momentumY?: number;
|
|
6
16
|
x?: never;
|
|
7
17
|
momentumX?: never;
|
|
8
18
|
}
|
|
9
|
-
export interface HorizontalScrollToOptions {
|
|
19
|
+
export interface HorizontalScrollToOptions extends CommonScrollToOptions {
|
|
10
20
|
x: number;
|
|
11
21
|
momentumX?: number;
|
|
12
22
|
y?: never;
|
|
@@ -14,3 +24,4 @@ export interface HorizontalScrollToOptions {
|
|
|
14
24
|
}
|
|
15
25
|
export type ScrollToOptions = VerticalScrollToOptions | HorizontalScrollToOptions;
|
|
16
26
|
export declare function scrollTo(this: UserEventInstance, element: ReactTestInstance, options: ScrollToOptions): Promise<void>;
|
|
27
|
+
export {};
|
|
@@ -17,56 +17,57 @@ 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
21
|
const initialPosition = (0, _state.getElementScrollOffset)(element);
|
|
21
22
|
const dragSteps = (0, _utils2.createScrollSteps)({
|
|
22
23
|
y: options.y,
|
|
23
24
|
x: options.x
|
|
24
25
|
}, initialPosition, _utils2.linearInterpolator);
|
|
25
|
-
await emitDragScrollEvents(this.config, element, dragSteps);
|
|
26
|
+
await emitDragScrollEvents(this.config, element, dragSteps, options);
|
|
26
27
|
const momentumStart = dragSteps.at(-1) ?? initialPosition;
|
|
27
28
|
const momentumSteps = (0, _utils2.createScrollSteps)({
|
|
28
29
|
y: options.momentumY,
|
|
29
30
|
x: options.momentumX
|
|
30
31
|
}, momentumStart, _utils2.inertialInterpolator);
|
|
31
|
-
await emitMomentumScrollEvents(this.config, element, momentumSteps);
|
|
32
|
+
await emitMomentumScrollEvents(this.config, element, momentumSteps, options);
|
|
32
33
|
const finalPosition = momentumSteps.at(-1) ?? dragSteps.at(-1) ?? initialPosition;
|
|
33
34
|
(0, _state.setElementScrollOffset)(element, finalPosition);
|
|
34
35
|
}
|
|
35
|
-
async function emitDragScrollEvents(config, element, scrollSteps) {
|
|
36
|
+
async function emitDragScrollEvents(config, element, scrollSteps, scrollOptions) {
|
|
36
37
|
if (scrollSteps.length === 0) {
|
|
37
38
|
return;
|
|
38
39
|
}
|
|
39
40
|
await (0, _utils.wait)(config);
|
|
40
|
-
(0, _utils.dispatchEvent)(element, 'scrollBeginDrag', _eventBuilder.EventBuilder.ScrollView.scroll(scrollSteps[0]));
|
|
41
|
+
(0, _utils.dispatchEvent)(element, 'scrollBeginDrag', _eventBuilder.EventBuilder.ScrollView.scroll(scrollSteps[0], scrollOptions));
|
|
41
42
|
|
|
42
43
|
// Note: experimentally, in case of drag scroll the last scroll step
|
|
43
44
|
// will not trigger `scroll` event.
|
|
44
45
|
// See: https://github.com/callstack/react-native-testing-library/wiki/ScrollView-Events
|
|
45
46
|
for (let i = 1; i < scrollSteps.length - 1; i += 1) {
|
|
46
47
|
await (0, _utils.wait)(config);
|
|
47
|
-
(0, _utils.dispatchEvent)(element, 'scroll', _eventBuilder.EventBuilder.ScrollView.scroll(scrollSteps[i]));
|
|
48
|
+
(0, _utils.dispatchEvent)(element, 'scroll', _eventBuilder.EventBuilder.ScrollView.scroll(scrollSteps[i], scrollOptions));
|
|
48
49
|
}
|
|
49
50
|
await (0, _utils.wait)(config);
|
|
50
51
|
const lastStep = scrollSteps.at(-1);
|
|
51
|
-
(0, _utils.dispatchEvent)(element, 'scrollEndDrag', _eventBuilder.EventBuilder.ScrollView.scroll(lastStep));
|
|
52
|
+
(0, _utils.dispatchEvent)(element, 'scrollEndDrag', _eventBuilder.EventBuilder.ScrollView.scroll(lastStep, scrollOptions));
|
|
52
53
|
}
|
|
53
|
-
async function emitMomentumScrollEvents(config, element, scrollSteps) {
|
|
54
|
+
async function emitMomentumScrollEvents(config, element, scrollSteps, scrollOptions) {
|
|
54
55
|
if (scrollSteps.length === 0) {
|
|
55
56
|
return;
|
|
56
57
|
}
|
|
57
58
|
await (0, _utils.wait)(config);
|
|
58
|
-
(0, _utils.dispatchEvent)(element, 'momentumScrollBegin', _eventBuilder.EventBuilder.ScrollView.scroll(scrollSteps[0]));
|
|
59
|
+
(0, _utils.dispatchEvent)(element, 'momentumScrollBegin', _eventBuilder.EventBuilder.ScrollView.scroll(scrollSteps[0], scrollOptions));
|
|
59
60
|
|
|
60
61
|
// Note: experimentally, in case of momentum scroll the last scroll step
|
|
61
62
|
// will trigger `scroll` event.
|
|
62
63
|
// See: https://github.com/callstack/react-native-testing-library/wiki/ScrollView-Events
|
|
63
64
|
for (let i = 1; i < scrollSteps.length; i += 1) {
|
|
64
65
|
await (0, _utils.wait)(config);
|
|
65
|
-
(0, _utils.dispatchEvent)(element, 'scroll', _eventBuilder.EventBuilder.ScrollView.scroll(scrollSteps[i]));
|
|
66
|
+
(0, _utils.dispatchEvent)(element, 'scroll', _eventBuilder.EventBuilder.ScrollView.scroll(scrollSteps[i], scrollOptions));
|
|
66
67
|
}
|
|
67
68
|
await (0, _utils.wait)(config);
|
|
68
69
|
const lastStep = scrollSteps.at(-1);
|
|
69
|
-
(0, _utils.dispatchEvent)(element, 'momentumScrollEnd', _eventBuilder.EventBuilder.ScrollView.scroll(lastStep));
|
|
70
|
+
(0, _utils.dispatchEvent)(element, 'momentumScrollEnd', _eventBuilder.EventBuilder.ScrollView.scroll(lastStep, scrollOptions));
|
|
70
71
|
}
|
|
71
72
|
function ensureScrollViewDirection(element, options) {
|
|
72
73
|
const isVerticalScrollView = element.props.horizontal !== true;
|
|
@@ -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","initialPosition","getElementScrollOffset","dragSteps","createScrollSteps","y","x","linearInterpolator","emitDragScrollEvents","config","momentumStart","at","momentumSteps","momentumY","momentumX","inertialInterpolator","emitMomentumScrollEvents","finalPosition","setElementScrollOffset","scrollSteps","length","wait","dispatchEvent","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 { dispatchEvent, wait } from '../utils';\nimport { ContentOffset } from '../event-builder/scroll-view';\nimport {\n createScrollSteps,\n inertialInterpolator,\n linearInterpolator,\n} from './utils';\nimport { getElementScrollOffset, setElementScrollOffset } from './state';\n\nexport interface VerticalScrollToOptions {\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 {\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 =\n | VerticalScrollToOptions\n | 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 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);\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);\n\n const finalPosition =\n 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) {\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])\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(\n element,\n 'scroll',\n EventBuilder.ScrollView.scroll(scrollSteps[i])\n );\n }\n\n await wait(config);\n const lastStep = scrollSteps.at(-1);\n dispatchEvent(\n element,\n 'scrollEndDrag',\n EventBuilder.ScrollView.scroll(lastStep)\n );\n}\n\nasync function emitMomentumScrollEvents(\n config: UserEventConfig,\n element: ReactTestInstance,\n scrollSteps: ContentOffset[]\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])\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(\n element,\n 'scroll',\n EventBuilder.ScrollView.scroll(scrollSteps[i])\n );\n }\n\n await wait(config);\n const lastStep = scrollSteps.at(-1);\n dispatchEvent(\n element,\n 'momentumScrollEnd',\n EventBuilder.ScrollView.scroll(lastStep)\n );\n}\n\nfunction ensureScrollViewDirection(\n element: ReactTestInstance,\n options: ScrollToOptions\n) {\n const isVerticalScrollView = element.props.horizontal !== true;\n\n const hasHorizontalScrollOptions =\n 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 =\n 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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"}
|
|
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 {\n createScrollSteps,\n inertialInterpolator,\n linearInterpolator,\n} 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 =\n | VerticalScrollToOptions\n | 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 =\n 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(\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 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: 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(\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 dispatchEvent(\n element,\n 'momentumScrollEnd',\n EventBuilder.ScrollView.scroll(lastStep, scrollOptions)\n );\n}\n\nfunction ensureScrollViewDirection(\n element: ReactTestInstance,\n options: ScrollToOptions\n) {\n const isVerticalScrollView = element.props.horizontal !== true;\n\n const hasHorizontalScrollOptions =\n 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 =\n 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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"}
|
|
@@ -4,6 +4,6 @@ import { ReactTestInstance } from 'react-test-renderer';
|
|
|
4
4
|
*
|
|
5
5
|
* @param element element trigger event on
|
|
6
6
|
* @param eventName name of the event
|
|
7
|
-
* @param event event payload
|
|
7
|
+
* @param event event payload(s)
|
|
8
8
|
*/
|
|
9
|
-
export declare function dispatchEvent(element: ReactTestInstance, eventName: string, event: unknown): void;
|
|
9
|
+
export declare function dispatchEvent(element: ReactTestInstance, eventName: string, ...event: unknown[]): void;
|
|
@@ -11,9 +11,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
11
11
|
*
|
|
12
12
|
* @param element element trigger event on
|
|
13
13
|
* @param eventName name of the event
|
|
14
|
-
* @param event event payload
|
|
14
|
+
* @param event event payload(s)
|
|
15
15
|
*/
|
|
16
|
-
function dispatchEvent(element, eventName, event) {
|
|
16
|
+
function dispatchEvent(element, eventName, ...event) {
|
|
17
17
|
const handler = getEventHandler(element, eventName);
|
|
18
18
|
if (!handler) {
|
|
19
19
|
return;
|
|
@@ -21,7 +21,7 @@ function dispatchEvent(element, eventName, event) {
|
|
|
21
21
|
|
|
22
22
|
// This will be called synchronously.
|
|
23
23
|
void (0, _act.default)(() => {
|
|
24
|
-
handler(event);
|
|
24
|
+
handler(...event);
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
27
|
function getEventHandler(element, eventName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch-event.js","names":["_act","_interopRequireDefault","require","obj","__esModule","default","dispatchEvent","element","eventName","event","handler","getEventHandler","act","handleName","getEventHandlerName","handle","props","undefined","charAt","toUpperCase","slice"],"sources":["../../../src/user-event/utils/dispatch-event.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport act from '../../act';\n\n/**\n * Basic dispatch event function used by User Event module.\n *\n * @param element element trigger event on\n * @param eventName name of the event\n * @param event event payload\n */\nexport function dispatchEvent(\n element: ReactTestInstance,\n eventName: string,\n event: unknown\n) {\n const handler = getEventHandler(element, eventName);\n if (!handler) {\n return;\n }\n\n // This will be called synchronously.\n void act(() => {\n handler(event);\n });\n}\n\nfunction getEventHandler(element: ReactTestInstance, eventName: string) {\n const handleName = getEventHandlerName(eventName);\n const handle = element.props[handleName] as unknown;\n if (typeof handle !== 'function') {\n return undefined;\n }\n\n return handle;\n}\n\nfunction getEventHandlerName(eventName: string) {\n return `on${eventName.charAt(0).toUpperCase()}${eventName.slice(1)}`;\n}\n"],"mappings":";;;;;;AACA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA4B,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,aAAaA,CAC3BC,OAA0B,EAC1BC,SAAiB,
|
|
1
|
+
{"version":3,"file":"dispatch-event.js","names":["_act","_interopRequireDefault","require","obj","__esModule","default","dispatchEvent","element","eventName","event","handler","getEventHandler","act","handleName","getEventHandlerName","handle","props","undefined","charAt","toUpperCase","slice"],"sources":["../../../src/user-event/utils/dispatch-event.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport act from '../../act';\n\n/**\n * Basic dispatch event function used by User Event module.\n *\n * @param element element trigger event on\n * @param eventName name of the event\n * @param event event payload(s)\n */\nexport function dispatchEvent(\n element: ReactTestInstance,\n eventName: string,\n ...event: unknown[]\n) {\n const handler = getEventHandler(element, eventName);\n if (!handler) {\n return;\n }\n\n // This will be called synchronously.\n void act(() => {\n handler(...event);\n });\n}\n\nfunction getEventHandler(element: ReactTestInstance, eventName: string) {\n const handleName = getEventHandlerName(eventName);\n const handle = element.props[handleName] as unknown;\n if (typeof handle !== 'function') {\n return undefined;\n }\n\n return handle;\n}\n\nfunction getEventHandlerName(eventName: string) {\n return `on${eventName.charAt(0).toUpperCase()}${eventName.slice(1)}`;\n}\n"],"mappings":";;;;;;AACA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA4B,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,aAAaA,CAC3BC,OAA0B,EAC1BC,SAAiB,EACjB,GAAGC,KAAgB,EACnB;EACA,MAAMC,OAAO,GAAGC,eAAe,CAACJ,OAAO,EAAEC,SAAS,CAAC;EACnD,IAAI,CAACE,OAAO,EAAE;IACZ;EACF;;EAEA;EACA,KAAK,IAAAE,YAAG,EAAC,MAAM;IACbF,OAAO,CAAC,GAAGD,KAAK,CAAC;EACnB,CAAC,CAAC;AACJ;AAEA,SAASE,eAAeA,CAACJ,OAA0B,EAAEC,SAAiB,EAAE;EACtE,MAAMK,UAAU,GAAGC,mBAAmB,CAACN,SAAS,CAAC;EACjD,MAAMO,MAAM,GAAGR,OAAO,CAACS,KAAK,CAACH,UAAU,CAAY;EACnD,IAAI,OAAOE,MAAM,KAAK,UAAU,EAAE;IAChC,OAAOE,SAAS;EAClB;EAEA,OAAOF,MAAM;AACf;AAEA,SAASD,mBAAmBA,CAACN,SAAiB,EAAE;EAC9C,OAAQ,KAAIA,SAAS,CAACU,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAE,GAAEX,SAAS,CAACY,KAAK,CAAC,CAAC,CAAE,EAAC;AACtE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@testing-library/react-native",
|
|
3
|
-
"version": "12.4.
|
|
3
|
+
"version": "12.4.2",
|
|
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",
|
|
@@ -23,6 +23,25 @@
|
|
|
23
23
|
"test",
|
|
24
24
|
"integration"
|
|
25
25
|
],
|
|
26
|
+
"scripts": {
|
|
27
|
+
"clean": "del build",
|
|
28
|
+
"test": "jest",
|
|
29
|
+
"test:ci": "jest --maxWorkers=2 --collectCoverage=true --coverage-provider=v8",
|
|
30
|
+
"test:react-17": "scripts/test_react_17",
|
|
31
|
+
"typecheck": "tsc",
|
|
32
|
+
"flow": "flow",
|
|
33
|
+
"copy-flowtypes": "cp typings/index.flow.js build",
|
|
34
|
+
"lint": "eslint src --cache",
|
|
35
|
+
"validate": "yarn lint && yarn typecheck && yarn test",
|
|
36
|
+
"build:js": "babel src --out-dir build --extensions \".js,.ts,.jsx,.tsx\" --source-maps --ignore \"**/__tests__/**\"",
|
|
37
|
+
"build:js:watch": "yarn build:js --watch",
|
|
38
|
+
"build:ts": "tsc --build tsconfig.release.json",
|
|
39
|
+
"build:ts:watch": "yarn build:ts --watch --preserveWatchOutput",
|
|
40
|
+
"build": "yarn clean && yarn build:js && yarn build:ts && yarn copy-flowtypes",
|
|
41
|
+
"prepare": "yarn build",
|
|
42
|
+
"prepublish": "yarn build",
|
|
43
|
+
"publish": "release-it"
|
|
44
|
+
},
|
|
26
45
|
"files": [
|
|
27
46
|
"build/",
|
|
28
47
|
"jest-preset/",
|
|
@@ -33,33 +52,6 @@
|
|
|
33
52
|
"dont-cleanup-after-each.js",
|
|
34
53
|
"typings/index.flow.js"
|
|
35
54
|
],
|
|
36
|
-
"devDependencies": {
|
|
37
|
-
"@babel/cli": "^7.22.15",
|
|
38
|
-
"@babel/core": "^7.22.20",
|
|
39
|
-
"@babel/plugin-transform-flow-strip-types": "^7.22.5",
|
|
40
|
-
"@babel/preset-env": "^7.22.20",
|
|
41
|
-
"@babel/preset-flow": "^7.22.15",
|
|
42
|
-
"@babel/preset-react": "^7.22.15",
|
|
43
|
-
"@babel/preset-typescript": "^7.22.15",
|
|
44
|
-
"@callstack/eslint-config": "^14.1.0",
|
|
45
|
-
"@relmify/jest-serializer-strip-ansi": "^1.0.2",
|
|
46
|
-
"@types/jest": "^29.5.5",
|
|
47
|
-
"@types/react": "^18.2.21",
|
|
48
|
-
"@types/react-test-renderer": "^18.0.2",
|
|
49
|
-
"babel-jest": "^29.7.0",
|
|
50
|
-
"dedent": "^1.1.0",
|
|
51
|
-
"del-cli": "^5.0.0",
|
|
52
|
-
"eslint": "^8.21.0",
|
|
53
|
-
"eslint-plugin-flowtype": "^8.0.3",
|
|
54
|
-
"flow-bin": "~0.170.0",
|
|
55
|
-
"flow-copy-source": "^2.0.9",
|
|
56
|
-
"jest": "^29.7.0",
|
|
57
|
-
"react": "18.2.0",
|
|
58
|
-
"react-native": "0.72.4",
|
|
59
|
-
"react-test-renderer": "18.2.0",
|
|
60
|
-
"strip-ansi": "^6.0.1",
|
|
61
|
-
"typescript": "^5.2.2"
|
|
62
|
-
},
|
|
63
55
|
"dependencies": {
|
|
64
56
|
"jest-matcher-utils": "^29.7.0",
|
|
65
57
|
"pretty-format": "^29.7.0",
|
|
@@ -76,23 +68,37 @@
|
|
|
76
68
|
"optional": true
|
|
77
69
|
}
|
|
78
70
|
},
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
"
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
"
|
|
94
|
-
"
|
|
95
|
-
"
|
|
71
|
+
"devDependencies": {
|
|
72
|
+
"@babel/cli": "^7.23.4",
|
|
73
|
+
"@babel/core": "^7.23.3",
|
|
74
|
+
"@babel/plugin-transform-flow-strip-types": "^7.23.3",
|
|
75
|
+
"@babel/preset-env": "^7.23.3",
|
|
76
|
+
"@babel/preset-flow": "^7.23.3",
|
|
77
|
+
"@babel/preset-react": "^7.23.3",
|
|
78
|
+
"@babel/preset-typescript": "^7.23.3",
|
|
79
|
+
"@callstack/eslint-config": "^14.1.0",
|
|
80
|
+
"@release-it/conventional-changelog": "^8.0.1",
|
|
81
|
+
"@relmify/jest-serializer-strip-ansi": "^1.0.2",
|
|
82
|
+
"@types/jest": "^29.5.10",
|
|
83
|
+
"@types/react": "^18.2.38",
|
|
84
|
+
"@types/react-test-renderer": "^18.0.7",
|
|
85
|
+
"babel-jest": "^29.7.0",
|
|
86
|
+
"dedent": "^1.5.1",
|
|
87
|
+
"del-cli": "^5.1.0",
|
|
88
|
+
"eslint": "^8.54.0",
|
|
89
|
+
"eslint-plugin-flowtype": "^8.0.3",
|
|
90
|
+
"flow-bin": "~0.170.0",
|
|
91
|
+
"flow-copy-source": "^2.0.9",
|
|
92
|
+
"jest": "^29.7.0",
|
|
93
|
+
"react": "18.2.0",
|
|
94
|
+
"react-native": "0.72.7",
|
|
95
|
+
"react-test-renderer": "18.2.0",
|
|
96
|
+
"release-it": "^17.0.1",
|
|
97
|
+
"strip-ansi": "^6.0.1",
|
|
98
|
+
"typescript": "^5.3.2"
|
|
99
|
+
},
|
|
100
|
+
"publishConfig": {
|
|
101
|
+
"registry": "https://registry.npmjs.org"
|
|
96
102
|
},
|
|
97
103
|
"packageManager": "yarn@4.0.1"
|
|
98
|
-
}
|
|
104
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"extend-expect.d.js","names":[],"sources":["../../src/matchers/extend-expect.d.ts"],"sourcesContent":["import type { StyleProp } from 'react-native';\nimport type { ReactTestInstance } from 'react-test-renderer';\nimport type { TextMatch, TextMatchOptions } from '../matches';\nimport type { AccessibilityValueMatcher } from '../helpers/matchers/match-accessibility-value';\nimport type { Style } from './to-have-style';\n\nexport interface JestNativeMatchers<R> {\n toBeOnTheScreen(): R;\n toBeChecked(): R;\n toBeCollapsed(): R;\n toBeDisabled(): R;\n toBeBusy(): R;\n toBeEmptyElement(): R;\n toBeEnabled(): R;\n toBeExpanded(): R;\n toBePartiallyChecked(): R;\n toBeSelected(): R;\n toBeVisible(): R;\n toContainElement(element: ReactTestInstance | null): R;\n toHaveAccessibilityValue(expectedValue: AccessibilityValueMatcher): R;\n toHaveAccessibleName(expectedName?: TextMatch, options?: TextMatchOptions): R;\n toHaveDisplayValue(expectedValue: TextMatch, options?: TextMatchOptions): R;\n toHaveProp(name: string, expectedValue?: unknown): R;\n toHaveStyle(style: StyleProp<Style>): R;\n toHaveTextContent(expectedText: TextMatch, options?: TextMatchOptions): R;\n}\n\n// Implicit Jest global `expect`.\ndeclare global {\n namespace jest {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface Matchers<R, T = {}> extends JestNativeMatchers<R> {}\n }\n}\n\n// Explicit `@jest/globals` `expect` matchers.\ndeclare module '@jest/expect' {\n interface Matchers<R extends void | Promise<void>>\n extends JestNativeMatchers<R> {}\n}\n"],"mappings":""}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import type { StyleProp } from 'react-native';
|
|
2
|
-
import type { ReactTestInstance } from 'react-test-renderer';
|
|
3
|
-
import type { TextMatch, TextMatchOptions } from '../matches';
|
|
4
|
-
import type { AccessibilityValueMatcher } from '../helpers/matchers/match-accessibility-value';
|
|
5
|
-
import type { Style } from './to-have-style';
|
|
6
|
-
|
|
7
|
-
export interface JestNativeMatchers<R> {
|
|
8
|
-
toBeOnTheScreen(): R;
|
|
9
|
-
toBeChecked(): R;
|
|
10
|
-
toBeCollapsed(): R;
|
|
11
|
-
toBeDisabled(): R;
|
|
12
|
-
toBeBusy(): R;
|
|
13
|
-
toBeEmptyElement(): R;
|
|
14
|
-
toBeEnabled(): R;
|
|
15
|
-
toBeExpanded(): R;
|
|
16
|
-
toBePartiallyChecked(): R;
|
|
17
|
-
toBeSelected(): R;
|
|
18
|
-
toBeVisible(): R;
|
|
19
|
-
toContainElement(element: ReactTestInstance | null): R;
|
|
20
|
-
toHaveAccessibilityValue(expectedValue: AccessibilityValueMatcher): R;
|
|
21
|
-
toHaveAccessibleName(expectedName?: TextMatch, options?: TextMatchOptions): R;
|
|
22
|
-
toHaveDisplayValue(expectedValue: TextMatch, options?: TextMatchOptions): R;
|
|
23
|
-
toHaveProp(name: string, expectedValue?: unknown): R;
|
|
24
|
-
toHaveStyle(style: StyleProp<Style>): R;
|
|
25
|
-
toHaveTextContent(expectedText: TextMatch, options?: TextMatchOptions): R;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// Implicit Jest global `expect`.
|
|
29
|
-
declare global {
|
|
30
|
-
namespace jest {
|
|
31
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
32
|
-
interface Matchers<R, T = {}> extends JestNativeMatchers<R> {}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// Explicit `@jest/globals` `expect` matchers.
|
|
37
|
-
declare module '@jest/expect' {
|
|
38
|
-
interface Matchers<R extends void | Promise<void>>
|
|
39
|
-
extends JestNativeMatchers<R> {}
|
|
40
|
-
}
|