Robolectric Android testing Fragments and more
private ReminderManagerFragment startReminderManagerFragment() { final ReminderManagerFragment fragment = new ReminderManagerFragment(); SupportFragmentTestUtil.startVisibleFragment(fragment); return fragment; }
@Test public void reminderManagerTest() throws Exception { // by default there should be 3 Reminder rows ReminderManagerFragment fragment = startReminderManagerFragment(); assertThat(fragment).isNotNull(); Button addButton = (Button) fragment.getView().findViewById(R.id.reminder_add_button); assertThat(addButton).isNotNull(); List<Reminder> reminders = getReminders(TestValues.BillyUser); assertThat(reminders.size()).isEqualTo(3); // add a reminder, assert reminders = 4 addButton.performClick(); //assertThat(reminders.size()).isEqualTo(4); TimePickerFragment pickerFragment = (TimePickerFragment) fragment.getFragmentManager() .findFragmentByTag(ReminderManagerFragment.TIME_DIALOG); assertThat(pickerFragment).isNotNull(); reminders = getReminders(TestValues.BillyUser); assertThat(reminders.size()).isEqualTo(4); AlertDialog pickerDialog = (AlertDialog) pickerFragment.getDialog(); assertThat(pickerDialog).isNotNull(); assertThat(pickerDialog.getButton(AlertDialog.BUTTON_POSITIVE)).isNotNull(); Button pickerOKButton = (Button) pickerDialog.getButton(AlertDialog.BUTTON_POSITIVE); pickerOKButton.performClick(); // check that an alarm was set ShadowAlarmManager shadowAlarmManager = shadowOf(AlarmFactory.getAlarmManager(mCtx)); // shadow AlarmManager should return 0 alarms List<ShadowAlarmManager.ScheduledAlarm> shadowAlarms = shadowAlarmManager.getScheduledAlarms(); Log.i(TAG, "alarms currently set: " + shadowAlarms.size()); assertThat(shadowAlarms.size()).isGreaterThan(0);
Try changing TimePicker Hour and Minutes and resubmit AlertDialog (TimePickerDialog), they key method being ((TimePickerDialog) pickerDialog).updateTime(hh,mm);
// try adding a second reminder & alarm addButton.performClick(); pickerFragment = (TimePickerFragment) fragment.getFragmentManager() .findFragmentByTag(ReminderManagerFragment.TIME_DIALOG); assertThat(pickerFragment).isNotNull(); reminders = getReminders(TestValues.BillyUser); assertThat(reminders.size()).isEqualTo(5); pickerDialog = (AlertDialog) pickerFragment.getDialog(); assertThat(pickerDialog).isNotNull(); ((TimePickerDialog) pickerDialog).updateTime(18, 30); pickerOKButton = (Button) pickerDialog.getButton(AlertDialog.BUTTON_POSITIVE); pickerOKButton.performClick(); shadowAlarms = shadowAlarmManager.getScheduledAlarms(); for (ShadowAlarmManager.ScheduledAlarm sAlarm : shadowAlarms) { Log.i(TAG, Dates.getBasicDate(new Date(sAlarm.triggerAtTime)) + " " + sAlarm.operation.toString()); } Log.i(TAG, "alarms currently set: " + shadowAlarms.size()); assertThat(shadowAlarms.size()).isGreaterThan(1);
More to come