Home | History | Annotate | Download | only in shadows
      1 package com.xtremelabs.robolectric.shadows;
      2 
      3 import android.app.Activity;
      4 import android.app.ProgressDialog;
      5 import android.content.Context;
      6 import android.content.DialogInterface;
      7 import com.xtremelabs.robolectric.Robolectric;
      8 import com.xtremelabs.robolectric.WithTestDefaultsRunner;
      9 import org.junit.Before;
     10 import org.junit.Test;
     11 import org.junit.runner.RunWith;
     12 
     13 import java.util.concurrent.Callable;
     14 
     15 import static com.xtremelabs.robolectric.Robolectric.shadowOf;
     16 import static junit.framework.Assert.assertNull;
     17 import static org.hamcrest.CoreMatchers.instanceOf;
     18 import static org.hamcrest.CoreMatchers.nullValue;
     19 import static org.hamcrest.core.Is.is;
     20 import static org.hamcrest.core.IsEqual.equalTo;
     21 import static org.junit.Assert.assertEquals;
     22 import static org.junit.Assert.assertNotNull;
     23 import static org.junit.Assert.assertThat;
     24 import static org.junit.Assert.assertTrue;
     25 
     26 @RunWith(WithTestDefaultsRunner.class)
     27 public 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