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