xref: /expo/apps/test-suite/tests/Network.js (revision bb8f4f99)
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