DialogFragmentTest.java revision 40e3a7d2b33f4b0053a2054c72f1c856458b6b63
1package com.xtremelabs.robolectric.shadows;
2
3import android.app.Activity;
4import android.app.Dialog;
5import android.os.Bundle;
6import android.support.v4.app.DialogFragment;
7import android.support.v4.app.FragmentActivity;
8import android.view.LayoutInflater;
9import android.view.View;
10import android.view.ViewGroup;
11import com.xtremelabs.robolectric.R;
12import com.xtremelabs.robolectric.WithTestDefaultsRunner;
13import com.xtremelabs.robolectric.tester.android.util.TestFragmentManager;
14import com.xtremelabs.robolectric.util.Transcript;
15import org.junit.Before;
16import org.junit.Test;
17import org.junit.runner.RunWith;
18
19import static com.xtremelabs.robolectric.Robolectric.shadowOf;
20import static org.junit.Assert.*;
21
22@RunWith(WithTestDefaultsRunner.class)
23public class DialogFragmentTest {
24
25    private FragmentActivity activity;
26    private TestDialogFragment dialogFragment;
27    private TestFragmentManager fragmentManager;
28
29    @Before
30    public void setUp() throws Exception {
31        activity = new FragmentActivity();
32        dialogFragment = new TestDialogFragment();
33        fragmentManager = new TestFragmentManager(activity);
34    }
35
36    @Test
37    public void show_shouldCallLifecycleMethods() throws Exception {
38        dialogFragment.show(fragmentManager, "this is a tag");
39
40        dialogFragment.transcript.assertEventsSoFar(
41                "onAttach",
42                "onCreate",
43                "onCreateDialog",
44                "onCreateView",
45                "onViewCreated",
46                "onActivityCreated",
47                "onStart",
48                "onResume"
49        );
50
51        assertNotNull(dialogFragment.getActivity());
52        assertSame(activity, dialogFragment.onAttachActivity);
53    }
54
55    @Test
56    public void show_whenPassedATransaction_shouldCallShowWithManager() throws Exception {
57        dialogFragment.show(fragmentManager.beginTransaction(), "this is a tag");
58
59        dialogFragment.transcript.assertEventsSoFar(
60                "onAttach",
61                "onCreate",
62                "onCreateDialog",
63                "onCreateView",
64                "onViewCreated",
65                "onActivityCreated",
66                "onStart",
67                "onResume"
68        );
69
70        assertNotNull(dialogFragment.getActivity());
71        assertSame(activity, dialogFragment.onAttachActivity);
72    }
73
74    @Test
75    public void show_shouldShowDialogThatWasReturnedFromOnCreateDialog_whenOnCreateDialogReturnsADialog() throws Exception {
76        Dialog dialogFromOnCreateDialog = new Dialog(activity);
77        dialogFragment.returnThisDialogFromOnCreateDialog(dialogFromOnCreateDialog);
78        dialogFragment.show(fragmentManager, "this is a tag");
79
80        Dialog dialog = ShadowDialog.getLatestDialog();
81        assertSame(dialogFromOnCreateDialog, dialog);
82        assertSame(dialogFromOnCreateDialog, dialogFragment.getDialog());
83        assertSame(dialogFragment, fragmentManager.findFragmentByTag("this is a tag"));
84    }
85
86    @Test
87    public void show_shouldShowDialogThatWasAutomaticallyCreated_whenOnCreateDialogReturnsNull() throws Exception {
88        dialogFragment.show(fragmentManager, "this is a tag");
89
90        Dialog dialog = ShadowDialog.getLatestDialog();
91        assertNotNull(dialog);
92        assertSame(dialog, dialogFragment.getDialog());
93        assertNotNull(dialog.findViewById(R.id.title));
94        assertSame(dialogFragment, fragmentManager.findFragmentByTag("this is a tag"));
95    }
96
97    @Test
98    public void dismiss_shouldDismissTheDialog() throws Exception {
99        dialogFragment.show(fragmentManager, "tag");
100
101        dialogFragment.dismiss();
102
103        Dialog dialog = ShadowDialog.getLatestDialog();
104        assertFalse(dialog.isShowing());
105        assertTrue(shadowOf(dialog).hasBeenDismissed());
106    }
107
108    private class TestDialogFragment extends DialogFragment {
109        final Transcript transcript = new Transcript();
110        Activity onAttachActivity;
111        private Dialog returnThisDialogFromOnCreateDialog;
112
113        @Override
114        public void onAttach(Activity activity) {
115            transcript.add("onAttach");
116            onAttachActivity = activity;
117            super.onAttach(activity);
118        }
119
120        @Override
121        public void onCreate(Bundle savedInstanceState) {
122            transcript.add("onCreate");
123        }
124
125        @Override
126        public Dialog onCreateDialog(Bundle savedInstanceState) {
127            transcript.add("onCreateDialog");
128            return returnThisDialogFromOnCreateDialog;
129        }
130
131        @Override
132        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
133            transcript.add("onCreateView");
134            return inflater.inflate(R.layout.main, null);
135        }
136
137        @Override
138        public void onViewCreated(View view, Bundle savedInstanceState) {
139            transcript.add("onViewCreated");
140            super.onViewCreated(view, savedInstanceState);
141        }
142
143        @Override
144        public void onActivityCreated(Bundle savedInstanceState) {
145            transcript.add("onActivityCreated");
146            super.onActivityCreated(savedInstanceState);
147        }
148
149        @Override
150        public void onStart() {
151            transcript.add("onStart");
152            super.onStart();
153        }
154
155        @Override
156        public void onResume() {
157            transcript.add("onResume");
158            super.onResume();
159        }
160
161        public void returnThisDialogFromOnCreateDialog(Dialog dialog) {
162            returnThisDialogFromOnCreateDialog = dialog;
163        }
164    }
165}
166