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