xref: /expo/apps/test-suite/tests/Device.js (revision bb8f4f99)
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(`getPlatformFeaturesAsync() returns empty array on iOS`, async () => {
73        let allFeatures;
74        allFeatures = await Device.getPlatformFeaturesAsync();
75        t.expect(allFeatures).toEqual([]);
76      });
77
78      t.it(`hasPlatformFeatureAsync() returns false on iOS`, async () => {
79        let hasFeature;
80        hasFeature = await Device.hasPlatformFeatureAsync('amazon_fire_tv');
81        t.expect(hasFeature).toEqual(false);
82      });
83
84      t.it(`doesn't call getMaxMemoryAsync()`, async () => {
85        let error;
86        let maxMemory;
87        try {
88          maxMemory = await Device.getMaxMemoryAsync();
89        } catch (e) {
90          error = e;
91        }
92        t.expect(error).toBeDefined();
93        t.expect(typeof maxMemory).toEqual('undefined');
94      });
95
96      t.it(`doesn't call sideLoadingAsync()`, async () => {
97        let error;
98        let isSideLoading;
99        try {
100          isSideLoading = await Device.isSideLoadingEnabledAsync();
101        } catch (e) {
102          error = e;
103        }
104        t.expect(error).toBeDefined();
105        t.expect(typeof isSideLoading).toEqual('undefined');
106      });
107
108      t.it(`gets osBuildId same as osInternalBuildId`, async () => {
109        let osBuildId = await Device.osBuildId;
110        let osInternalBuildId = await Device.osInternalBuildId;
111        t.expect(Device.osBuildId).toBeTruthy();
112        t.expect(Device.osInternalBuildId).toBeTruthy();
113        t.expect(osBuildId).toEqual(osInternalBuildId);
114      });
115    });
116  } else if (Platform.OS === 'android') {
117    t.describe(`Device on Android`, () => {
118      t.it(`gets constants and correct types`, async () => {
119        let designName = await Device.designName;
120        let productName = await Device.productName;
121        let brand = await Device.brand;
122        let manufacturer = await Device.manufacturer;
123        let modelName = await Device.modelName;
124        let osName = await Device.osName;
125        let totalMemory = await Device.totalMemory;
126        let isDevice = await Device.isDevice;
127        let osBuildId = await Device.osBuildId;
128        let osBuildFingerprint = await Device.osBuildFingerprint;
129        let osInternalBuildId = await Device.osInternalBuildId;
130        let platformApiLevel = await Device.platformApiLevel;
131        let osVersion = await Device.osVersion;
132        let deviceName = await Device.deviceName;
133        let deviceYearClass = await Device.deviceYearClass;
134        t.expect(designName).toBeDefined();
135        t.expect(typeof designName).toEqual('string');
136        t.expect(productName).toBeDefined();
137        t.expect(typeof productName).toEqual('string');
138        t.expect(brand).toBeDefined();
139        t.expect(typeof brand).toEqual('string');
140        t.expect(manufacturer).toBeDefined();
141        t.expect(typeof manufacturer).toEqual('string');
142        t.expect(modelName).toBeDefined();
143        t.expect(typeof modelName).toEqual('string');
144        t.expect(osName).toBeDefined();
145        t.expect(typeof osName).toEqual('string');
146        t.expect(totalMemory).toBeDefined();
147        t.expect(typeof totalMemory).toEqual('number');
148        t.expect(isDevice).toBeDefined();
149        t.expect(typeof isDevice).toEqual('boolean');
150        t.expect(osBuildId).toBeDefined();
151        t.expect(typeof osBuildId).toEqual('string');
152        t.expect(osBuildFingerprint).toBeDefined();
153        t.expect(typeof osBuildFingerprint).toEqual('string');
154        t.expect(osInternalBuildId).toBeDefined();
155        t.expect(typeof osInternalBuildId).toEqual('string');
156        t.expect(platformApiLevel).toBeDefined();
157        t.expect(typeof platformApiLevel).toEqual('number');
158        t.expect(osVersion).toBeDefined();
159        t.expect(typeof osVersion).toEqual('string');
160        t.expect(deviceYearClass).toBeDefined();
161        t.expect(typeof deviceYearClass).toEqual('number');
162        if (isDevice) {
163          t.expect(deviceName).toBeDefined();
164          t.expect(typeof deviceName).toEqual('string');
165        } else {
166          t.expect(deviceName).toBeNull();
167        }
168      });
169
170      t.it(`doesn't get modelId`, async () => {
171        await Device.modelId;
172        t.expect(Device.modelId).toBeNull();
173      });
174
175      t.it(`calls hasPlatformFeatureAsync() with valid string and returns boolean`, async () => {
176        let error;
177        let hasFeature;
178        try {
179          hasFeature = await Device.hasPlatformFeatureAsync('amazon_fire_tv');
180        } catch (e) {
181          error = e;
182        }
183        t.expect(hasFeature).toEqual(t.jasmine.any(Boolean));
184      });
185
186      t.it(
187        `calls hasPlatformFeatureAsync() with invalid string format and returns false`,
188        async () => {
189          let error;
190          let hasFeature;
191          try {
192            hasFeature = await Device.hasPlatformFeatureAsync('camera');
193          } catch (e) {
194            error = e;
195          }
196          t.expect(hasFeature).toEqual(t.jasmine.any(Boolean));
197          t.expect(hasFeature).toEqual(false);
198        }
199      );
200
201      t.it(`calls getMaxMemoryAsync() and returns a number under integer limit`, async () => {
202        let maxMemory = await Device.getMaxMemoryAsync();
203        t.expect(maxMemory).toBeLessThanOrEqual(Number.MAX_SAFE_INTEGER);
204      });
205
206      t.it(`calls getPlatformFeaturesAsync()`, async () => {
207        let allFeatures = await Device.getPlatformFeaturesAsync();
208        t.expect(allFeatures).toBeDefined();
209      });
210    });
211  }
212}
213