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 const 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 const 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 const brand = Device.brand; 27 const manufacturer = Device.manufacturer; 28 const modelName = Device.modelName; 29 const osName = Device.osName; 30 const totalMemory = Device.totalMemory; 31 const isDevice = Device.isDevice; 32 const osBuildId = Device.osBuildId; 33 const osInternalBuildId = Device.osInternalBuildId; 34 const osVersion = Device.osVersion; 35 const deviceName = Device.deviceName; 36 const deviceType = Device.deviceType; 37 const deviceYearClass = Device.deviceYearClass; 38 t.expect(brand).toBeDefined(); 39 t.expect(typeof brand).toEqual('string'); 40 t.expect(manufacturer).toBeDefined(); 41 t.expect(typeof manufacturer).toEqual('string'); 42 t.expect(modelName).toBeDefined(); 43 t.expect(typeof modelName).toEqual('string'); 44 t.expect(osName).toBeDefined(); 45 t.expect(typeof osName).toEqual('string'); 46 t.expect(totalMemory).toBeDefined(); 47 t.expect(typeof totalMemory).toEqual('number'); 48 t.expect(isDevice).toBeDefined(); 49 t.expect(typeof isDevice).toEqual('boolean'); 50 t.expect(osBuildId).toBeDefined(); 51 t.expect(typeof osBuildId).toEqual('string'); 52 t.expect(osInternalBuildId).toBeDefined(); 53 t.expect(typeof osInternalBuildId).toEqual('string'); 54 t.expect(osVersion).toBeDefined(); 55 t.expect(typeof osVersion).toEqual('string'); 56 t.expect(deviceYearClass).toBeDefined(); 57 t.expect(typeof deviceYearClass).toEqual('number'); 58 t.expect(deviceName).toBeDefined(); 59 t.expect(typeof deviceName).toEqual('string'); 60 t.expect(deviceType).toBeDefined(); 61 t.expect(typeof deviceType).toEqual('number'); 62 }); 63 64 t.it(`doesn't get Android-only constants`, async () => { 65 const osBuildFingerprint = Device.osBuildFingerprint; 66 const designName = Device.designName; 67 const productName = Device.productName; 68 const platformApiLevel = Device.platformApiLevel; 69 t.expect(designName).toBeNull(); 70 t.expect(productName).toBeNull(); 71 t.expect(platformApiLevel).toBeNull(); 72 t.expect(osBuildFingerprint).toBeNull(); 73 }); 74 75 t.it(`getPlatformFeaturesAsync() returns empty array on iOS`, async () => { 76 const allFeatures = await Device.getPlatformFeaturesAsync(); 77 t.expect(allFeatures).toEqual([]); 78 }); 79 80 t.it(`hasPlatformFeatureAsync() returns false on iOS`, async () => { 81 const hasFeature = await Device.hasPlatformFeatureAsync('amazon_fire_tv'); 82 t.expect(hasFeature).toEqual(false); 83 }); 84 85 t.it(`doesn't call getMaxMemoryAsync()`, async () => { 86 let error; 87 let maxMemory; 88 try { 89 maxMemory = await Device.getMaxMemoryAsync(); 90 } catch (e) { 91 error = e; 92 } 93 t.expect(error).toBeDefined(); 94 t.expect(typeof maxMemory).toEqual('undefined'); 95 }); 96 97 t.it(`doesn't call sideLoadingAsync()`, async () => { 98 let error; 99 let isSideLoading; 100 try { 101 isSideLoading = await Device.isSideLoadingEnabledAsync(); 102 } catch (e) { 103 error = e; 104 } 105 t.expect(error).toBeDefined(); 106 t.expect(typeof isSideLoading).toEqual('undefined'); 107 }); 108 109 t.it(`gets osBuildId same as osInternalBuildId`, async () => { 110 const osBuildId = await Device.osBuildId; 111 const osInternalBuildId = await Device.osInternalBuildId; 112 t.expect(Device.osBuildId).toBeTruthy(); 113 t.expect(Device.osInternalBuildId).toBeTruthy(); 114 t.expect(osBuildId).toEqual(osInternalBuildId); 115 }); 116 }); 117 } else if (Platform.OS === 'android') { 118 t.describe(`Device on Android`, () => { 119 t.it(`gets constants and correct types`, async () => { 120 const designName = await Device.designName; 121 const productName = await Device.productName; 122 const brand = await Device.brand; 123 const manufacturer = await Device.manufacturer; 124 const modelName = await Device.modelName; 125 const osName = await Device.osName; 126 const totalMemory = await Device.totalMemory; 127 const isDevice = await Device.isDevice; 128 const osBuildId = await Device.osBuildId; 129 const osBuildFingerprint = await Device.osBuildFingerprint; 130 const osInternalBuildId = await Device.osInternalBuildId; 131 const platformApiLevel = await Device.platformApiLevel; 132 const osVersion = await Device.osVersion; 133 const deviceName = await Device.deviceName; 134 const deviceYearClass = await Device.deviceYearClass; 135 t.expect(designName).toBeDefined(); 136 t.expect(typeof designName).toEqual('string'); 137 t.expect(productName).toBeDefined(); 138 t.expect(typeof productName).toEqual('string'); 139 t.expect(brand).toBeDefined(); 140 t.expect(typeof brand).toEqual('string'); 141 t.expect(manufacturer).toBeDefined(); 142 t.expect(typeof manufacturer).toEqual('string'); 143 t.expect(modelName).toBeDefined(); 144 t.expect(typeof modelName).toEqual('string'); 145 t.expect(osName).toBeDefined(); 146 t.expect(typeof osName).toEqual('string'); 147 t.expect(totalMemory).toBeDefined(); 148 t.expect(typeof totalMemory).toEqual('number'); 149 t.expect(isDevice).toBeDefined(); 150 t.expect(typeof isDevice).toEqual('boolean'); 151 t.expect(osBuildId).toBeDefined(); 152 t.expect(typeof osBuildId).toEqual('string'); 153 t.expect(osBuildFingerprint).toBeDefined(); 154 t.expect(typeof osBuildFingerprint).toEqual('string'); 155 t.expect(osInternalBuildId).toBeDefined(); 156 t.expect(typeof osInternalBuildId).toEqual('string'); 157 t.expect(platformApiLevel).toBeDefined(); 158 t.expect(typeof platformApiLevel).toEqual('number'); 159 t.expect(osVersion).toBeDefined(); 160 t.expect(typeof osVersion).toEqual('string'); 161 t.expect(deviceYearClass).toBeDefined(); 162 t.expect(typeof deviceYearClass).toEqual('number'); 163 if (isDevice) { 164 t.expect(deviceName).toBeDefined(); 165 t.expect(typeof deviceName).toEqual('string'); 166 } else { 167 t.expect(deviceName).toBeNull(); 168 } 169 }); 170 171 t.it(`doesn't get modelId`, async () => { 172 await Device.modelId; 173 t.expect(Device.modelId).toBeNull(); 174 }); 175 176 t.it(`calls hasPlatformFeatureAsync() with valid string and returns boolean`, async () => { 177 let error; 178 let hasFeature; 179 try { 180 hasFeature = await Device.hasPlatformFeatureAsync('amazon_fire_tv'); 181 } catch (e) { 182 error = e; 183 } 184 t.expect(hasFeature).toEqual(t.jasmine.any(Boolean)); 185 t.expect(error).toBeUndefined(); 186 }); 187 188 t.it( 189 `calls hasPlatformFeatureAsync() with invalid string format and returns false`, 190 async () => { 191 let error; 192 let hasFeature; 193 try { 194 hasFeature = await Device.hasPlatformFeatureAsync('camera'); 195 } catch (e) { 196 error = e; 197 } 198 t.expect(hasFeature).toEqual(t.jasmine.any(Boolean)); 199 t.expect(hasFeature).toEqual(false); 200 t.expect(error).toBeUndefined(); 201 } 202 ); 203 204 t.it(`calls getMaxMemoryAsync() and returns a number under integer limit`, async () => { 205 const maxMemory = await Device.getMaxMemoryAsync(); 206 t.expect(maxMemory).toBeLessThanOrEqual(Number.MAX_SAFE_INTEGER); 207 }); 208 209 t.it(`calls getPlatformFeaturesAsync()`, async () => { 210 const allFeatures = await Device.getPlatformFeaturesAsync(); 211 t.expect(allFeatures).toBeDefined(); 212 }); 213 }); 214 } 215} 216