1package com.xtremelabs.robolectric.shadows; 2 3import android.app.Activity; 4import android.app.ProgressDialog; 5import android.content.Context; 6import android.content.DialogInterface; 7import com.xtremelabs.robolectric.Robolectric; 8import com.xtremelabs.robolectric.WithTestDefaultsRunner; 9import org.junit.Before; 10import org.junit.Test; 11import org.junit.runner.RunWith; 12 13import java.util.concurrent.Callable; 14 15import static com.xtremelabs.robolectric.Robolectric.shadowOf; 16import static junit.framework.Assert.assertNull; 17import static org.hamcrest.CoreMatchers.instanceOf; 18import static org.hamcrest.CoreMatchers.nullValue; 19import static org.hamcrest.core.Is.is; 20import static org.hamcrest.core.IsEqual.equalTo; 21import static org.junit.Assert.assertEquals; 22import static org.junit.Assert.assertNotNull; 23import static org.junit.Assert.assertThat; 24import static org.junit.Assert.assertTrue; 25 26@RunWith(WithTestDefaultsRunner.class) 27public class ProgressDialogTest { 28 29 private ProgressDialog dialog; 30 private ShadowProgressDialog shadow; 31 32 @Before 33 public void setUp() { 34 dialog = new ProgressDialog(null); 35 shadow = Robolectric.shadowOf(dialog); 36 } 37 38 @Test 39 public void shouldExtendAlertDialog() { 40 assertThat(shadow, instanceOf(ShadowAlertDialog.class)); 41 } 42 43 @Test 44 public void shouldSetMessage() { 45 CharSequence message = "This is only a test"; 46 47 assertThat(shadow.getMessage(), nullValue()); 48 dialog.setMessage(message); 49 assertThat((CharSequence) shadow.getMessage(), equalTo(message)); 50 } 51 52 @Test 53 public void shouldSetIndeterminate() { 54 assertThat(dialog.isIndeterminate(), equalTo(false)); 55 56 dialog.setIndeterminate(true); 57 assertThat(dialog.isIndeterminate(), equalTo(true)); 58 59 dialog.setIndeterminate(false); 60 assertThat(dialog.isIndeterminate(), equalTo(false)); 61 } 62 63 @Test 64 public void show_shouldCreateAProgressDialog() { 65 Context context = new Activity(); 66 TestOnCancelListener cancelListener = new TestOnCancelListener(); 67 ProgressDialog progressDialog = ProgressDialog.show(context, "Title", "Message", true, true, cancelListener); 68 ShadowProgressDialog shadowProgressDialog = shadowOf(progressDialog); 69 assertThat(shadowProgressDialog.getContext(), is(context)); 70 assertThat(shadowProgressDialog.getMessage(), equalTo("Message")); 71 assertTrue(shadowProgressDialog.isIndeterminate()); 72 assertTrue(shadowProgressDialog.isCancelable()); 73 74 progressDialog.cancel(); 75 assertThat(cancelListener.onCancelDialogInterface, is((DialogInterface) progressDialog)); 76 } 77 78 @Test 79 public void show_setsLatestAlertDialogAndLatestDialog_3args() throws Exception{ 80 assertLatestDialogsSet("Title", "Message", false, false, null, new Callable<ProgressDialog>() { 81 @Override 82 public ProgressDialog call() throws Exception { 83 return ProgressDialog.show(Robolectric.application, "Title", "Message"); 84 } 85 } 86 ); 87 } 88 89 @Test 90 public void show_setsLatestAlertDialogAndLatestDialog_4args() throws Exception{ 91 assertLatestDialogsSet("Title", "Message", true, false, null, new Callable<ProgressDialog>() { 92 @Override 93 public ProgressDialog call() throws Exception { 94 return ProgressDialog.show(Robolectric.application, "Title", "Message", true); 95 } 96 }); 97 } 98 99 @Test 100 public void show_setsLatestAlertDialogAndLatestDialog_5args() throws Exception{ 101 assertLatestDialogsSet("Title", "Message", true, true, null, new Callable<ProgressDialog>() { 102 @Override 103 public ProgressDialog call() throws Exception { 104 return ProgressDialog.show(Robolectric.application, "Title", "Message", true, true); 105 } 106 }); 107 } 108 109 @Test 110 public void show_setsLatestAlertDialogAndLatestDialog_6args() throws Exception{ 111 final DialogInterface.OnCancelListener cancelListener = new DialogInterface.OnCancelListener() { 112 @Override 113 public void onCancel(DialogInterface dialog) { 114 } 115 }; 116 117 assertLatestDialogsSet("Title", "Message", true, true, cancelListener, new Callable<ProgressDialog>() { 118 @Override 119 public ProgressDialog call() throws Exception { 120 return ProgressDialog.show(Robolectric.application, "Title", "Message", true, true, cancelListener); 121 } 122 }); 123 } 124 125 private void assertLatestDialogsSet(CharSequence expectedTitle, CharSequence expectedMessage, boolean expectedIndeterminate, 126 boolean expectedCancelable, DialogInterface.OnCancelListener expectedCancelListener, 127 Callable<ProgressDialog> callable) throws Exception { 128 assertNull(ShadowDialog.getLatestDialog()); 129 assertNull(ShadowAlertDialog.getLatestAlertDialog()); 130 131 dialog = callable.call(); 132 133 assertNotNull(dialog); 134 assertEquals(dialog, ShadowDialog.getLatestDialog()); 135 assertEquals(dialog, ShadowAlertDialog.getLatestAlertDialog()); 136 137 assertEquals(expectedIndeterminate, dialog.isIndeterminate()); 138 assertEquals(expectedMessage, shadowOf(dialog).getMessage()); 139 assertEquals(expectedTitle, shadowOf(dialog).getTitle()); 140 assertEquals(expectedCancelable, shadowOf(dialog).isCancelable()); 141 assertEquals(expectedCancelListener, shadowOf(dialog).getOnCancelListener()); 142 } 143 144 private static class TestOnCancelListener implements DialogInterface.OnCancelListener { 145 public DialogInterface onCancelDialogInterface; 146 147 @Override 148 public void onCancel(DialogInterface dialogInterface) { 149 onCancelDialogInterface = dialogInterface; 150 151 } 152 } 153} 154