Robolectric reference

By | October 19, 2015

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


Related Articles: