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