Add spec for DeviceInfo module

Summary: Adding flow types for DeviceInfo module and migrating our codebase over to using `DeviceInfo.getConstants()`

Reviewed By: fkgozali

Differential Revision: D14645744

fbshipit-source-id: e30a060c6dc92938cd1420ba11a1d837c79d1e32
This commit is contained in:
Emily Janzer 2019-05-29 16:30:40 -07:00 коммит произвёл Facebook Github Bot
Родитель 40625ceabf
Коммит 96a5001024
7 изменённых файлов: 72 добавлений и 24 удалений

Просмотреть файл

@ -10,10 +10,6 @@
'use strict';
const DeviceInfo = require('../BatchedBridge/NativeModules').DeviceInfo;
import NativeDeviceInfo from './NativeDeviceInfo';
const invariant = require('invariant');
invariant(DeviceInfo, 'DeviceInfo native module is not installed correctly');
module.exports = DeviceInfo;
module.exports = NativeDeviceInfo;

Просмотреть файл

@ -14,6 +14,8 @@ const EventEmitter = require('../vendor/emitter/EventEmitter');
const Platform = require('./Platform');
const RCTDeviceEventEmitter = require('../EventEmitter/RCTDeviceEventEmitter');
import NativeDeviceInfo from './NativeDeviceInfo';
const invariant = require('invariant');
const eventEmitter = new EventEmitter();
@ -128,8 +130,7 @@ let dims: ?{[key: string]: any} =
global.nativeExtensions.DeviceInfo.Dimensions;
let nativeExtensionsEnabled = true;
if (!dims) {
const DeviceInfo = require('./DeviceInfo');
dims = DeviceInfo.Dimensions;
dims = NativeDeviceInfo.getConstants().Dimensions;
nativeExtensionsEnabled = false;
}

Просмотреть файл

@ -0,0 +1,47 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow strict-local
* @format
*/
'use strict';
import type {TurboModule} from 'RCTExport';
import * as TurboModuleRegistry from 'TurboModuleRegistry';
type DisplayMetricsAndroid = {|
width: number,
height: number,
scale: number,
fontScale: number,
densityDpi: number,
|};
type DisplayMetricsIOS = {|
width: number,
height: number,
scale: number,
fontScale: number,
|};
export interface Spec extends TurboModule {
+getConstants: () => {|
+Dimensions: {
window?: DisplayMetricsIOS,
screen?: DisplayMetricsIOS,
windowPhysicalPixels?: DisplayMetricsAndroid,
screenPhysicalPixels?: DisplayMetricsAndroid,
},
+isIPhoneX_deprecated?: boolean,
|};
}
const NativeModule = TurboModuleRegistry.getEnforcing<Spec>('DeviceInfo');
const NativeDeviceInfo = NativeModule;
export default NativeDeviceInfo;

Просмотреть файл

@ -14,6 +14,6 @@ describe('DeviceInfo', () => {
const DeviceInfo = require('../DeviceInfo');
it('should give device info', () => {
expect(DeviceInfo).toHaveProperty('Dimensions');
expect(DeviceInfo.getConstants()).toHaveProperty('Dimensions');
});
});

Просмотреть файл

@ -206,7 +206,7 @@ module.exports = {
return require('DatePickerAndroid');
},
get DeviceInfo() {
return require('DeviceInfo');
return require('NativeDeviceInfo').default;
},
get Dimensions() {
return require('Dimensions');

Просмотреть файл

@ -87,7 +87,7 @@ class IsIPhoneXExample extends React.Component<{}> {
<View>
<Text>
Is this an iPhone X:{' '}
{DeviceInfo.isIPhoneX_deprecated
{DeviceInfo.getConstants().isIPhoneX_deprecated
? 'Yeah!'
: 'Nope. (Or `isIPhoneX_deprecated` was already removed.)'}
</Text>

Просмотреть файл

@ -153,19 +153,23 @@ const mockNativeModules = {
queryData: jest.fn(),
},
DeviceInfo: {
Dimensions: {
window: {
fontScale: 2,
height: 1334,
scale: 2,
width: 750,
},
screen: {
fontScale: 2,
height: 1334,
scale: 2,
width: 750,
},
getConstants() {
return {
Dimensions: {
window: {
fontScale: 2,
height: 1334,
scale: 2,
width: 750,
},
screen: {
fontScale: 2,
height: 1334,
scale: 2,
width: 750,
},
},
};
},
},
FacebookSDK: {