package com.plusonelabs.calendar; import android.test.InstrumentationTestCase; import android.util.Log; import com.plusonelabs.calendar.calendar.CalendarQueryResultsStorage; import com.plusonelabs.calendar.calendar.MockCalendarContentProvider; import com.plusonelabs.calendar.prefs.ApplicationPreferences; import com.plusonelabs.calendar.widget.DayHeader; import com.plusonelabs.calendar.widget.WidgetEntry; import org.joda.time.DateTime; import org.json.JSONException; import java.io.IOException; /** * @author yvolk@yurivolkov.com */ public class MultidayAllDayEventTest extends InstrumentationTestCase { private static final String TAG = MultidayAllDayEventTest.class.getSimpleName(); private MockCalendarContentProvider provider = null; private EventRemoteViewsFactory factory = null; @Override protected void setUp() throws Exception { super.setUp(); provider = MockCalendarContentProvider.getContentProvider(this); factory = new EventRemoteViewsFactory(provider.getContext(), provider.getWidgetId()); } @Override protected void tearDown() throws Exception { provider.tearDown(); super.tearDown(); } public void testInsidePeriod() throws IOException, JSONException { final String method = "testInsidePeriod"; CalendarQueryResultsStorage inputs = provider.loadResults(this.getInstrumentation().getContext(), com.plusonelabs.calendar.tests.R.raw.multi_day); provider.addResults(inputs.getResults()); int dateRange = 30; provider.startEditing(); ApplicationPreferences.setEventRange(provider.getContext(), dateRange); provider.saveSettings(); DateTime now = new DateTime(2015, 8, 30, 0, 0, 1, 0, provider.getSettings().getTimeZone()); DateUtil.setNow(now); factory.onDataSetChanged(); factory.logWidgetEntries(method); DateTime today = now.withTimeAtStartOfDay(); DateTime endOfRangeTime = today.plusDays(dateRange); int dayOfEventEntryPrev = 0; int dayOfHeaderPrev = 0; for (int ind = 0; ind < factory.getWidgetEntries().size(); ind++) { WidgetEntry entry = factory.getWidgetEntries().get(ind); String logMsg = method + "; " + String.format("%02d ", ind) + entry.toString(); Log.v(TAG, logMsg); if (entry.getStartDay().isBefore(today)) { fail("Is present before today " + logMsg); } if (entry.getStartDay().isAfter(endOfRangeTime)) { fail("After end of range " + logMsg); } int dayOfEntry = entry.getStartDay().getDayOfYear(); if (entry instanceof DayHeader) { if (dayOfHeaderPrev == 0) { if (entry.getStartDate().withTimeAtStartOfDay().isAfter(today)) { fail("No today's header " + logMsg); } } else { assertEquals("No header " + logMsg, dayOfHeaderPrev + 1, dayOfEntry); } dayOfHeaderPrev = dayOfEntry; } else { if (dayOfEventEntryPrev == 0) { if (entry.getStartDate().withTimeAtStartOfDay().isAfter(today)) { fail("Today not filled " + logMsg); } } else { assertEquals("Day not filled " + logMsg, dayOfEventEntryPrev + 1, dayOfEntry); } dayOfEventEntryPrev = dayOfEntry; } } assertEquals("Wrong last day header " + method, endOfRangeTime.getDayOfYear(), dayOfHeaderPrev); assertEquals("Wrong last filled day " + method, endOfRangeTime.getDayOfYear(), dayOfEventEntryPrev); } }