@testing-library/react-native 12.1.3 → 12.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintcache +1 -1
- package/.eslintignore +1 -0
- package/build/fireEvent.js +2 -5
- package/build/fireEvent.js.map +1 -1
- package/build/helpers/component-tree.d.ts +11 -5
- package/build/helpers/component-tree.js +5 -1
- package/build/helpers/component-tree.js.map +1 -1
- package/build/helpers/deprecation.js +1 -1
- package/build/helpers/deprecation.js.map +1 -1
- package/build/helpers/findAll.d.ts +2 -1
- package/build/helpers/findAll.js +2 -1
- package/build/helpers/findAll.js.map +1 -1
- package/build/helpers/host-component-names.d.ts +12 -0
- package/build/helpers/host-component-names.js +18 -0
- package/build/helpers/host-component-names.js.map +1 -1
- package/build/helpers/matchers/matchLabelText.js +1 -1
- package/build/helpers/matchers/matchLabelText.js.map +1 -1
- package/build/pure.d.ts +2 -0
- package/build/pure.js +7 -0
- package/build/pure.js.map +1 -1
- package/build/queries/a11yState.js +1 -1
- package/build/queries/a11yState.js.map +1 -1
- package/build/queries/a11yValue.js +1 -1
- package/build/queries/a11yValue.js.map +1 -1
- package/build/queries/displayValue.js +5 -6
- package/build/queries/displayValue.js.map +1 -1
- package/build/queries/hintText.js +1 -1
- package/build/queries/hintText.js.map +1 -1
- package/build/queries/labelText.js +1 -1
- package/build/queries/labelText.js.map +1 -1
- package/build/queries/placeholderText.js +3 -4
- package/build/queries/placeholderText.js.map +1 -1
- package/build/queries/role.js +1 -1
- package/build/queries/role.js.map +1 -1
- package/build/queries/testId.js +3 -3
- package/build/queries/testId.js.map +1 -1
- package/build/queries/text.js +1 -2
- package/build/queries/text.js.map +1 -1
- package/build/render.js.map +1 -1
- package/build/user-event/clear.d.ts +3 -0
- package/build/user-event/clear.js +41 -0
- package/build/user-event/clear.js.map +1 -0
- package/build/user-event/event-builder/common.d.ts +48 -6
- package/build/user-event/event-builder/common.js +37 -20
- package/build/user-event/event-builder/common.js.map +1 -1
- package/build/user-event/event-builder/index.d.ts +94 -0
- package/build/user-event/event-builder/index.js +3 -1
- package/build/user-event/event-builder/index.js.map +1 -1
- package/build/user-event/event-builder/text-input.d.ts +91 -0
- package/build/user-event/event-builder/text-input.js +117 -0
- package/build/user-event/event-builder/text-input.js.map +1 -0
- package/build/user-event/index.d.ts +5 -2
- package/build/user-event/index.js +8 -1
- package/build/user-event/index.js.map +1 -1
- package/build/user-event/press/index.d.ts +1 -1
- package/build/user-event/press/index.js +6 -0
- package/build/user-event/press/index.js.map +1 -1
- package/build/user-event/press/press.d.ts +3 -3
- package/build/user-event/press/press.js +54 -64
- package/build/user-event/press/press.js.map +1 -1
- package/build/user-event/setup/setup.d.ts +45 -3
- package/build/user-event/setup/setup.js +17 -2
- package/build/user-event/setup/setup.js.map +1 -1
- package/build/user-event/type/index.d.ts +1 -1
- package/build/user-event/type/index.js +6 -0
- package/build/user-event/type/index.js.map +1 -1
- package/build/user-event/type/parseKeys.d.ts +1 -0
- package/build/user-event/type/parseKeys.js +40 -0
- package/build/user-event/type/parseKeys.js.map +1 -0
- package/build/user-event/type/type.d.ts +7 -2
- package/build/user-event/type/type.js +70 -8
- package/build/user-event/type/type.js.map +1 -1
- package/build/user-event/utils/content-size.d.ts +15 -0
- package/build/user-event/utils/content-size.js +26 -0
- package/build/user-event/utils/content-size.js.map +1 -0
- package/build/user-event/utils/{events.d.ts → dispatch-event.d.ts} +2 -2
- package/build/user-event/utils/dispatch-event.js +36 -0
- package/build/user-event/utils/dispatch-event.js.map +1 -0
- package/build/user-event/utils/host-components.d.ts +2 -0
- package/build/user-event/utils/host-components.js +11 -0
- package/build/user-event/utils/host-components.js.map +1 -0
- package/build/user-event/utils/index.d.ts +5 -1
- package/build/user-event/utils/index.js +48 -4
- package/build/user-event/utils/index.js.map +1 -1
- package/build/user-event/utils/text-range.d.ts +4 -0
- package/build/user-event/utils/text-range.js +2 -0
- package/build/user-event/utils/text-range.js.map +1 -0
- package/build/user-event/utils/warn-about-real-timers.d.ts +1 -0
- package/build/user-event/utils/warn-about-real-timers.js +20 -0
- package/build/user-event/utils/warn-about-real-timers.js.map +1 -0
- package/examples/basic/.expo/README.md +15 -0
- package/examples/basic/.expo/packager-info.json +4 -0
- package/examples/basic/.expo/settings.json +10 -0
- package/examples/basic/__tests__/App.test.tsx +30 -12
- package/examples/basic/package.json +7 -7
- package/examples/basic/yarn.lock +7499 -0
- package/examples/react-navigation/README.md +2 -0
- package/examples/react-navigation/package.json +5 -5
- package/examples/react-navigation/yarn.lock +5018 -0
- package/examples/redux/README.md +5 -0
- package/examples/redux/package.json +7 -7
- package/examples/redux/yarn.lock +4819 -0
- package/experiments-app/.expo/packager-info.json +2 -2
- package/experiments-app/package.json +7 -9
- package/experiments-app/src/MainScreen.tsx +1 -0
- package/experiments-app/src/experiments.ts +20 -2
- package/experiments-app/src/screens/FlatListEvents.tsx +57 -0
- package/experiments-app/src/screens/ScrollViewEvents.tsx +65 -0
- package/experiments-app/src/screens/SectionListEvents.tsx +91 -0
- package/experiments-app/src/screens/TextInputEventPropagation.tsx +5 -17
- package/experiments-app/src/screens/TextInputEvents.tsx +13 -15
- package/experiments-app/src/utils/helpers.ts +13 -3
- package/experiments-app/yarn.lock +901 -1105
- package/experiments-rtl/.babelrc +8 -0
- package/experiments-rtl/.eslintrc.json +3 -0
- package/experiments-rtl/.gitignore +35 -0
- package/experiments-rtl/README.md +34 -0
- package/experiments-rtl/jest-setup.js +1 -0
- package/experiments-rtl/jest.config.js +4 -0
- package/experiments-rtl/next.config.js +4 -0
- package/experiments-rtl/package.json +38 -0
- package/experiments-rtl/postcss.config.js +6 -0
- package/experiments-rtl/public/next.svg +1 -0
- package/experiments-rtl/public/vercel.svg +1 -0
- package/experiments-rtl/src/app/__tests__/click.test.tsx +31 -0
- package/experiments-rtl/src/app/__tests__/managed-text-input.test.tsx +51 -0
- package/experiments-rtl/src/app/globals.css +27 -0
- package/experiments-rtl/src/app/layout.tsx +22 -0
- package/experiments-rtl/src/app/page.tsx +113 -0
- package/experiments-rtl/tailwind.config.ts +20 -0
- package/experiments-rtl/tsconfig.json +28 -0
- package/experiments-rtl/yarn.lock +5418 -0
- package/package.json +4 -2
- package/src/__tests__/act.test.tsx +4 -0
- package/src/fireEvent.ts +1 -5
- package/src/helpers/component-tree.ts +14 -9
- package/src/helpers/deprecation.ts +1 -1
- package/src/helpers/findAll.ts +6 -4
- package/src/helpers/host-component-names.tsx +21 -0
- package/src/helpers/matchers/matchLabelText.ts +0 -1
- package/src/pure.ts +2 -0
- package/src/queries/a11yState.ts +2 -6
- package/src/queries/a11yValue.ts +2 -6
- package/src/queries/displayValue.ts +7 -14
- package/src/queries/hintText.ts +2 -7
- package/src/queries/labelText.ts +1 -3
- package/src/queries/placeholderText.ts +6 -13
- package/src/queries/role.ts +1 -2
- package/src/queries/testId.ts +5 -10
- package/src/queries/text.ts +3 -6
- package/src/render.tsx +1 -1
- package/src/user-event/__tests__/__snapshots__/clear.test.tsx.snap +269 -0
- package/src/user-event/__tests__/clear.test.tsx +217 -0
- package/src/user-event/clear.ts +59 -0
- package/src/user-event/event-builder/common.ts +35 -19
- package/src/user-event/event-builder/index.ts +2 -0
- package/src/user-event/event-builder/text-input.ts +86 -0
- package/src/user-event/index.ts +7 -3
- package/src/user-event/press/__tests__/longPress.real-timers.test.tsx +4 -2
- package/src/user-event/press/__tests__/press.real-timers.test.tsx +4 -2
- package/src/user-event/press/__tests__/press.test.tsx +40 -5
- package/src/user-event/press/index.ts +1 -1
- package/src/user-event/press/press.ts +93 -64
- package/src/user-event/setup/setup.ts +54 -5
- package/src/user-event/type/__tests__/__snapshots__/type-managed.test.tsx.snap +339 -0
- package/src/user-event/type/__tests__/__snapshots__/type.test.tsx.snap +644 -2
- package/src/user-event/type/__tests__/parseKeys.test.ts +23 -0
- package/src/user-event/type/__tests__/type-managed.test.tsx +120 -0
- package/src/user-event/type/__tests__/type.test.tsx +299 -27
- package/src/user-event/type/index.ts +1 -1
- package/src/user-event/type/parseKeys.ts +41 -0
- package/src/user-event/type/type.ts +128 -10
- package/src/user-event/utils/__tests__/dispatch-event.test.tsx +41 -0
- package/src/user-event/utils/__tests__/wait.test.ts +0 -1
- package/src/user-event/utils/content-size.ts +25 -0
- package/src/user-event/utils/dispatch-event.ts +38 -0
- package/src/user-event/utils/host-components.ts +6 -0
- package/src/user-event/utils/index.ts +5 -1
- package/src/user-event/utils/text-range.ts +4 -0
- package/src/user-event/{press/utils/warnAboutRealTimers.ts → utils/warn-about-real-timers.ts} +8 -1
- package/website/docs/API.md +19 -25
- package/website/docs/Queries.md +64 -59
- package/website/docs/UserEvent.md +134 -9
- package/website/sidebars.js +1 -1
- package/build/helpers/filterNodeByType.d.ts +0 -3
- package/build/helpers/filterNodeByType.js +0 -9
- package/build/helpers/filterNodeByType.js.map +0 -1
- package/build/user-event/press/utils/warnAboutRealTimers.d.ts +0 -1
- package/build/user-event/press/utils/warnAboutRealTimers.js +0 -14
- package/build/user-event/press/utils/warnAboutRealTimers.js.map +0 -1
- package/build/user-event/utils/events.js +0 -44
- package/build/user-event/utils/events.js.map +0 -1
- package/src/helpers/filterNodeByType.ts +0 -7
- package/src/user-event/utils/events.ts +0 -54
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { ContentSize } from '../utils/content-size';
|
|
2
|
+
import { TextRange } from '../utils/text-range';
|
|
3
|
+
export declare const TextInputEventBuilder: {
|
|
4
|
+
/**
|
|
5
|
+
* Experimental values:
|
|
6
|
+
* - iOS: `{"eventCount": 4, "target": 75, "text": "Test"}`
|
|
7
|
+
* - Android: `{"eventCount": 6, "target": 53, "text": "Tes"}`
|
|
8
|
+
*/
|
|
9
|
+
change: (text: string) => {
|
|
10
|
+
nativeEvent: {
|
|
11
|
+
text: string;
|
|
12
|
+
target: number;
|
|
13
|
+
eventCount: number;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Experimental values:
|
|
18
|
+
* - iOS: `{"eventCount": 3, "key": "a", "target": 75}`
|
|
19
|
+
* - Android: `{"key": "a"}`
|
|
20
|
+
*/
|
|
21
|
+
keyPress: (key: string) => {
|
|
22
|
+
nativeEvent: {
|
|
23
|
+
key: string;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Experimental values:
|
|
28
|
+
* - iOS: `{"eventCount": 4, "target": 75, "text": "Test"}`
|
|
29
|
+
* - Android: `{"target": 53, "text": "Test"}`
|
|
30
|
+
*/
|
|
31
|
+
submitEditing: (text: string) => {
|
|
32
|
+
nativeEvent: {
|
|
33
|
+
text: string;
|
|
34
|
+
target: number;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Experimental values:
|
|
39
|
+
* - iOS: `{"eventCount": 4, "target": 75, "text": "Test"}`
|
|
40
|
+
* - Android: `{"target": 53, "text": "Test"}`
|
|
41
|
+
*/
|
|
42
|
+
endEditing: (text: string) => {
|
|
43
|
+
nativeEvent: {
|
|
44
|
+
text: string;
|
|
45
|
+
target: number;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Experimental values:
|
|
50
|
+
* - iOS: `{"selection": {"end": 4, "start": 4}, "target": 75}`
|
|
51
|
+
* - Android: `{"selection": {"end": 4, "start": 4}}`
|
|
52
|
+
*/
|
|
53
|
+
selectionChange: ({ start, end }: TextRange) => {
|
|
54
|
+
nativeEvent: {
|
|
55
|
+
selection: {
|
|
56
|
+
start: number;
|
|
57
|
+
end: number;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Experimental values:
|
|
63
|
+
* - iOS: `{"eventCount": 2, "previousText": "Te", "range": {"end": 2, "start": 2}, "target": 75, "text": "s"}`
|
|
64
|
+
* - Android: `{"previousText": "Te", "range": {"end": 2, "start": 0}, "target": 53, "text": "Tes"}`
|
|
65
|
+
*/
|
|
66
|
+
textInput: (text: string, previousText: string) => {
|
|
67
|
+
nativeEvent: {
|
|
68
|
+
text: string;
|
|
69
|
+
previousText: string;
|
|
70
|
+
range: {
|
|
71
|
+
start: number;
|
|
72
|
+
end: number;
|
|
73
|
+
};
|
|
74
|
+
target: number;
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Experimental values:
|
|
79
|
+
* - iOS: `{"contentSize": {"height": 21.666666666666668, "width": 11.666666666666666}, "target": 75}`
|
|
80
|
+
* - Android: `{"contentSize": {"height": 61.45454406738281, "width": 352.7272644042969}, "target": 53}`
|
|
81
|
+
*/
|
|
82
|
+
contentSizeChange: ({ width, height }: ContentSize) => {
|
|
83
|
+
nativeEvent: {
|
|
84
|
+
contentSize: {
|
|
85
|
+
width: number;
|
|
86
|
+
height: number;
|
|
87
|
+
};
|
|
88
|
+
target: number;
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
};
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.TextInputEventBuilder = void 0;
|
|
7
|
+
const TextInputEventBuilder = {
|
|
8
|
+
/**
|
|
9
|
+
* Experimental values:
|
|
10
|
+
* - iOS: `{"eventCount": 4, "target": 75, "text": "Test"}`
|
|
11
|
+
* - Android: `{"eventCount": 6, "target": 53, "text": "Tes"}`
|
|
12
|
+
*/
|
|
13
|
+
change: text => {
|
|
14
|
+
return {
|
|
15
|
+
nativeEvent: {
|
|
16
|
+
text,
|
|
17
|
+
target: 0,
|
|
18
|
+
eventCount: 0
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
},
|
|
22
|
+
/**
|
|
23
|
+
* Experimental values:
|
|
24
|
+
* - iOS: `{"eventCount": 3, "key": "a", "target": 75}`
|
|
25
|
+
* - Android: `{"key": "a"}`
|
|
26
|
+
*/
|
|
27
|
+
keyPress: key => {
|
|
28
|
+
return {
|
|
29
|
+
nativeEvent: {
|
|
30
|
+
key
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
},
|
|
34
|
+
/**
|
|
35
|
+
* Experimental values:
|
|
36
|
+
* - iOS: `{"eventCount": 4, "target": 75, "text": "Test"}`
|
|
37
|
+
* - Android: `{"target": 53, "text": "Test"}`
|
|
38
|
+
*/
|
|
39
|
+
submitEditing: text => {
|
|
40
|
+
return {
|
|
41
|
+
nativeEvent: {
|
|
42
|
+
text,
|
|
43
|
+
target: 0
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
},
|
|
47
|
+
/**
|
|
48
|
+
* Experimental values:
|
|
49
|
+
* - iOS: `{"eventCount": 4, "target": 75, "text": "Test"}`
|
|
50
|
+
* - Android: `{"target": 53, "text": "Test"}`
|
|
51
|
+
*/
|
|
52
|
+
endEditing: text => {
|
|
53
|
+
return {
|
|
54
|
+
nativeEvent: {
|
|
55
|
+
text,
|
|
56
|
+
target: 0
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
/**
|
|
61
|
+
* Experimental values:
|
|
62
|
+
* - iOS: `{"selection": {"end": 4, "start": 4}, "target": 75}`
|
|
63
|
+
* - Android: `{"selection": {"end": 4, "start": 4}}`
|
|
64
|
+
*/
|
|
65
|
+
selectionChange: ({
|
|
66
|
+
start,
|
|
67
|
+
end
|
|
68
|
+
}) => {
|
|
69
|
+
return {
|
|
70
|
+
nativeEvent: {
|
|
71
|
+
selection: {
|
|
72
|
+
start,
|
|
73
|
+
end
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
},
|
|
78
|
+
/**
|
|
79
|
+
* Experimental values:
|
|
80
|
+
* - iOS: `{"eventCount": 2, "previousText": "Te", "range": {"end": 2, "start": 2}, "target": 75, "text": "s"}`
|
|
81
|
+
* - Android: `{"previousText": "Te", "range": {"end": 2, "start": 0}, "target": 53, "text": "Tes"}`
|
|
82
|
+
*/
|
|
83
|
+
textInput: (text, previousText) => {
|
|
84
|
+
return {
|
|
85
|
+
nativeEvent: {
|
|
86
|
+
text,
|
|
87
|
+
previousText,
|
|
88
|
+
range: {
|
|
89
|
+
start: text.length,
|
|
90
|
+
end: text.length
|
|
91
|
+
},
|
|
92
|
+
target: 0
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
},
|
|
96
|
+
/**
|
|
97
|
+
* Experimental values:
|
|
98
|
+
* - iOS: `{"contentSize": {"height": 21.666666666666668, "width": 11.666666666666666}, "target": 75}`
|
|
99
|
+
* - Android: `{"contentSize": {"height": 61.45454406738281, "width": 352.7272644042969}, "target": 53}`
|
|
100
|
+
*/
|
|
101
|
+
contentSizeChange: ({
|
|
102
|
+
width,
|
|
103
|
+
height
|
|
104
|
+
}) => {
|
|
105
|
+
return {
|
|
106
|
+
nativeEvent: {
|
|
107
|
+
contentSize: {
|
|
108
|
+
width,
|
|
109
|
+
height
|
|
110
|
+
},
|
|
111
|
+
target: 0
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
exports.TextInputEventBuilder = TextInputEventBuilder;
|
|
117
|
+
//# sourceMappingURL=text-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-input.js","names":["TextInputEventBuilder","change","text","nativeEvent","target","eventCount","keyPress","key","submitEditing","endEditing","selectionChange","start","end","selection","textInput","previousText","range","length","contentSizeChange","width","height","contentSize","exports"],"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,GAAG;EACnC;AACF;AACA;AACA;AACA;EACEC,MAAM,EAAGC,IAAY,IAAK;IACxB,OAAO;MACLC,WAAW,EAAE;QAAED,IAAI;QAAEE,MAAM,EAAE,CAAC;QAAEC,UAAU,EAAE;MAAE;IAChD,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,QAAQ,EAAGC,GAAW,IAAK;IACzB,OAAO;MACLJ,WAAW,EAAE;QAAEI;MAAI;IACrB,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,aAAa,EAAGN,IAAY,IAAK;IAC/B,OAAO;MACLC,WAAW,EAAE;QAAED,IAAI;QAAEE,MAAM,EAAE;MAAE;IACjC,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEK,UAAU,EAAGP,IAAY,IAAK;IAC5B,OAAO;MACLC,WAAW,EAAE;QAAED,IAAI;QAAEE,MAAM,EAAE;MAAE;IACjC,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEM,eAAe,EAAEA,CAAC;IAAEC,KAAK;IAAEC;EAAe,CAAC,KAAK;IAC9C,OAAO;MACLT,WAAW,EAAE;QAAEU,SAAS,EAAE;UAAEF,KAAK;UAAEC;QAAI;MAAE;IAC3C,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEE,SAAS,EAAEA,CAACZ,IAAY,EAAEa,YAAoB,KAAK;IACjD,OAAO;MACLZ,WAAW,EAAE;QACXD,IAAI;QACJa,YAAY;QACZC,KAAK,EAAE;UAAEL,KAAK,EAAET,IAAI,CAACe,MAAM;UAAEL,GAAG,EAAEV,IAAI,CAACe;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;MACLjB,WAAW,EAAE;QAAEkB,WAAW,EAAE;UAAEF,KAAK;UAAEC;QAAO,CAAC;QAAEhB,MAAM,EAAE;MAAE;IAC3D,CAAC;EACH;AACF,CAAC;AAACkB,OAAA,CAAAtB,qBAAA,GAAAA,qBAAA"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { ReactTestInstance } from 'react-test-renderer';
|
|
2
2
|
import { setup } from './setup';
|
|
3
|
-
import { PressOptions } from './press
|
|
3
|
+
import { PressOptions } from './press';
|
|
4
|
+
import { TypeOptions } from './type';
|
|
5
|
+
export { UserEventConfig } from './setup';
|
|
4
6
|
export declare const userEvent: {
|
|
5
7
|
setup: typeof setup;
|
|
6
8
|
press: (element: ReactTestInstance) => Promise<void>;
|
|
7
9
|
longPress: (element: ReactTestInstance, options?: PressOptions) => Promise<void>;
|
|
8
|
-
type: (element: ReactTestInstance, text: string) => Promise<void>;
|
|
10
|
+
type: (element: ReactTestInstance, text: string, options?: TypeOptions) => Promise<void>;
|
|
11
|
+
clear: (element: ReactTestInstance) => Promise<void>;
|
|
9
12
|
};
|
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
Object.defineProperty(exports, "UserEventConfig", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _setup.UserEventConfig;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
6
12
|
exports.userEvent = void 0;
|
|
7
13
|
var _setup = require("./setup");
|
|
8
14
|
const userEvent = {
|
|
@@ -10,7 +16,8 @@ const userEvent = {
|
|
|
10
16
|
// Direct access for User Event v13 compatibility
|
|
11
17
|
press: element => (0, _setup.setup)().press(element),
|
|
12
18
|
longPress: (element, options) => (0, _setup.setup)().longPress(element, options),
|
|
13
|
-
type: (element, text) => (0, _setup.setup)().type(element, text)
|
|
19
|
+
type: (element, text, options) => (0, _setup.setup)().type(element, text, options),
|
|
20
|
+
clear: element => (0, _setup.setup)().clear(element)
|
|
14
21
|
};
|
|
15
22
|
exports.userEvent = userEvent;
|
|
16
23
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_setup","require","userEvent","setup","press","element","longPress","options","type","text","exports"],"sources":["../../src/user-event/index.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport { setup } from './setup';\nimport { PressOptions } from './press
|
|
1
|
+
{"version":3,"file":"index.js","names":["_setup","require","userEvent","setup","press","element","longPress","options","type","text","clear","exports"],"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';\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};\n"],"mappings":";;;;;;;;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAMO,MAAMC,SAAS,GAAG;EACvBC,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;AAC9D,CAAC;AAACM,OAAA,CAAAT,SAAA,GAAAA,SAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { press, longPress } from './press';
|
|
1
|
+
export { PressOptions, press, longPress } from './press';
|
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
Object.defineProperty(exports, "PressOptions", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _press.PressOptions;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
6
12
|
Object.defineProperty(exports, "longPress", {
|
|
7
13
|
enumerable: true,
|
|
8
14
|
get: function () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_press","require"],"sources":["../../../src/user-event/press/index.ts"],"sourcesContent":["export { press, longPress } from './press';\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":["_press","require"],"sources":["../../../src/user-event/press/index.ts"],"sourcesContent":["export { PressOptions, press, longPress } from './press';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ReactTestInstance } from 'react-test-renderer';
|
|
2
2
|
import { UserEventInstance } from '../setup';
|
|
3
|
-
export
|
|
4
|
-
duration
|
|
5
|
-
}
|
|
3
|
+
export interface PressOptions {
|
|
4
|
+
duration?: number;
|
|
5
|
+
}
|
|
6
6
|
export declare function press(this: UserEventInstance, element: ReactTestInstance): Promise<void>;
|
|
7
7
|
export declare function longPress(this: UserEventInstance, element: ReactTestInstance, options?: PressOptions): Promise<void>;
|
|
@@ -5,37 +5,37 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.longPress = longPress;
|
|
7
7
|
exports.press = press;
|
|
8
|
-
var _eventBuilder = require("../event-builder");
|
|
9
|
-
var _utils = require("../utils");
|
|
10
8
|
var _act = _interopRequireDefault(require("../../act"));
|
|
11
9
|
var _componentTree = require("../../helpers/component-tree");
|
|
12
|
-
var _filterNodeByType = require("../../helpers/filterNodeByType");
|
|
13
10
|
var _pointerEvents = require("../../helpers/pointer-events");
|
|
14
11
|
var _hostComponentNames = require("../../helpers/host-component-names");
|
|
15
|
-
var
|
|
12
|
+
var _eventBuilder = require("../event-builder");
|
|
13
|
+
var _utils = require("../utils");
|
|
16
14
|
var _constants = require("./constants");
|
|
17
|
-
var _warnAboutRealTimers = require("./utils/warnAboutRealTimers");
|
|
18
15
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
16
|
async function press(element) {
|
|
20
|
-
await basePress(this.config, element
|
|
17
|
+
await basePress(this.config, element, {
|
|
18
|
+
type: 'press',
|
|
19
|
+
duration: 0
|
|
20
|
+
});
|
|
21
21
|
}
|
|
22
|
-
async function longPress(element, options
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
async function longPress(element, options) {
|
|
23
|
+
await basePress(this.config, element, {
|
|
24
|
+
type: 'longPress',
|
|
25
|
+
duration: options?.duration ?? 500
|
|
26
|
+
});
|
|
26
27
|
}
|
|
27
|
-
const basePress = async (config, element, options
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
await triggerMockPressEvent(config, element, options);
|
|
28
|
+
const basePress = async (config, element, options) => {
|
|
29
|
+
if (isPressableText(element)) {
|
|
30
|
+
await emitTextPressEvents(config, element, options);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if ((0, _utils.isEditableTextInput)(element) && (0, _pointerEvents.isPointerEventEnabled)(element)) {
|
|
34
|
+
await emitTextInputPressEvents(config, element, options);
|
|
35
35
|
return;
|
|
36
36
|
}
|
|
37
37
|
if (isEnabledTouchResponder(element)) {
|
|
38
|
-
await
|
|
38
|
+
await emitPressablePressEvents(config, element, options);
|
|
39
39
|
return;
|
|
40
40
|
}
|
|
41
41
|
const hostParentElement = (0, _componentTree.getHostParent)(element);
|
|
@@ -44,28 +44,17 @@ const basePress = async (config, element, options = {
|
|
|
44
44
|
}
|
|
45
45
|
await basePress(config, hostParentElement, options);
|
|
46
46
|
};
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
}) => {
|
|
50
|
-
const areFakeTimersEnabled = (0, _timers.jestFakeTimersAreEnabled)();
|
|
51
|
-
if (!areFakeTimersEnabled) {
|
|
52
|
-
(0, _warnAboutRealTimers.warnAboutRealTimers)();
|
|
53
|
-
}
|
|
47
|
+
const emitPressablePressEvents = async (config, element, options) => {
|
|
48
|
+
(0, _utils.warnAboutRealTimersIfNeeded)();
|
|
54
49
|
await (0, _utils.wait)(config);
|
|
55
50
|
await (0, _act.default)(async () => {
|
|
56
|
-
element.
|
|
57
|
-
..._eventBuilder.EventBuilder.Common.touch(),
|
|
58
|
-
dispatchConfig: {
|
|
59
|
-
registrationName: 'onResponderGrant'
|
|
60
|
-
}
|
|
61
|
-
});
|
|
51
|
+
(0, _utils.dispatchEvent)(element, 'responderGrant', _eventBuilder.EventBuilder.Common.responderGrant());
|
|
62
52
|
await (0, _utils.wait)(config, options.duration);
|
|
63
|
-
element.
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
});
|
|
53
|
+
(0, _utils.dispatchEvent)(element, 'responderRelease', _eventBuilder.EventBuilder.Common.responderRelease());
|
|
54
|
+
|
|
55
|
+
// React Native will wait for minimal delay of DEFAULT_MIN_PRESS_DURATION
|
|
56
|
+
// before emitting the `pressOut` event. We need to wait here, so that
|
|
57
|
+
// `press()` function does not return before that.
|
|
69
58
|
if (_constants.DEFAULT_MIN_PRESS_DURATION - options.duration > 0) {
|
|
70
59
|
await (0, _utils.wait)(config, _constants.DEFAULT_MIN_PRESS_DURATION - options.duration);
|
|
71
60
|
}
|
|
@@ -74,33 +63,34 @@ const triggerPressEvent = async (config, element, options = {
|
|
|
74
63
|
const isEnabledTouchResponder = element => {
|
|
75
64
|
return (0, _pointerEvents.isPointerEventEnabled)(element) && element.props.onStartShouldSetResponder?.();
|
|
76
65
|
};
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const isEnabledTextInput = element => {
|
|
81
|
-
return (0, _filterNodeByType.filterNodeByType)(element, (0, _hostComponentNames.getHostComponentNames)().textInput) && (0, _pointerEvents.isPointerEventEnabled)(element) && element.props.editable !== false;
|
|
66
|
+
const isPressableText = element => {
|
|
67
|
+
const hasPressEventHandler = Boolean(element.props.onPress || element.props.onLongPress || element.props.onPressIn || element.props.onPressOut);
|
|
68
|
+
return (0, _hostComponentNames.isHostText)(element) && (0, _pointerEvents.isPointerEventEnabled)(element) && !element.props.disabled && hasPressEventHandler;
|
|
82
69
|
};
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
onPress,
|
|
89
|
-
onPressOut
|
|
90
|
-
} = element.props;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Dispatches a press event sequence for Text.
|
|
73
|
+
*/
|
|
74
|
+
async function emitTextPressEvents(config, element, options) {
|
|
91
75
|
await (0, _utils.wait)(config);
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
onPress(_eventBuilder.EventBuilder.Common.touch());
|
|
97
|
-
}
|
|
76
|
+
(0, _utils.dispatchEvent)(element, 'pressIn', _eventBuilder.EventBuilder.Common.touch());
|
|
77
|
+
|
|
78
|
+
// Emit either `press` or `longPress`.
|
|
79
|
+
(0, _utils.dispatchEvent)(element, options.type, _eventBuilder.EventBuilder.Common.touch());
|
|
98
80
|
await (0, _utils.wait)(config, options.duration);
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
81
|
+
(0, _utils.dispatchEvent)(element, 'pressOut', _eventBuilder.EventBuilder.Common.touch());
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Dispatches a press event sequence for TextInput.
|
|
86
|
+
*/
|
|
87
|
+
async function emitTextInputPressEvents(config, element, options) {
|
|
88
|
+
await (0, _utils.wait)(config);
|
|
89
|
+
(0, _utils.dispatchEvent)(element, 'pressIn', _eventBuilder.EventBuilder.Common.touch());
|
|
90
|
+
|
|
91
|
+
// Note: TextInput does not have `onPress`/`onLongPress` props.
|
|
92
|
+
|
|
93
|
+
await (0, _utils.wait)(config, options.duration);
|
|
94
|
+
(0, _utils.dispatchEvent)(element, 'pressOut', _eventBuilder.EventBuilder.Common.touch());
|
|
95
|
+
}
|
|
106
96
|
//# sourceMappingURL=press.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"press.js","names":["
|
|
1
|
+
{"version":3,"file":"press.js","names":["_act","_interopRequireDefault","require","_componentTree","_pointerEvents","_hostComponentNames","_eventBuilder","_utils","_constants","obj","__esModule","default","press","element","basePress","config","type","duration","longPress","options","isPressableText","emitTextPressEvents","isEditableTextInput","isPointerEventEnabled","emitTextInputPressEvents","isEnabledTouchResponder","emitPressablePressEvents","hostParentElement","getHostParent","warnAboutRealTimersIfNeeded","wait","act","dispatchEvent","EventBuilder","Common","responderGrant","responderRelease","DEFAULT_MIN_PRESS_DURATION","props","onStartShouldSetResponder","hasPressEventHandler","Boolean","onPress","onLongPress","onPressIn","onPressOut","isHostText","disabled","touch"],"sources":["../../../src/user-event/press/press.ts"],"sourcesContent":["import { ReactTestInstance } from 'react-test-renderer';\nimport act from '../../act';\nimport { getHostParent } from '../../helpers/component-tree';\nimport { isPointerEventEnabled } from '../../helpers/pointer-events';\nimport { isHostText } from '../../helpers/host-component-names';\nimport { EventBuilder } from '../event-builder';\nimport { UserEventConfig, UserEventInstance } from '../setup';\nimport {\n dispatchEvent,\n isEditableTextInput,\n wait,\n warnAboutRealTimersIfNeeded,\n} from '../utils';\nimport { DEFAULT_MIN_PRESS_DURATION } from './constants';\n\nexport interface PressOptions {\n duration?: number;\n}\n\nexport async function press(\n this: UserEventInstance,\n element: ReactTestInstance\n): Promise<void> {\n await basePress(this.config, element, {\n type: 'press',\n duration: 0,\n });\n}\n\nexport async function longPress(\n this: UserEventInstance,\n element: ReactTestInstance,\n options?: PressOptions\n): Promise<void> {\n await basePress(this.config, element, {\n type: 'longPress',\n duration: options?.duration ?? 500,\n });\n}\n\ninterface BasePressOptions {\n type: 'press' | 'longPress';\n duration: number;\n}\n\nconst basePress = async (\n config: UserEventConfig,\n element: ReactTestInstance,\n options: BasePressOptions\n): Promise<void> => {\n if (isPressableText(element)) {\n await emitTextPressEvents(config, element, options);\n return;\n }\n\n if (isEditableTextInput(element) && isPointerEventEnabled(element)) {\n await emitTextInputPressEvents(config, element, options);\n return;\n }\n\n if (isEnabledTouchResponder(element)) {\n await emitPressablePressEvents(config, element, options);\n return;\n }\n\n const hostParentElement = getHostParent(element);\n if (!hostParentElement) {\n return;\n }\n\n await basePress(config, hostParentElement, options);\n};\n\nconst emitPressablePressEvents = async (\n config: UserEventConfig,\n element: ReactTestInstance,\n options: BasePressOptions\n) => {\n warnAboutRealTimersIfNeeded();\n\n await wait(config);\n\n await act(async () => {\n dispatchEvent(\n element,\n 'responderGrant',\n EventBuilder.Common.responderGrant()\n );\n\n await wait(config, options.duration);\n\n dispatchEvent(\n element,\n 'responderRelease',\n EventBuilder.Common.responderRelease()\n );\n\n // React Native will wait for minimal delay of DEFAULT_MIN_PRESS_DURATION\n // before emitting the `pressOut` event. We need to wait here, so that\n // `press()` function does not return before that.\n if (DEFAULT_MIN_PRESS_DURATION - options.duration > 0) {\n await wait(config, DEFAULT_MIN_PRESS_DURATION - options.duration);\n }\n });\n};\n\nconst isEnabledTouchResponder = (element: ReactTestInstance) => {\n return (\n isPointerEventEnabled(element) &&\n element.props.onStartShouldSetResponder?.()\n );\n};\n\nconst isPressableText = (element: ReactTestInstance) => {\n const hasPressEventHandler = Boolean(\n element.props.onPress ||\n element.props.onLongPress ||\n element.props.onPressIn ||\n element.props.onPressOut\n );\n\n return (\n isHostText(element) &&\n isPointerEventEnabled(element) &&\n !element.props.disabled &&\n hasPressEventHandler\n );\n};\n\n/**\n * Dispatches a press event sequence for Text.\n */\nasync function emitTextPressEvents(\n config: UserEventConfig,\n element: ReactTestInstance,\n options: BasePressOptions\n) {\n await wait(config);\n dispatchEvent(element, 'pressIn', EventBuilder.Common.touch());\n\n // Emit either `press` or `longPress`.\n dispatchEvent(element, options.type, EventBuilder.Common.touch());\n\n await wait(config, options.duration);\n dispatchEvent(element, 'pressOut', EventBuilder.Common.touch());\n}\n\n/**\n * Dispatches a press event sequence for TextInput.\n */\nasync function emitTextInputPressEvents(\n config: UserEventConfig,\n element: ReactTestInstance,\n options: BasePressOptions\n) {\n await wait(config);\n dispatchEvent(element, 'pressIn', EventBuilder.Common.touch());\n\n // Note: TextInput does not have `onPress`/`onLongPress` props.\n\n await wait(config, options.duration);\n dispatchEvent(element, 'pressOut', EventBuilder.Common.touch());\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ReactTestInstance } from 'react-test-renderer';
|
|
2
|
-
import { PressOptions } from '../press
|
|
2
|
+
import { PressOptions } from '../press';
|
|
3
|
+
import { TypeOptions } from '../type';
|
|
3
4
|
export interface UserEventSetupOptions {
|
|
4
5
|
/**
|
|
5
6
|
* Between some subsequent inputs like typing a series of characters
|
|
@@ -24,16 +25,57 @@ export interface UserEventSetupOptions {
|
|
|
24
25
|
* Creates a new instance of user event instance with the given options.
|
|
25
26
|
*
|
|
26
27
|
* @param options
|
|
27
|
-
* @returns
|
|
28
|
+
* @returns UserEvent instance
|
|
28
29
|
*/
|
|
29
30
|
export declare function setup(options?: UserEventSetupOptions): UserEventInstance;
|
|
31
|
+
/**
|
|
32
|
+
* Options affecting all user event interactions.
|
|
33
|
+
*
|
|
34
|
+
* @param delay between some subsequent inputs like typing a series of characters
|
|
35
|
+
* @param advanceTimers function to be called to advance fake timers
|
|
36
|
+
*/
|
|
30
37
|
export interface UserEventConfig {
|
|
31
38
|
delay: number;
|
|
32
39
|
advanceTimers: (delay: number) => Promise<void> | void;
|
|
33
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* UserEvent instance used to invoke user interaction functions.
|
|
43
|
+
*/
|
|
34
44
|
export interface UserEventInstance {
|
|
35
45
|
config: UserEventConfig;
|
|
36
46
|
press: (element: ReactTestInstance) => Promise<void>;
|
|
37
47
|
longPress: (element: ReactTestInstance, options?: PressOptions) => Promise<void>;
|
|
38
|
-
|
|
48
|
+
/**
|
|
49
|
+
* Simulate user pressing on a given `TextInput` element and typing given text.
|
|
50
|
+
*
|
|
51
|
+
* This method will trigger the events for each character of the text:
|
|
52
|
+
* `keyPress`, `change`, `changeText`, `endEditing`, etc.
|
|
53
|
+
*
|
|
54
|
+
* It will also trigger events connected with entering and leaving the text
|
|
55
|
+
* input.
|
|
56
|
+
*
|
|
57
|
+
* The exact events sent depend on the props of the TextInput (`editable`,
|
|
58
|
+
* `multiline`, value, defaultValue, etc) and passed options.
|
|
59
|
+
*
|
|
60
|
+
* @param element TextInput element to type on
|
|
61
|
+
* @param text Text to type
|
|
62
|
+
* @param options Options affecting typing behavior:
|
|
63
|
+
* - `skipPress` - if true, `pressIn` and `pressOut` events will not be
|
|
64
|
+
* triggered.
|
|
65
|
+
* - `submitEditing` - if true, `submitEditing` event will be triggered after
|
|
66
|
+
* typing the text.
|
|
67
|
+
*/
|
|
68
|
+
type: (element: ReactTestInstance, text: string, options?: TypeOptions) => Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Simulate user clearing the text of a given `TextInput` element.
|
|
71
|
+
*
|
|
72
|
+
* This method will simulate:
|
|
73
|
+
* 1. entering TextInput
|
|
74
|
+
* 2. selecting all text
|
|
75
|
+
* 3. pressing backspace to delete all text
|
|
76
|
+
* 4. leaving TextInput
|
|
77
|
+
*
|
|
78
|
+
* @param element TextInput element to clear
|
|
79
|
+
*/
|
|
80
|
+
clear: (element: ReactTestInstance) => Promise<void>;
|
|
39
81
|
}
|
|
@@ -7,6 +7,7 @@ exports.setup = setup;
|
|
|
7
7
|
var _timers = require("../../helpers/timers");
|
|
8
8
|
var _press = require("../press");
|
|
9
9
|
var _type = require("../type");
|
|
10
|
+
var _clear = require("../clear");
|
|
10
11
|
/**
|
|
11
12
|
* This functions allow wait to work correctly under both real and fake Jest timers.
|
|
12
13
|
*/
|
|
@@ -26,19 +27,32 @@ const defaultOptions = {
|
|
|
26
27
|
* Creates a new instance of user event instance with the given options.
|
|
27
28
|
*
|
|
28
29
|
* @param options
|
|
29
|
-
* @returns
|
|
30
|
+
* @returns UserEvent instance
|
|
30
31
|
*/
|
|
31
32
|
function setup(options) {
|
|
32
33
|
const config = createConfig(options);
|
|
33
34
|
const instance = createInstance(config);
|
|
34
35
|
return instance;
|
|
35
36
|
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Options affecting all user event interactions.
|
|
40
|
+
*
|
|
41
|
+
* @param delay between some subsequent inputs like typing a series of characters
|
|
42
|
+
* @param advanceTimers function to be called to advance fake timers
|
|
43
|
+
*/
|
|
44
|
+
|
|
36
45
|
function createConfig(options) {
|
|
37
46
|
return {
|
|
38
47
|
...defaultOptions,
|
|
39
48
|
...options
|
|
40
49
|
};
|
|
41
50
|
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* UserEvent instance used to invoke user interaction functions.
|
|
54
|
+
*/
|
|
55
|
+
|
|
42
56
|
function createInstance(config) {
|
|
43
57
|
const instance = {
|
|
44
58
|
config
|
|
@@ -48,7 +62,8 @@ function createInstance(config) {
|
|
|
48
62
|
const api = {
|
|
49
63
|
press: _press.press.bind(instance),
|
|
50
64
|
longPress: _press.longPress.bind(instance),
|
|
51
|
-
type: _type.type.bind(instance)
|
|
65
|
+
type: _type.type.bind(instance),
|
|
66
|
+
clear: _clear.clear.bind(instance)
|
|
52
67
|
};
|
|
53
68
|
Object.assign(instance, api);
|
|
54
69
|
return instance;
|