blob: f3466fd12dba73f9fd6acde6cb4b8fb1864ae365 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 The Pampered Chef and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* The Pampered Chef - initial API and implementation
******************************************************************************/
package org.eclipse.jface.examples.databinding.compositetable.timeeditor.test;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import junit.framework.AssertionFailedError;
import junit.framework.TestCase;
import org.eclipse.jface.examples.databinding.compositetable.timeeditor.CalendarableItem;
import org.eclipse.jface.examples.databinding.compositetable.timeeditor.CalendarableModel;
/**
* @since 3.2
*
*/
public class CalendarableModel_testRefreshResults extends TestCase {
// Test fixtures ----------------------------------------------------------
private CMClientFixture cmf;
private CalendarableModel cm;
/* (non-Javadoc)
* @see junit.framework.TestCase#setUp()
*/
protected void setUp() throws Exception {
cmf = new CMClientFixture();
cm = new CalendarableModel();
}
private void setupModel(String[][] data) {
cmf.setData(data);
cm.setTimeBreakdown(data.length, 4);
cm.setEventCountProvider(cmf.eventCountProvider);
cm.setEventContentProvider(cmf.eventContentProvider);
cm.setStartDate(cmf.startDate);
verifyModel(cm, data);
}
private void verifyModel(CalendarableModel cm, String[][] data) {
assertEquals("number of days equal", cm.getNumberOfDays(), data.length);
for (int day = 0; day < data.length; day++) {
List events = cm.getCalendarableItems(day);
assertEquals("number of events equal", events.size(), data[day].length);
for (int element = 0; element < data[day].length; element++) {
assertEquals("Event " + element + ", day " + day + "equal", data[day][element], ((CalendarableItem)events.get(element)).getText());
}
}
}
private void verifyModelShouldFail(CalendarableModel cm, String[][] data) throws AssertionFailedError {
try {
// This should throw an assertion failed error
verifyModel(cm, data);
} catch (AssertionFailedError e) {
// Make sure we got the correct assertion failure
if (e.getMessage().indexOf("number of events equal") == -1) {
throw e;
}
// Success
}
}
private CalendarableModel testModelLoading(String[][] data) {
CalendarableModel cm = new CalendarableModel();
setupModel(data);
return cm;
}
private Date getNextDate(Date date) {
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(date);
gc.add(Calendar.DATE, 1);
return gc.getTime();
}
private CalendarableItem[] getAllDayEvents(String[][] data) {
setupModel(data);
CalendarableItem[] allDayEvents = cm.getAllDayCalendarables(0);
return allDayEvents;
}
// Tests ------------------------------------------------------------------
public void testOneDayOneEvent() throws Exception {
testModelLoading(new String[][] {
{"1"}
});
}
public void testTwoDaysTwoEvents() throws Exception {
testModelLoading(new String[][] {
{"1", "2"},
{"3", "4"}
});
}
public void testOneDayZeroEvents() throws Exception {
testModelLoading(new String[][] {
{}
});
}
public void testIncreaseNumberOfEventsInDay() throws Exception {
String[][] data = new String[][] {
{"1", "2", "3"}
};
setupModel(data);
data[0] = new String[] {"1", "2", "3", "4", "5"};
cm.refresh(cmf.startDate);
verifyModel(cm, data);
}
public void testDecreaseNumberOfEventsInDay() throws Exception {
String[][] data = new String[][] {
{"1", "2", "3"}
};
setupModel(data);
data[0] = new String[] {"1"};
cm.refresh(cmf.startDate);
verifyModel(cm, data);
}
public void testRefreshDateOutsideDisplayedRange() throws Exception {
String[][] data = new String[][] {
{"1", "2", "3"}
};
setupModel(data);
data[0] = new String[] {"1"};
cm.refresh(getNextDate(cmf.startDate)); // This refresh should not occur
verifyModelShouldFail(cm, data);
}
public void testRefreshSecondDay() throws Exception {
String[][] data = new String[][] {
{"1", "2", "3"},
{"0", "3", "6", "9"}
};
setupModel(data);
data[1] = new String[] {"42"};
cm.refresh(cmf.startDate); // This refresh should do nothing (the data for that day didn't change)
verifyModelShouldFail(cm, data);
cm.refresh(getNextDate(cmf.startDate)); // This refresh should
verifyModel(cm, data);
}
// Number of all day event row tests --------------------------------------
public void testComputeNumberOfAllDayEventRows_OneAllDayEvent() throws Exception {
String[][] data = new String[][] {
{"1", "3", "3"},
{"0", "3", "6", "9"}
};
setupModel(data);
assertEquals("max one event", 1, cm.computeNumberOfAllDayEventRows());
}
public void testComputeNumberOfAllDayEventRows_TwoAllDayEvent() throws Exception {
String[][] data = new String[][] {
{"4", "1", "1"},
{"0", "3", "6", "9"}
};
setupModel(data);
assertEquals("max two event", 2, cm.computeNumberOfAllDayEventRows());
}
public void testComputeNumberOfAllDayEventRows_ThreeAllDayEvent() throws Exception {
String[][] data = new String[][] {
{"4", "1", "1"},
{"1", "1", "1", "9"}
};
setupModel(data);
assertEquals("max three event", 3, cm.computeNumberOfAllDayEventRows());
}
public void testComputeNumberOfAllDayEventRows_ZeroAllDayEvent() throws Exception {
String[][] data = new String[][] {
{"0", "2", "4"},
{"0", "3", "5", "9"}
};
setupModel(data);
assertEquals("no all day events", 0, cm.computeNumberOfAllDayEventRows());
}
// Start time -------------------------------------------------------------
public void testComputeStartHour_UsingDefault() throws Exception {
String[][] data = new String[][] {
{"9", "22", "8"},
{"21", "11", "14", "16"}
};
setupModel(data);
assertEquals("8 am start", 8, cm.computeStartHour());
}
public void testComputeStartHour_Midnight() throws Exception {
String[][] data = new String[][] {
{"9", "22", "8"},
{"21", "11", "0", "16"}
};
setupModel(data);
assertEquals("midnight start", 0, cm.computeStartHour());
}
public void testComputeStartHour_7am() throws Exception {
String[][] data = new String[][] {
{"9", "22", "8"},
{"21", "11", "7", "16"}
};
setupModel(data);
assertEquals("midnight start", 7, cm.computeStartHour());
}
public void testComputeStartHour_7amWithAllDayEvents() throws Exception {
String[][] data = new String[][] {
{"9", "1", "8"},
{"21", "11", "7", "16"}
};
setupModel(data);
assertEquals("midnight start", 7, cm.computeStartHour());
}
// Test all-day event methods ---------------------------------------------
public void testGetAllDayEvents_noEvents() throws Exception {
String[][] data = new String[][] {
{"2", "3"}
};
setupModel(data);
assertEquals("Should find no all-day events", 0, cm.getAllDayCalendarables(0).length);
}
public void testGetAllDayEvents_oneEvent() throws Exception {
String[][] data = new String[][] {
{"1First", "2", "3"}
};
CalendarableItem[] allDayEvents = getAllDayEvents(data);
assertEquals("Should find one all-day event", 1, allDayEvents.length);
assertEquals("Found 1First", "1First", allDayEvents[0].getText());
}
public void testGetAllDayEvents_threeEvents() throws Exception {
String[][] data = new String[][] {
{"0", "1First", "1Second", "2", "1Third"}
};
CalendarableItem[] allDayEvents = getAllDayEvents(data);
assertEquals("Should find three all-day event", 3, allDayEvents.length);
assertEquals("Found 1First", "1First", allDayEvents[0].getText());
assertEquals("Found 1Third", "1Third", allDayEvents[2].getText());
}
// Test methods that integrate the eventLayout and everything else --------
public void testFindAllDayCalendarable_ForwardNoData() throws Exception {
String[][] data = new String[][] {
{"5", "5", "2", "3", "5", "5"}
};
setupModel(data);
CalendarableItem result = cm.findAllDayCalendarable(0, true, null);
assertNull("No calendarables forward", result);
}
public void testFindAllDayCalendarable_BackwardNoData() throws Exception {
String[][] data = new String[][] {
{"5", "5", "2", "3", "5", "5"}
};
getAllDayEvents(data);
CalendarableItem result = cm.findAllDayCalendarable(0, false, null);
assertNull("No calendarables forward", result);
}
public void testFindAllDayCalendarable_BackwardButAtFirst() throws Exception {
String[][] data = new String[][] {
{"1First", "1Second", "2", "3", "1Third", "1Fourth"}
};
CalendarableItem[] allDayEvents = getAllDayEvents(data);
CalendarableItem result = cm.findAllDayCalendarable(0, false, allDayEvents[0]);
assertNull("No Calendarables backward from first", result);
}
public void testFindAllDayCalendarable_ForwardAtLast() throws Exception {
String[][] data = new String[][] {
{"1First", "1Second", "2", "3", "1Third", "1Fourth"}
};
CalendarableItem[] allDayEvents = getAllDayEvents(data);
CalendarableItem result = cm.findAllDayCalendarable(0, true, allDayEvents[3]);
assertNull("No calendarables forward", result);
}
public void testFindAllDayCalendarable_ForwardWithSelection() throws Exception {
String[][] data = new String[][] {
{"1First", "1Second", "2", "3", "1Third", "1Fourth"}
};
CalendarableItem[] allDayEvents = getAllDayEvents(data);
CalendarableItem result = cm.findAllDayCalendarable(0, true, allDayEvents[1]);
assertEquals("Should find third event", allDayEvents[2], result);
}
public void testFindAllDayCalendarable_BackwardWithSelection() throws Exception {
String[][] data = new String[][] {
{"1First", "1Second", "2", "3", "1Third", "1Fourth"}
};
CalendarableItem[] allDayEvents = getAllDayEvents(data);
CalendarableItem result = cm.findAllDayCalendarable(0, false, allDayEvents[1]);
assertEquals("Should find first event", allDayEvents[0], result);
}
}