• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.settings.fuelgauge;
17 
18 import static com.google.common.truth.Truth.assertThat;
19 import static org.mockito.Matchers.anyInt;
20 import static org.mockito.Mockito.doReturn;
21 import static org.mockito.Mockito.spy;
22 import static org.mockito.Mockito.verify;
23 import static org.robolectric.Shadows.shadowOf;
24 
25 import android.app.AlertDialog;
26 import android.app.Fragment;
27 import android.content.Context;
28 import android.content.DialogInterface;
29 
30 import com.android.settings.R;
31 import com.android.settings.testutils.SettingsRobolectricTestRunner;
32 
33 import org.junit.Before;
34 import org.junit.Test;
35 import org.junit.runner.RunWith;
36 import org.mockito.Mock;
37 import org.mockito.MockitoAnnotations;
38 import org.robolectric.RuntimeEnvironment;
39 import org.robolectric.shadows.ShadowAlertDialog;
40 import org.robolectric.shadows.ShadowDialog;
41 import org.robolectric.util.FragmentTestUtil;
42 
43 @RunWith(SettingsRobolectricTestRunner.class)
44 public class ButtonActionDialogFragmentTest {
45 
46     private static final int FORCE_STOP_ID = ButtonActionDialogFragment.DialogType.FORCE_STOP;
47     private static final int DISABLE_ID = ButtonActionDialogFragment.DialogType.DISABLE;
48     private static final int SPECIAL_DISABLE_ID =
49             ButtonActionDialogFragment.DialogType.SPECIAL_DISABLE;
50     @Mock
51     private TestFragment mTargetFragment;
52     private ButtonActionDialogFragment mFragment;
53     private Context mShadowContext;
54 
55     @Before
setUp()56     public void setUp() {
57         MockitoAnnotations.initMocks(this);
58         mShadowContext = RuntimeEnvironment.application;
59 
60         mFragment = spy(ButtonActionDialogFragment.newInstance(FORCE_STOP_ID));
61         doReturn(mShadowContext).when(mFragment).getContext();
62         mFragment.setTargetFragment(mTargetFragment, 0);
63     }
64 
65     @Test
testOnClick_handleToTargetFragment()66     public void testOnClick_handleToTargetFragment() {
67         mFragment.onClick(null, 0);
68 
69         verify(mTargetFragment).handleDialogClick(anyInt());
70     }
71 
72     @Test
testOnCreateDialog_forceStopDialog()73     public void testOnCreateDialog_forceStopDialog() {
74         ButtonActionDialogFragment fragment = ButtonActionDialogFragment.newInstance(FORCE_STOP_ID);
75 
76         FragmentTestUtil.startFragment(fragment);
77 
78         final AlertDialog dialog = (AlertDialog) ShadowDialog.getLatestDialog();
79         assertThat(dialog).isNotNull();
80         ShadowAlertDialog shadowDialog = shadowOf(dialog);
81 
82         assertThat(shadowDialog.getMessage()).isEqualTo(
83                 mShadowContext.getString(R.string.force_stop_dlg_text));
84         assertThat(shadowDialog.getTitle()).isEqualTo(
85                 mShadowContext.getString(R.string.force_stop_dlg_title));
86         assertThat(dialog.getButton(DialogInterface.BUTTON_POSITIVE).getText()).isEqualTo(
87                 mShadowContext.getString(R.string.dlg_ok));
88         assertThat(dialog.getButton(DialogInterface.BUTTON_NEGATIVE).getText()).isEqualTo(
89                 mShadowContext.getString(R.string.dlg_cancel));
90     }
91 
92     @Test
testOnCreateDialog_disableDialog()93     public void testOnCreateDialog_disableDialog() {
94         ButtonActionDialogFragment fragment = ButtonActionDialogFragment.newInstance(DISABLE_ID);
95 
96         FragmentTestUtil.startFragment(fragment);
97 
98         final AlertDialog dialog = (AlertDialog) ShadowDialog.getLatestDialog();
99         assertThat(dialog).isNotNull();
100         ShadowAlertDialog shadowDialog = shadowOf(dialog);
101 
102         assertThat(shadowDialog.getMessage()).isEqualTo(
103                 mShadowContext.getString(R.string.app_disable_dlg_text));
104         assertThat(dialog.getButton(DialogInterface.BUTTON_POSITIVE).getText()).isEqualTo(
105                 mShadowContext.getString(R.string.app_disable_dlg_positive));
106         assertThat(dialog.getButton(DialogInterface.BUTTON_NEGATIVE).getText()).isEqualTo(
107                 mShadowContext.getString(R.string.dlg_cancel));
108     }
109 
110     @Test
testOnCreateDialog_specialDisableDialog()111     public void testOnCreateDialog_specialDisableDialog() {
112         ButtonActionDialogFragment fragment =
113             ButtonActionDialogFragment.newInstance(SPECIAL_DISABLE_ID);
114 
115         FragmentTestUtil.startFragment(fragment);
116 
117         final AlertDialog dialog = (AlertDialog) ShadowDialog.getLatestDialog();
118         assertThat(dialog).isNotNull();
119         ShadowAlertDialog shadowDialog = shadowOf(dialog);
120 
121         assertThat(shadowDialog.getMessage()).isEqualTo(
122                 mShadowContext.getString(R.string.app_disable_dlg_text));
123         assertThat(dialog.getButton(DialogInterface.BUTTON_POSITIVE).getText()).isEqualTo(
124                 mShadowContext.getString(R.string.app_disable_dlg_positive));
125         assertThat(dialog.getButton(DialogInterface.BUTTON_NEGATIVE).getText()).isEqualTo(
126                 mShadowContext.getString(R.string.dlg_cancel));
127     }
128 
129     /**
130      * Test fragment that used as the target fragment, it must implement the
131      * {@link com.android.settings.fuelgauge.ButtonActionDialogFragment.AppButtonsDialogListener}
132      */
133     public static class TestFragment extends Fragment implements
134             ButtonActionDialogFragment.AppButtonsDialogListener {
135 
136         @Override
handleDialogClick(int type)137         public void handleDialogClick(int type) {
138             // do nothing
139         }
140     }
141 }
142