Home | History | Annotate | Download | only in shadows
      1 package com.xtremelabs.robolectric.shadows;
      2 
      3 import android.app.Activity;
      4 import android.app.Dialog;
      5 import android.os.Bundle;
      6 import android.support.v4.app.DialogFragment;
      7 import android.support.v4.app.FragmentActivity;
      8 import android.support.v4.app.FragmentTransaction;
      9 import android.view.LayoutInflater;
     10 import android.view.View;
     11 import android.view.ViewGroup;
     12 import com.xtremelabs.robolectric.R;
     13 import com.xtremelabs.robolectric.WithTestDefaultsRunner;
     14 import com.xtremelabs.robolectric.tester.android.util.TestFragmentManager;
     15 import com.xtremelabs.robolectric.util.Transcript;
     16 import org.junit.Before;
     17 import org.junit.Test;
     18 import org.junit.runner.RunWith;
     19 
     20 import static com.xtremelabs.robolectric.Robolectric.shadowOf;
     21 import static org.junit.Assert.*;
     22 
     23 @RunWith(WithTestDefaultsRunner.class)
     24 public class DialogFragmentTest {
     25 
     26     private FragmentActivity activity;
     27     private TestDialogFragment dialogFragment;
     28     private TestFragmentManager fragmentManager;
     29 
     30     @Before
     31     public void setUp() throws Exception {
     32         activity = new FragmentActivity();
     33         dialogFragment = new TestDialogFragment();
     34         fragmentManager = new TestFragmentManager(activity);
     35     }
     36 
     37     @Test
     38     public void show_shouldCallLifecycleMethods() throws Exception {
     39         dialogFragment.show(fragmentManager, "this is a tag");
     40 
     41         dialogFragment.transcript.assertEventsSoFar(
     42                 "onAttach",
     43                 "onCreate",
     44                 "onCreateDialog",
     45                 "onCreateView",
     46                 "onViewCreated",
     47                 "onActivityCreated",
     48                 "onStart",
     49                 "onResume"
     50         );
     51 
     52         assertNotNull(dialogFragment.getActivity());
     53         assertSame(activity, dialogFragment.onAttachActivity);
     54     }
     55 
     56     @Test
     57     public void show_whenPassedATransaction_shouldCallShowWithManager() throws Exception {
     58         dialogFragment.show(fragmentManager.beginTransaction(), "this is a tag");
     59 
     60         dialogFragment.transcript.assertEventsSoFar(
     61                 "onAttach",
     62                 "onCreate",
     63                 "onCreateDialog",
     64                 "onCreateView",
     65                 "onViewCreated",
     66                 "onActivityCreated",
     67                 "onStart",
     68                 "onResume"
     69         );
     70 
     71         assertNotNull(dialogFragment.getActivity());
     72         assertSame(activity, dialogFragment.onAttachActivity);
     73     }
     74 
     75     @Test
     76     public void show_shouldShowDialogThatWasReturnedFromOnCreateDialog_whenOnCreateDialogReturnsADialog() throws Exception {
     77         Dialog dialogFromOnCreateDialog = new Dialog(activity);
     78         dialogFragment.returnThisDialogFromOnCreateDialog(dialogFromOnCreateDialog);
     79         dialogFragment.show(fragmentManager, "this is a tag");
     80 
     81         Dialog dialog = ShadowDialog.getLatestDialog();
     82         assertSame(dialogFromOnCreateDialog, dialog);
     83         assertSame(dialogFromOnCreateDialog, dialogFragment.getDialog());
     84         assertSame(dialogFragment, fragmentManager.findFragmentByTag("this is a tag"));
     85     }
     86 
     87     @Test
     88     public void show_shouldShowDialogThatWasAutomaticallyCreated_whenOnCreateDialogReturnsNull() throws Exception {
     89         dialogFragment.show(fragmentManager, "this is a tag");
     90 
     91         Dialog dialog = ShadowDialog.getLatestDialog();
     92         assertNotNull(dialog);
     93         assertSame(dialog, dialogFragment.getDialog());
     94         assertNotNull(dialog.findViewById(R.id.title));
     95         assertSame(dialogFragment, fragmentManager.findFragmentByTag("this is a tag"));
     96     }
     97 
     98     @Test
     99     public void dismiss_shouldDismissTheDialog() throws Exception {
    100         dialogFragment.show(fragmentManager, "tag");
    101 
    102         dialogFragment.dismiss();
    103 
    104         Dialog dialog = ShadowDialog.getLatestDialog();
    105         assertFalse(dialog.isShowing());
    106         assertTrue(shadowOf(dialog).hasBeenDismissed());
    107     }
    108 
    109     @Test
    110     public void removeUsingTransaction_shouldDismissTheDialog() throws Exception {
    111         dialogFragment.show(fragmentManager, null);
    112 
    113         FragmentTransaction t = fragmentManager.beginTransaction();
    114         t.remove(dialogFragment);
    115         t.commit();
    116 
    117         Dialog dialog = ShadowDialog.getLatestDialog();
    118         assertFalse(dialog.isShowing());
    119         assertTrue(shadowOf(dialog).hasBeenDismissed());
    120     }
    121 
    122     @Test
    123     public void shouldDefaultToCancelable() throws Exception {
    124         DialogFragment dialogFragment = new DialogFragment();
    125 
    126         assertTrue(dialogFragment.isCancelable());
    127     }
    128 
    129     @Test
    130     public void shouldStoreCancelable() throws Exception {
    131         DialogFragment dialogFragment = new DialogFragment();
    132 
    133         dialogFragment.setCancelable(false);
    134 
    135         assertFalse(dialogFragment.isCancelable());
    136     }
    137 
    138     @Test
    139     public void shouldSetCancelableOnDialog() throws Exception {
    140         DialogFragment dialogFragment = new DialogFragment();
    141         dialogFragment.show(fragmentManager, "TAG");
    142 
    143         Dialog dialog = dialogFragment.getDialog();
    144 
    145         assertTrue(shadowOf(dialog).isCancelable());
    146     }
    147 
    148     @Test
    149     public void shouldSetNotCancelableOnDialogBeforeShow() throws Exception {
    150         DialogFragment dialogFragment = new DialogFragment();
    151         dialogFragment.setCancelable(false);
    152         dialogFragment.show(fragmentManager, "TAG");
    153 
    154         Dialog dialog = dialogFragment.getDialog();
    155 
    156         assertFalse(shadowOf(dialog).isCancelable());
    157     }
    158 
    159     @Test
    160     public void shouldSetNotCancelableOnDialogAfterShow() throws Exception {
    161         DialogFragment dialogFragment = new DialogFragment();
    162         dialogFragment.show(fragmentManager, "TAG");
    163         dialogFragment.setCancelable(false);
    164 
    165         Dialog dialog = dialogFragment.getDialog();
    166 
    167         assertFalse(shadowOf(dialog).isCancelable());
    168     }
    169 
    170     private class TestDialogFragment extends DialogFragment {
    171         final Transcript transcript = new Transcript();
    172         Activity onAttachActivity;
    173         private Dialog returnThisDialogFromOnCreateDialog;
    174 
    175         @Override
    176         public void onAttach(Activity activity) {
    177             transcript.add("onAttach");
    178             onAttachActivity = activity;
    179             super.onAttach(activity);
    180         }
    181 
    182         @Override
    183         public void onCreate(Bundle savedInstanceState) {
    184             transcript.add("onCreate");
    185         }
    186 
    187         @Override
    188         public Dialog onCreateDialog(Bundle savedInstanceState) {
    189             transcript.add("onCreateDialog");
    190             return returnThisDialogFromOnCreateDialog;
    191         }
    192 
    193         @Override
    194         public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    195             transcript.add("onCreateView");
    196             return inflater.inflate(R.layout.main, null);
    197         }
    198 
    199         @Override
    200         public void onViewCreated(View view, Bundle savedInstanceState) {
    201             transcript.add("onViewCreated");
    202             super.onViewCreated(view, savedInstanceState);
    203         }
    204 
    205         @Override
    206         public void onActivityCreated(Bundle savedInstanceState) {
    207             transcript.add("onActivityCreated");
    208             super.onActivityCreated(savedInstanceState);
    209         }
    210 
    211         @Override
    212         public void onStart() {
    213             transcript.add("onStart");
    214             super.onStart();
    215         }
    216 
    217         @Override
    218         public void onResume() {
    219             transcript.add("onResume");
    220             super.onResume();
    221         }
    222 
    223         public void returnThisDialogFromOnCreateDialog(Dialog dialog) {
    224             returnThisDialogFromOnCreateDialog = dialog;
    225         }
    226     }
    227 }
    228