@testing-library/react-native 12.6.0 → 12.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/config.d.ts +2 -2
- package/build/matchers/to-be-busy.d.ts +1 -0
- package/build/matchers/to-be-checked.d.ts +1 -0
- package/build/matchers/to-be-collapsed.d.ts +1 -0
- package/build/matchers/to-be-disabled.d.ts +1 -0
- package/build/matchers/to-be-empty-element.d.ts +1 -0
- package/build/matchers/to-be-expanded.d.ts +1 -0
- package/build/matchers/to-be-on-the-screen.d.ts +1 -0
- package/build/matchers/to-be-partially-checked.d.ts +1 -0
- package/build/matchers/to-be-selected.d.ts +1 -0
- package/build/matchers/to-be-visible.d.ts +1 -0
- package/build/matchers/to-be-visible.js +6 -2
- package/build/matchers/to-be-visible.js.map +1 -1
- package/build/matchers/to-contain-element.d.ts +1 -0
- package/build/matchers/to-have-accessibility-value.d.ts +1 -0
- package/build/matchers/to-have-accessible-name.d.ts +1 -0
- package/build/matchers/to-have-display-value.d.ts +1 -0
- package/build/matchers/to-have-prop.d.ts +1 -0
- package/build/matchers/to-have-prop.js +1 -1
- package/build/matchers/to-have-prop.js.map +1 -1
- package/build/matchers/to-have-style.d.ts +1 -0
- package/build/matchers/to-have-text-content.d.ts +1 -0
- package/build/matchers/utils.d.ts +1 -0
- package/build/render-act.d.ts +1 -0
- package/build/render.d.ts +16 -16
- package/build/test-utils/events.d.ts +1 -2
- package/build/test-utils/events.js +2 -6
- package/build/test-utils/events.js.map +1 -1
- package/build/user-event/clear.js +6 -10
- package/build/user-event/clear.js.map +1 -1
- package/build/user-event/event-builder/index.d.ts +26 -1
- package/build/user-event/event-builder/text-input.d.ts +30 -0
- package/build/user-event/event-builder/text-input.js +19 -0
- package/build/user-event/event-builder/text-input.js.map +1 -1
- package/build/user-event/index.d.ts +0 -1
- package/build/user-event/index.js +0 -1
- package/build/user-event/index.js.map +1 -1
- package/build/user-event/setup/setup.d.ts +0 -12
- package/build/user-event/setup/setup.js +0 -2
- package/build/user-event/setup/setup.js.map +1 -1
- package/build/user-event/type/type.d.ts +1 -8
- package/build/user-event/type/type.js +12 -29
- package/build/user-event/type/type.js.map +1 -1
- package/build/within.d.ts +6 -5
- package/package.json +2 -2
- package/build/user-event/paste.d.ts +0 -3
- package/build/user-event/paste.js +0 -54
- package/build/user-event/paste.js.map +0 -1
package/build/config.d.ts
CHANGED
|
@@ -37,7 +37,7 @@ export declare function getConfig(): {
|
|
|
37
37
|
/** Default value for `includeHiddenElements` query option. */
|
|
38
38
|
defaultIncludeHiddenElements: boolean;
|
|
39
39
|
/** Default options for `debug` helper. */
|
|
40
|
-
defaultDebugOptions?: Partial<DebugOptions
|
|
40
|
+
defaultDebugOptions?: Partial<DebugOptions> | undefined;
|
|
41
41
|
/** Names for key React Native host components. */
|
|
42
|
-
hostComponentNames?: HostComponentNames;
|
|
42
|
+
hostComponentNames?: HostComponentNames | undefined;
|
|
43
43
|
};
|
|
@@ -46,7 +46,11 @@ function isElementVisible(element, accessibilityCache) {
|
|
|
46
46
|
return isElementVisible(hostParent, cache);
|
|
47
47
|
}
|
|
48
48
|
function isHiddenForStyles(element) {
|
|
49
|
-
const
|
|
50
|
-
|
|
49
|
+
const style = element.props.style ?? {};
|
|
50
|
+
const {
|
|
51
|
+
display,
|
|
52
|
+
opacity
|
|
53
|
+
} = _reactNative.StyleSheet.flatten(style);
|
|
54
|
+
return display === 'none' || opacity === 0;
|
|
51
55
|
}
|
|
52
56
|
//# sourceMappingURL=to-be-visible.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"to-be-visible.js","names":["_jestMatcherUtils","require","_reactNative","_accessibility","_componentTree","_hostComponentNames","_utils","toBeVisible","element","isNot","checkHostElement","pass","isElementVisible","message","is","matcherHint","formatElement","join","accessibilityCache","cache","WeakMap","isHiddenFromAccessibility","isHiddenForStyles","isHostModal","props","visible","hostParent","getHostParent","
|
|
1
|
+
{"version":3,"file":"to-be-visible.js","names":["_jestMatcherUtils","require","_reactNative","_accessibility","_componentTree","_hostComponentNames","_utils","toBeVisible","element","isNot","checkHostElement","pass","isElementVisible","message","is","matcherHint","formatElement","join","accessibilityCache","cache","WeakMap","isHiddenFromAccessibility","isHiddenForStyles","isHostModal","props","visible","hostParent","getHostParent","style","display","opacity","StyleSheet","flatten"],"sources":["../../src/matchers/to-be-visible.tsx"],"sourcesContent":["import type { ReactTestInstance } from 'react-test-renderer';\nimport { matcherHint } from 'jest-matcher-utils';\nimport { StyleSheet } from 'react-native';\nimport { isHiddenFromAccessibility } from '../helpers/accessibility';\nimport { getHostParent } from '../helpers/component-tree';\nimport { isHostModal } from '../helpers/host-component-names';\nimport { checkHostElement, formatElement } from './utils';\n\nexport function toBeVisible(this: jest.MatcherContext, element: ReactTestInstance) {\n if (element !== null || !this.isNot) {\n checkHostElement(element, toBeVisible, this);\n }\n\n return {\n pass: isElementVisible(element),\n message: () => {\n const is = this.isNot ? 'is' : 'is not';\n return [\n matcherHint(`${this.isNot ? '.not' : ''}.toBeVisible`, 'element', ''),\n '',\n `Received element ${is} visible:`,\n formatElement(element),\n ].join('\\n');\n },\n };\n}\n\nfunction isElementVisible(\n element: ReactTestInstance,\n accessibilityCache?: WeakMap<ReactTestInstance, boolean>,\n): boolean {\n // Use cache to speed up repeated searches by `isHiddenFromAccessibility`.\n const cache = accessibilityCache ?? new WeakMap<ReactTestInstance, boolean>();\n if (isHiddenFromAccessibility(element, { cache })) {\n return false;\n }\n\n if (isHiddenForStyles(element)) {\n return false;\n }\n\n // Note: this seems to be a bug in React Native.\n // PR with fix: https://github.com/facebook/react-native/pull/39157\n if (isHostModal(element) && element.props.visible === false) {\n return false;\n }\n\n const hostParent = getHostParent(element);\n if (hostParent === null) {\n return true;\n }\n\n return isElementVisible(hostParent, cache);\n}\n\nfunction isHiddenForStyles(element: ReactTestInstance) {\n const style = element.props.style ?? {};\n const { display, opacity } = StyleSheet.flatten(style);\n return display === 'none' || opacity === 0;\n}\n"],"mappings":";;;;;;AACA,IAAAA,iBAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,cAAA,GAAAH,OAAA;AACA,IAAAI,mBAAA,GAAAJ,OAAA;AACA,IAAAK,MAAA,GAAAL,OAAA;AAEO,SAASM,WAAWA,CAA4BC,OAA0B,EAAE;EACjF,IAAIA,OAAO,KAAK,IAAI,IAAI,CAAC,IAAI,CAACC,KAAK,EAAE;IACnC,IAAAC,uBAAgB,EAACF,OAAO,EAAED,WAAW,EAAE,IAAI,CAAC;EAC9C;EAEA,OAAO;IACLI,IAAI,EAAEC,gBAAgB,CAACJ,OAAO,CAAC;IAC/BK,OAAO,EAAEA,CAAA,KAAM;MACb,MAAMC,EAAE,GAAG,IAAI,CAACL,KAAK,GAAG,IAAI,GAAG,QAAQ;MACvC,OAAO,CACL,IAAAM,6BAAW,EAAC,GAAG,IAAI,CAACN,KAAK,GAAG,MAAM,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,CAAC,EACrE,EAAE,EACF,oBAAoBK,EAAE,WAAW,EACjC,IAAAE,oBAAa,EAACR,OAAO,CAAC,CACvB,CAACS,IAAI,CAAC,IAAI,CAAC;IACd;EACF,CAAC;AACH;AAEA,SAASL,gBAAgBA,CACvBJ,OAA0B,EAC1BU,kBAAwD,EAC/C;EACT;EACA,MAAMC,KAAK,GAAGD,kBAAkB,IAAI,IAAIE,OAAO,CAA6B,CAAC;EAC7E,IAAI,IAAAC,wCAAyB,EAACb,OAAO,EAAE;IAAEW;EAAM,CAAC,CAAC,EAAE;IACjD,OAAO,KAAK;EACd;EAEA,IAAIG,iBAAiB,CAACd,OAAO,CAAC,EAAE;IAC9B,OAAO,KAAK;EACd;;EAEA;EACA;EACA,IAAI,IAAAe,+BAAW,EAACf,OAAO,CAAC,IAAIA,OAAO,CAACgB,KAAK,CAACC,OAAO,KAAK,KAAK,EAAE;IAC3D,OAAO,KAAK;EACd;EAEA,MAAMC,UAAU,GAAG,IAAAC,4BAAa,EAACnB,OAAO,CAAC;EACzC,IAAIkB,UAAU,KAAK,IAAI,EAAE;IACvB,OAAO,IAAI;EACb;EAEA,OAAOd,gBAAgB,CAACc,UAAU,EAAEP,KAAK,CAAC;AAC5C;AAEA,SAASG,iBAAiBA,CAACd,OAA0B,EAAE;EACrD,MAAMoB,KAAK,GAAGpB,OAAO,CAACgB,KAAK,CAACI,KAAK,IAAI,CAAC,CAAC;EACvC,MAAM;IAAEC,OAAO;IAAEC;EAAQ,CAAC,GAAGC,uBAAU,CAACC,OAAO,CAACJ,KAAK,CAAC;EACtD,OAAOC,OAAO,KAAK,MAAM,IAAIC,OAAO,KAAK,CAAC;AAC5C","ignoreList":[]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="jest" />
|
|
1
2
|
import type { ReactTestInstance } from 'react-test-renderer';
|
|
2
3
|
import { AccessibilityValueMatcher } from '../helpers/matchers/match-accessibility-value';
|
|
3
4
|
export declare function toHaveAccessibilityValue(this: jest.MatcherContext, element: ReactTestInstance, expectedValue: AccessibilityValueMatcher): {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="jest" />
|
|
1
2
|
import type { ReactTestInstance } from 'react-test-renderer';
|
|
2
3
|
import { TextMatch, TextMatchOptions } from '../matches';
|
|
3
4
|
export declare function toHaveAccessibleName(this: jest.MatcherContext, element: ReactTestInstance, expectedName?: TextMatch, options?: TextMatchOptions): {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="jest" />
|
|
1
2
|
import type { ReactTestInstance } from 'react-test-renderer';
|
|
2
3
|
import { TextMatch, TextMatchOptions } from '../matches';
|
|
3
4
|
export declare function toHaveDisplayValue(this: jest.MatcherContext, element: ReactTestInstance, expectedValue: TextMatch, options?: TextMatchOptions): {
|
|
@@ -9,7 +9,7 @@ var _utils = require("./utils");
|
|
|
9
9
|
function toHaveProp(element, name, expectedValue) {
|
|
10
10
|
(0, _utils.checkHostElement)(element, toHaveProp, this);
|
|
11
11
|
const isExpectedValueDefined = expectedValue !== undefined;
|
|
12
|
-
const hasProp = name in element.props;
|
|
12
|
+
const hasProp = (name in element.props);
|
|
13
13
|
const receivedValue = element.props[name];
|
|
14
14
|
const pass = isExpectedValueDefined ? hasProp && this.equals(expectedValue, receivedValue) : hasProp;
|
|
15
15
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"to-have-prop.js","names":["_jestMatcherUtils","require","_utils","toHaveProp","element","name","expectedValue","checkHostElement","isExpectedValueDefined","undefined","hasProp","props","receivedValue","pass","equals","message","to","isNot","matcher","matcherHint","printExpected","secondArgument","formatMessage","formatProp","value","stringify"],"sources":["../../src/matchers/to-have-prop.ts"],"sourcesContent":["import type { ReactTestInstance } from 'react-test-renderer';\nimport { matcherHint, stringify, printExpected } from 'jest-matcher-utils';\nimport { checkHostElement, formatMessage } from './utils';\n\nexport function toHaveProp(\n this: jest.MatcherContext,\n element: ReactTestInstance,\n name: string,\n expectedValue: unknown,\n) {\n checkHostElement(element, toHaveProp, this);\n\n const isExpectedValueDefined = expectedValue !== undefined;\n const hasProp = name in element.props;\n const receivedValue = element.props[name];\n\n const pass = isExpectedValueDefined\n ? hasProp && this.equals(expectedValue, receivedValue)\n : hasProp;\n\n return {\n pass,\n message: () => {\n const to = this.isNot ? 'not to' : 'to';\n const matcher = matcherHint(\n `${this.isNot ? '.not' : ''}.toHaveProp`,\n 'element',\n printExpected(name),\n {\n secondArgument: isExpectedValueDefined ? printExpected(expectedValue) : undefined,\n },\n );\n return formatMessage(\n matcher,\n `Expected element ${to} have prop`,\n formatProp(name, expectedValue),\n 'Received',\n hasProp ? formatProp(name, receivedValue) : undefined,\n );\n },\n };\n}\n\nfunction formatProp(name: string, value: unknown) {\n if (value === undefined) {\n return name;\n }\n\n if (typeof value === 'string') {\n return `${name}=\"${value}\"`;\n }\n\n return `${name}={${stringify(value)}}`;\n}\n"],"mappings":";;;;;;AACA,IAAAA,iBAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEO,SAASE,UAAUA,CAExBC,OAA0B,EAC1BC,IAAY,EACZC,aAAsB,EACtB;EACA,IAAAC,uBAAgB,EAACH,OAAO,EAAED,UAAU,EAAE,IAAI,CAAC;EAE3C,MAAMK,sBAAsB,GAAGF,aAAa,KAAKG,SAAS;EAC1D,MAAMC,OAAO,
|
|
1
|
+
{"version":3,"file":"to-have-prop.js","names":["_jestMatcherUtils","require","_utils","toHaveProp","element","name","expectedValue","checkHostElement","isExpectedValueDefined","undefined","hasProp","props","receivedValue","pass","equals","message","to","isNot","matcher","matcherHint","printExpected","secondArgument","formatMessage","formatProp","value","stringify"],"sources":["../../src/matchers/to-have-prop.ts"],"sourcesContent":["import type { ReactTestInstance } from 'react-test-renderer';\nimport { matcherHint, stringify, printExpected } from 'jest-matcher-utils';\nimport { checkHostElement, formatMessage } from './utils';\n\nexport function toHaveProp(\n this: jest.MatcherContext,\n element: ReactTestInstance,\n name: string,\n expectedValue: unknown,\n) {\n checkHostElement(element, toHaveProp, this);\n\n const isExpectedValueDefined = expectedValue !== undefined;\n const hasProp = name in element.props;\n const receivedValue = element.props[name];\n\n const pass = isExpectedValueDefined\n ? hasProp && this.equals(expectedValue, receivedValue)\n : hasProp;\n\n return {\n pass,\n message: () => {\n const to = this.isNot ? 'not to' : 'to';\n const matcher = matcherHint(\n `${this.isNot ? '.not' : ''}.toHaveProp`,\n 'element',\n printExpected(name),\n {\n secondArgument: isExpectedValueDefined ? printExpected(expectedValue) : undefined,\n },\n );\n return formatMessage(\n matcher,\n `Expected element ${to} have prop`,\n formatProp(name, expectedValue),\n 'Received',\n hasProp ? formatProp(name, receivedValue) : undefined,\n );\n },\n };\n}\n\nfunction formatProp(name: string, value: unknown) {\n if (value === undefined) {\n return name;\n }\n\n if (typeof value === 'string') {\n return `${name}=\"${value}\"`;\n }\n\n return `${name}={${stringify(value)}}`;\n}\n"],"mappings":";;;;;;AACA,IAAAA,iBAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEO,SAASE,UAAUA,CAExBC,OAA0B,EAC1BC,IAAY,EACZC,aAAsB,EACtB;EACA,IAAAC,uBAAgB,EAACH,OAAO,EAAED,UAAU,EAAE,IAAI,CAAC;EAE3C,MAAMK,sBAAsB,GAAGF,aAAa,KAAKG,SAAS;EAC1D,MAAMC,OAAO,IAAGL,IAAI,IAAID,OAAO,CAACO,KAAK;EACrC,MAAMC,aAAa,GAAGR,OAAO,CAACO,KAAK,CAACN,IAAI,CAAC;EAEzC,MAAMQ,IAAI,GAAGL,sBAAsB,GAC/BE,OAAO,IAAI,IAAI,CAACI,MAAM,CAACR,aAAa,EAAEM,aAAa,CAAC,GACpDF,OAAO;EAEX,OAAO;IACLG,IAAI;IACJE,OAAO,EAAEA,CAAA,KAAM;MACb,MAAMC,EAAE,GAAG,IAAI,CAACC,KAAK,GAAG,QAAQ,GAAG,IAAI;MACvC,MAAMC,OAAO,GAAG,IAAAC,6BAAW,EACzB,GAAG,IAAI,CAACF,KAAK,GAAG,MAAM,GAAG,EAAE,aAAa,EACxC,SAAS,EACT,IAAAG,+BAAa,EAACf,IAAI,CAAC,EACnB;QACEgB,cAAc,EAAEb,sBAAsB,GAAG,IAAAY,+BAAa,EAACd,aAAa,CAAC,GAAGG;MAC1E,CACF,CAAC;MACD,OAAO,IAAAa,oBAAa,EAClBJ,OAAO,EACP,oBAAoBF,EAAE,YAAY,EAClCO,UAAU,CAAClB,IAAI,EAAEC,aAAa,CAAC,EAC/B,UAAU,EACVI,OAAO,GAAGa,UAAU,CAAClB,IAAI,EAAEO,aAAa,CAAC,GAAGH,SAC9C,CAAC;IACH;EACF,CAAC;AACH;AAEA,SAASc,UAAUA,CAAClB,IAAY,EAAEmB,KAAc,EAAE;EAChD,IAAIA,KAAK,KAAKf,SAAS,EAAE;IACvB,OAAOJ,IAAI;EACb;EAEA,IAAI,OAAOmB,KAAK,KAAK,QAAQ,EAAE;IAC7B,OAAO,GAAGnB,IAAI,KAAKmB,KAAK,GAAG;EAC7B;EAEA,OAAO,GAAGnB,IAAI,KAAK,IAAAoB,2BAAS,EAACD,KAAK,CAAC,GAAG;AACxC","ignoreList":[]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="jest" />
|
|
1
2
|
import type { ReactTestInstance } from 'react-test-renderer';
|
|
2
3
|
import { TextMatch, TextMatchOptions } from '../matches';
|
|
3
4
|
export declare function toHaveTextContent(this: jest.MatcherContext, element: ReactTestInstance, expectedText: TextMatch, options?: TextMatchOptions): {
|
package/build/render-act.d.ts
CHANGED
package/build/render.d.ts
CHANGED
|
@@ -12,10 +12,10 @@ export type RenderResult = ReturnType<typeof render>;
|
|
|
12
12
|
* to assert on the output.
|
|
13
13
|
*/
|
|
14
14
|
export default function render<T>(component: React.ReactElement<T>, options?: RenderOptions): {
|
|
15
|
-
update: (component: React.ReactElement) => void;
|
|
15
|
+
update: (component: React.ReactElement<any, string | React.JSXElementConstructor<any>>) => void;
|
|
16
16
|
unmount: () => void;
|
|
17
|
-
rerender: (component: React.ReactElement) => void;
|
|
18
|
-
toJSON: () =>
|
|
17
|
+
rerender: (component: React.ReactElement<any, string | React.JSXElementConstructor<any>>) => void;
|
|
18
|
+
toJSON: () => import("react-test-renderer").ReactTestRendererJSON | import("react-test-renderer").ReactTestRendererJSON[] | null;
|
|
19
19
|
debug: DebugFunction;
|
|
20
20
|
root: ReactTestInstance;
|
|
21
21
|
UNSAFE_root: ReactTestInstance;
|
|
@@ -24,17 +24,17 @@ export default function render<T>(component: React.ReactElement<T>, options?: Re
|
|
|
24
24
|
}) => ReactTestInstance;
|
|
25
25
|
UNSAFE_getAllByProps: (props: {
|
|
26
26
|
[key: string]: any;
|
|
27
|
-
}) =>
|
|
27
|
+
}) => ReactTestInstance[];
|
|
28
28
|
UNSAFE_queryByProps: (props: {
|
|
29
29
|
[key: string]: any;
|
|
30
30
|
}) => ReactTestInstance | null;
|
|
31
31
|
UNSAFE_queryAllByProps: (props: {
|
|
32
32
|
[key: string]: any;
|
|
33
|
-
}) =>
|
|
33
|
+
}) => ReactTestInstance[];
|
|
34
34
|
UNSAFE_getByType: <P>(type: React.ComponentType<P>) => ReactTestInstance;
|
|
35
|
-
UNSAFE_getAllByType: <
|
|
36
|
-
UNSAFE_queryByType: <
|
|
37
|
-
UNSAFE_queryAllByType: <
|
|
35
|
+
UNSAFE_getAllByType: <P_1>(type: React.ComponentType<P_1>) => ReactTestInstance[];
|
|
36
|
+
UNSAFE_queryByType: <P_2>(type: React.ComponentType<P_2>) => ReactTestInstance | null;
|
|
37
|
+
UNSAFE_queryAllByType: <P_3>(type: React.ComponentType<P_3>) => ReactTestInstance[];
|
|
38
38
|
getByA11yValue: import("./queries/make-queries").GetByQuery<import("./helpers/matchers/match-accessibility-value").AccessibilityValueMatcher, import("./queries/options").CommonQueryOptions>;
|
|
39
39
|
getAllByA11yValue: import("./queries/make-queries").GetAllByQuery<import("./helpers/matchers/match-accessibility-value").AccessibilityValueMatcher, import("./queries/options").CommonQueryOptions>;
|
|
40
40
|
queryByA11yValue: import("./queries/make-queries").QueryByQuery<import("./helpers/matchers/match-accessibility-value").AccessibilityValueMatcher, import("./queries/options").CommonQueryOptions>;
|
|
@@ -118,10 +118,10 @@ export interface RenderInternalOptions extends RenderOptions {
|
|
|
118
118
|
detectHostComponentNames?: boolean;
|
|
119
119
|
}
|
|
120
120
|
export declare function renderInternal<T>(component: React.ReactElement<T>, options?: RenderInternalOptions): {
|
|
121
|
-
update: (component: React.ReactElement) => void;
|
|
121
|
+
update: (component: React.ReactElement<any, string | React.JSXElementConstructor<any>>) => void;
|
|
122
122
|
unmount: () => void;
|
|
123
|
-
rerender: (component: React.ReactElement) => void;
|
|
124
|
-
toJSON: () =>
|
|
123
|
+
rerender: (component: React.ReactElement<any, string | React.JSXElementConstructor<any>>) => void;
|
|
124
|
+
toJSON: () => import("react-test-renderer").ReactTestRendererJSON | import("react-test-renderer").ReactTestRendererJSON[] | null;
|
|
125
125
|
debug: DebugFunction;
|
|
126
126
|
root: ReactTestInstance;
|
|
127
127
|
UNSAFE_root: ReactTestInstance;
|
|
@@ -130,17 +130,17 @@ export declare function renderInternal<T>(component: React.ReactElement<T>, opti
|
|
|
130
130
|
}) => ReactTestInstance;
|
|
131
131
|
UNSAFE_getAllByProps: (props: {
|
|
132
132
|
[key: string]: any;
|
|
133
|
-
}) =>
|
|
133
|
+
}) => ReactTestInstance[];
|
|
134
134
|
UNSAFE_queryByProps: (props: {
|
|
135
135
|
[key: string]: any;
|
|
136
136
|
}) => ReactTestInstance | null;
|
|
137
137
|
UNSAFE_queryAllByProps: (props: {
|
|
138
138
|
[key: string]: any;
|
|
139
|
-
}) =>
|
|
139
|
+
}) => ReactTestInstance[];
|
|
140
140
|
UNSAFE_getByType: <P>(type: React.ComponentType<P>) => ReactTestInstance;
|
|
141
|
-
UNSAFE_getAllByType: <
|
|
142
|
-
UNSAFE_queryByType: <
|
|
143
|
-
UNSAFE_queryAllByType: <
|
|
141
|
+
UNSAFE_getAllByType: <P_1>(type: React.ComponentType<P_1>) => ReactTestInstance[];
|
|
142
|
+
UNSAFE_queryByType: <P_2>(type: React.ComponentType<P_2>) => ReactTestInstance | null;
|
|
143
|
+
UNSAFE_queryAllByType: <P_3>(type: React.ComponentType<P_3>) => ReactTestInstance[];
|
|
144
144
|
getByA11yValue: import("./queries/make-queries").GetByQuery<import("./helpers/matchers/match-accessibility-value").AccessibilityValueMatcher, import("./queries/options").CommonQueryOptions>;
|
|
145
145
|
getAllByA11yValue: import("./queries/make-queries").GetAllByQuery<import("./helpers/matchers/match-accessibility-value").AccessibilityValueMatcher, import("./queries/options").CommonQueryOptions>;
|
|
146
146
|
queryByA11yValue: import("./queries/make-queries").QueryByQuery<import("./helpers/matchers/match-accessibility-value").AccessibilityValueMatcher, import("./queries/options").CommonQueryOptions>;
|
|
@@ -6,5 +6,4 @@ export declare function createEventLogger(): {
|
|
|
6
6
|
events: EventEntry[];
|
|
7
7
|
logEvent: (name: string) => (event: unknown) => void;
|
|
8
8
|
};
|
|
9
|
-
export declare function
|
|
10
|
-
export declare function lastEventPayload(events: EventEntry[], name: string): any;
|
|
9
|
+
export declare function getEventsName(events: EventEntry[]): string[];
|
|
@@ -4,8 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.createEventLogger = createEventLogger;
|
|
7
|
-
exports.
|
|
8
|
-
exports.lastEventPayload = lastEventPayload;
|
|
7
|
+
exports.getEventsName = getEventsName;
|
|
9
8
|
function createEventLogger() {
|
|
10
9
|
const events = [];
|
|
11
10
|
const logEvent = name => {
|
|
@@ -22,10 +21,7 @@ function createEventLogger() {
|
|
|
22
21
|
logEvent
|
|
23
22
|
};
|
|
24
23
|
}
|
|
25
|
-
function
|
|
24
|
+
function getEventsName(events) {
|
|
26
25
|
return events.map(event => event.name);
|
|
27
26
|
}
|
|
28
|
-
function lastEventPayload(events, name) {
|
|
29
|
-
return events.filter(e => e.name === name).pop()?.payload;
|
|
30
|
-
}
|
|
31
27
|
//# sourceMappingURL=events.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","names":["createEventLogger","events","logEvent","name","event","eventEntry","payload","push","
|
|
1
|
+
{"version":3,"file":"events.js","names":["createEventLogger","events","logEvent","name","event","eventEntry","payload","push","getEventsName","map"],"sources":["../../src/test-utils/events.ts"],"sourcesContent":["export interface EventEntry {\n name: string;\n payload: any;\n}\n\nexport function createEventLogger() {\n const events: EventEntry[] = [];\n const logEvent = (name: string) => {\n return (event: unknown) => {\n const eventEntry: EventEntry = {\n name,\n payload: event,\n };\n\n events.push(eventEntry);\n };\n };\n\n return { events, logEvent };\n}\n\nexport function getEventsName(events: EventEntry[]) {\n return events.map((event) => event.name);\n}\n"],"mappings":";;;;;;;AAKO,SAASA,iBAAiBA,CAAA,EAAG;EAClC,MAAMC,MAAoB,GAAG,EAAE;EAC/B,MAAMC,QAAQ,GAAIC,IAAY,IAAK;IACjC,OAAQC,KAAc,IAAK;MACzB,MAAMC,UAAsB,GAAG;QAC7BF,IAAI;QACJG,OAAO,EAAEF;MACX,CAAC;MAEDH,MAAM,CAACM,IAAI,CAACF,UAAU,CAAC;IACzB,CAAC;EACH,CAAC;EAED,OAAO;IAAEJ,MAAM;IAAEC;EAAS,CAAC;AAC7B;AAEO,SAASM,aAAaA,CAACP,MAAoB,EAAE;EAClD,OAAOA,MAAM,CAACQ,GAAG,CAAEL,KAAK,IAAKA,KAAK,CAACD,IAAI,CAAC;AAC1C","ignoreList":[]}
|
|
@@ -23,24 +23,20 @@ async function clear(element) {
|
|
|
23
23
|
(0, _utils.dispatchEvent)(element, 'focus', _eventBuilder.EventBuilder.Common.focus());
|
|
24
24
|
|
|
25
25
|
// 2. Select all
|
|
26
|
-
const
|
|
26
|
+
const previousText = element.props.value ?? element.props.defaultValue ?? '';
|
|
27
27
|
const selectionRange = {
|
|
28
28
|
start: 0,
|
|
29
|
-
end:
|
|
29
|
+
end: previousText.length
|
|
30
30
|
};
|
|
31
31
|
(0, _utils.dispatchEvent)(element, 'selectionChange', _eventBuilder.EventBuilder.TextInput.selectionChange(selectionRange));
|
|
32
32
|
|
|
33
|
-
// 3. Press backspace
|
|
34
|
-
const
|
|
35
|
-
await (0, _type.emitTypingEvents)(element,
|
|
36
|
-
config: this.config,
|
|
37
|
-
key: 'Backspace',
|
|
38
|
-
text: emptyText
|
|
39
|
-
});
|
|
33
|
+
// 3. Press backspace
|
|
34
|
+
const finalText = '';
|
|
35
|
+
await (0, _type.emitTypingEvents)(this.config, element, 'Backspace', finalText, previousText);
|
|
40
36
|
|
|
41
37
|
// 4. Exit element
|
|
42
38
|
await (0, _utils.wait)(this.config);
|
|
43
|
-
(0, _utils.dispatchEvent)(element, 'endEditing', _eventBuilder.EventBuilder.TextInput.endEditing(
|
|
39
|
+
(0, _utils.dispatchEvent)(element, 'endEditing', _eventBuilder.EventBuilder.TextInput.endEditing(finalText));
|
|
44
40
|
(0, _utils.dispatchEvent)(element, 'blur', _eventBuilder.EventBuilder.Common.blur());
|
|
45
41
|
}
|
|
46
42
|
//# sourceMappingURL=clear.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clear.js","names":["_errors","require","_hostComponentNames","_textInput","_pointerEvents","_eventBuilder","_utils","_type","clear","element","isHostTextInput","ErrorWithStack","type","isTextInputEditable","isPointerEventEnabled","dispatchEvent","EventBuilder","Common","focus","
|
|
1
|
+
{"version":3,"file":"clear.js","names":["_errors","require","_hostComponentNames","_textInput","_pointerEvents","_eventBuilder","_utils","_type","clear","element","isHostTextInput","ErrorWithStack","type","isTextInputEditable","isPointerEventEnabled","dispatchEvent","EventBuilder","Common","focus","previousText","props","value","defaultValue","selectionRange","start","end","length","TextInput","selectionChange","finalText","emitTypingEvents","config","wait","endEditing","blur"],"sources":["../../src/user-event/clear.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport { ErrorWithStack } from '../helpers/errors';\nimport { isHostTextInput } from '../helpers/host-component-names';\nimport { isTextInputEditable } from '../helpers/text-input';\nimport { isPointerEventEnabled } from '../helpers/pointer-events';\nimport { EventBuilder } from './event-builder';\nimport { UserEventInstance } from './setup';\nimport { dispatchEvent, wait } from './utils';\nimport { emitTypingEvents } from './type/type';\n\nexport async function clear(this: UserEventInstance, element: ReactTestInstance): Promise<void> {\n if (!isHostTextInput(element)) {\n throw new ErrorWithStack(\n `clear() only supports host \"TextInput\" elements. Passed element has type: \"${element.type}\".`,\n clear,\n );\n }\n\n if (!isTextInputEditable(element) || !isPointerEventEnabled(element)) {\n return;\n }\n\n // 1. Enter element\n dispatchEvent(element, 'focus', EventBuilder.Common.focus());\n\n // 2. Select all\n const previousText = element.props.value ?? element.props.defaultValue ?? '';\n const selectionRange = {\n start: 0,\n end: previousText.length,\n };\n dispatchEvent(element, 'selectionChange', EventBuilder.TextInput.selectionChange(selectionRange));\n\n // 3. Press backspace\n const finalText = '';\n await emitTypingEvents(this.config, element, 'Backspace', finalText, previousText);\n\n // 4. Exit element\n await wait(this.config);\n dispatchEvent(element, 'endEditing', EventBuilder.TextInput.endEditing(finalText));\n\n dispatchEvent(element, 'blur', EventBuilder.Common.blur());\n}\n"],"mappings":";;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,cAAA,GAAAH,OAAA;AACA,IAAAI,aAAA,GAAAJ,OAAA;AAEA,IAAAK,MAAA,GAAAL,OAAA;AACA,IAAAM,KAAA,GAAAN,OAAA;AAEO,eAAeO,KAAKA,CAA0BC,OAA0B,EAAiB;EAC9F,IAAI,CAAC,IAAAC,mCAAe,EAACD,OAAO,CAAC,EAAE;IAC7B,MAAM,IAAIE,sBAAc,CACtB,8EAA8EF,OAAO,CAACG,IAAI,IAAI,EAC9FJ,KACF,CAAC;EACH;EAEA,IAAI,CAAC,IAAAK,8BAAmB,EAACJ,OAAO,CAAC,IAAI,CAAC,IAAAK,oCAAqB,EAACL,OAAO,CAAC,EAAE;IACpE;EACF;;EAEA;EACA,IAAAM,oBAAa,EAACN,OAAO,EAAE,OAAO,EAAEO,0BAAY,CAACC,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;;EAE5D;EACA,MAAMC,YAAY,GAAGV,OAAO,CAACW,KAAK,CAACC,KAAK,IAAIZ,OAAO,CAACW,KAAK,CAACE,YAAY,IAAI,EAAE;EAC5E,MAAMC,cAAc,GAAG;IACrBC,KAAK,EAAE,CAAC;IACRC,GAAG,EAAEN,YAAY,CAACO;EACpB,CAAC;EACD,IAAAX,oBAAa,EAACN,OAAO,EAAE,iBAAiB,EAAEO,0BAAY,CAACW,SAAS,CAACC,eAAe,CAACL,cAAc,CAAC,CAAC;;EAEjG;EACA,MAAMM,SAAS,GAAG,EAAE;EACpB,MAAM,IAAAC,sBAAgB,EAAC,IAAI,CAACC,MAAM,EAAEtB,OAAO,EAAE,WAAW,EAAEoB,SAAS,EAAEV,YAAY,CAAC;;EAElF;EACA,MAAM,IAAAa,WAAI,EAAC,IAAI,CAACD,MAAM,CAAC;EACvB,IAAAhB,oBAAa,EAACN,OAAO,EAAE,YAAY,EAAEO,0BAAY,CAACW,SAAS,CAACM,UAAU,CAACJ,SAAS,CAAC,CAAC;EAElF,IAAAd,oBAAa,EAACN,OAAO,EAAE,MAAM,EAAEO,0BAAY,CAACC,MAAM,CAACiB,IAAI,CAAC,CAAC,CAAC;AAC5D","ignoreList":[]}
|
|
@@ -133,7 +133,7 @@ export declare const EventBuilder: {
|
|
|
133
133
|
};
|
|
134
134
|
};
|
|
135
135
|
ScrollView: {
|
|
136
|
-
scroll: (offset?: import("./scroll-view").ContentOffset, options?: import("./scroll-view").ScrollEventOptions) => {
|
|
136
|
+
scroll: (offset?: import("./scroll-view").ContentOffset, options?: import("./scroll-view").ScrollEventOptions | undefined) => {
|
|
137
137
|
nativeEvent: {
|
|
138
138
|
contentInset: {
|
|
139
139
|
bottom: number;
|
|
@@ -279,6 +279,31 @@ export declare const EventBuilder: {
|
|
|
279
279
|
timeStamp?: number | undefined;
|
|
280
280
|
type?: string | undefined;
|
|
281
281
|
};
|
|
282
|
+
textInput: (text: string, previousText: string) => {
|
|
283
|
+
nativeEvent: {
|
|
284
|
+
text: string;
|
|
285
|
+
previousText: string;
|
|
286
|
+
range: {
|
|
287
|
+
start: number;
|
|
288
|
+
end: number;
|
|
289
|
+
};
|
|
290
|
+
target: number;
|
|
291
|
+
};
|
|
292
|
+
currentTarget?: unknown;
|
|
293
|
+
target?: unknown;
|
|
294
|
+
bubbles?: boolean | undefined;
|
|
295
|
+
cancelable?: boolean | undefined;
|
|
296
|
+
defaultPrevented?: boolean | undefined;
|
|
297
|
+
eventPhase?: number | undefined;
|
|
298
|
+
isTrusted?: boolean | undefined;
|
|
299
|
+
preventDefault?: (() => void) | undefined;
|
|
300
|
+
isDefaultPrevented?: (() => boolean) | undefined;
|
|
301
|
+
stopPropagation?: (() => void) | undefined;
|
|
302
|
+
isPropagationStopped?: (() => boolean) | undefined;
|
|
303
|
+
persist?: (() => void) | undefined;
|
|
304
|
+
timeStamp?: number | undefined;
|
|
305
|
+
type?: string | undefined;
|
|
306
|
+
};
|
|
282
307
|
contentSizeChange: ({ width, height }: import("../utils").ContentSize) => {
|
|
283
308
|
nativeEvent: {
|
|
284
309
|
contentSize: {
|
|
@@ -128,6 +128,36 @@ export declare const TextInputEventBuilder: {
|
|
|
128
128
|
timeStamp?: number | undefined;
|
|
129
129
|
type?: string | undefined;
|
|
130
130
|
};
|
|
131
|
+
/**
|
|
132
|
+
* Experimental values:
|
|
133
|
+
* - iOS: `{"eventCount": 2, "previousText": "Te", "range": {"end": 2, "start": 2}, "target": 75, "text": "s"}`
|
|
134
|
+
* - Android: `{"previousText": "Te", "range": {"end": 2, "start": 0}, "target": 53, "text": "Tes"}`
|
|
135
|
+
*/
|
|
136
|
+
textInput: (text: string, previousText: string) => {
|
|
137
|
+
nativeEvent: {
|
|
138
|
+
text: string;
|
|
139
|
+
previousText: string;
|
|
140
|
+
range: {
|
|
141
|
+
start: number;
|
|
142
|
+
end: number;
|
|
143
|
+
};
|
|
144
|
+
target: number;
|
|
145
|
+
};
|
|
146
|
+
currentTarget?: unknown;
|
|
147
|
+
target?: unknown;
|
|
148
|
+
bubbles?: boolean | undefined;
|
|
149
|
+
cancelable?: boolean | undefined;
|
|
150
|
+
defaultPrevented?: boolean | undefined;
|
|
151
|
+
eventPhase?: number | undefined;
|
|
152
|
+
isTrusted?: boolean | undefined;
|
|
153
|
+
preventDefault?: (() => void) | undefined;
|
|
154
|
+
isDefaultPrevented?: (() => boolean) | undefined;
|
|
155
|
+
stopPropagation?: (() => void) | undefined;
|
|
156
|
+
isPropagationStopped?: (() => boolean) | undefined;
|
|
157
|
+
persist?: (() => void) | undefined;
|
|
158
|
+
timeStamp?: number | undefined;
|
|
159
|
+
type?: string | undefined;
|
|
160
|
+
};
|
|
131
161
|
/**
|
|
132
162
|
* Experimental values:
|
|
133
163
|
* - iOS: `{"contentSize": {"height": 21.666666666666668, "width": 11.666666666666666}, "target": 75}`
|
|
@@ -81,6 +81,25 @@ const TextInputEventBuilder = exports.TextInputEventBuilder = {
|
|
|
81
81
|
}
|
|
82
82
|
};
|
|
83
83
|
},
|
|
84
|
+
/**
|
|
85
|
+
* Experimental values:
|
|
86
|
+
* - iOS: `{"eventCount": 2, "previousText": "Te", "range": {"end": 2, "start": 2}, "target": 75, "text": "s"}`
|
|
87
|
+
* - Android: `{"previousText": "Te", "range": {"end": 2, "start": 0}, "target": 53, "text": "Tes"}`
|
|
88
|
+
*/
|
|
89
|
+
textInput: (text, previousText) => {
|
|
90
|
+
return {
|
|
91
|
+
...(0, _base.baseSyntheticEvent)(),
|
|
92
|
+
nativeEvent: {
|
|
93
|
+
text,
|
|
94
|
+
previousText,
|
|
95
|
+
range: {
|
|
96
|
+
start: text.length,
|
|
97
|
+
end: text.length
|
|
98
|
+
},
|
|
99
|
+
target: 0
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
},
|
|
84
103
|
/**
|
|
85
104
|
* Experimental values:
|
|
86
105
|
* - iOS: `{"contentSize": {"height": 21.666666666666668, "width": 11.666666666666666}, "target": 75}`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-input.js","names":["_base","require","TextInputEventBuilder","exports","change","text","baseSyntheticEvent","nativeEvent","target","eventCount","keyPress","key","submitEditing","endEditing","selectionChange","start","end","selection","contentSizeChange","width","height","contentSize"],"sources":["../../../src/user-event/event-builder/text-input.ts"],"sourcesContent":["import { ContentSize } from '../utils/content-size';\nimport { TextRange } from '../utils/text-range';\nimport { baseSyntheticEvent } from './base';\n\nexport const TextInputEventBuilder = {\n /**\n * Experimental values:\n * - iOS: `{\"eventCount\": 4, \"target\": 75, \"text\": \"Test\"}`\n * - Android: `{\"eventCount\": 6, \"target\": 53, \"text\": \"Tes\"}`\n */\n change: (text: string) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { text, target: 0, eventCount: 0 },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"eventCount\": 3, \"key\": \"a\", \"target\": 75}`\n * - Android: `{\"key\": \"a\"}`\n */\n keyPress: (key: string) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { key },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"eventCount\": 4, \"target\": 75, \"text\": \"Test\"}`\n * - Android: `{\"target\": 53, \"text\": \"Test\"}`\n */\n submitEditing: (text: string) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { text, target: 0 },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"eventCount\": 4, \"target\": 75, \"text\": \"Test\"}`\n * - Android: `{\"target\": 53, \"text\": \"Test\"}`\n */\n endEditing: (text: string) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { text, target: 0 },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"selection\": {\"end\": 4, \"start\": 4}, \"target\": 75}`\n * - Android: `{\"selection\": {\"end\": 4, \"start\": 4}}`\n */\n selectionChange: ({ start, end }: TextRange) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { selection: { start, end } },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"contentSize\": {\"height\": 21.666666666666668, \"width\": 11.666666666666666}, \"target\": 75}`\n * - Android: `{\"contentSize\": {\"height\": 61.45454406738281, \"width\": 352.7272644042969}, \"target\": 53}`\n */\n contentSizeChange: ({ width, height }: ContentSize) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { contentSize: { width, height }, target: 0 },\n };\n },\n};\n"],"mappings":";;;;;;AAEA,IAAAA,KAAA,GAAAC,OAAA;AAEO,MAAMC,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,GAAG;EACnC;AACF;AACA;AACA;AACA;EACEE,MAAM,EAAGC,IAAY,IAAK;IACxB,OAAO;MACL,GAAG,IAAAC,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEF,IAAI;QAAEG,MAAM,EAAE,CAAC;QAAEC,UAAU,EAAE;MAAE;IAChD,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,QAAQ,EAAGC,GAAW,IAAK;IACzB,OAAO;MACL,GAAG,IAAAL,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEI;MAAI;IACrB,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,aAAa,EAAGP,IAAY,IAAK;IAC/B,OAAO;MACL,GAAG,IAAAC,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEF,IAAI;QAAEG,MAAM,EAAE;MAAE;IACjC,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEK,UAAU,EAAGR,IAAY,IAAK;IAC5B,OAAO;MACL,GAAG,IAAAC,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEF,IAAI;QAAEG,MAAM,EAAE;MAAE;IACjC,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEM,eAAe,EAAEA,CAAC;IAAEC,KAAK;IAAEC;EAAe,CAAC,KAAK;IAC9C,OAAO;MACL,GAAG,IAAAV,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEU,SAAS,EAAE;UAAEF,KAAK;UAAEC;QAAI;MAAE;IAC3C,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEE,iBAAiB,EAAEA,CAAC;IAAEC,KAAK;IAAEC;EAAoB,CAAC,KAAK;IACrD,OAAO;MACL,GAAG,
|
|
1
|
+
{"version":3,"file":"text-input.js","names":["_base","require","TextInputEventBuilder","exports","change","text","baseSyntheticEvent","nativeEvent","target","eventCount","keyPress","key","submitEditing","endEditing","selectionChange","start","end","selection","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';\nimport { baseSyntheticEvent } from './base';\n\nexport const TextInputEventBuilder = {\n /**\n * Experimental values:\n * - iOS: `{\"eventCount\": 4, \"target\": 75, \"text\": \"Test\"}`\n * - Android: `{\"eventCount\": 6, \"target\": 53, \"text\": \"Tes\"}`\n */\n change: (text: string) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { text, target: 0, eventCount: 0 },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"eventCount\": 3, \"key\": \"a\", \"target\": 75}`\n * - Android: `{\"key\": \"a\"}`\n */\n keyPress: (key: string) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { key },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"eventCount\": 4, \"target\": 75, \"text\": \"Test\"}`\n * - Android: `{\"target\": 53, \"text\": \"Test\"}`\n */\n submitEditing: (text: string) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { text, target: 0 },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"eventCount\": 4, \"target\": 75, \"text\": \"Test\"}`\n * - Android: `{\"target\": 53, \"text\": \"Test\"}`\n */\n endEditing: (text: string) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { text, target: 0 },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"selection\": {\"end\": 4, \"start\": 4}, \"target\": 75}`\n * - Android: `{\"selection\": {\"end\": 4, \"start\": 4}}`\n */\n selectionChange: ({ start, end }: TextRange) => {\n return {\n ...baseSyntheticEvent(),\n nativeEvent: { selection: { start, end } },\n };\n },\n\n /**\n * Experimental values:\n * - iOS: `{\"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 ...baseSyntheticEvent(),\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 ...baseSyntheticEvent(),\n nativeEvent: { contentSize: { width, height }, target: 0 },\n };\n },\n};\n"],"mappings":";;;;;;AAEA,IAAAA,KAAA,GAAAC,OAAA;AAEO,MAAMC,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,GAAG;EACnC;AACF;AACA;AACA;AACA;EACEE,MAAM,EAAGC,IAAY,IAAK;IACxB,OAAO;MACL,GAAG,IAAAC,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEF,IAAI;QAAEG,MAAM,EAAE,CAAC;QAAEC,UAAU,EAAE;MAAE;IAChD,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,QAAQ,EAAGC,GAAW,IAAK;IACzB,OAAO;MACL,GAAG,IAAAL,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEI;MAAI;IACrB,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,aAAa,EAAGP,IAAY,IAAK;IAC/B,OAAO;MACL,GAAG,IAAAC,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEF,IAAI;QAAEG,MAAM,EAAE;MAAE;IACjC,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEK,UAAU,EAAGR,IAAY,IAAK;IAC5B,OAAO;MACL,GAAG,IAAAC,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEF,IAAI;QAAEG,MAAM,EAAE;MAAE;IACjC,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEM,eAAe,EAAEA,CAAC;IAAEC,KAAK;IAAEC;EAAe,CAAC,KAAK;IAC9C,OAAO;MACL,GAAG,IAAAV,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEU,SAAS,EAAE;UAAEF,KAAK;UAAEC;QAAI;MAAE;IAC3C,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEE,SAAS,EAAEA,CAACb,IAAY,EAAEc,YAAoB,KAAK;IACjD,OAAO;MACL,GAAG,IAAAb,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QACXF,IAAI;QACJc,YAAY;QACZC,KAAK,EAAE;UAAEL,KAAK,EAAEV,IAAI,CAACgB,MAAM;UAAEL,GAAG,EAAEX,IAAI,CAACgB;QAAO,CAAC;QAC/Cb,MAAM,EAAE;MACV;IACF,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEc,iBAAiB,EAAEA,CAAC;IAAEC,KAAK;IAAEC;EAAoB,CAAC,KAAK;IACrD,OAAO;MACL,GAAG,IAAAlB,wBAAkB,EAAC,CAAC;MACvBC,WAAW,EAAE;QAAEkB,WAAW,EAAE;UAAEF,KAAK;UAAEC;QAAO,CAAC;QAAEhB,MAAM,EAAE;MAAE;IAC3D,CAAC;EACH;AACF,CAAC","ignoreList":[]}
|
|
@@ -10,6 +10,5 @@ export declare const userEvent: {
|
|
|
10
10
|
longPress: (element: ReactTestInstance, options?: PressOptions) => Promise<void>;
|
|
11
11
|
type: (element: ReactTestInstance, text: string, options?: TypeOptions) => Promise<void>;
|
|
12
12
|
clear: (element: ReactTestInstance) => Promise<void>;
|
|
13
|
-
paste: (element: ReactTestInstance, text: string) => Promise<void>;
|
|
14
13
|
scrollTo: (element: ReactTestInstance, options: ScrollToOptions) => Promise<void>;
|
|
15
14
|
};
|
|
@@ -18,7 +18,6 @@ const userEvent = exports.userEvent = {
|
|
|
18
18
|
longPress: (element, options) => (0, _setup.setup)().longPress(element, options),
|
|
19
19
|
type: (element, text, options) => (0, _setup.setup)().type(element, text, options),
|
|
20
20
|
clear: element => (0, _setup.setup)().clear(element),
|
|
21
|
-
paste: (element, text) => (0, _setup.setup)().paste(element, text),
|
|
22
21
|
scrollTo: (element, options) => (0, _setup.setup)().scrollTo(element, options)
|
|
23
22
|
};
|
|
24
23
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_setup","require","userEvent","exports","setup","press","element","longPress","options","type","text","clear","
|
|
1
|
+
{"version":3,"file":"index.js","names":["_setup","require","userEvent","exports","setup","press","element","longPress","options","type","text","clear","scrollTo"],"sources":["../../src/user-event/index.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport { setup } from './setup';\nimport { PressOptions } from './press';\nimport { TypeOptions } from './type';\nimport { ScrollToOptions } from './scroll';\n\nexport { UserEventConfig } from './setup';\n\nexport const userEvent = {\n setup,\n\n // Direct access for User Event v13 compatibility\n press: (element: ReactTestInstance) => setup().press(element),\n longPress: (element: ReactTestInstance, options?: PressOptions) =>\n setup().longPress(element, options),\n type: (element: ReactTestInstance, text: string, options?: TypeOptions) =>\n setup().type(element, text, options),\n clear: (element: ReactTestInstance) => setup().clear(element),\n scrollTo: (element: ReactTestInstance, options: ScrollToOptions) =>\n setup().scrollTo(element, options),\n};\n"],"mappings":";;;;;;;;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAOO,MAAMC,SAAS,GAAAC,OAAA,CAAAD,SAAA,GAAG;EACvBE,KAAK,EAALA,YAAK;EAEL;EACAC,KAAK,EAAGC,OAA0B,IAAK,IAAAF,YAAK,EAAC,CAAC,CAACC,KAAK,CAACC,OAAO,CAAC;EAC7DC,SAAS,EAAEA,CAACD,OAA0B,EAAEE,OAAsB,KAC5D,IAAAJ,YAAK,EAAC,CAAC,CAACG,SAAS,CAACD,OAAO,EAAEE,OAAO,CAAC;EACrCC,IAAI,EAAEA,CAACH,OAA0B,EAAEI,IAAY,EAAEF,OAAqB,KACpE,IAAAJ,YAAK,EAAC,CAAC,CAACK,IAAI,CAACH,OAAO,EAAEI,IAAI,EAAEF,OAAO,CAAC;EACtCG,KAAK,EAAGL,OAA0B,IAAK,IAAAF,YAAK,EAAC,CAAC,CAACO,KAAK,CAACL,OAAO,CAAC;EAC7DM,QAAQ,EAAEA,CAACN,OAA0B,EAAEE,OAAwB,KAC7D,IAAAJ,YAAK,EAAC,CAAC,CAACQ,QAAQ,CAACN,OAAO,EAAEE,OAAO;AACrC,CAAC","ignoreList":[]}
|
|
@@ -79,18 +79,6 @@ export interface UserEventInstance {
|
|
|
79
79
|
* @param element TextInput element to clear
|
|
80
80
|
*/
|
|
81
81
|
clear: (element: ReactTestInstance) => Promise<void>;
|
|
82
|
-
/**
|
|
83
|
-
* Simulate user pasting the text to a given `TextInput` element.
|
|
84
|
-
*
|
|
85
|
-
* This method will simulate:
|
|
86
|
-
* 1. entering TextInput
|
|
87
|
-
* 2. selecting all text
|
|
88
|
-
* 3. paste the text
|
|
89
|
-
* 4. leaving TextInput
|
|
90
|
-
*
|
|
91
|
-
* @param element TextInput element to paste to
|
|
92
|
-
*/
|
|
93
|
-
paste: (element: ReactTestInstance, text: string) => Promise<void>;
|
|
94
82
|
/**
|
|
95
83
|
* Simlate user scorlling a ScrollView element.
|
|
96
84
|
*
|
|
@@ -7,7 +7,6 @@ exports.setup = setup;
|
|
|
7
7
|
var _timers = require("../../helpers/timers");
|
|
8
8
|
var _wrapAsync = require("../../helpers/wrap-async");
|
|
9
9
|
var _clear = require("../clear");
|
|
10
|
-
var _paste = require("../paste");
|
|
11
10
|
var _press = require("../press");
|
|
12
11
|
var _scroll = require("../scroll");
|
|
13
12
|
var _type = require("../type");
|
|
@@ -68,7 +67,6 @@ function createInstance(config) {
|
|
|
68
67
|
longPress: wrapAndBindImpl(instance, _press.longPress),
|
|
69
68
|
type: wrapAndBindImpl(instance, _type.type),
|
|
70
69
|
clear: wrapAndBindImpl(instance, _clear.clear),
|
|
71
|
-
paste: wrapAndBindImpl(instance, _paste.paste),
|
|
72
70
|
scrollTo: wrapAndBindImpl(instance, _scroll.scrollTo)
|
|
73
71
|
};
|
|
74
72
|
Object.assign(instance, api);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","names":["_timers","require","_wrapAsync","_clear","
|
|
1
|
+
{"version":3,"file":"setup.js","names":["_timers","require","_wrapAsync","_clear","_press","_scroll","_type","_utils","universalJestAdvanceTimersBy","ms","jestFakeTimersAreEnabled","jest","advanceTimersByTime","Promise","resolve","defaultOptions","delay","advanceTimers","setup","options","config","createConfig","instance","createInstance","api","press","wrapAndBindImpl","longPress","type","clear","scrollTo","Object","assign","impl","method","args","wrapAsync","apply","then","result","wait","defineProperty","get","name"],"sources":["../../../src/user-event/setup/setup.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport { jestFakeTimersAreEnabled } from '../../helpers/timers';\nimport { wrapAsync } from '../../helpers/wrap-async';\nimport { clear } from '../clear';\nimport { PressOptions, press, longPress } from '../press';\nimport { ScrollToOptions, scrollTo } from '../scroll';\nimport { TypeOptions, type } from '../type';\nimport { wait } from '../utils';\n\nexport interface UserEventSetupOptions {\n /**\n * Between some subsequent inputs like typing a series of characters\n * the code execution is delayed per `setTimeout` for (at least) `delay` seconds.\n * This moves the next changes at least to next macro task\n * and allows other (asynchronous) code to run between events.\n *\n * `null` prevents `setTimeout` from being called.\n *\n * @default 0\n */\n delay?: number;\n\n /**\n * Function to be called to advance fake timers. Setting it is necessary for\n * fake timers to work.\n *\n * @example jest.advanceTimersByTime\n */\n advanceTimers?: (delay: number) => Promise<void> | void;\n}\n\n/**\n * This functions allow wait to work correctly under both real and fake Jest timers.\n */\nfunction universalJestAdvanceTimersBy(ms: number) {\n if (jestFakeTimersAreEnabled()) {\n return jest.advanceTimersByTime(ms);\n } else {\n return Promise.resolve();\n }\n}\n\nconst defaultOptions: Required<UserEventSetupOptions> = {\n delay: 0,\n advanceTimers: universalJestAdvanceTimersBy,\n};\n\n/**\n * Creates a new instance of user event instance with the given options.\n *\n * @param options\n * @returns UserEvent instance\n */\nexport function setup(options?: UserEventSetupOptions) {\n const config = createConfig(options);\n const instance = createInstance(config);\n return instance;\n}\n\n/**\n * Options affecting all user event interactions.\n *\n * @param delay between some subsequent inputs like typing a series of characters\n * @param advanceTimers function to be called to advance fake timers\n */\nexport interface UserEventConfig {\n delay: number;\n advanceTimers: (delay: number) => Promise<void> | void;\n}\n\nfunction createConfig(options?: UserEventSetupOptions): UserEventConfig {\n return {\n ...defaultOptions,\n ...options,\n };\n}\n\n/**\n * UserEvent instance used to invoke user interaction functions.\n */\nexport interface UserEventInstance {\n config: UserEventConfig;\n\n press: (element: ReactTestInstance) => Promise<void>;\n longPress: (element: ReactTestInstance, options?: PressOptions) => Promise<void>;\n\n /**\n * Simulate user pressing on a given `TextInput` element and typing given text.\n *\n * This method will trigger the events for each character of the text:\n * `keyPress`, `change`, `changeText`, `endEditing`, etc.\n *\n * It will also trigger events connected with entering and leaving the text\n * input.\n *\n * The exact events sent depend on the props of the TextInput (`editable`,\n * `multiline`, value, defaultValue, etc) and passed options.\n *\n * @param element TextInput element to type on\n * @param text Text to type\n * @param options Options affecting typing behavior:\n * - `skipPress` - if true, `pressIn` and `pressOut` events will not be\n * triggered.\n * - `submitEditing` - if true, `submitEditing` event will be triggered after\n * typing the text.\n */\n type: (element: ReactTestInstance, text: string, options?: TypeOptions) => Promise<void>;\n\n /**\n * Simulate user clearing the text of a given `TextInput` element.\n *\n * This method will simulate:\n * 1. entering TextInput\n * 2. selecting all text\n * 3. pressing backspace to delete all text\n * 4. leaving TextInput\n *\n * @param element TextInput element to clear\n */\n clear: (element: ReactTestInstance) => Promise<void>;\n\n /**\n * Simlate user scorlling a ScrollView element.\n *\n * @param element ScrollView element\n * @returns\n */\n scrollTo: (element: ReactTestInstance, options: ScrollToOptions) => Promise<void>;\n}\n\nfunction createInstance(config: UserEventConfig): UserEventInstance {\n const instance = {\n config,\n } as UserEventInstance;\n\n // Bind interactions to given User Event instance.\n const api = {\n press: wrapAndBindImpl(instance, press),\n longPress: wrapAndBindImpl(instance, longPress),\n type: wrapAndBindImpl(instance, type),\n clear: wrapAndBindImpl(instance, clear),\n scrollTo: wrapAndBindImpl(instance, scrollTo),\n };\n\n Object.assign(instance, api);\n return instance;\n}\n\n/**\n * Wraps user interaction with `wrapAsync` (temporarily disable `act` environment while\n * calling & resolving the async callback, then flush the microtask queue)\n *\n * This implementation is sourced from `testing-library/user-event`\n * @see https://github.com/testing-library/user-event/blob/7a305dee9ab833d6f338d567fc2e862b4838b76a/src/setup/setup.ts#L121\n */\nfunction wrapAndBindImpl<\n Args extends any[],\n Impl extends (this: UserEventInstance, ...args: Args) => Promise<unknown>,\n>(instance: UserEventInstance, impl: Impl) {\n function method(...args: Args) {\n return wrapAsync(() =>\n // eslint-disable-next-line promise/prefer-await-to-then\n impl.apply(instance, args).then(async (result) => {\n await wait(instance.config);\n return result;\n }),\n );\n }\n\n // Copy implementation name to the returned function\n Object.defineProperty(method, 'name', { get: () => impl.name });\n\n return method as Impl;\n}\n"],"mappings":";;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,KAAA,GAAAL,OAAA;AACA,IAAAM,MAAA,GAAAN,OAAA;AAwBA;AACA;AACA;AACA,SAASO,4BAA4BA,CAACC,EAAU,EAAE;EAChD,IAAI,IAAAC,gCAAwB,EAAC,CAAC,EAAE;IAC9B,OAAOC,IAAI,CAACC,mBAAmB,CAACH,EAAE,CAAC;EACrC,CAAC,MAAM;IACL,OAAOI,OAAO,CAACC,OAAO,CAAC,CAAC;EAC1B;AACF;AAEA,MAAMC,cAA+C,GAAG;EACtDC,KAAK,EAAE,CAAC;EACRC,aAAa,EAAET;AACjB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACO,SAASU,KAAKA,CAACC,OAA+B,EAAE;EACrD,MAAMC,MAAM,GAAGC,YAAY,CAACF,OAAO,CAAC;EACpC,MAAMG,QAAQ,GAAGC,cAAc,CAACH,MAAM,CAAC;EACvC,OAAOE,QAAQ;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAMA,SAASD,YAAYA,CAACF,OAA+B,EAAmB;EACtE,OAAO;IACL,GAAGJ,cAAc;IACjB,GAAGI;EACL,CAAC;AACH;;AAEA;AACA;AACA;;AAmDA,SAASI,cAAcA,CAACH,MAAuB,EAAqB;EAClE,MAAME,QAAQ,GAAG;IACfF;EACF,CAAsB;;EAEtB;EACA,MAAMI,GAAG,GAAG;IACVC,KAAK,EAAEC,eAAe,CAACJ,QAAQ,EAAEG,YAAK,CAAC;IACvCE,SAAS,EAAED,eAAe,CAACJ,QAAQ,EAAEK,gBAAS,CAAC;IAC/CC,IAAI,EAAEF,eAAe,CAACJ,QAAQ,EAAEM,UAAI,CAAC;IACrCC,KAAK,EAAEH,eAAe,CAACJ,QAAQ,EAAEO,YAAK,CAAC;IACvCC,QAAQ,EAAEJ,eAAe,CAACJ,QAAQ,EAAEQ,gBAAQ;EAC9C,CAAC;EAEDC,MAAM,CAACC,MAAM,CAACV,QAAQ,EAAEE,GAAG,CAAC;EAC5B,OAAOF,QAAQ;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASI,eAAeA,CAGtBJ,QAA2B,EAAEW,IAAU,EAAE;EACzC,SAASC,MAAMA,CAAC,GAAGC,IAAU,EAAE;IAC7B,OAAO,IAAAC,oBAAS,EAAC;IACf;IACAH,IAAI,CAACI,KAAK,CAACf,QAAQ,EAAEa,IAAI,CAAC,CAACG,IAAI,CAAC,MAAOC,MAAM,IAAK;MAChD,MAAM,IAAAC,WAAI,EAAClB,QAAQ,CAACF,MAAM,CAAC;MAC3B,OAAOmB,MAAM;IACf,CAAC,CACH,CAAC;EACH;;EAEA;EACAR,MAAM,CAACU,cAAc,CAACP,MAAM,EAAE,MAAM,EAAE;IAAEQ,GAAG,EAAEA,CAAA,KAAMT,IAAI,CAACU;EAAK,CAAC,CAAC;EAE/D,OAAOT,MAAM;AACf","ignoreList":[]}
|
|
@@ -5,11 +5,4 @@ export interface TypeOptions {
|
|
|
5
5
|
submitEditing?: boolean;
|
|
6
6
|
}
|
|
7
7
|
export declare function type(this: UserEventInstance, element: ReactTestInstance, text: string, options?: TypeOptions): Promise<void>;
|
|
8
|
-
|
|
9
|
-
config: UserEventConfig;
|
|
10
|
-
key: string;
|
|
11
|
-
text: string;
|
|
12
|
-
isAccepted?: boolean;
|
|
13
|
-
};
|
|
14
|
-
export declare function emitTypingEvents(element: ReactTestInstance, { config, key, text, isAccepted }: EmitTypingEventsContext): Promise<void>;
|
|
15
|
-
export {};
|
|
8
|
+
export declare function emitTypingEvents(config: UserEventConfig, element: ReactTestInstance, key: string, currentText: string, previousText: string): Promise<void>;
|
|
@@ -33,15 +33,8 @@ async function type(element, text, options) {
|
|
|
33
33
|
let currentText = element.props.value ?? element.props.defaultValue ?? '';
|
|
34
34
|
for (const key of keys) {
|
|
35
35
|
const previousText = element.props.value ?? currentText;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
currentText = isAccepted ? proposedText : previousText;
|
|
39
|
-
await emitTypingEvents(element, {
|
|
40
|
-
config: this.config,
|
|
41
|
-
key,
|
|
42
|
-
text: currentText,
|
|
43
|
-
isAccepted
|
|
44
|
-
});
|
|
36
|
+
currentText = applyKey(previousText, key);
|
|
37
|
+
await emitTypingEvents(this.config, element, key, currentText, previousText);
|
|
45
38
|
}
|
|
46
39
|
const finalText = element.props.value ?? currentText;
|
|
47
40
|
await (0, _utils.wait)(this.config);
|
|
@@ -51,34 +44,28 @@ async function type(element, text, options) {
|
|
|
51
44
|
(0, _utils.dispatchEvent)(element, 'endEditing', _eventBuilder.EventBuilder.TextInput.endEditing(finalText));
|
|
52
45
|
(0, _utils.dispatchEvent)(element, 'blur', _eventBuilder.EventBuilder.Common.blur());
|
|
53
46
|
}
|
|
54
|
-
async function emitTypingEvents(element, {
|
|
55
|
-
config,
|
|
56
|
-
key,
|
|
57
|
-
text,
|
|
58
|
-
isAccepted
|
|
59
|
-
}) {
|
|
47
|
+
async function emitTypingEvents(config, element, key, currentText, previousText) {
|
|
60
48
|
const isMultiline = element.props.multiline === true;
|
|
61
49
|
await (0, _utils.wait)(config);
|
|
62
50
|
(0, _utils.dispatchEvent)(element, 'keyPress', _eventBuilder.EventBuilder.TextInput.keyPress(key));
|
|
63
51
|
|
|
64
|
-
//
|
|
65
|
-
//
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
return;
|
|
52
|
+
// According to the docs only multiline TextInput emits textInput event
|
|
53
|
+
// @see: https://github.com/facebook/react-native/blob/42a2898617da1d7a98ef574a5b9e500681c8f738/packages/react-native/Libraries/Components/TextInput/TextInput.d.ts#L754
|
|
54
|
+
if (isMultiline) {
|
|
55
|
+
(0, _utils.dispatchEvent)(element, 'textInput', _eventBuilder.EventBuilder.TextInput.textInput(currentText, previousText));
|
|
69
56
|
}
|
|
70
|
-
(0, _utils.dispatchEvent)(element, 'change', _eventBuilder.EventBuilder.TextInput.change(
|
|
71
|
-
(0, _utils.dispatchEvent)(element, 'changeText',
|
|
57
|
+
(0, _utils.dispatchEvent)(element, 'change', _eventBuilder.EventBuilder.TextInput.change(currentText));
|
|
58
|
+
(0, _utils.dispatchEvent)(element, 'changeText', currentText);
|
|
72
59
|
const selectionRange = {
|
|
73
|
-
start:
|
|
74
|
-
end:
|
|
60
|
+
start: currentText.length,
|
|
61
|
+
end: currentText.length
|
|
75
62
|
};
|
|
76
63
|
(0, _utils.dispatchEvent)(element, 'selectionChange', _eventBuilder.EventBuilder.TextInput.selectionChange(selectionRange));
|
|
77
64
|
|
|
78
65
|
// According to the docs only multiline TextInput emits contentSizeChange event
|
|
79
66
|
// @see: https://reactnative.dev/docs/textinput#oncontentsizechange
|
|
80
67
|
if (isMultiline) {
|
|
81
|
-
const contentSize = (0, _utils.getTextContentSize)(
|
|
68
|
+
const contentSize = (0, _utils.getTextContentSize)(currentText);
|
|
82
69
|
(0, _utils.dispatchEvent)(element, 'contentSizeChange', _eventBuilder.EventBuilder.TextInput.contentSizeChange(contentSize));
|
|
83
70
|
}
|
|
84
71
|
}
|
|
@@ -91,8 +78,4 @@ function applyKey(text, key) {
|
|
|
91
78
|
}
|
|
92
79
|
return text + key;
|
|
93
80
|
}
|
|
94
|
-
function isTextChangeAccepted(element, text) {
|
|
95
|
-
const maxLength = element.props.maxLength;
|
|
96
|
-
return maxLength === undefined || text.length <= maxLength;
|
|
97
|
-
}
|
|
98
81
|
//# sourceMappingURL=type.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.js","names":["_hostComponentNames","require","_eventBuilder","_errors","_textInput","_pointerEvents","_utils","_parseKeys","type","element","text","options","isHostTextInput","ErrorWithStack","isTextInputEditable","isPointerEventEnabled","keys","parseKeys","skipPress","dispatchEvent","EventBuilder","Common","touch","focus","wait","config","currentText","props","value","defaultValue","key","previousText","
|
|
1
|
+
{"version":3,"file":"type.js","names":["_hostComponentNames","require","_eventBuilder","_errors","_textInput","_pointerEvents","_utils","_parseKeys","type","element","text","options","isHostTextInput","ErrorWithStack","isTextInputEditable","isPointerEventEnabled","keys","parseKeys","skipPress","dispatchEvent","EventBuilder","Common","touch","focus","wait","config","currentText","props","value","defaultValue","key","previousText","applyKey","emitTypingEvents","finalText","submitEditing","TextInput","endEditing","blur","isMultiline","multiline","keyPress","textInput","change","selectionRange","start","length","end","selectionChange","contentSize","getTextContentSize","contentSizeChange","slice"],"sources":["../../../src/user-event/type/type.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport { isHostTextInput } from '../../helpers/host-component-names';\nimport { EventBuilder } from '../event-builder';\nimport { ErrorWithStack } from '../../helpers/errors';\nimport { isTextInputEditable } from '../../helpers/text-input';\nimport { isPointerEventEnabled } from '../../helpers/pointer-events';\nimport { UserEventConfig, UserEventInstance } from '../setup';\nimport { dispatchEvent, wait, getTextContentSize } from '../utils';\nimport { parseKeys } from './parse-keys';\n\nexport interface TypeOptions {\n skipPress?: boolean;\n submitEditing?: boolean;\n}\n\nexport async function type(\n this: UserEventInstance,\n element: ReactTestInstance,\n text: string,\n options?: TypeOptions,\n): Promise<void> {\n if (!isHostTextInput(element)) {\n throw new ErrorWithStack(\n `type() works only with host \"TextInput\" elements. Passed element has type \"${element.type}\".`,\n type,\n );\n }\n\n // Skip events if the element is disabled\n if (!isTextInputEditable(element) || !isPointerEventEnabled(element)) {\n return;\n }\n\n const keys = parseKeys(text);\n\n if (!options?.skipPress) {\n dispatchEvent(element, 'pressIn', EventBuilder.Common.touch());\n }\n\n dispatchEvent(element, 'focus', EventBuilder.Common.focus());\n\n if (!options?.skipPress) {\n await wait(this.config);\n dispatchEvent(element, 'pressOut', EventBuilder.Common.touch());\n }\n\n let currentText = element.props.value ?? element.props.defaultValue ?? '';\n for (const key of keys) {\n const previousText = element.props.value ?? currentText;\n currentText = applyKey(previousText, key);\n\n await emitTypingEvents(this.config, element, key, currentText, previousText);\n }\n\n const finalText = element.props.value ?? currentText;\n await wait(this.config);\n\n if (options?.submitEditing) {\n dispatchEvent(element, 'submitEditing', EventBuilder.TextInput.submitEditing(finalText));\n }\n\n dispatchEvent(element, 'endEditing', EventBuilder.TextInput.endEditing(finalText));\n\n dispatchEvent(element, 'blur', EventBuilder.Common.blur());\n}\n\nexport async function emitTypingEvents(\n config: UserEventConfig,\n element: ReactTestInstance,\n key: string,\n currentText: string,\n previousText: string,\n) {\n const isMultiline = element.props.multiline === true;\n\n await wait(config);\n dispatchEvent(element, 'keyPress', EventBuilder.TextInput.keyPress(key));\n\n // According to the docs only multiline TextInput emits textInput event\n // @see: https://github.com/facebook/react-native/blob/42a2898617da1d7a98ef574a5b9e500681c8f738/packages/react-native/Libraries/Components/TextInput/TextInput.d.ts#L754\n if (isMultiline) {\n dispatchEvent(\n element,\n 'textInput',\n EventBuilder.TextInput.textInput(currentText, previousText),\n );\n }\n\n dispatchEvent(element, 'change', EventBuilder.TextInput.change(currentText));\n dispatchEvent(element, 'changeText', currentText);\n\n const selectionRange = {\n start: currentText.length,\n end: currentText.length,\n };\n dispatchEvent(element, 'selectionChange', EventBuilder.TextInput.selectionChange(selectionRange));\n\n // According to the docs only multiline TextInput emits contentSizeChange event\n // @see: https://reactnative.dev/docs/textinput#oncontentsizechange\n if (isMultiline) {\n const contentSize = getTextContentSize(currentText);\n dispatchEvent(\n element,\n 'contentSizeChange',\n EventBuilder.TextInput.contentSizeChange(contentSize),\n );\n }\n}\n\nfunction applyKey(text: string, key: string) {\n if (key === 'Enter') {\n return `${text}\\n`;\n }\n\n if (key === 'Backspace') {\n return text.slice(0, -1);\n }\n\n return text + key;\n}\n"],"mappings":";;;;;;;AACA,IAAAA,mBAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,cAAA,GAAAJ,OAAA;AAEA,IAAAK,MAAA,GAAAL,OAAA;AACA,IAAAM,UAAA,GAAAN,OAAA;AAOO,eAAeO,IAAIA,CAExBC,OAA0B,EAC1BC,IAAY,EACZC,OAAqB,EACN;EACf,IAAI,CAAC,IAAAC,mCAAe,EAACH,OAAO,CAAC,EAAE;IAC7B,MAAM,IAAII,sBAAc,CACtB,8EAA8EJ,OAAO,CAACD,IAAI,IAAI,EAC9FA,IACF,CAAC;EACH;;EAEA;EACA,IAAI,CAAC,IAAAM,8BAAmB,EAACL,OAAO,CAAC,IAAI,CAAC,IAAAM,oCAAqB,EAACN,OAAO,CAAC,EAAE;IACpE;EACF;EAEA,MAAMO,IAAI,GAAG,IAAAC,oBAAS,EAACP,IAAI,CAAC;EAE5B,IAAI,CAACC,OAAO,EAAEO,SAAS,EAAE;IACvB,IAAAC,oBAAa,EAACV,OAAO,EAAE,SAAS,EAAEW,0BAAY,CAACC,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;EAChE;EAEA,IAAAH,oBAAa,EAACV,OAAO,EAAE,OAAO,EAAEW,0BAAY,CAACC,MAAM,CAACE,KAAK,CAAC,CAAC,CAAC;EAE5D,IAAI,CAACZ,OAAO,EAAEO,SAAS,EAAE;IACvB,MAAM,IAAAM,WAAI,EAAC,IAAI,CAACC,MAAM,CAAC;IACvB,IAAAN,oBAAa,EAACV,OAAO,EAAE,UAAU,EAAEW,0BAAY,CAACC,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;EACjE;EAEA,IAAII,WAAW,GAAGjB,OAAO,CAACkB,KAAK,CAACC,KAAK,IAAInB,OAAO,CAACkB,KAAK,CAACE,YAAY,IAAI,EAAE;EACzE,KAAK,MAAMC,GAAG,IAAId,IAAI,EAAE;IACtB,MAAMe,YAAY,GAAGtB,OAAO,CAACkB,KAAK,CAACC,KAAK,IAAIF,WAAW;IACvDA,WAAW,GAAGM,QAAQ,CAACD,YAAY,EAAED,GAAG,CAAC;IAEzC,MAAMG,gBAAgB,CAAC,IAAI,CAACR,MAAM,EAAEhB,OAAO,EAAEqB,GAAG,EAAEJ,WAAW,EAAEK,YAAY,CAAC;EAC9E;EAEA,MAAMG,SAAS,GAAGzB,OAAO,CAACkB,KAAK,CAACC,KAAK,IAAIF,WAAW;EACpD,MAAM,IAAAF,WAAI,EAAC,IAAI,CAACC,MAAM,CAAC;EAEvB,IAAId,OAAO,EAAEwB,aAAa,EAAE;IAC1B,IAAAhB,oBAAa,EAACV,OAAO,EAAE,eAAe,EAAEW,0BAAY,CAACgB,SAAS,CAACD,aAAa,CAACD,SAAS,CAAC,CAAC;EAC1F;EAEA,IAAAf,oBAAa,EAACV,OAAO,EAAE,YAAY,EAAEW,0BAAY,CAACgB,SAAS,CAACC,UAAU,CAACH,SAAS,CAAC,CAAC;EAElF,IAAAf,oBAAa,EAACV,OAAO,EAAE,MAAM,EAAEW,0BAAY,CAACC,MAAM,CAACiB,IAAI,CAAC,CAAC,CAAC;AAC5D;AAEO,eAAeL,gBAAgBA,CACpCR,MAAuB,EACvBhB,OAA0B,EAC1BqB,GAAW,EACXJ,WAAmB,EACnBK,YAAoB,EACpB;EACA,MAAMQ,WAAW,GAAG9B,OAAO,CAACkB,KAAK,CAACa,SAAS,KAAK,IAAI;EAEpD,MAAM,IAAAhB,WAAI,EAACC,MAAM,CAAC;EAClB,IAAAN,oBAAa,EAACV,OAAO,EAAE,UAAU,EAAEW,0BAAY,CAACgB,SAAS,CAACK,QAAQ,CAACX,GAAG,CAAC,CAAC;;EAExE;EACA;EACA,IAAIS,WAAW,EAAE;IACf,IAAApB,oBAAa,EACXV,OAAO,EACP,WAAW,EACXW,0BAAY,CAACgB,SAAS,CAACM,SAAS,CAAChB,WAAW,EAAEK,YAAY,CAC5D,CAAC;EACH;EAEA,IAAAZ,oBAAa,EAACV,OAAO,EAAE,QAAQ,EAAEW,0BAAY,CAACgB,SAAS,CAACO,MAAM,CAACjB,WAAW,CAAC,CAAC;EAC5E,IAAAP,oBAAa,EAACV,OAAO,EAAE,YAAY,EAAEiB,WAAW,CAAC;EAEjD,MAAMkB,cAAc,GAAG;IACrBC,KAAK,EAAEnB,WAAW,CAACoB,MAAM;IACzBC,GAAG,EAAErB,WAAW,CAACoB;EACnB,CAAC;EACD,IAAA3B,oBAAa,EAACV,OAAO,EAAE,iBAAiB,EAAEW,0BAAY,CAACgB,SAAS,CAACY,eAAe,CAACJ,cAAc,CAAC,CAAC;;EAEjG;EACA;EACA,IAAIL,WAAW,EAAE;IACf,MAAMU,WAAW,GAAG,IAAAC,yBAAkB,EAACxB,WAAW,CAAC;IACnD,IAAAP,oBAAa,EACXV,OAAO,EACP,mBAAmB,EACnBW,0BAAY,CAACgB,SAAS,CAACe,iBAAiB,CAACF,WAAW,CACtD,CAAC;EACH;AACF;AAEA,SAASjB,QAAQA,CAACtB,IAAY,EAAEoB,GAAW,EAAE;EAC3C,IAAIA,GAAG,KAAK,OAAO,EAAE;IACnB,OAAO,GAAGpB,IAAI,IAAI;EACpB;EAEA,IAAIoB,GAAG,KAAK,WAAW,EAAE;IACvB,OAAOpB,IAAI,CAAC0C,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAC1B;EAEA,OAAO1C,IAAI,GAAGoB,GAAG;AACnB","ignoreList":[]}
|
package/build/within.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
1
2
|
import type { ReactTestInstance } from 'react-test-renderer';
|
|
2
3
|
export declare function within(instance: ReactTestInstance): {
|
|
3
4
|
UNSAFE_getByProps: (props: {
|
|
@@ -5,17 +6,17 @@ export declare function within(instance: ReactTestInstance): {
|
|
|
5
6
|
}) => ReactTestInstance;
|
|
6
7
|
UNSAFE_getAllByProps: (props: {
|
|
7
8
|
[key: string]: any;
|
|
8
|
-
}) =>
|
|
9
|
+
}) => ReactTestInstance[];
|
|
9
10
|
UNSAFE_queryByProps: (props: {
|
|
10
11
|
[key: string]: any;
|
|
11
12
|
}) => ReactTestInstance | null;
|
|
12
13
|
UNSAFE_queryAllByProps: (props: {
|
|
13
14
|
[key: string]: any;
|
|
14
|
-
}) =>
|
|
15
|
+
}) => ReactTestInstance[];
|
|
15
16
|
UNSAFE_getByType: <P>(type: import("react").ComponentType<P>) => ReactTestInstance;
|
|
16
|
-
UNSAFE_getAllByType: <
|
|
17
|
-
UNSAFE_queryByType: <
|
|
18
|
-
UNSAFE_queryAllByType: <
|
|
17
|
+
UNSAFE_getAllByType: <P_1>(type: import("react").ComponentType<P_1>) => ReactTestInstance[];
|
|
18
|
+
UNSAFE_queryByType: <P_2>(type: import("react").ComponentType<P_2>) => ReactTestInstance | null;
|
|
19
|
+
UNSAFE_queryAllByType: <P_3>(type: import("react").ComponentType<P_3>) => ReactTestInstance[];
|
|
19
20
|
getByA11yValue: import("./queries/make-queries").GetByQuery<import("./helpers/matchers/match-accessibility-value").AccessibilityValueMatcher, import("./queries/options").CommonQueryOptions>;
|
|
20
21
|
getAllByA11yValue: import("./queries/make-queries").GetAllByQuery<import("./helpers/matchers/match-accessibility-value").AccessibilityValueMatcher, import("./queries/options").CommonQueryOptions>;
|
|
21
22
|
queryByA11yValue: import("./queries/make-queries").QueryByQuery<import("./helpers/matchers/match-accessibility-value").AccessibilityValueMatcher, import("./queries/options").CommonQueryOptions>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@testing-library/react-native",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.7.0",
|
|
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",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"@babel/preset-flow": "^7.24.7",
|
|
71
71
|
"@babel/preset-react": "^7.24.7",
|
|
72
72
|
"@babel/preset-typescript": "^7.24.7",
|
|
73
|
-
"@callstack/eslint-config": "^
|
|
73
|
+
"@callstack/eslint-config": "^15.0.0",
|
|
74
74
|
"@release-it/conventional-changelog": "^8.0.1",
|
|
75
75
|
"@relmify/jest-serializer-strip-ansi": "^1.0.2",
|
|
76
76
|
"@types/jest": "^29.5.12",
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.paste = paste;
|
|
7
|
-
var _errors = require("../helpers/errors");
|
|
8
|
-
var _hostComponentNames = require("../helpers/host-component-names");
|
|
9
|
-
var _pointerEvents = require("../helpers/pointer-events");
|
|
10
|
-
var _textInput = require("../helpers/text-input");
|
|
11
|
-
var _eventBuilder = require("./event-builder");
|
|
12
|
-
var _utils = require("./utils");
|
|
13
|
-
async function paste(element, text) {
|
|
14
|
-
if (!(0, _hostComponentNames.isHostTextInput)(element)) {
|
|
15
|
-
throw new _errors.ErrorWithStack(`paste() only supports host "TextInput" elements. Passed element has type: "${element.type}".`, paste);
|
|
16
|
-
}
|
|
17
|
-
if (!(0, _textInput.isTextInputEditable)(element) || !(0, _pointerEvents.isPointerEventEnabled)(element)) {
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// 1. Enter element
|
|
22
|
-
(0, _utils.dispatchEvent)(element, 'focus', _eventBuilder.EventBuilder.Common.focus());
|
|
23
|
-
|
|
24
|
-
// 2. Select all
|
|
25
|
-
const textToClear = element.props.value ?? element.props.defaultValue ?? '';
|
|
26
|
-
const rangeToClear = {
|
|
27
|
-
start: 0,
|
|
28
|
-
end: textToClear.length
|
|
29
|
-
};
|
|
30
|
-
(0, _utils.dispatchEvent)(element, 'selectionChange', _eventBuilder.EventBuilder.TextInput.selectionChange(rangeToClear));
|
|
31
|
-
|
|
32
|
-
// 3. Paste the text
|
|
33
|
-
(0, _utils.dispatchEvent)(element, 'change', _eventBuilder.EventBuilder.TextInput.change(text));
|
|
34
|
-
(0, _utils.dispatchEvent)(element, 'changeText', text);
|
|
35
|
-
const rangeAfter = {
|
|
36
|
-
start: text.length,
|
|
37
|
-
end: text.length
|
|
38
|
-
};
|
|
39
|
-
(0, _utils.dispatchEvent)(element, 'selectionChange', _eventBuilder.EventBuilder.TextInput.selectionChange(rangeAfter));
|
|
40
|
-
|
|
41
|
-
// According to the docs only multiline TextInput emits contentSizeChange event
|
|
42
|
-
// @see: https://reactnative.dev/docs/textinput#oncontentsizechange
|
|
43
|
-
const isMultiline = element.props.multiline === true;
|
|
44
|
-
if (isMultiline) {
|
|
45
|
-
const contentSize = (0, _utils.getTextContentSize)(text);
|
|
46
|
-
(0, _utils.dispatchEvent)(element, 'contentSizeChange', _eventBuilder.EventBuilder.TextInput.contentSizeChange(contentSize));
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// 4. Exit element
|
|
50
|
-
await (0, _utils.wait)(this.config);
|
|
51
|
-
(0, _utils.dispatchEvent)(element, 'endEditing', _eventBuilder.EventBuilder.TextInput.endEditing(text));
|
|
52
|
-
(0, _utils.dispatchEvent)(element, 'blur', _eventBuilder.EventBuilder.Common.blur());
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=paste.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"paste.js","names":["_errors","require","_hostComponentNames","_pointerEvents","_textInput","_eventBuilder","_utils","paste","element","text","isHostTextInput","ErrorWithStack","type","isTextInputEditable","isPointerEventEnabled","dispatchEvent","EventBuilder","Common","focus","textToClear","props","value","defaultValue","rangeToClear","start","end","length","TextInput","selectionChange","change","rangeAfter","isMultiline","multiline","contentSize","getTextContentSize","contentSizeChange","wait","config","endEditing","blur"],"sources":["../../src/user-event/paste.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport { ErrorWithStack } from '../helpers/errors';\nimport { isHostTextInput } from '../helpers/host-component-names';\nimport { isPointerEventEnabled } from '../helpers/pointer-events';\nimport { isTextInputEditable } from '../helpers/text-input';\nimport { EventBuilder } from './event-builder';\nimport { UserEventInstance } from './setup';\nimport { dispatchEvent, getTextContentSize, wait } from './utils';\n\nexport async function paste(\n this: UserEventInstance,\n element: ReactTestInstance,\n text: string,\n): Promise<void> {\n if (!isHostTextInput(element)) {\n throw new ErrorWithStack(\n `paste() only supports host \"TextInput\" elements. Passed element has type: \"${element.type}\".`,\n paste,\n );\n }\n\n if (!isTextInputEditable(element) || !isPointerEventEnabled(element)) {\n return;\n }\n\n // 1. Enter element\n dispatchEvent(element, 'focus', EventBuilder.Common.focus());\n\n // 2. Select all\n const textToClear = element.props.value ?? element.props.defaultValue ?? '';\n const rangeToClear = { start: 0, end: textToClear.length };\n dispatchEvent(element, 'selectionChange', EventBuilder.TextInput.selectionChange(rangeToClear));\n\n // 3. Paste the text\n dispatchEvent(element, 'change', EventBuilder.TextInput.change(text));\n dispatchEvent(element, 'changeText', text);\n\n const rangeAfter = { start: text.length, end: text.length };\n dispatchEvent(element, 'selectionChange', EventBuilder.TextInput.selectionChange(rangeAfter));\n\n // According to the docs only multiline TextInput emits contentSizeChange event\n // @see: https://reactnative.dev/docs/textinput#oncontentsizechange\n const isMultiline = element.props.multiline === true;\n if (isMultiline) {\n const contentSize = getTextContentSize(text);\n dispatchEvent(\n element,\n 'contentSizeChange',\n EventBuilder.TextInput.contentSizeChange(contentSize),\n );\n }\n\n // 4. Exit element\n await wait(this.config);\n dispatchEvent(element, 'endEditing', EventBuilder.TextInput.endEditing(text));\n dispatchEvent(element, 'blur', EventBuilder.Common.blur());\n}\n"],"mappings":";;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,aAAA,GAAAJ,OAAA;AAEA,IAAAK,MAAA,GAAAL,OAAA;AAEO,eAAeM,KAAKA,CAEzBC,OAA0B,EAC1BC,IAAY,EACG;EACf,IAAI,CAAC,IAAAC,mCAAe,EAACF,OAAO,CAAC,EAAE;IAC7B,MAAM,IAAIG,sBAAc,CACtB,8EAA8EH,OAAO,CAACI,IAAI,IAAI,EAC9FL,KACF,CAAC;EACH;EAEA,IAAI,CAAC,IAAAM,8BAAmB,EAACL,OAAO,CAAC,IAAI,CAAC,IAAAM,oCAAqB,EAACN,OAAO,CAAC,EAAE;IACpE;EACF;;EAEA;EACA,IAAAO,oBAAa,EAACP,OAAO,EAAE,OAAO,EAAEQ,0BAAY,CAACC,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;;EAE5D;EACA,MAAMC,WAAW,GAAGX,OAAO,CAACY,KAAK,CAACC,KAAK,IAAIb,OAAO,CAACY,KAAK,CAACE,YAAY,IAAI,EAAE;EAC3E,MAAMC,YAAY,GAAG;IAAEC,KAAK,EAAE,CAAC;IAAEC,GAAG,EAAEN,WAAW,CAACO;EAAO,CAAC;EAC1D,IAAAX,oBAAa,EAACP,OAAO,EAAE,iBAAiB,EAAEQ,0BAAY,CAACW,SAAS,CAACC,eAAe,CAACL,YAAY,CAAC,CAAC;;EAE/F;EACA,IAAAR,oBAAa,EAACP,OAAO,EAAE,QAAQ,EAAEQ,0BAAY,CAACW,SAAS,CAACE,MAAM,CAACpB,IAAI,CAAC,CAAC;EACrE,IAAAM,oBAAa,EAACP,OAAO,EAAE,YAAY,EAAEC,IAAI,CAAC;EAE1C,MAAMqB,UAAU,GAAG;IAAEN,KAAK,EAAEf,IAAI,CAACiB,MAAM;IAAED,GAAG,EAAEhB,IAAI,CAACiB;EAAO,CAAC;EAC3D,IAAAX,oBAAa,EAACP,OAAO,EAAE,iBAAiB,EAAEQ,0BAAY,CAACW,SAAS,CAACC,eAAe,CAACE,UAAU,CAAC,CAAC;;EAE7F;EACA;EACA,MAAMC,WAAW,GAAGvB,OAAO,CAACY,KAAK,CAACY,SAAS,KAAK,IAAI;EACpD,IAAID,WAAW,EAAE;IACf,MAAME,WAAW,GAAG,IAAAC,yBAAkB,EAACzB,IAAI,CAAC;IAC5C,IAAAM,oBAAa,EACXP,OAAO,EACP,mBAAmB,EACnBQ,0BAAY,CAACW,SAAS,CAACQ,iBAAiB,CAACF,WAAW,CACtD,CAAC;EACH;;EAEA;EACA,MAAM,IAAAG,WAAI,EAAC,IAAI,CAACC,MAAM,CAAC;EACvB,IAAAtB,oBAAa,EAACP,OAAO,EAAE,YAAY,EAAEQ,0BAAY,CAACW,SAAS,CAACW,UAAU,CAAC7B,IAAI,CAAC,CAAC;EAC7E,IAAAM,oBAAa,EAACP,OAAO,EAAE,MAAM,EAAEQ,0BAAY,CAACC,MAAM,CAACsB,IAAI,CAAC,CAAC,CAAC;AAC5D","ignoreList":[]}
|