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