1import * as Network from 'expo-network'; 2import { Platform } from 'react-native'; 3import { isDeviceFarm } from '../utils/Environment'; 4 5export const name = 'Network'; 6let Ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; 7let macAddressRegex = /^([0-9a-fA-F]{2}[:.-]){5}[0-9a-fA-F]{2}$/; 8 9export async function test(t) { 10 if (Platform.OS === 'android') { 11 t.describe(`Network.isAirplaneModeEnabledAsync()`, async () => { 12 t.it(`returns a boolean`, async () => { 13 let isAirplaneModeOn = await Network.isAirplaneModeEnabledAsync(); 14 t.expect(isAirplaneModeOn).toBeDefined(); 15 t.expect(typeof isAirplaneModeOn).toBe('boolean'); 16 }); 17 t.it(`throws error Network.getIpAddressAsync() if Airplane mode is on`, async () => { 18 let isAirplaneModeOn = await Network.isAirplaneModeEnabledAsync(); 19 if (isAirplaneModeOn) { 20 let ipAddress; 21 let error; 22 try { 23 ipAddress = await Network.getIpAddressAsync(); 24 } catch (e) { 25 error = e; 26 } 27 t.expect(error).toBeDefined(); 28 t.expect(typeof ipAddress).toEqual('undefined'); 29 } 30 }); 31 t.it(`throws error Network.getNetworkStateAsync() if Airplane mode is on`, async () => { 32 let isAirplaneModeOn = await Network.isAirplaneModeEnabledAsync(); 33 if (isAirplaneModeOn) { 34 let networkState; 35 let error; 36 try { 37 networkState = await Network.getNetworkStateAsync(); 38 } catch (e) { 39 error = e; 40 } 41 t.expect(error).toBeDefined(); 42 t.expect(typeof ipAddress).toEqual('undefined'); 43 } 44 }); 45 }); 46 } 47 t.describe(`Network.getIpAddressAsync()`, () => { 48 t.it(`gets valid IPV4 address when device's online`, async () => { 49 let ipAddress; 50 let error; 51 try { 52 ipAddress = await Network.getIpAddressAsync(); 53 } catch (e) { 54 error = e; 55 } 56 t.expect(typeof ipAddress).toEqual('string'); 57 t.expect(typeof error).toEqual('undefined'); 58 t.expect(Ipv4Regex.test(ipAddress)).toBeTruthy(); 59 }); 60 }); 61 t.describe(`Network.getMacAddressAsync()`, () => { 62 if (!isDeviceFarm()) { 63 t.it(`returns valid Mac address when pass in no network interface name`, async () => { 64 let macAddress; 65 let error; 66 try { 67 macAddress = await Network.getMacAddressAsync(); 68 } catch (e) { 69 error = e; 70 } 71 t.expect(typeof error).toEqual('undefined'); 72 t.expect(macAddress).toBeDefined(); 73 t.expect(macAddressRegex.test(macAddress)).toBeTruthy(); 74 }); 75 } 76 if (Platform.OS === 'android') { 77 t.it(`throws error when pass in invalid network interface name`, async () => { 78 let macAddress; 79 let error; 80 try { 81 macAddress = await Network.getMacAddressAsync('helloworld'); 82 } catch (e) { 83 error = e; 84 } 85 t.expect(error).toBeDefined(); 86 t.expect(typeof macAddress).toEqual('undefined'); 87 }); 88 if (!isDeviceFarm()) { 89 t.it(`returns valid Mac address when pass in null as network interface name`, async () => { 90 let macAddress; 91 let error; 92 try { 93 macAddress = await Network.getMacAddressAsync(null); 94 } catch (e) { 95 error = e; 96 } 97 t.expect(typeof error).toEqual('undefined'); 98 t.expect(macAddress).toBeDefined(); 99 t.expect(macAddressRegex.test(macAddress)).toBeTruthy(); 100 }); 101 } 102 } 103 }); 104 t.describe(`Network.getNetworkStateAsync()`, () => { 105 t.it(`gets valid NetworkState types and valid NetworkStateType enums`, async () => { 106 function validateBoolean(result) { 107 t.expect(result).toBeDefined(); 108 t.expect(typeof result).toBe('boolean'); 109 } 110 let error; 111 try { 112 const { type, isConnected, isInternetReachable } = await Network.getNetworkStateAsync(); 113 validateBoolean(isConnected); 114 validateBoolean(isInternetReachable); 115 t.expect(Object.values(Network.NetworkStateType).includes(type)).toBeTruthy(); 116 t.expect(typeof error).toEqual('undefined'); 117 } catch (e) { 118 error = e; 119 } 120 }); 121 }); 122} 123