1package com.android.server.location;
2
3import static com.google.common.truth.Truth.assertThat;
4
5import static org.mockito.Mockito.times;
6import static org.mockito.Mockito.verify;
7import static org.mockito.Mockito.when;
8
9import android.os.Handler;
10import android.os.Looper;
11import android.platform.test.annotations.Presubmit;
12
13import com.android.server.testing.FrameworkRobolectricTestRunner;
14import com.android.server.testing.SystemLoaderPackages;
15
16import org.junit.Before;
17import org.junit.Test;
18import org.junit.runner.RunWith;
19import org.mockito.Mock;
20import org.mockito.MockitoAnnotations;
21import org.robolectric.annotation.Config;
22
23/**
24 * Unit tests for {@link GnssNavigationMessageProvider}.
25 */
26@RunWith(FrameworkRobolectricTestRunner.class)
27@Config(
28        manifest = Config.NONE,
29        sdk = 27
30)
31@SystemLoaderPackages({"com.android.server.location"})
32@Presubmit
33public class GnssNavigationMessageProviderTest {
34    @Mock
35    private GnssNavigationMessageProvider.GnssNavigationMessageProviderNative mMockNative;
36    private GnssNavigationMessageProvider mTestProvider;
37
38    @Before
39    public void setUp() {
40        MockitoAnnotations.initMocks(this);
41        when(mMockNative.startNavigationMessageCollection()).thenReturn(true);
42        when(mMockNative.stopNavigationMessageCollection()).thenReturn(true);
43
44        mTestProvider = new GnssNavigationMessageProvider(new Handler(Looper.myLooper()),
45                mMockNative) {
46            @Override
47            public boolean isGpsEnabled() {
48                return true;
49            }
50        };
51    }
52
53    @Test
54    public void register_nativeStarted() {
55        mTestProvider.registerWithService();
56        verify(mMockNative).startNavigationMessageCollection();
57    }
58
59    @Test
60    public void unregister_nativeStopped() {
61        mTestProvider.registerWithService();
62        mTestProvider.unregisterFromService();
63        verify(mMockNative).stopNavigationMessageCollection();
64    }
65
66    @Test
67    public void isSupported_nativeIsSupported() {
68        when(mMockNative.isNavigationMessageSupported()).thenReturn(true);
69        assertThat(mTestProvider.isAvailableInPlatform()).isTrue();
70
71        when(mMockNative.isNavigationMessageSupported()).thenReturn(false);
72        assertThat(mTestProvider.isAvailableInPlatform()).isFalse();
73    }
74
75    @Test
76    public void register_resume_started() {
77        mTestProvider.registerWithService();
78        mTestProvider.resumeIfStarted();
79        verify(mMockNative, times(2)).startNavigationMessageCollection();
80    }
81
82    @Test
83    public void unregister_resume_notStarted() {
84        mTestProvider.registerWithService();
85        mTestProvider.unregisterFromService();
86        mTestProvider.resumeIfStarted();
87        verify(mMockNative, times(1)).startNavigationMessageCollection();
88    }
89}
90