@react-native/jest-preset 0.85.0-nightly-20260219-44901aaf9
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/README.md +39 -0
- package/jest/MockNativeMethods.js +27 -0
- package/jest/RefreshControlMock.js +32 -0
- package/jest/assetFileTransformer.js +38 -0
- package/jest/local-setup.js +29 -0
- package/jest/mock.js +39 -0
- package/jest/mockComponent.js +103 -0
- package/jest/mockNativeComponent.js +52 -0
- package/jest/mocks/AccessibilityInfo.js +62 -0
- package/jest/mocks/ActivityIndicator.js +23 -0
- package/jest/mocks/AppState.js +19 -0
- package/jest/mocks/Clipboard.js +16 -0
- package/jest/mocks/Image.js +23 -0
- package/jest/mocks/InitializeCore.js +9 -0
- package/jest/mocks/Linking.js +28 -0
- package/jest/mocks/Modal.js +33 -0
- package/jest/mocks/NativeComponentRegistry.js +30 -0
- package/jest/mocks/NativeModules.js +239 -0
- package/jest/mocks/RefreshControl.js +31 -0
- package/jest/mocks/RendererProxy.js +45 -0
- package/jest/mocks/ScrollView.js +58 -0
- package/jest/mocks/Text.js +27 -0
- package/jest/mocks/TextInput.js +32 -0
- package/jest/mocks/UIManager.js +60 -0
- package/jest/mocks/Vibration.js +16 -0
- package/jest/mocks/View.js +27 -0
- package/jest/mocks/ViewNativeComponent.js +23 -0
- package/jest/mocks/requireNativeComponent.js +22 -0
- package/jest/mocks/useColorScheme.js +18 -0
- package/jest/react-native-env.js +17 -0
- package/jest/renderer.js +40 -0
- package/jest/resolver.js +32 -0
- package/jest/setup.js +177 -0
- package/package.json +39 -0
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
// TODO: Split this up into separate files.
|
|
12
|
+
const NativeModules = {
|
|
13
|
+
AlertManager: {
|
|
14
|
+
alertWithArgs: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
15
|
+
},
|
|
16
|
+
AsyncLocalStorage: {
|
|
17
|
+
multiGet: jest.fn((keys, callback) =>
|
|
18
|
+
process.nextTick(() => callback(null, [])),
|
|
19
|
+
) as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
20
|
+
multiSet: jest.fn((entries, callback) =>
|
|
21
|
+
process.nextTick(() => callback(null)),
|
|
22
|
+
) as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
23
|
+
multiRemove: jest.fn((keys, callback) =>
|
|
24
|
+
process.nextTick(() => callback(null)),
|
|
25
|
+
) as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
26
|
+
multiMerge: jest.fn((entries, callback) =>
|
|
27
|
+
process.nextTick(() => callback(null)),
|
|
28
|
+
) as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
29
|
+
clear: jest.fn(callback =>
|
|
30
|
+
process.nextTick(() => callback(null)),
|
|
31
|
+
) as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
32
|
+
getAllKeys: jest.fn(callback =>
|
|
33
|
+
process.nextTick(() => callback(null, [])),
|
|
34
|
+
) as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
35
|
+
},
|
|
36
|
+
DeviceInfo: {
|
|
37
|
+
getConstants(): $FlowFixMe {
|
|
38
|
+
return {
|
|
39
|
+
Dimensions: {
|
|
40
|
+
window: {
|
|
41
|
+
fontScale: 2,
|
|
42
|
+
height: 1334,
|
|
43
|
+
scale: 2,
|
|
44
|
+
width: 750,
|
|
45
|
+
},
|
|
46
|
+
screen: {
|
|
47
|
+
fontScale: 2,
|
|
48
|
+
height: 1334,
|
|
49
|
+
scale: 2,
|
|
50
|
+
width: 750,
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
DevSettings: {
|
|
57
|
+
addMenuItem: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
58
|
+
reload: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
59
|
+
},
|
|
60
|
+
ImageLoader: {
|
|
61
|
+
getSize: jest.fn(url => Promise.resolve([320, 240])) as JestMockFn<
|
|
62
|
+
$FlowFixMe,
|
|
63
|
+
$FlowFixMe,
|
|
64
|
+
>,
|
|
65
|
+
getSizeWithHeaders: jest.fn((url, headers) =>
|
|
66
|
+
Promise.resolve({height: 222, width: 333}),
|
|
67
|
+
) as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
68
|
+
prefetchImage: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
69
|
+
prefetchImageWithMetadata: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
70
|
+
queryCache: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
71
|
+
},
|
|
72
|
+
ImageViewManager: {
|
|
73
|
+
getSize: jest.fn((uri, success) =>
|
|
74
|
+
process.nextTick(() => success(320, 240)),
|
|
75
|
+
) as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
76
|
+
prefetchImage: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
77
|
+
},
|
|
78
|
+
KeyboardObserver: {
|
|
79
|
+
addListener: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
80
|
+
removeListeners: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
81
|
+
},
|
|
82
|
+
NativeAnimatedModule: {
|
|
83
|
+
createAnimatedNode: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
84
|
+
updateAnimatedNodeConfig: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
85
|
+
getValue: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
86
|
+
startListeningToAnimatedNodeValue: jest.fn() as JestMockFn<
|
|
87
|
+
$FlowFixMe,
|
|
88
|
+
$FlowFixMe,
|
|
89
|
+
>,
|
|
90
|
+
stopListeningToAnimatedNodeValue: jest.fn() as JestMockFn<
|
|
91
|
+
$FlowFixMe,
|
|
92
|
+
$FlowFixMe,
|
|
93
|
+
>,
|
|
94
|
+
connectAnimatedNodes: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
95
|
+
disconnectAnimatedNodes: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
96
|
+
startAnimatingNode: jest.fn((animationId, nodeTag, config, endCallback) => {
|
|
97
|
+
setTimeout(() => endCallback({finished: true}), 16);
|
|
98
|
+
}) as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
99
|
+
stopAnimation: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
100
|
+
setAnimatedNodeValue: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
101
|
+
setAnimatedNodeOffset: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
102
|
+
flattenAnimatedNodeOffset: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
103
|
+
extractAnimatedNodeOffset: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
104
|
+
connectAnimatedNodeToView: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
105
|
+
disconnectAnimatedNodeFromView: jest.fn() as JestMockFn<
|
|
106
|
+
$FlowFixMe,
|
|
107
|
+
$FlowFixMe,
|
|
108
|
+
>,
|
|
109
|
+
restoreDefaultValues: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
110
|
+
dropAnimatedNode: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
111
|
+
addAnimatedEventToView: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
112
|
+
removeAnimatedEventFromView: jest.fn() as JestMockFn<
|
|
113
|
+
$FlowFixMe,
|
|
114
|
+
$FlowFixMe,
|
|
115
|
+
>,
|
|
116
|
+
addListener: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
117
|
+
removeListener: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
118
|
+
removeListeners: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
119
|
+
},
|
|
120
|
+
Networking: {
|
|
121
|
+
sendRequest: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
122
|
+
abortRequest: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
123
|
+
addListener: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
124
|
+
removeListeners: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
125
|
+
},
|
|
126
|
+
PlatformConstants: {
|
|
127
|
+
getConstants(): $FlowFixMe {
|
|
128
|
+
return {
|
|
129
|
+
reactNativeVersion: {
|
|
130
|
+
major: 1000,
|
|
131
|
+
minor: 0,
|
|
132
|
+
patch: 0,
|
|
133
|
+
prerelease: undefined,
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
PushNotificationManager: {
|
|
139
|
+
presentLocalNotification: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
140
|
+
scheduleLocalNotification: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
141
|
+
cancelAllLocalNotifications: jest.fn() as JestMockFn<
|
|
142
|
+
$FlowFixMe,
|
|
143
|
+
$FlowFixMe,
|
|
144
|
+
>,
|
|
145
|
+
removeAllDeliveredNotifications: jest.fn() as JestMockFn<
|
|
146
|
+
$FlowFixMe,
|
|
147
|
+
$FlowFixMe,
|
|
148
|
+
>,
|
|
149
|
+
getDeliveredNotifications: jest.fn(callback =>
|
|
150
|
+
process.nextTick(() => []),
|
|
151
|
+
) as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
152
|
+
removeDeliveredNotifications: jest.fn() as JestMockFn<
|
|
153
|
+
$FlowFixMe,
|
|
154
|
+
$FlowFixMe,
|
|
155
|
+
>,
|
|
156
|
+
setApplicationIconBadgeNumber: jest.fn() as JestMockFn<
|
|
157
|
+
$FlowFixMe,
|
|
158
|
+
$FlowFixMe,
|
|
159
|
+
>,
|
|
160
|
+
getApplicationIconBadgeNumber: jest.fn(callback =>
|
|
161
|
+
process.nextTick(() => callback(0)),
|
|
162
|
+
) as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
163
|
+
cancelLocalNotifications: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
164
|
+
getScheduledLocalNotifications: jest.fn(callback =>
|
|
165
|
+
process.nextTick(() => callback()),
|
|
166
|
+
) as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
167
|
+
requestPermissions: jest.fn(() =>
|
|
168
|
+
Promise.resolve({alert: true, badge: true, sound: true}),
|
|
169
|
+
) as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
170
|
+
abandonPermissions: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
171
|
+
checkPermissions: jest.fn(callback =>
|
|
172
|
+
process.nextTick(() => callback({alert: true, badge: true, sound: true})),
|
|
173
|
+
) as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
174
|
+
getInitialNotification: jest.fn(() => Promise.resolve(null)) as JestMockFn<
|
|
175
|
+
$FlowFixMe,
|
|
176
|
+
$FlowFixMe,
|
|
177
|
+
>,
|
|
178
|
+
addListener: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
179
|
+
removeListeners: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
180
|
+
},
|
|
181
|
+
SourceCode: {
|
|
182
|
+
getConstants(): $FlowFixMe {
|
|
183
|
+
return {
|
|
184
|
+
scriptURL: null,
|
|
185
|
+
};
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
StatusBarManager: {
|
|
189
|
+
setColor: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
190
|
+
setStyle: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
191
|
+
setHidden: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
192
|
+
setNetworkActivityIndicatorVisible: jest.fn() as JestMockFn<
|
|
193
|
+
$FlowFixMe,
|
|
194
|
+
$FlowFixMe,
|
|
195
|
+
>,
|
|
196
|
+
setBackgroundColor: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
197
|
+
setTranslucent: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
198
|
+
getConstants: (): $FlowFixMe => ({
|
|
199
|
+
HEIGHT: 42,
|
|
200
|
+
}),
|
|
201
|
+
},
|
|
202
|
+
Timing: {
|
|
203
|
+
createTimer: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
204
|
+
deleteTimer: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
205
|
+
},
|
|
206
|
+
UIManager: {},
|
|
207
|
+
BlobModule: {
|
|
208
|
+
getConstants: (): $FlowFixMe => ({
|
|
209
|
+
BLOB_URI_SCHEME: 'content',
|
|
210
|
+
BLOB_URI_HOST: null,
|
|
211
|
+
}),
|
|
212
|
+
addNetworkingHandler: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
213
|
+
enableBlobSupport: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
214
|
+
disableBlobSupport: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
215
|
+
createFromParts: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
216
|
+
sendBlob: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
217
|
+
release: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
218
|
+
},
|
|
219
|
+
WebSocketModule: {
|
|
220
|
+
connect: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
221
|
+
send: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
222
|
+
sendBinary: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
223
|
+
ping: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
224
|
+
close: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
225
|
+
addListener: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
226
|
+
removeListeners: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
227
|
+
},
|
|
228
|
+
I18nManager: {
|
|
229
|
+
allowRTL: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
230
|
+
forceRTL: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
231
|
+
swapLeftAndRightInRTL: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
232
|
+
getConstants: (): $FlowFixMe => ({
|
|
233
|
+
isRTL: false,
|
|
234
|
+
doLeftAndRightSwapInRTL: true,
|
|
235
|
+
}),
|
|
236
|
+
},
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
export default NativeModules;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict-local
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type {RefreshControlProps} from 'react-native/Libraries/Components/RefreshControl/RefreshControl';
|
|
12
|
+
import type {HostComponent} from 'react-native/src/private/types/HostComponent';
|
|
13
|
+
|
|
14
|
+
import * as React from 'react';
|
|
15
|
+
import requireNativeComponent from 'react-native/Libraries/ReactNative/requireNativeComponent';
|
|
16
|
+
|
|
17
|
+
const RCTRefreshControl: HostComponent<{}> = requireNativeComponent<{}>(
|
|
18
|
+
'RCTRefreshControl',
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
export default class RefreshControlMock extends React.Component<RefreshControlProps> {
|
|
22
|
+
static latestRef: ?RefreshControlMock;
|
|
23
|
+
|
|
24
|
+
render(): React.Node {
|
|
25
|
+
return <RCTRefreshControl />;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
componentDidMount() {
|
|
29
|
+
RefreshControlMock.latestRef = this;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict-local
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
// In tests, we can use the default version without dependency injection.
|
|
12
|
+
|
|
13
|
+
import typeof * as TRendererImplementation from 'react-native/Libraries/ReactNative/RendererImplementation';
|
|
14
|
+
|
|
15
|
+
const {
|
|
16
|
+
dispatchCommand,
|
|
17
|
+
findHostInstance_DEPRECATED,
|
|
18
|
+
findNodeHandle,
|
|
19
|
+
getNodeFromInternalInstanceHandle,
|
|
20
|
+
getPublicInstanceFromInternalInstanceHandle,
|
|
21
|
+
getPublicInstanceFromRootTag,
|
|
22
|
+
isChildPublicInstance,
|
|
23
|
+
isProfilingRenderer,
|
|
24
|
+
renderElement,
|
|
25
|
+
sendAccessibilityEvent,
|
|
26
|
+
unmountComponentAtNodeAndRemoveContainer,
|
|
27
|
+
unstable_batchedUpdates,
|
|
28
|
+
} = jest.requireActual<TRendererImplementation>(
|
|
29
|
+
'react-native/Libraries/ReactNative/RendererImplementation',
|
|
30
|
+
) as TRendererImplementation;
|
|
31
|
+
|
|
32
|
+
export {
|
|
33
|
+
dispatchCommand,
|
|
34
|
+
findHostInstance_DEPRECATED,
|
|
35
|
+
findNodeHandle,
|
|
36
|
+
getNodeFromInternalInstanceHandle,
|
|
37
|
+
getPublicInstanceFromInternalInstanceHandle,
|
|
38
|
+
getPublicInstanceFromRootTag,
|
|
39
|
+
isChildPublicInstance,
|
|
40
|
+
isProfilingRenderer,
|
|
41
|
+
renderElement,
|
|
42
|
+
sendAccessibilityEvent,
|
|
43
|
+
unmountComponentAtNodeAndRemoveContainer,
|
|
44
|
+
unstable_batchedUpdates,
|
|
45
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict-local
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import typeof * as TmockComponent from '../mockComponent';
|
|
12
|
+
import typeof * as TMockNativeMethods from '../MockNativeMethods';
|
|
13
|
+
import typeof TScrollView from 'react-native/Libraries/Components/ScrollView/ScrollView';
|
|
14
|
+
import type {ScrollViewNativeProps} from 'react-native/Libraries/Components/ScrollView/ScrollViewNativeComponentType';
|
|
15
|
+
|
|
16
|
+
import * as React from 'react';
|
|
17
|
+
import View from 'react-native/Libraries/Components/View/View';
|
|
18
|
+
import requireNativeComponent from 'react-native/Libraries/ReactNative/requireNativeComponent';
|
|
19
|
+
|
|
20
|
+
const mockComponent =
|
|
21
|
+
jest.requireActual<TmockComponent>('../mockComponent').default;
|
|
22
|
+
const MockNativeMethods = jest.requireActual<TMockNativeMethods>(
|
|
23
|
+
'../MockNativeMethods',
|
|
24
|
+
).default;
|
|
25
|
+
|
|
26
|
+
const RCTScrollView =
|
|
27
|
+
requireNativeComponent<ScrollViewNativeProps>('RCTScrollView');
|
|
28
|
+
|
|
29
|
+
const BaseComponent = mockComponent(
|
|
30
|
+
'react-native/Libraries/Components/ScrollView/ScrollView',
|
|
31
|
+
{
|
|
32
|
+
...MockNativeMethods,
|
|
33
|
+
getScrollResponder: jest.fn(),
|
|
34
|
+
getScrollableNode: jest.fn(),
|
|
35
|
+
getInnerViewNode: jest.fn(),
|
|
36
|
+
getInnerViewRef: jest.fn(),
|
|
37
|
+
getNativeScrollRef: jest.fn(),
|
|
38
|
+
scrollTo: jest.fn(),
|
|
39
|
+
scrollToEnd: jest.fn(),
|
|
40
|
+
flashScrollIndicators: jest.fn(),
|
|
41
|
+
scrollResponderZoomTo: jest.fn(),
|
|
42
|
+
scrollResponderScrollNativeHandleToKeyboard: jest.fn(),
|
|
43
|
+
}, // instanceMethods
|
|
44
|
+
true, // isESModule
|
|
45
|
+
) as TScrollView;
|
|
46
|
+
|
|
47
|
+
// $FlowFixMe[incompatible-type]
|
|
48
|
+
// $FlowFixMe[invalid-exported-annotation]
|
|
49
|
+
export default class ScrollViewMock extends BaseComponent {
|
|
50
|
+
render(): React.Node {
|
|
51
|
+
return (
|
|
52
|
+
<RCTScrollView {...this.props}>
|
|
53
|
+
{this.props.refreshControl}
|
|
54
|
+
<View>{this.props.children}</View>
|
|
55
|
+
</RCTScrollView>
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict-local
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import typeof * as TmockComponent from '../mockComponent';
|
|
12
|
+
import typeof * as TMockNativeMethods from '../MockNativeMethods';
|
|
13
|
+
import typeof TText from 'react-native/Libraries/Text/Text';
|
|
14
|
+
|
|
15
|
+
const mockComponent =
|
|
16
|
+
jest.requireActual<TmockComponent>('../mockComponent').default;
|
|
17
|
+
const MockNativeMethods = jest.requireActual<TMockNativeMethods>(
|
|
18
|
+
'../MockNativeMethods',
|
|
19
|
+
).default;
|
|
20
|
+
|
|
21
|
+
const Text = mockComponent(
|
|
22
|
+
'react-native/Libraries/Text/Text',
|
|
23
|
+
MockNativeMethods, // instanceMethods
|
|
24
|
+
true, // isESModule
|
|
25
|
+
) as TText;
|
|
26
|
+
|
|
27
|
+
export default Text;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict-local
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import typeof * as TmockComponent from '../mockComponent';
|
|
12
|
+
import typeof * as TMockNativeMethods from '../MockNativeMethods';
|
|
13
|
+
import typeof TTextInput from 'react-native/Libraries/Components/TextInput/TextInput';
|
|
14
|
+
|
|
15
|
+
const mockComponent =
|
|
16
|
+
jest.requireActual<TmockComponent>('../mockComponent').default;
|
|
17
|
+
const MockNativeMethods = jest.requireActual<TMockNativeMethods>(
|
|
18
|
+
'../MockNativeMethods',
|
|
19
|
+
).default;
|
|
20
|
+
|
|
21
|
+
const TextInput = mockComponent(
|
|
22
|
+
'react-native/Libraries/Components/TextInput/TextInput',
|
|
23
|
+
{
|
|
24
|
+
...MockNativeMethods,
|
|
25
|
+
isFocused: jest.fn(),
|
|
26
|
+
clear: jest.fn(),
|
|
27
|
+
getNativeRef: jest.fn(),
|
|
28
|
+
}, // instanceMethods
|
|
29
|
+
true, // isESModule
|
|
30
|
+
) as TTextInput;
|
|
31
|
+
|
|
32
|
+
export default TextInput;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const UIManager = {
|
|
12
|
+
AndroidViewPager: {
|
|
13
|
+
Commands: {
|
|
14
|
+
setPage: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
15
|
+
setPageWithoutAnimation: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
blur: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
19
|
+
createView: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
20
|
+
customBubblingEventTypes: {},
|
|
21
|
+
customDirectEventTypes: {},
|
|
22
|
+
dispatchViewManagerCommand: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
23
|
+
focus: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
24
|
+
getViewManagerConfig: jest.fn(name => {
|
|
25
|
+
if (name === 'AndroidDrawerLayout') {
|
|
26
|
+
return {
|
|
27
|
+
Constants: {
|
|
28
|
+
DrawerPosition: {
|
|
29
|
+
Left: 10,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}) as JestMockFn<[string], $FlowFixMe>,
|
|
35
|
+
hasViewManagerConfig: jest.fn(name => {
|
|
36
|
+
return name === 'AndroidDrawerLayout';
|
|
37
|
+
}) as JestMockFn<[string], boolean>,
|
|
38
|
+
measure: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
39
|
+
manageChildren: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
40
|
+
setChildren: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
41
|
+
updateView: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
42
|
+
AndroidDrawerLayout: {
|
|
43
|
+
Constants: {
|
|
44
|
+
DrawerPosition: {
|
|
45
|
+
Left: 10,
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
AndroidTextInput: {
|
|
50
|
+
Commands: {},
|
|
51
|
+
},
|
|
52
|
+
ScrollView: {
|
|
53
|
+
Constants: {},
|
|
54
|
+
},
|
|
55
|
+
View: {
|
|
56
|
+
Constants: {},
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export default UIManager;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const Vibration = {
|
|
12
|
+
vibrate: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
13
|
+
cancel: jest.fn() as JestMockFn<$FlowFixMe, $FlowFixMe>,
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export default Vibration;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict-local
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import typeof * as TmockComponent from '../mockComponent';
|
|
12
|
+
import typeof * as TMockNativeMethods from '../MockNativeMethods';
|
|
13
|
+
import typeof TView from 'react-native/Libraries/Components/View/View';
|
|
14
|
+
|
|
15
|
+
const mockComponent =
|
|
16
|
+
jest.requireActual<TmockComponent>('../mockComponent').default;
|
|
17
|
+
const MockNativeMethods = jest.requireActual<TMockNativeMethods>(
|
|
18
|
+
'../MockNativeMethods',
|
|
19
|
+
).default;
|
|
20
|
+
|
|
21
|
+
const View = mockComponent(
|
|
22
|
+
'react-native/Libraries/Components/View/View',
|
|
23
|
+
MockNativeMethods, // instanceMethods
|
|
24
|
+
true, // isESModule
|
|
25
|
+
) as TView;
|
|
26
|
+
|
|
27
|
+
export default View;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict-local
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type {ViewProps} from 'react-native/Libraries/Components/View/ViewPropTypes';
|
|
12
|
+
|
|
13
|
+
import * as React from 'react';
|
|
14
|
+
import {createElement} from 'react';
|
|
15
|
+
|
|
16
|
+
export default class View extends React.Component<ViewProps> {
|
|
17
|
+
render(): React.Node {
|
|
18
|
+
// $FlowFixMe[not-a-function]
|
|
19
|
+
return createElement('View', this.props, this.props.children);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
View.displayName = 'View';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import typeof * as TmockNativeComponent from '../mockNativeComponent';
|
|
12
|
+
import type {HostComponent} from 'react-native/src/private/types/HostComponent';
|
|
13
|
+
|
|
14
|
+
const mockNativeComponent = jest.requireActual<TmockNativeComponent>(
|
|
15
|
+
'../mockNativeComponent',
|
|
16
|
+
).default;
|
|
17
|
+
|
|
18
|
+
export default function requireNativeComponent<T: {...}>(
|
|
19
|
+
uiViewClassName: string,
|
|
20
|
+
): HostComponent<T> {
|
|
21
|
+
return mockNativeComponent<T>(uiViewClassName);
|
|
22
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type {ColorSchemeName} from 'react-native/Libraries/Utilities/NativeAppearance';
|
|
12
|
+
|
|
13
|
+
const useColorScheme = jest.fn(() => 'light') as JestMockFn<
|
|
14
|
+
[],
|
|
15
|
+
ColorSchemeName,
|
|
16
|
+
>;
|
|
17
|
+
|
|
18
|
+
export default useColorScheme;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @noflow
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
'use strict';
|
|
12
|
+
|
|
13
|
+
const NodeEnv = require('jest-environment-node').TestEnvironment;
|
|
14
|
+
|
|
15
|
+
module.exports = class ReactNativeEnv extends NodeEnv {
|
|
16
|
+
customExportConditions = ['require', 'react-native'];
|
|
17
|
+
};
|
package/jest/renderer.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type {ReactTestRenderer} from 'react-test-renderer';
|
|
12
|
+
|
|
13
|
+
import nullthrows from 'nullthrows';
|
|
14
|
+
import * as React from 'react';
|
|
15
|
+
import TestRenderer from 'react-test-renderer';
|
|
16
|
+
|
|
17
|
+
export async function create(
|
|
18
|
+
Component: React.MixedElement,
|
|
19
|
+
): Promise<ReactTestRenderer> {
|
|
20
|
+
let component;
|
|
21
|
+
await TestRenderer.act(async () => {
|
|
22
|
+
component = TestRenderer.create(Component);
|
|
23
|
+
});
|
|
24
|
+
return nullthrows(component);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export async function unmount(testRenderer: ReactTestRenderer) {
|
|
28
|
+
await TestRenderer.act(async () => {
|
|
29
|
+
testRenderer.unmount();
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export async function update(
|
|
34
|
+
testRenderer: ReactTestRenderer,
|
|
35
|
+
element: React.MixedElement,
|
|
36
|
+
) {
|
|
37
|
+
await TestRenderer.act(async () => {
|
|
38
|
+
testRenderer.update(element);
|
|
39
|
+
});
|
|
40
|
+
}
|