xref: /expo/apps/test-suite/tests/Device.js (revision 191a2fb0)
1'use strict';
2
3import * as Device from 'expo-device';
4import { Platform } from 'react-native';
5
6export const name = 'Device';
7export async function test(t) {
8  t.describe(`Device.getDeviceType()`, () => {
9    t.it(`returns enum values`, async () => {
10      let deviceType = await Device.getDeviceTypeAsync();
11      t.expect(Object.values(Device.DeviceType).includes(deviceType)).toBeTruthy();
12    });
13  });
14
15  t.describe(`Device.getUptimeAsync()`, () => {
16    t.it(`calls getUptimeAsync() and returns number`, async () => {
17      let uptime = await Device.getUptimeAsync();
18      t.expect(uptime).toBeDefined();
19      t.expect(typeof uptime).toEqual('number');
20    });
21  });
22
23  if (Platform.OS === 'ios') {
24    t.describe(`Device on iOS`, () => {
25      t.it(`gets most constants and correct types`, async () => {
26        let brand = Device.brand;
27        let manufacturer = Device.manufacturer;
28        let modelName = Device.modelName;
29        let osName = Device.osName;
30        let totalMemory = Device.totalMemory;
31        let isDevice = Device.isDevice;
32        let osBuildId = Device.osBuildId;
33        let osInternalBuildId = Device.osInternalBuildId;
34        let osVersion = Device.osVersion;
35        let deviceName = Device.deviceName;
36        let deviceYearClass = Device.deviceYearClass;
37        t.expect(brand).toBeDefined();
38        t.expect(typeof brand).toEqual('string');
39        t.expect(manufacturer).toBeDefined();
40        t.expect(typeof manufacturer).toEqual('string');
41        t.expect(modelName).toBeDefined();
42        t.expect(typeof modelName).toEqual('string');
43        t.expect(osName).toBeDefined();
44        t.expect(typeof osName).toEqual('string');
45        t.expect(totalMemory).toBeDefined();
46        t.expect(typeof totalMemory).toEqual('number');
47        t.expect(isDevice).toBeDefined();
48        t.expect(typeof isDevice).toEqual('boolean');
49        t.expect(osBuildId).toBeDefined();
50        t.expect(typeof osBuildId).toEqual('string');
51        t.expect(osInternalBuildId).toBeDefined();
52        t.expect(typeof osInternalBuildId).toEqual('string');
53        t.expect(osVersion).toBeDefined();
54        t.expect(typeof osVersion).toEqual('string');
55        t.expect(deviceYearClass).toBeDefined();
56        t.expect(typeof deviceYearClass).toEqual('number');
57        t.expect(deviceName).toBeDefined();
58        t.expect(typeof deviceName).toEqual('string');
59      });
60
61      t.it(`doesn't get Android-only constants`, async () => {
62        let osBuildFingerprint = Device.osBuildFingerprint;
63        let designName = Device.designName;
64        let productName = Device.productName;
65        let platformApiLevel = Device.platformApiLevel;
66        t.expect(designName).toBeNull();
67        t.expect(productName).toBeNull();
68        t.expect(platformApiLevel).toBeNull();
69        t.expect(osBuildFingerprint).toBeNull();
70      });
71
72      t.it(`doesn't call getPlatformFeaturesAsync()`, async () => {
73        let error;
74        let allFeatures;
75        try {
76          allFeatures = await Device.getPlatformFeaturesAsync();
77        } catch (e) {
78          error = e;
79        }
80        t.expect(error).toBeDefined();
81        t.expect(typeof allFeatures).toEqual('undefined');
82      });
83
84      t.it(`doesn't call hasPlatformFeatureAsync()`, async () => {
85        let error;
86        let hasFeature;
87        try {
88          hasFeature = await Device.hasPlatformFeatureAsync('amazon_fire_tv');
89        } catch (e) {
90          error = e;
91        }
92        t.expect(error).toBeDefined();
93        t.expect(typeof hasFeature).toEqual('undefined');
94      });
95
96      t.it(`doesn't call getMaxMemoryAsync()`, async () => {
97        let error;
98        let maxMemory;
99        try {
100          maxMemory = await Device.getMaxMemoryAsync();
101        } catch (e) {
102          error = e;
103        }
104        t.expect(error).toBeDefined();
105        t.expect(typeof maxMemory).toEqual('undefined');
106      });
107
108      t.it(`doesn't call sideLoadingAsync()`, async () => {
109        let error;
110        let isSideLoading;
111        try {
112          isSideLoading = await Device.isSideLoadingEnabledAsync();
113        } catch (e) {
114          error = e;
115        }
116        t.expect(error).toBeDefined();
117        t.expect(typeof isSideLoading).toEqual('undefined');
118      });
119
120      t.it(`gets osBuildId same as osInternalBuildId`, async () => {
121        let osBuildId = await Device.osBuildId;
122        let osInternalBuildId = await Device.osInternalBuildId;
123        t.expect(Device.osBuildId).toBeTruthy();
124        t.expect(Device.osInternalBuildId).toBeTruthy();
125        t.expect(osBuildId).toEqual(osInternalBuildId);
126      });
127    });
128  } else if (Platform.OS === 'android') {
129    t.describe(`Device on Android`, () => {
130      t.it(`gets constants and correct types`, async () => {
131        let designName = await Device.designName;
132        let productName = await Device.productName;
133        let brand = await Device.brand;
134        let manufacturer = await Device.manufacturer;
135        let modelName = await Device.modelName;
136        let osName = await Device.osName;
137        let totalMemory = await Device.totalMemory;
138        let isDevice = await Device.isDevice;
139        let osBuildId = await Device.osBuildId;
140        let osBuildFingerprint = await Device.osBuildFingerprint;
141        let osInternalBuildId = await Device.osInternalBuildId;
142        let platformApiLevel = await Device.platformApiLevel;
143        let osVersion = await Device.osVersion;
144        let deviceName = await Device.deviceName;
145        let deviceYearClass = await Device.deviceYearClass;
146        t.expect(designName).toBeDefined();
147        t.expect(typeof designName).toEqual('string');
148        t.expect(productName).toBeDefined();
149        t.expect(typeof productName).toEqual('string');
150        t.expect(brand).toBeDefined();
151        t.expect(typeof brand).toEqual('string');
152        t.expect(manufacturer).toBeDefined();
153        t.expect(typeof manufacturer).toEqual('string');
154        t.expect(modelName).toBeDefined();
155        t.expect(typeof modelName).toEqual('string');
156        t.expect(osName).toBeDefined();
157        t.expect(typeof osName).toEqual('string');
158        t.expect(totalMemory).toBeDefined();
159        t.expect(typeof totalMemory).toEqual('number');
160        t.expect(isDevice).toBeDefined();
161        t.expect(typeof isDevice).toEqual('boolean');
162        t.expect(osBuildId).toBeDefined();
163        t.expect(typeof osBuildId).toEqual('string');
164        t.expect(osBuildFingerprint).toBeDefined();
165        t.expect(typeof osBuildFingerprint).toEqual('string');
166        t.expect(osInternalBuildId).toBeDefined();
167        t.expect(typeof osInternalBuildId).toEqual('string');
168        t.expect(platformApiLevel).toBeDefined();
169        t.expect(typeof platformApiLevel).toEqual('number');
170        t.expect(osVersion).toBeDefined();
171        t.expect(typeof osVersion).toEqual('string');
172        t.expect(deviceYearClass).toBeDefined();
173        t.expect(typeof deviceYearClass).toEqual('number');
174        if (isDevice) {
175          t.expect(deviceName).toBeDefined();
176          t.expect(typeof deviceName).toEqual('string');
177        } else {
178          t.expect(deviceName).toBeNull();
179        }
180      });
181
182      t.it(`doesn't get modelId`, async () => {
183        await Device.modelId;
184        t.expect(Device.modelId).toBeNull();
185      });
186
187      t.it(`calls hasPlatformFeatureAsync() with valid string and returns boolean`, async () => {
188        let error;
189        let hasFeature;
190        try {
191          hasFeature = await Device.hasPlatformFeatureAsync('amazon_fire_tv');
192        } catch (e) {
193          error = e;
194        }
195        t.expect(hasFeature).toEqual(t.jasmine.any(Boolean));
196      });
197
198      t.it(
199        `calls hasPlatformFeatureAsync() with invalid string format and returns false`,
200        async () => {
201          let error;
202          let hasFeature;
203          try {
204            hasFeature = await Device.hasPlatformFeatureAsync('camera');
205          } catch (e) {
206            error = e;
207          }
208          t.expect(hasFeature).toEqual(t.jasmine.any(Boolean));
209          t.expect(hasFeature).toEqual(false);
210        }
211      );
212
213      t.it(`calls getMaxMemoryAsync() and returns a number under integer limit`, async () => {
214        let maxMemory = await Device.getMaxMemoryAsync();
215        t.expect(maxMemory).toBeLessThanOrEqual(Number.MAX_SAFE_INTEGER);
216      });
217
218      t.it(`calls getPlatformFeaturesAsync()`, async () => {
219        let allFeatures = await Device.getPlatformFeaturesAsync();
220        t.expect(allFeatures).toBeDefined();
221      });
222    });
223  }
224}
225