@office-iss/react-native-win32 0.74.4 → 0.75.0-preview.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.flowconfig +9 -4
- package/CHANGELOG.json +569 -51
- package/CHANGELOG.md +173 -30
- package/Libraries/Animated/AnimatedImplementation.js +2 -0
- package/Libraries/Animated/NativeAnimatedHelper.js +4 -0
- package/Libraries/Animated/NativeAnimatedHelper.win32.js +4 -0
- package/Libraries/Animated/createAnimatedComponent.js +10 -4
- package/Libraries/Animated/useAnimatedProps.js +56 -28
- package/Libraries/BatchedBridge/MessageQueue.js +1 -0
- package/Libraries/Components/Button.js +10 -5
- package/Libraries/Components/Button.win32.js +1 -0
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +11 -2
- package/Libraries/Components/Pressable/Pressable.js +13 -6
- package/Libraries/Components/Pressable/Pressable.win32.js +13 -6
- package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +4 -0
- package/Libraries/Components/ScrollView/ScrollView.js +109 -29
- package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +6 -0
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +13 -1
- package/Libraries/Components/StatusBar/StatusBar.js +1 -21
- package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +0 -15
- package/Libraries/Components/TextInput/InputAccessoryView.js +10 -1
- package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +0 -12
- package/Libraries/Components/TextInput/TextInput.d.ts +0 -19
- package/Libraries/Components/TextInput/TextInput.js +14 -70
- package/Libraries/Components/TextInput/TextInput.win32.js +15 -72
- package/Libraries/Components/Touchable/Touchable.js +2 -2
- package/Libraries/Components/Touchable/TouchableHighlight.d.ts +4 -10
- package/Libraries/Components/Touchable/TouchableHighlight.js +3 -1
- package/Libraries/Components/Touchable/TouchableOpacity.d.ts +4 -32
- package/Libraries/Components/Touchable/TouchableOpacity.js +3 -1
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.d.ts +8 -0
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +117 -111
- package/Libraries/Components/View/ReactNativeStyleAttributes.js +6 -0
- package/Libraries/Components/View/ReactNativeViewAttributes.js +1 -0
- package/Libraries/Components/View/ReactNativeViewAttributes.win32.js +1 -0
- package/Libraries/Components/View/View.js +0 -11
- package/Libraries/Components/View/View.win32.js +0 -11
- package/Libraries/Components/View/ViewAccessibility.js +4 -4
- package/Libraries/Components/View/ViewAccessibility.win32.js +6 -6
- package/Libraries/Components/View/ViewPropTypes.d.ts +7 -49
- package/Libraries/Components/View/ViewPropTypes.js +7 -0
- package/Libraries/Components/View/ViewPropTypes.win32.js +7 -0
- package/Libraries/Core/Devtools/loadBundleFromServer.js +3 -3
- package/Libraries/Core/Devtools/loadBundleFromServer.win32.js +153 -0
- package/Libraries/Core/Devtools/parseErrorStack.js +5 -5
- package/Libraries/Core/Devtools/parseHermesStack.js +22 -16
- package/Libraries/Core/ErrorHandlers.js +116 -0
- package/Libraries/Core/ExceptionsManager.js +2 -2
- package/Libraries/Core/ReactNativeVersion.js +3 -3
- package/Libraries/Core/setUpDeveloperTools.js +3 -1
- package/Libraries/Core/setUpPerformance.js +6 -4
- package/Libraries/Core/setUpReactDevTools.js +70 -10
- package/Libraries/Core/setUpTimers.js +50 -31
- package/Libraries/Debugging/DebuggingOverlayRegistry.js +1 -1
- package/Libraries/Image/Image.android.js +23 -13
- package/Libraries/Image/Image.d.ts +14 -15
- package/Libraries/Image/Image.ios.js +21 -11
- package/Libraries/Image/Image.win32.js +5 -3
- package/Libraries/Image/ImageProps.js +16 -5
- package/Libraries/Image/ImageTypes.flow.js +7 -2
- package/Libraries/Image/ImageUtils.js +1 -0
- package/Libraries/Image/ImageViewNativeComponent.js +2 -1
- package/Libraries/Inspector/ElementBox.js +6 -3
- package/Libraries/Inspector/ElementProperties.js +1 -1
- package/Libraries/Interaction/TouchHistoryMath.js +4 -4
- package/Libraries/IntersectionObserver/IntersectionObserverManager.js +6 -26
- package/Libraries/JSInspector/NetworkAgent.js +1 -1
- package/Libraries/LogBox/Data/LogBoxData.js +39 -29
- package/Libraries/LogBox/Data/LogBoxLog.js +114 -2
- package/Libraries/LogBox/Data/parseLogBoxLog.js +168 -53
- package/Libraries/LogBox/LogBox.js +29 -12
- package/Libraries/LogBox/LogBoxNotificationContainer.js +4 -0
- package/Libraries/LogBox/UI/LogBoxInspector.js +8 -70
- package/Libraries/LogBox/UI/LogBoxInspectorBody.js +87 -0
- package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +6 -42
- package/Libraries/LogBox/UI/LogBoxInspectorFooterButton.js +58 -0
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +5 -66
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.win32.js +8 -52
- package/Libraries/LogBox/UI/LogBoxInspectorHeaderButton.js +76 -0
- package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +8 -5
- package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js +8 -5
- package/Libraries/LogBox/UI/LogBoxNotification.js +13 -152
- package/Libraries/LogBox/UI/LogBoxNotificationCountBadge.js +63 -0
- package/Libraries/LogBox/UI/LogBoxNotificationDismissButton.js +67 -0
- package/Libraries/LogBox/UI/LogBoxNotificationMessage.js +57 -0
- package/Libraries/NativeComponent/BaseViewConfig.android.js +5 -0
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +5 -0
- package/Libraries/NativeComponent/BaseViewConfig.win32.js +5 -0
- package/Libraries/NativeComponent/NativeComponentRegistry.js +12 -5
- package/Libraries/NativeComponent/StaticViewConfigValidator.js +3 -0
- package/Libraries/Network/XMLHttpRequest.js +5 -1
- package/Libraries/NewAppScreen/components/LearnMoreLinks.js +3 -3
- package/Libraries/Pressability/Pressability.js +3 -51
- package/Libraries/Pressability/Pressability.win32.js +3 -51
- package/Libraries/ReactNative/AppContainer-dev.js +3 -2
- package/Libraries/ReactNative/AppContainer-prod.js +2 -1
- package/Libraries/ReactNative/AppContainer.js +2 -0
- package/Libraries/ReactNative/AppRegistry.d.ts +7 -0
- package/Libraries/ReactNative/AppRegistry.js +10 -4
- package/Libraries/ReactNative/BridgelessUIManager.js +1 -21
- package/Libraries/ReactNative/FabricUIManager.js +0 -51
- package/Libraries/ReactNative/ReactFabricPublicInstance/warnForStyleProps.js +1 -0
- package/Libraries/ReactNative/RendererImplementation.js +20 -2
- package/Libraries/ReactNative/UIManager.d.ts +0 -21
- package/Libraries/ReactNative/UIManagerProperties.js +0 -3
- package/Libraries/ReactNative/__mocks__/FabricUIManager.js +5 -341
- package/Libraries/ReactNative/getNativeComponentAttributes.js +8 -8
- package/Libraries/ReactNative/renderApplication.js +3 -0
- package/Libraries/Renderer/implementations/ReactFabric-dev.js +15682 -27088
- package/Libraries/Renderer/implementations/ReactFabric-prod.js +5082 -4381
- package/Libraries/Renderer/implementations/ReactFabric-profiling.js +3480 -2571
- package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +15943 -27543
- package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +5303 -4606
- package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +3450 -2572
- package/Libraries/Renderer/shims/ReactFabric.js +2 -2
- package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
- package/Libraries/Renderer/shims/ReactNative.js +2 -3
- package/Libraries/Renderer/shims/ReactNativeTypes.js +24 -3
- package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +2 -2
- package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
- package/Libraries/Share/Share.d.ts +16 -10
- package/Libraries/Share/Share.js +14 -15
- package/Libraries/StyleSheet/StyleSheet.d.ts +1 -1
- package/Libraries/StyleSheet/StyleSheet.js +3 -10
- package/Libraries/StyleSheet/StyleSheet.win32.js +3 -10
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +21 -21
- package/Libraries/StyleSheet/StyleSheetTypes.js +24 -18
- package/Libraries/StyleSheet/flattenStyle.js +1 -0
- package/Libraries/StyleSheet/processFilter.js +132 -0
- package/Libraries/StyleSheet/processTransform.js +18 -3
- package/Libraries/Text/Text.js +151 -128
- package/Libraries/Text/Text.win32.js +163 -138
- package/Libraries/Text/TextNativeComponent.js +5 -4
- package/Libraries/Text/TextNativeComponent.win32.js +5 -4
- package/Libraries/Text/TextProps.js +6 -6
- package/Libraries/Text/TextProps.win32.js +6 -6
- package/Libraries/TurboModule/TurboModuleRegistry.js +2 -1
- package/Libraries/Types/CodegenTypes.js +3 -0
- package/Libraries/Utilities/{LoadingView.android.js → DevLoadingView.js} +33 -11
- package/Libraries/Utilities/Dimensions.js +1 -0
- package/Libraries/Utilities/Dimensions.win32.js +1 -0
- package/Libraries/Utilities/HMRClient.js +36 -8
- package/Libraries/Utilities/HMRClientProdShim.js +1 -0
- package/Libraries/Utilities/Platform.android.js +5 -5
- package/Libraries/Utilities/Platform.d.ts +1 -1
- package/Libraries/Utilities/Platform.flow.js +2 -2
- package/Libraries/Utilities/Platform.flow.win32.js +3 -3
- package/Libraries/Utilities/Platform.ios.js +1 -1
- package/Libraries/Utilities/Platform.win32.js +1 -1
- package/Libraries/Utilities/RCTLog.js +1 -0
- package/Libraries/Utilities/ReactNativeTestTools.js +12 -24
- package/Libraries/Utilities/verifyComponentAttributeEquivalence.js +11 -6
- package/Libraries/__tests__/ButtonWin32-test.js +7 -6
- package/Libraries/promiseRejectionTrackingOptions.js +1 -0
- package/jest/mockComponent.js +7 -0
- package/jest/renderer.js +25 -14
- package/jest/setup.js +19 -13
- package/jest.config.js +2 -1
- package/overrides.json +32 -31
- package/package.json +27 -25
- package/rn-get-polyfills.js +1 -0
- package/src/private/core/composeStyles.js +27 -0
- package/src/private/featureflags/ReactNativeFeatureFlags.js +93 -33
- package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +23 -4
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +56 -0
- package/src/private/fusebox/setUpFuseboxReactDevToolsDispatcher.js +108 -0
- package/src/private/specs/modules/NativeBlobModule.js +4 -2
- package/src/private/specs/modules/NativeDevSettings.js +1 -0
- package/src/private/specs/modules/NativePlatformConstantsAndroid.js +1 -1
- package/src/private/specs/modules/NativePlatformConstantsIOS.js +1 -1
- package/src/private/specs/modules/NativePlatformConstantsWin.js +1 -1
- package/src/private/specs/modules/NativePushNotificationManagerIOS.js +0 -4
- package/src/private/specs/modules/NativeUIManager.js +0 -7
- package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +24 -24
- package/src/private/webapis/dom/nodes/ReactNativeElement.js +11 -14
- package/src/private/webapis/dom/nodes/ReadOnlyCharacterData.js +2 -3
- package/src/private/webapis/dom/nodes/ReadOnlyElement.js +24 -54
- package/src/private/webapis/dom/nodes/ReadOnlyNode.js +5 -13
- package/src/private/webapis/dom/nodes/specs/NativeDOM.js +468 -0
- package/src/private/webapis/dom/nodes/specs/__mocks__/NativeDOMMock.js +413 -0
- package/src/private/webapis/dom/oldstylecollections/DOMRectList.js +4 -4
- package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +4 -4
- package/src/private/webapis/dom/oldstylecollections/NodeList.js +5 -5
- package/src/private/webapis/idlecallbacks/specs/NativeIdleCallbacks.js +34 -0
- package/src/private/webapis/microtasks/specs/NativeMicrotasks.js +21 -0
- package/src/private/webapis/performance/EventCounts.js +1 -1
- package/src/private/webapis/performance/MemoryInfo.js +9 -9
- package/src/private/webapis/performance/Performance.js +10 -56
- package/src/private/webapis/performance/PerformanceObserver.js +30 -22
- package/src/private/webapis/performance/RawPerformanceEntry.js +2 -7
- package/src/private/webapis/performance/ReactNativeStartupTiming.js +18 -18
- package/src/private/webapis/performance/UserTiming.js +63 -0
- package/src/private/webapis/performance/{NativePerformance.js → specs/NativePerformance.js} +3 -2
- package/src/private/webapis/performance/{NativePerformanceObserver.js → specs/NativePerformanceObserver.js} +2 -2
- package/src/private/webapis/performance/{__mocks__ → specs/__mocks__}/NativePerformance.js +1 -1
- package/src/private/webapis/performance/{__mocks__ → specs/__mocks__}/NativePerformanceObserver.js +3 -4
- package/src-win/Libraries/Components/View/ViewPropTypes.d.ts +7 -49
- package/types/modules/globals.d.ts +4 -0
- package/Libraries/Components/ScrollView/ScrollView.win32.js +0 -1915
- package/Libraries/NativeModules/specs/NativeAnimationsDebugModule.js +0 -13
- package/Libraries/Utilities/LoadingView.ios.js +0 -50
- package/Libraries/Utilities/LoadingView.js +0 -16
- package/jest/ReactNativeInternalFeatureFlagsMock.js +0 -13
- package/src/private/featureflags/NativeReactNativeFeatureFlags.js +0 -44
- package/src/private/featureflags/__tests__/ReactNativeFeatureFlags-test.js +0 -92
- package/src/private/specs/modules/NativeAnimationsDebugModule.js +0 -20
- package/src/private/webapis/dom/oldstylecollections/__tests__/DOMRectList-test.js +0 -85
- package/src/private/webapis/dom/oldstylecollections/__tests__/HTMLCollection-test.js +0 -80
- package/src/private/webapis/dom/oldstylecollections/__tests__/NodeList-test.js +0 -161
- package/src/private/webapis/performance/__tests__/EventCounts-test.js +0 -116
- package/src/private/webapis/performance/__tests__/NativePerformanceMock-test.js +0 -82
- package/src/private/webapis/performance/__tests__/NativePerformanceObserverMock-test.js +0 -108
- package/src/private/webapis/performance/__tests__/Performance-test.js +0 -117
- package/src/private/webapis/performance/__tests__/PerformanceObserver-test.js +0 -208
|
@@ -26,6 +26,7 @@ let hmrUnavailableReason: string | null = null;
|
|
|
26
26
|
let currentCompileErrorMessage: string | null = null;
|
|
27
27
|
let didConnect: boolean = false;
|
|
28
28
|
let pendingLogs: Array<[LogLevel, $ReadOnlyArray<mixed>]> = [];
|
|
29
|
+
let pendingFuseboxConsoleNotification = false;
|
|
29
30
|
|
|
30
31
|
type LogLevel =
|
|
31
32
|
| 'trace'
|
|
@@ -51,6 +52,7 @@ export type HMRClientNativeInterface = {|
|
|
|
51
52
|
isEnabled: boolean,
|
|
52
53
|
scheme?: string,
|
|
53
54
|
): void,
|
|
55
|
+
unstable_notifyFuseboxConsoleEnabled(): void,
|
|
54
56
|
|};
|
|
55
57
|
|
|
56
58
|
/**
|
|
@@ -68,7 +70,7 @@ const HMRClient: HMRClientNativeInterface = {
|
|
|
68
70
|
}
|
|
69
71
|
|
|
70
72
|
invariant(hmrClient, 'Expected HMRClient.setup() call at startup.');
|
|
71
|
-
const
|
|
73
|
+
const DevLoadingView = require('./DevLoadingView');
|
|
72
74
|
|
|
73
75
|
// We use this for internal logging only.
|
|
74
76
|
// It doesn't affect the logic.
|
|
@@ -79,13 +81,13 @@ const HMRClient: HMRClientNativeInterface = {
|
|
|
79
81
|
const hasUpdates = hmrClient.hasPendingUpdates();
|
|
80
82
|
|
|
81
83
|
if (hasUpdates) {
|
|
82
|
-
|
|
84
|
+
DevLoadingView.showMessage('Refreshing...', 'refresh');
|
|
83
85
|
}
|
|
84
86
|
try {
|
|
85
87
|
hmrClient.enable();
|
|
86
88
|
} finally {
|
|
87
89
|
if (hasUpdates) {
|
|
88
|
-
|
|
90
|
+
DevLoadingView.hide();
|
|
89
91
|
}
|
|
90
92
|
}
|
|
91
93
|
|
|
@@ -140,6 +142,29 @@ const HMRClient: HMRClientNativeInterface = {
|
|
|
140
142
|
}
|
|
141
143
|
},
|
|
142
144
|
|
|
145
|
+
unstable_notifyFuseboxConsoleEnabled() {
|
|
146
|
+
if (!hmrClient) {
|
|
147
|
+
pendingFuseboxConsoleNotification = true;
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
hmrClient.send(
|
|
151
|
+
JSON.stringify({
|
|
152
|
+
type: 'log',
|
|
153
|
+
level: 'info',
|
|
154
|
+
data: [
|
|
155
|
+
'\n' +
|
|
156
|
+
'\x1b[7m' +
|
|
157
|
+
' \x1b[1mJavaScript logs have moved!\x1b[22m They will now appear in the debugger console. ' +
|
|
158
|
+
'Tip: Type \x1b[1mj\x1b[22m in the terminal to open the debugger (requires Google Chrome ' +
|
|
159
|
+
'or Microsoft Edge).' +
|
|
160
|
+
'\x1b[27m' +
|
|
161
|
+
'\n',
|
|
162
|
+
],
|
|
163
|
+
}),
|
|
164
|
+
);
|
|
165
|
+
pendingFuseboxConsoleNotification = false;
|
|
166
|
+
},
|
|
167
|
+
|
|
143
168
|
// Called once by the bridge on startup, even if Fast Refresh is off.
|
|
144
169
|
// It creates the HMR client but doesn't actually set up the socket yet.
|
|
145
170
|
setup(
|
|
@@ -156,7 +181,7 @@ const HMRClient: HMRClientNativeInterface = {
|
|
|
156
181
|
invariant(!hmrClient, 'Cannot initialize hmrClient twice');
|
|
157
182
|
|
|
158
183
|
// Moving to top gives errors due to NativeModules not being initialized
|
|
159
|
-
const
|
|
184
|
+
const DevLoadingView = require('./DevLoadingView');
|
|
160
185
|
|
|
161
186
|
const serverHost = port !== null && port !== '' ? `${host}:${port}` : host;
|
|
162
187
|
|
|
@@ -205,7 +230,7 @@ Error: ${e.message}`;
|
|
|
205
230
|
didConnect = true;
|
|
206
231
|
|
|
207
232
|
if (client.isEnabled() && !isInitialUpdate) {
|
|
208
|
-
|
|
233
|
+
DevLoadingView.showMessage('Refreshing...', 'refresh');
|
|
209
234
|
}
|
|
210
235
|
});
|
|
211
236
|
|
|
@@ -217,11 +242,11 @@ Error: ${e.message}`;
|
|
|
217
242
|
});
|
|
218
243
|
|
|
219
244
|
client.on('update-done', () => {
|
|
220
|
-
|
|
245
|
+
DevLoadingView.hide();
|
|
221
246
|
});
|
|
222
247
|
|
|
223
248
|
client.on('error', data => {
|
|
224
|
-
|
|
249
|
+
DevLoadingView.hide();
|
|
225
250
|
|
|
226
251
|
if (data.type === 'GraphNotFoundError') {
|
|
227
252
|
client.close();
|
|
@@ -242,7 +267,7 @@ Error: ${e.message}`;
|
|
|
242
267
|
});
|
|
243
268
|
|
|
244
269
|
client.on('close', closeEvent => {
|
|
245
|
-
|
|
270
|
+
DevLoadingView.hide();
|
|
246
271
|
|
|
247
272
|
// https://www.rfc-editor.org/rfc/rfc6455.html#section-7.4.1
|
|
248
273
|
// https://www.rfc-editor.org/rfc/rfc6455.html#section-7.1.5
|
|
@@ -316,6 +341,9 @@ function flushEarlyLogs(client: MetroHMRClient) {
|
|
|
316
341
|
pendingLogs.forEach(([level, data]) => {
|
|
317
342
|
HMRClient.log(level, data);
|
|
318
343
|
});
|
|
344
|
+
if (pendingFuseboxConsoleNotification) {
|
|
345
|
+
HMRClient.unstable_notifyFuseboxConsoleEnabled();
|
|
346
|
+
}
|
|
319
347
|
} finally {
|
|
320
348
|
pendingLogs.length = 0;
|
|
321
349
|
}
|
|
@@ -31,7 +31,7 @@ const Platform: PlatformType = {
|
|
|
31
31
|
major: number,
|
|
32
32
|
minor: number,
|
|
33
33
|
patch: number,
|
|
34
|
-
prerelease: ?
|
|
34
|
+
prerelease: ?string,
|
|
35
35
|
|},
|
|
36
36
|
Version: number,
|
|
37
37
|
Release: string,
|
|
@@ -78,10 +78,10 @@ const Platform: PlatformType = {
|
|
|
78
78
|
? // $FlowFixMe[incompatible-return]
|
|
79
79
|
spec.android
|
|
80
80
|
: 'native' in spec
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
? // $FlowFixMe[incompatible-return]
|
|
82
|
+
spec.native
|
|
83
|
+
: // $FlowFixMe[incompatible-return]
|
|
84
|
+
spec.default,
|
|
85
85
|
};
|
|
86
86
|
|
|
87
87
|
module.exports = Platform;
|
|
@@ -32,7 +32,7 @@ type IOSPlatform = {
|
|
|
32
32
|
major: number,
|
|
33
33
|
minor: number,
|
|
34
34
|
patch: number,
|
|
35
|
-
prerelease: ?
|
|
35
|
+
prerelease: ?string,
|
|
36
36
|
|},
|
|
37
37
|
systemName: string,
|
|
38
38
|
isMacCatalyst?: boolean,
|
|
@@ -65,7 +65,7 @@ type AndroidPlatform = {
|
|
|
65
65
|
major: number,
|
|
66
66
|
minor: number,
|
|
67
67
|
patch: number,
|
|
68
|
-
prerelease: ?
|
|
68
|
+
prerelease: ?string,
|
|
69
69
|
|},
|
|
70
70
|
Version: number,
|
|
71
71
|
Release: string,
|
|
@@ -34,7 +34,7 @@ type IOSPlatform = {
|
|
|
34
34
|
major: number,
|
|
35
35
|
minor: number,
|
|
36
36
|
patch: number,
|
|
37
|
-
prerelease: ?string
|
|
37
|
+
prerelease: ?string,
|
|
38
38
|
|},
|
|
39
39
|
isMacCatalyst?: boolean,
|
|
40
40
|
|},
|
|
@@ -66,7 +66,7 @@ type AndroidPlatform = {
|
|
|
66
66
|
major: number,
|
|
67
67
|
minor: number,
|
|
68
68
|
patch: number,
|
|
69
|
-
prerelease: ?
|
|
69
|
+
prerelease: ?string,
|
|
70
70
|
|},
|
|
71
71
|
Version: number,
|
|
72
72
|
Release: string,
|
|
@@ -105,7 +105,7 @@ type Win32Platform = {
|
|
|
105
105
|
major: number,
|
|
106
106
|
minor: number,
|
|
107
107
|
patch: number,
|
|
108
|
-
prerelease: ?string
|
|
108
|
+
prerelease: ?string,
|
|
109
109
|
|},
|
|
110
110
|
systemName: string,
|
|
111
111
|
isMacCatalyst?: boolean,
|
|
@@ -12,20 +12,16 @@
|
|
|
12
12
|
|
|
13
13
|
import type {ReactTestRenderer as ReactTestRendererType} from 'react-test-renderer';
|
|
14
14
|
|
|
15
|
+
import TouchableWithoutFeedback from '../Components/Touchable/TouchableWithoutFeedback';
|
|
16
|
+
|
|
15
17
|
const Switch = require('../Components/Switch/Switch').default;
|
|
16
18
|
const TextInput = require('../Components/TextInput/TextInput');
|
|
17
19
|
const View = require('../Components/View/View');
|
|
18
20
|
const Text = require('../Text/Text');
|
|
19
21
|
const {VirtualizedList} = require('@react-native/virtualized-lists');
|
|
20
22
|
const React = require('react');
|
|
21
|
-
const ShallowRenderer = require('react-shallow-renderer');
|
|
22
23
|
const ReactTestRenderer = require('react-test-renderer');
|
|
23
24
|
|
|
24
|
-
/* $FlowFixMe[not-a-function] (>=0.125.1 site=react_native_fb) This comment
|
|
25
|
-
* suppresses an error found when Flow v0.125.1 was deployed. To see the error,
|
|
26
|
-
* delete this comment and run Flow. */
|
|
27
|
-
// $FlowFixMe[invalid-constructor]
|
|
28
|
-
const shallowRenderer = new ShallowRenderer();
|
|
29
25
|
export type ReactTestInstance = $PropertyType<ReactTestRendererType, 'root'>;
|
|
30
26
|
export type Predicate = (node: ReactTestInstance) => boolean;
|
|
31
27
|
/* $FlowFixMe[value-as-type] (>=0.125.1 site=react_native_fb) This comment
|
|
@@ -49,6 +45,9 @@ function byClickable(): Predicate {
|
|
|
49
45
|
(node.type === Switch && node.props && node.props.disabled !== true) ||
|
|
50
46
|
(node.type === View &&
|
|
51
47
|
node?.props?.onStartShouldSetResponder?.testOnly_pressabilityConfig) ||
|
|
48
|
+
(node.type === TouchableWithoutFeedback &&
|
|
49
|
+
node.props &&
|
|
50
|
+
typeof node.props.onPress === 'function') ||
|
|
52
51
|
// HACK: Find components that use `Pressability`.
|
|
53
52
|
node.instance?.state?.pressability != null ||
|
|
54
53
|
// TODO: Remove this after deleting `Touchable`.
|
|
@@ -114,7 +113,7 @@ function expectNoConsoleError() {
|
|
|
114
113
|
});
|
|
115
114
|
}
|
|
116
115
|
|
|
117
|
-
function expectRendersMatchingSnapshot(
|
|
116
|
+
async function expectRendersMatchingSnapshot(
|
|
118
117
|
name: string,
|
|
119
118
|
ComponentProvider: () => React.Element<any>,
|
|
120
119
|
unmockComponent: () => mixed,
|
|
@@ -123,7 +122,9 @@ function expectRendersMatchingSnapshot(
|
|
|
123
122
|
|
|
124
123
|
jest.resetAllMocks();
|
|
125
124
|
|
|
126
|
-
|
|
125
|
+
await ReactTestRenderer.act(() => {
|
|
126
|
+
instance = ReactTestRenderer.create(<ComponentProvider />);
|
|
127
|
+
});
|
|
127
128
|
expect(instance).toMatchSnapshot(
|
|
128
129
|
'should deep render when mocked (please verify output manually)',
|
|
129
130
|
);
|
|
@@ -131,22 +132,9 @@ function expectRendersMatchingSnapshot(
|
|
|
131
132
|
jest.resetAllMocks();
|
|
132
133
|
unmockComponent();
|
|
133
134
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
);
|
|
138
|
-
|
|
139
|
-
jest.resetAllMocks();
|
|
140
|
-
|
|
141
|
-
instance = shallowRenderer.render(<ComponentProvider />);
|
|
142
|
-
expect(instance).toMatchSnapshot(
|
|
143
|
-
`should shallow render as <${name} /> when mocked`,
|
|
144
|
-
);
|
|
145
|
-
|
|
146
|
-
jest.resetAllMocks();
|
|
147
|
-
unmockComponent();
|
|
148
|
-
|
|
149
|
-
instance = ReactTestRenderer.create(<ComponentProvider />);
|
|
135
|
+
await ReactTestRenderer.act(() => {
|
|
136
|
+
instance = ReactTestRenderer.create(<ComponentProvider />);
|
|
137
|
+
});
|
|
150
138
|
expect(instance).toMatchSnapshot(
|
|
151
139
|
'should deep render when not mocked (please verify output manually)',
|
|
152
140
|
);
|
|
@@ -104,16 +104,21 @@ export function getConfigWithoutViewProps(
|
|
|
104
104
|
viewConfig: ViewConfig,
|
|
105
105
|
propName: string,
|
|
106
106
|
): {...} {
|
|
107
|
+
// $FlowFixMe[invalid-computed-prop]
|
|
107
108
|
if (!viewConfig[propName]) {
|
|
108
109
|
return {};
|
|
109
110
|
}
|
|
110
111
|
|
|
111
|
-
return
|
|
112
|
-
.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
112
|
+
return (
|
|
113
|
+
Object.keys(viewConfig[propName])
|
|
114
|
+
// $FlowFixMe[invalid-computed-prop]
|
|
115
|
+
.filter(prop => !PlatformBaseViewConfig[propName][prop])
|
|
116
|
+
.reduce<{[string]: any}>((obj, prop) => {
|
|
117
|
+
// $FlowFixMe[invalid-computed-prop]
|
|
118
|
+
obj[prop] = viewConfig[propName][prop];
|
|
119
|
+
return obj;
|
|
120
|
+
}, {})
|
|
121
|
+
);
|
|
117
122
|
}
|
|
118
123
|
|
|
119
124
|
export function stringifyViewConfig(viewConfig: any): string {
|
|
@@ -2,15 +2,16 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
const React = require('react');
|
|
5
|
-
const
|
|
5
|
+
const renderer = require('react-native/jest/renderer');
|
|
6
6
|
|
|
7
7
|
const {ButtonWin32} = require('@office-iss/react-native-win32');
|
|
8
8
|
|
|
9
9
|
describe('ButtonWin32', () => {
|
|
10
|
-
it('renders native component', () => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
it('renders native component', async () => {
|
|
11
|
+
expect(
|
|
12
|
+
await renderer.create(
|
|
13
|
+
<ButtonWin32/>,
|
|
14
|
+
),
|
|
15
|
+
).toMatchSnapshot();
|
|
15
16
|
});
|
|
16
17
|
});
|
package/jest/mockComponent.js
CHANGED
|
@@ -50,6 +50,13 @@ module.exports = (moduleName, instanceMethods, isESModule) => {
|
|
|
50
50
|
}
|
|
51
51
|
};
|
|
52
52
|
|
|
53
|
+
Object.defineProperty(Component, 'name', {
|
|
54
|
+
value: name,
|
|
55
|
+
writable: false,
|
|
56
|
+
enumerable: false,
|
|
57
|
+
configurable: true,
|
|
58
|
+
});
|
|
59
|
+
|
|
53
60
|
Component.displayName = nameWithoutPrefix;
|
|
54
61
|
|
|
55
62
|
Object.keys(RealComponent).forEach(classStatic => {
|
package/jest/renderer.js
CHANGED
|
@@ -9,22 +9,33 @@
|
|
|
9
9
|
* @oncall react_native
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
+
import type {ReactTestRenderer} from 'react-test-renderer';
|
|
13
|
+
|
|
14
|
+
import nullthrows from 'nullthrows';
|
|
12
15
|
import * as React from 'react';
|
|
13
|
-
import ShallowRenderer from 'react-shallow-renderer';
|
|
14
16
|
import TestRenderer from 'react-test-renderer';
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
};
|
|
18
|
+
export async function create(
|
|
19
|
+
Component: React.Element<any>,
|
|
20
|
+
): Promise<ReactTestRenderer> {
|
|
21
|
+
let component;
|
|
22
|
+
await TestRenderer.act(async () => {
|
|
23
|
+
component = TestRenderer.create(Component);
|
|
24
|
+
});
|
|
25
|
+
return nullthrows(component);
|
|
26
|
+
}
|
|
23
27
|
|
|
24
|
-
export
|
|
25
|
-
|
|
26
|
-
|
|
28
|
+
export async function unmount(testRenderer: ReactTestRenderer) {
|
|
29
|
+
await TestRenderer.act(async () => {
|
|
30
|
+
testRenderer.unmount();
|
|
31
|
+
});
|
|
32
|
+
}
|
|
27
33
|
|
|
28
|
-
export
|
|
29
|
-
|
|
30
|
-
|
|
34
|
+
export async function update(
|
|
35
|
+
testRenderer: ReactTestRenderer,
|
|
36
|
+
element: React.Element<any>,
|
|
37
|
+
) {
|
|
38
|
+
await TestRenderer.act(async () => {
|
|
39
|
+
testRenderer.update(element);
|
|
40
|
+
});
|
|
41
|
+
}
|
package/jest/setup.js
CHANGED
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
|
|
10
10
|
'use strict';
|
|
11
11
|
|
|
12
|
+
global.IS_REACT_ACT_ENVIRONMENT = true;
|
|
13
|
+
// Suppress the `react-test-renderer` warnings until New Architecture and legacy
|
|
14
|
+
// mode are no longer supported by React Native.
|
|
15
|
+
global.IS_REACT_NATIVE_TEST_ENVIRONMENT = true;
|
|
16
|
+
|
|
12
17
|
const MockNativeMethods = jest.requireActual('./MockNativeMethods');
|
|
13
18
|
const mockComponent = jest.requireActual('./mockComponent');
|
|
14
19
|
|
|
@@ -112,17 +117,9 @@ jest
|
|
|
112
117
|
Constants: {},
|
|
113
118
|
},
|
|
114
119
|
}))
|
|
115
|
-
.mock('../Libraries/Image/Image', () =>
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
Image.getSizeWithHeaders = jest.fn();
|
|
119
|
-
Image.prefetch = jest.fn();
|
|
120
|
-
Image.prefetchWithMetadata = jest.fn();
|
|
121
|
-
Image.queryCache = jest.fn();
|
|
122
|
-
Image.resolveAssetSource = jest.fn();
|
|
123
|
-
|
|
124
|
-
return Image;
|
|
125
|
-
})
|
|
120
|
+
.mock('../Libraries/Image/Image', () =>
|
|
121
|
+
mockComponent('../Libraries/Image/Image'),
|
|
122
|
+
)
|
|
126
123
|
.mock('../Libraries/Text/Text', () =>
|
|
127
124
|
mockComponent('../Libraries/Text/Text', MockNativeMethods),
|
|
128
125
|
)
|
|
@@ -145,7 +142,9 @@ jest
|
|
|
145
142
|
.mock('../Libraries/Components/AccessibilityInfo/AccessibilityInfo', () => ({
|
|
146
143
|
__esModule: true,
|
|
147
144
|
default: {
|
|
148
|
-
addEventListener: jest.fn()
|
|
145
|
+
addEventListener: jest.fn(() => ({
|
|
146
|
+
remove: jest.fn(),
|
|
147
|
+
})),
|
|
149
148
|
announceForAccessibility: jest.fn(),
|
|
150
149
|
isAccessibilityServiceEnabled: jest.fn(),
|
|
151
150
|
isBoldTextEnabled: jest.fn(),
|
|
@@ -208,7 +207,9 @@ jest
|
|
|
208
207
|
openURL: jest.fn(),
|
|
209
208
|
canOpenURL: jest.fn(() => Promise.resolve(true)),
|
|
210
209
|
openSettings: jest.fn(),
|
|
211
|
-
addEventListener: jest.fn()
|
|
210
|
+
addEventListener: jest.fn(() => ({
|
|
211
|
+
remove: jest.fn(),
|
|
212
|
+
})),
|
|
212
213
|
getInitialURL: jest.fn(() => Promise.resolve()),
|
|
213
214
|
sendIntent: jest.fn(),
|
|
214
215
|
}))
|
|
@@ -261,7 +262,12 @@ jest
|
|
|
261
262
|
},
|
|
262
263
|
ImageLoader: {
|
|
263
264
|
getSize: jest.fn(url => Promise.resolve([320, 240])),
|
|
265
|
+
getSizeWithHeaders: jest.fn((url, headers) =>
|
|
266
|
+
Promise.resolve({height: 222, width: 333}),
|
|
267
|
+
),
|
|
264
268
|
prefetchImage: jest.fn(),
|
|
269
|
+
prefetchImageWithMetadata: jest.fn(),
|
|
270
|
+
queryCache: jest.fn(),
|
|
265
271
|
},
|
|
266
272
|
ImageViewManager: {
|
|
267
273
|
getSize: jest.fn((uri, success) =>
|
package/jest.config.js
CHANGED