1import * as Network from 'expo-network'; 2import { Platform } from 'react-native'; 3 4import { isDeviceFarm } from '../utils/Environment'; 5 6export const name = 'Network'; 7const 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]?)$/; 8const macAddressRegex = /^([0-9a-fA-F]{2}[:.-]){5}[0-9a-fA-F]{2}$/; 9 10export async function test(t) { 11 if (Platform.OS === 'android') { 12 t.describe(`Network.isAirplaneModeEnabledAsync()`, async () => { 13 t.it(`returns a boolean`, async () => { 14 const isAirplaneModeOn = await Network.isAirplaneModeEnabledAsync(); 15 t.expect(isAirplaneModeOn).toBeDefined(); 16 t.expect(typeof isAirplaneModeOn).toBe('boolean'); 17 }); 18 t.it(`throws error Network.getIpAddressAsync() if Airplane mode is on`, async () => { 19 const isAirplaneModeOn = await Network.isAirplaneModeEnabledAsync(); 20 if (isAirplaneModeOn) { 21 let ipAddress; 22 let error; 23 try { 24 ipAddress = await Network.getIpAddressAsync(); 25 } catch (e) { 26 error = e; 27 } 28 t.expect(error).toBeDefined(); 29 t.expect(typeof ipAddress).toEqual('undefined'); 30 } 31 }); 32 t.it(`throws error Network.getNetworkStateAsync() if Airplane mode is on`, async () => { 33 const isAirplaneModeOn = await Network.isAirplaneModeEnabledAsync(); 34 if (isAirplaneModeOn) { 35 let networkState; 36 let error; 37 try { 38 networkState = await Network.getNetworkStateAsync(); 39 } catch (e) { 40 error = e; 41 } 42 t.expect(error).toBeDefined(); 43 t.expect(typeof networkState).toEqual('undefined'); 44 } 45 }); 46 }); 47 } 48 t.describe(`Network.getIpAddressAsync()`, () => { 49 t.it(`gets valid IPV4 address when device's online`, async () => { 50 let ipAddress; 51 let error; 52 try { 53 ipAddress = await Network.getIpAddressAsync(); 54 } catch (e) { 55 error = e; 56 } 57 t.expect(typeof ipAddress).toEqual('string'); 58 t.expect(typeof error).toEqual('undefined'); 59 t.expect(Ipv4Regex.test(ipAddress)).toBeTruthy(); 60 }); 61 }); 62 t.describe(`Network.getNetworkStateAsync()`, () => { 63 t.it(`gets valid NetworkState types and valid NetworkStateType enums`, async () => { 64 function validateBoolean(result) { 65 t.expect(result).toBeDefined(); 66 t.expect(typeof result).toBe('boolean'); 67 } 68 let error; 69 try { 70 const { type, isConnected, isInternetReachable } = await Network.getNetworkStateAsync(); 71 validateBoolean(isConnected); 72 validateBoolean(isInternetReachable); 73 t.expect(Object.values(Network.NetworkStateType).includes(type)).toBeTruthy(); 74 t.expect(typeof error).toEqual('undefined'); 75 } catch (e) { 76 error = e; 77 } 78 }); 79 }); 80} 81