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