• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.xtremelabs.robolectric.shadows;
2 
3 import android.app.Dialog;
4 import android.content.DialogInterface;
5 import android.os.Bundle;
6 import android.widget.TextView;
7 import com.xtremelabs.robolectric.R;
8 import com.xtremelabs.robolectric.Robolectric;
9 import com.xtremelabs.robolectric.WithTestDefaultsRunner;
10 import com.xtremelabs.robolectric.util.Transcript;
11 import org.junit.Test;
12 import org.junit.runner.RunWith;
13 
14 import static com.xtremelabs.robolectric.util.TestUtil.assertInstanceOf;
15 import static junit.framework.Assert.*;
16 import static org.hamcrest.CoreMatchers.nullValue;
17 import static org.hamcrest.CoreMatchers.sameInstance;
18 import static org.hamcrest.core.IsEqual.equalTo;
19 import static org.junit.Assert.assertNotNull;
20 import static org.junit.Assert.assertThat;
21 
22 @RunWith(WithTestDefaultsRunner.class)
23 public class DialogTest {
24 	@Test
shouldCallOnDismissListener()25     public void shouldCallOnDismissListener() throws Exception {
26         final Transcript transcript = new Transcript();
27 
28         final Dialog dialog = new Dialog(null);
29         dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
30             @Override
31             public void onDismiss(DialogInterface dialogInListener) {
32                 assertThat((Dialog) dialogInListener, sameInstance(dialog));
33                 transcript.add("onDismiss called!");
34             }
35         });
36 
37         dialog.dismiss();
38 
39         transcript.assertEventsSoFar("onDismiss called!");
40     }
41 
42     @Test
shouldGetLayoutInflater()43     public void shouldGetLayoutInflater() {
44         Dialog dialog = new Dialog(Robolectric.application);
45         assertNotNull(dialog.getLayoutInflater());
46     }
47 
48     @Test
shouldCallOnStartFromShow()49     public void shouldCallOnStartFromShow() {
50         TestDialog dialog = new TestDialog();
51         dialog.show();
52 
53         assertTrue(dialog.onStartCalled);
54     }
55 
56     @Test
shouldSetCancelable()57     public void shouldSetCancelable() {
58         Dialog dialog = new Dialog(null);
59         ShadowDialog shadow = Robolectric.shadowOf(dialog);
60 
61         dialog.setCancelable(false);
62         assertThat(shadow.isCancelable(), equalTo(false));
63     }
64 
65     @Test
shouldDismissTheRealDialogWhenCancelled()66     public void shouldDismissTheRealDialogWhenCancelled() throws Exception {
67         TestDialog dialog = new TestDialog();
68         dialog.cancel();
69         assertThat(dialog.wasDismissed, equalTo(true));
70     }
71 
72     @Test
shouldDefaultCancelableToTrueAsTheSDKDoes()73     public void shouldDefaultCancelableToTrueAsTheSDKDoes() throws Exception {
74         Dialog dialog = new Dialog(null);
75         ShadowDialog shadow = Robolectric.shadowOf(dialog);
76 
77         assertThat(shadow.isCancelable(), equalTo(true));
78     }
79 
80     @Test
shouldOnlyCallOnCreateOnce()81     public void shouldOnlyCallOnCreateOnce() {
82         final Transcript transcript = new Transcript();
83 
84         Dialog dialog = new Dialog(Robolectric.application) {
85             @Override
86             protected void onCreate(Bundle savedInstanceState) {
87                 super.onCreate(savedInstanceState);
88                 transcript.add("onCreate called");
89             }
90         };
91 
92         dialog.show();
93         transcript.assertEventsSoFar("onCreate called");
94 
95         dialog.dismiss();
96         dialog.show();
97         transcript.assertNoEventsSoFar();
98     }
99 
100     @Test
show_setsLatestDialog()101     public void show_setsLatestDialog() {
102         Dialog dialog = new Dialog(Robolectric.application);
103         assertNull(ShadowDialog.getLatestDialog());
104 
105         dialog.show();
106 
107         assertEquals(dialog, ShadowDialog.getLatestDialog());
108         assertNull(ShadowAlertDialog.getLatestAlertDialog());
109     }
110 
111     @Test
getLatestDialog_shouldReturnARealDialog()112     public void getLatestDialog_shouldReturnARealDialog() throws Exception {
113         assertThat(ShadowDialog.getLatestDialog(), nullValue());
114 
115         Dialog dialog = new Dialog(null);
116         dialog.show();
117         assertThat(ShadowDialog.getLatestDialog(), sameInstance(dialog));
118     }
119 
120     @Test
shouldKeepListOfOpenedDialogs()121     public void shouldKeepListOfOpenedDialogs() throws Exception {
122         assertEquals(0, ShadowDialog.getShownDialogs().size());
123 
124         TestDialog dialog = new TestDialog();
125         dialog.show();
126 
127         assertEquals(1, ShadowDialog.getShownDialogs().size());
128         assertEquals(dialog, ShadowDialog.getShownDialogs().get(0));
129 
130         TestDialog dialog2 = new TestDialog();
131         dialog2.show();
132 
133         assertEquals(2, ShadowDialog.getShownDialogs().size());
134         assertEquals(dialog2, ShadowDialog.getShownDialogs().get(1));
135 
136         dialog.dismiss();
137 
138         assertEquals(2, ShadowDialog.getShownDialogs().size());
139 
140         ShadowDialog.reset();
141 
142         assertEquals(0, ShadowDialog.getShownDialogs().size());
143     }
144 
145     @Test
shouldPopulateListOfRecentDialogsInCorrectOrder()146     public void shouldPopulateListOfRecentDialogsInCorrectOrder() throws Exception {
147         new NestingTestDialog().show();
148 
149         assertEquals(TestDialog.class, ShadowDialog.getLatestDialog().getClass());
150     }
151 
152     @Test
shouldFindViewsWithinAContentViewThatWasPreviouslySet()153     public void shouldFindViewsWithinAContentViewThatWasPreviouslySet() throws Exception {
154         Dialog dialog = new Dialog(Robolectric.application);
155         dialog.setContentView(dialog.getLayoutInflater().inflate(R.layout.main, null));
156         assertInstanceOf(TextView.class, dialog.findViewById(R.id.title));
157     }
158 
159     private static class TestDialog extends Dialog {
160         boolean onStartCalled = false;
161         boolean wasDismissed =  false;
162 
TestDialog()163         public TestDialog() {
164             super(null);
165         }
166 
167         @Override
onStart()168         protected void onStart() {
169             onStartCalled = true;
170         }
171 
dismiss()172         @Override public void dismiss() {
173             super.dismiss();
174             wasDismissed = true;
175         }
176     }
177 
178     private static class NestingTestDialog extends Dialog {
NestingTestDialog()179         public NestingTestDialog() {
180             super(null);
181         };
182 
183         @Override
onCreate(Bundle savedInstanceState)184         protected void onCreate(Bundle savedInstanceState) {
185             super.onCreate(savedInstanceState);
186             new TestDialog().show();
187         }
188     }
189 }
190