Adding setNativeProps tests for NativeMethodsMixin (#14901)
Eli White committed
Feb 20, 2019 at 13:16 UTC
4f4aa69f1b2bdc1ddb00e476f49450e251475e0c
3 files changed
+40
-4
packages/react-native-renderer/src/NativeMethodsMixin.js
+4
-2
@@ -142,8 +142,10 @@ export default function(
142
return;
143
}
144
145
+ const nativeTag =
146
+ maybeInstance._nativeTag || maybeInstance.canonical._nativeTag;
147
const viewConfig: ReactNativeBaseComponentViewConfig<> =
146
- maybeInstance.viewConfig;
148
+ maybeInstance.viewConfig || maybeInstance.canonical.viewConfig;
149
150
if (__DEV__) {
151
warnForStyleProps(nativeProps, viewConfig.validAttributes);
@@ -156,7 +158,7 @@ export default function(
158
// view invalidation for certain components (eg RCTTextInput) on iOS.
159
if (updatePayload != null) {
160
UIManager.updateView(
159
- maybeInstance._nativeTag,
161
+ nativeTag,
162
viewConfig.uiViewClassName,
163
updatePayload,
164
);
packages/react-native-renderer/src/__tests__/ReactFabric-test.internal.js
+18
-1
@@ -12,10 +12,12 @@
12
13
let React;
14
let ReactFabric;
15
+let createReactClass;
16
let createReactNativeComponentClass;
17
let UIManager;
18
let FabricUIManager;
19
let StrictMode;
20
+let NativeMethodsMixin;
21
22
jest.mock('shared/ReactFeatureFlags', () =>
23
require('shared/forks/ReactFeatureFlags.native-oss'),
@@ -30,8 +32,16 @@ describe('ReactFabric', () => {
32
ReactFabric = require('react-native-renderer/fabric');
33
FabricUIManager = require('FabricUIManager');
34
UIManager = require('UIManager');
35
+ createReactClass = require('create-react-class/factory')(
36
+ React.Component,
37
+ React.isValidElement,
38
+ new React.Component().updater,
39
+ );
40
createReactNativeComponentClass = require('ReactNativeViewConfigRegistry')
41
.register;
42
+ NativeMethodsMixin =
43
+ ReactFabric.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED
44
+ .NativeMethodsMixin;
45
});
46
47
it('should be able to create and render a native component', () => {
@@ -169,7 +179,14 @@ describe('ReactFabric', () => {
179
}
180
}
181
172
- [View, Subclass].forEach(Component => {
182
+ const CreateClass = createReactClass({
183
+ mixins: [NativeMethodsMixin],
184
+ render: () => {
185
+ return <View />;
186
+ },
187
+ });
188
+
189
+ [View, Subclass, CreateClass].forEach(Component => {
190
UIManager.updateView.mockReset();
191
192
let viewRef;
packages/react-native-renderer/src/__tests__/ReactNativeMount-test.internal.js
+18
-1
@@ -13,8 +13,10 @@
13
let React;
14
let StrictMode;
15
let ReactNative;
16
+let createReactClass;
17
let createReactNativeComponentClass;
18
let UIManager;
19
+let NativeMethodsMixin;
20
21
describe('ReactNative', () => {
22
beforeEach(() => {
@@ -24,8 +26,16 @@ describe('ReactNative', () => {
26
StrictMode = React.StrictMode;
27
ReactNative = require('react-native-renderer');
28
UIManager = require('UIManager');
29
+ createReactClass = require('create-react-class/factory')(
30
+ React.Component,
31
+ React.isValidElement,
32
+ new React.Component().updater,
33
+ );
34
createReactNativeComponentClass = require('ReactNativeViewConfigRegistry')
35
.register;
36
+ NativeMethodsMixin =
37
+ ReactNative.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED
38
+ .NativeMethodsMixin;
39
});
40
41
it('should be able to create and render a native component', () => {
@@ -100,7 +110,14 @@ describe('ReactNative', () => {
110
}
111
}
112
103
- [View, Subclass].forEach(Component => {
113
+ const CreateClass = createReactClass({
114
+ mixins: [NativeMethodsMixin],
115
+ render: () => {
116
+ return <View />;
117
+ },
118
+ });
119
+
120
+ [View, Subclass, CreateClass].forEach(Component => {
121
UIManager.updateView.mockReset();
122
123
let viewRef;