• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.settings.survey;
2 
3 import static com.google.common.truth.Truth.assertThat;
4 import static org.mockito.Matchers.any;
5 import static org.mockito.Matchers.eq;
6 import static org.mockito.Mockito.never;
7 import static org.mockito.Mockito.times;
8 import static org.mockito.Mockito.verify;
9 import static org.mockito.Mockito.when;
10 
11 import android.app.Activity;
12 import android.content.BroadcastReceiver;
13 import android.content.Context;
14 import android.content.IntentFilter;
15 import android.support.v4.content.LocalBroadcastManager;
16 
17 import com.android.settings.core.InstrumentedPreferenceFragment;
18 import com.android.settings.overlay.SurveyFeatureProvider;
19 import com.android.settings.testutils.FakeFeatureFactory;
20 import com.android.settings.testutils.SettingsRobolectricTestRunner;
21 
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.junit.runner.RunWith;
25 import org.mockito.Mock;
26 import org.mockito.MockitoAnnotations;
27 import org.robolectric.Robolectric;
28 import org.robolectric.RuntimeEnvironment;
29 import org.robolectric.util.ReflectionHelpers;
30 
31 import java.util.ArrayList;
32 import java.util.HashMap;
33 
34 @RunWith(SettingsRobolectricTestRunner.class)
35 public class SurveyMixinTest {
36 
37     private static final String FAKE_KEY = "fake_key";
38     private static final String FAKE_SURVEY_ID = "fake_id";
39 
40     private Context mContext;
41     private SurveyFeatureProvider mProvider;
42     @Mock
43     private BroadcastReceiver mReceiver;
44     @Mock
45     private InstrumentedPreferenceFragment mFragment;
46 
47     @Before
setUp()48     public void setUp() {
49         // set up the fakefeature factory to mock out the survey provider
50         MockitoAnnotations.initMocks(this);
51         mContext = RuntimeEnvironment.application;
52         mProvider = FakeFeatureFactory.setupForTest().getSurveyFeatureProvider(mContext);
53         when(mProvider.getSurveyId(any(), eq(FAKE_KEY))).thenReturn(FAKE_SURVEY_ID);
54     }
55 
56     @Test
onResume_triesRegisteringReceiverAndDownloadingWhenNoSurveyDetected()57     public void onResume_triesRegisteringReceiverAndDownloadingWhenNoSurveyDetected() {
58         // Pretend there is no survey in memory
59         when(mProvider.getSurveyExpirationDate(any(), any())).thenReturn(-1L);
60 
61         // Pretend we are an activity that is starting up
62         Activity temp = Robolectric.setupActivity(Activity.class);
63         when(mFragment.getActivity()).thenReturn(temp);
64         SurveyMixin mixin = new SurveyMixin(mFragment, FAKE_KEY);
65         mixin.onResume();
66 
67         // Verify that a download was attempted
68         verify(mProvider, times(1)).downloadSurvey(any(), any(), any());
69         // Verify that we registered a receiver for download completion broadcasts
70         verify(mProvider, times(1)).createAndRegisterReceiver(any());
71         // Verify we did not try to show a survey
72         verify(mProvider, never()).showSurveyIfAvailable(any(), any());
73     }
74 
75     @Test
onResume_triesShowingSurveyWhenOneIsPresent()76     public void onResume_triesShowingSurveyWhenOneIsPresent() {
77         // Pretend there is a survey in memory
78         when(mProvider.getSurveyExpirationDate(any(), any())).thenReturn(0L);
79 
80         // Pretend we are an activity that is starting up
81         Activity temp = Robolectric.setupActivity(Activity.class);
82         when(mFragment.getActivity()).thenReturn(temp);
83         SurveyMixin mixin = new SurveyMixin(mFragment, FAKE_KEY);
84         mixin.onResume();
85 
86         // Verify that a download was not attempted
87         verify(mProvider, never()).downloadSurvey(any(), any(), any());
88         // Verify that we did not register a receiver
89         verify(mProvider, never()).createAndRegisterReceiver(any());
90         // Verify we tried to show a survey
91         verify(mProvider, times(1)).showSurveyIfAvailable(any(), any());
92     }
93 
94     @Test
onResume_doesNothingWhenActivityIsNull()95     public void onResume_doesNothingWhenActivityIsNull() {
96         // Pretend the activity died somewhere in the process
97         when(mFragment.getActivity()).thenReturn(null);
98         SurveyMixin mixin = new SurveyMixin(mFragment, FAKE_KEY);
99         mixin.onResume();
100 
101         // Verify we don't try showing or downloading a survey
102         verify(mProvider, never()).showSurveyIfAvailable(any(), any());
103         verify(mProvider, never()).downloadSurvey(any(), any(), any());
104     }
105 
106     @Test
onPause_removesReceiverIfPreviouslySet()107     public void onPause_removesReceiverIfPreviouslySet() {
108         // Pretend there is a survey in memory
109         when(mProvider.getSurveyExpirationDate(any(), any())).thenReturn(-1L);
110 
111         // Pretend we are an activity that starts and stops
112         Activity temp = Robolectric.setupActivity(Activity.class);
113         when(mFragment.getActivity()).thenReturn(temp);
114         when(mProvider.createAndRegisterReceiver(any())).thenReturn(mReceiver);
115         LocalBroadcastManager manager = LocalBroadcastManager.getInstance(temp);
116         SurveyMixin mixin = new SurveyMixin(mFragment, FAKE_KEY);
117         mixin.onResume();
118         manager.registerReceiver(mReceiver, new IntentFilter());
119         mixin.onPause();
120 
121         // Verify we remove the receiver
122         HashMap<BroadcastReceiver, ArrayList<IntentFilter>> map =
123                 ReflectionHelpers.getField(manager, "mReceivers");
124         assertThat(map.containsKey(mReceiver)).isFalse();
125     }
126 
127     @Test
onPause_doesNothingWhenActivityOrReceiverNull()128     public void onPause_doesNothingWhenActivityOrReceiverNull() {
129         // Pretend there is a survey in memory
130         when(mProvider.getSurveyExpirationDate(any(), any())).thenReturn(-1L);
131 
132         // Pretend we are an activity that fails to create a receiver properly
133         Activity temp = Robolectric.setupActivity(Activity.class);
134         when(mFragment.getActivity()).thenReturn(temp);
135         SurveyMixin mixin = new SurveyMixin(mFragment, FAKE_KEY);
136         mixin.onPause();
137 
138         // Verify we do nothing;
139         verify(mProvider, never()).showSurveyIfAvailable(any(), any());
140 
141         // pretend the activity died before onPause
142         when(mFragment.getActivity()).thenReturn(null);
143         mixin.onPause();
144 
145         // Verify we do nothing
146         verify(mProvider, never()).showSurveyIfAvailable(any(), any());
147     }
148 }
149