@samitouri / QOS-React / commits / c7a959982b

[React Native] Add tests to paper renderer for measure, measureLayout (#15323)

* [React Native] Add tests to paper renderer for measure, measureLayout * Update tests * Shouldn't have removed UIManager import

Eli White committed Apr 9, 2019 at 14:49 UTC c7a959982b4b05c97db9b26349da2ade7bbb02be
2 files changed +122 -41
packages/react-native-renderer/src/__mocks__/UIManager.js
+34 -1
@@ -153,7 +153,40 @@ const RCTUIManager = {
153 views.get(parentTag).children.forEach(tag => removeChild(parentTag, tag));
154 }),
155 replaceExistingNonRootView: jest.fn(),
156 - measureLayout: jest.fn(),
156 + measure: jest.fn(function measure(tag, callback) {
157 + invariant(
158 + typeof tag === 'number',
159 + 'Expected tag to be a number, was passed %s',
160 + tag,
161 + );
162 + callback(10, 10, 100, 100, 0, 0);
163 + }),
164 + measureInWindow: jest.fn(function measureInWindow(tag, callback) {
165 + invariant(
166 + typeof tag === 'number',
167 + 'Expected tag to be a number, was passed %s',
168 + tag,
169 + );
170 + callback(10, 10, 100, 100);
171 + }),
172 + measureLayout: jest.fn(function measureLayout(
173 + tag,
174 + relativeTag,
175 + fail,
176 + success,
177 + ) {
178 + invariant(
179 + typeof tag === 'number',
180 + 'Expected tag to be a number, was passed %s',
181 + tag,
182 + );
183 + invariant(
184 + typeof relativeTag === 'number',
185 + 'Expected relativeTag to be a number, was passed %s',
186 + relativeTag,
187 + );
188 + success(1, 1, 100, 100);
189 + }),
190 __takeSnapshot: jest.fn(),
191 };
192
packages/react-native-renderer/src/__tests__/ReactNativeMount-test.internal.js
+88 -40
@@ -249,6 +249,88 @@ describe('ReactNative', () => {
249 });
250 });
251
252 + it('should call UIManager.measure on ref.measure', () => {
253 + const View = createReactNativeComponentClass('RCTView', () => ({
254 + validAttributes: {foo: true},
255 + uiViewClassName: 'RCTView',
256 + }));
257 +
258 + class Subclass extends ReactNative.NativeComponent {
259 + render() {
260 + return <View>{this.props.children}</View>;
261 + }
262 + }
263 +
264 + const CreateClass = createReactClass({
265 + mixins: [NativeMethodsMixin],
266 + render() {
267 + return <View>{this.props.children}</View>;
268 + },
269 + });
270 +
271 + [View, Subclass, CreateClass].forEach(Component => {
272 + UIManager.measure.mockClear();
273 +
274 + let viewRef;
275 + ReactNative.render(
276 + <Component
277 + ref={ref => {
278 + viewRef = ref;
279 + }}
280 + />,
281 + 11,
282 + );
283 +
284 + expect(UIManager.measure).not.toBeCalled();
285 + const successCallback = jest.fn();
286 + viewRef.measure(successCallback);
287 + expect(UIManager.measure).toHaveBeenCalledTimes(1);
288 + expect(successCallback).toHaveBeenCalledTimes(1);
289 + expect(successCallback).toHaveBeenCalledWith(10, 10, 100, 100, 0, 0);
290 + });
291 + });
292 +
293 + it('should call UIManager.measureInWindow on ref.measureInWindow', () => {
294 + const View = createReactNativeComponentClass('RCTView', () => ({
295 + validAttributes: {foo: true},
296 + uiViewClassName: 'RCTView',
297 + }));
298 +
299 + class Subclass extends ReactNative.NativeComponent {
300 + render() {
301 + return <View>{this.props.children}</View>;
302 + }
303 + }
304 +
305 + const CreateClass = createReactClass({
306 + mixins: [NativeMethodsMixin],
307 + render() {
308 + return <View>{this.props.children}</View>;
309 + },
310 + });
311 +
312 + [View, Subclass, CreateClass].forEach(Component => {
313 + UIManager.measureInWindow.mockClear();
314 +
315 + let viewRef;
316 + ReactNative.render(
317 + <Component
318 + ref={ref => {
319 + viewRef = ref;
320 + }}
321 + />,
322 + 11,
323 + );
324 +
325 + expect(UIManager.measureInWindow).not.toBeCalled();
326 + const successCallback = jest.fn();
327 + viewRef.measureInWindow(successCallback);
328 + expect(UIManager.measureInWindow).toHaveBeenCalledTimes(1);
329 + expect(successCallback).toHaveBeenCalledTimes(1);
330 + expect(successCallback).toHaveBeenCalledWith(10, 10, 100, 100);
331 + });
332 + });
333 +
334 it('should support reactTag in ref.measureLayout', () => {
335 const View = createReactNativeComponentClass('RCTView', () => ({
336 validAttributes: {foo: true},
@@ -269,7 +351,7 @@ describe('ReactNative', () => {
351 });
352
353 [View, Subclass, CreateClass].forEach(Component => {
272 - UIManager.measureLayout.mockReset();
354 + UIManager.measureLayout.mockClear();
355
356 let viewRef;
357 let otherRef;
@@ -291,7 +373,6 @@ describe('ReactNative', () => {
373 );
374
375 expect(UIManager.measureLayout).not.toBeCalled();
294 -
376 const successCallback = jest.fn();
377 const failureCallback = jest.fn();
378 viewRef.measureLayout(
@@ -299,25 +380,9 @@ describe('ReactNative', () => {
380 successCallback,
381 failureCallback,
382 );
302 -
383 expect(UIManager.measureLayout).toHaveBeenCalledTimes(1);
304 - expect(UIManager.measureLayout).toHaveBeenCalledWith(
305 - expect.any(Number),
306 - expect.any(Number),
307 - expect.any(Function),
308 - expect.any(Function),
309 - );
310 -
311 - const args = UIManager.measureLayout.mock.calls[0];
312 - expect(args[0]).not.toEqual(args[1]);
313 - expect(successCallback).not.toBeCalled();
314 - expect(failureCallback).not.toBeCalled();
315 - args[2]('fail');
316 - expect(failureCallback).toBeCalledWith('fail');
317 -
318 - expect(successCallback).not.toBeCalled();
319 - args[3]('success');
320 - expect(successCallback).toBeCalledWith('success');
384 + expect(successCallback).toHaveBeenCalledTimes(1);
385 + expect(successCallback).toHaveBeenCalledWith(1, 1, 100, 100);
386 });
387 });
388
@@ -328,7 +393,7 @@ describe('ReactNative', () => {
393 }));
394
395 [View].forEach(Component => {
331 - UIManager.measureLayout.mockReset();
396 + UIManager.measureLayout.mockClear();
397
398 let viewRef;
399 let otherRef;
@@ -350,29 +415,12 @@ describe('ReactNative', () => {
415 );
416
417 expect(UIManager.measureLayout).not.toBeCalled();
353 -
418 const successCallback = jest.fn();
419 const failureCallback = jest.fn();
420 viewRef.measureLayout(otherRef, successCallback, failureCallback);
357 -
421 expect(UIManager.measureLayout).toHaveBeenCalledTimes(1);
359 - expect(UIManager.measureLayout).toHaveBeenCalledWith(
360 - expect.any(Number),
361 - expect.any(Number),
362 - expect.any(Function),
363 - expect.any(Function),
364 - );
365 -
366 - const args = UIManager.measureLayout.mock.calls[0];
367 - expect(args[0]).not.toEqual(args[1]);
368 - expect(successCallback).not.toBeCalled();
369 - expect(failureCallback).not.toBeCalled();
370 - args[2]('fail');
371 - expect(failureCallback).toBeCalledWith('fail');
372 -
373 - expect(successCallback).not.toBeCalled();
374 - args[3]('success');
375 - expect(successCallback).toBeCalledWith('success');
422 + expect(successCallback).toHaveBeenCalledTimes(1);
423 + expect(successCallback).toHaveBeenCalledWith(1, 1, 100, 100);
424 });
425 });
426