package com.plusonelabs.calendar; import android.test.InstrumentationTestCase; import com.plusonelabs.calendar.calendar.CalendarQueryRow; import com.plusonelabs.calendar.calendar.MockCalendarContentProvider; import com.plusonelabs.calendar.prefs.ApplicationPreferences; import com.plusonelabs.calendar.widget.CalendarEntry; import com.plusonelabs.calendar.widget.WidgetEntry; import org.joda.time.DateTime; import java.util.concurrent.TimeUnit; /** * @author yvolk@yurivolkov.com */ public class RecurringEventsTest extends InstrumentationTestCase { private static final String TAG = RecurringEventsTest.class.getSimpleName(); private MockCalendarContentProvider provider = null; private EventRemoteViewsFactory factory = null; private int eventId = 0; @Override protected void setUp() throws Exception { super.setUp(); provider = MockCalendarContentProvider.getContentProvider(this); factory = new EventRemoteViewsFactory(provider.getContext(), provider.getWidgetId()); assertTrue(factory.getWidgetEntries().isEmpty()); eventId = 0; } @Override protected void tearDown() throws Exception { provider.tearDown(); super.tearDown(); } /** * @see <a href="https://github.com/plusonelabs/calendar-widget/issues/191">Issue 191</a> and * <a href="https://github.com/plusonelabs/calendar-widget/issues/46">Issue 46</a> */ public void testShowRecurringEvents() { generateEventInstances(); assertEquals("Entries: " + factory.getWidgetEntries().size(), 15, countCalendarEntries()); provider.startEditing(); ApplicationPreferences.setShowOnlyClosestInstanceOfRecurringEvent(provider.getContext(), true); provider.saveSettings(); generateEventInstances(); assertEquals("Entries: " + factory.getWidgetEntries().size(), 1, countCalendarEntries()); } int countCalendarEntries() { int count = 0; for (WidgetEntry widgetEntry : factory.getWidgetEntries()) { if (CalendarEntry.class.isAssignableFrom(widgetEntry.getClass())) { count++; } } return count; } void generateEventInstances() { provider.clear(); DateTime date = DateUtil.now(provider.getSettings().getTimeZone()).withTimeAtStartOfDay(); long millis = date.getMillis() + TimeUnit.HOURS.toMillis(10); eventId++; for (int ind = 0; ind < 15; ind++) { millis += TimeUnit.DAYS.toMillis(1); provider.addRow(new CalendarQueryRow().setEventId(eventId).setTitle("Work each day") .setBegin(millis).setEnd(millis + TimeUnit.HOURS.toMillis(9))); } factory.onDataSetChanged(); factory.logWidgetEntries(TAG); } }