/* * File: ToDoTest.java * Copy: Copyright (c) by David G. Green, All Rights Reserved * Vers: 1.0.3 24 Jan 2014 dgg -- update javadoc content * Vers: 1.0.2 21 Sep 2006 dgg -- original coding */ import junit.framework.TestCase; import java.util.Date; import java.text.DateFormat; import java.text.ParseException; /** * Test the ToDo model */ public class ToDoTest extends TestCase { private ToDo todo1; private ToDo todo2; // Date formatter private static DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT); public ToDoTest(String name) { super(name); } /** * @throws java.lang.Exception */ protected void setUp() throws Exception { todo1 = new ToDo("ToDo #1"); todo2 = new ToDo("ToDo #2"); } /** * @throws java.lang.Exception */ protected void tearDown() throws Exception { } /** * Test method for {@link ToDo#ToDo(String)}. */ public void testToDo() { // check to see if todo1 has a description, serial number, timestamp assertTrue(todo1.getDescription().equals("ToDo #1")); assertTrue(todo1.getSerialNumber() > 0); assertTrue(todo1.getLastModified() > 0); assertTrue(todo1.getLastModified() <= (new Date()).getTime()); // check to see that serial numbers are unqiue assertTrue(todo1.getSerialNumber() != todo2.getSerialNumber()); // check that a new ToDo is not done assertFalse(todo1.isComplete()); // check that a new ToDo has priority ToDo.NORMAL assertEquals(ToDo.NORMAL, todo1.getPriority()); } /** * Test method for {@link ToDo#setPriority(int)}. */ public void testSetPriority() { // can it be changed from ToDo.NORMAL todo1.setPriority(ToDo.LOW); assertEquals(ToDo.LOW, todo1.getPriority()); todo1.setPriority(ToDo.HIGH); assertEquals(ToDo.HIGH, todo1.getPriority()); todo1.setPriority(ToDo.NORMAL); assertEquals(ToDo.NORMAL, todo1.getPriority()); // are illegal priority values ignored? todo2.setPriority(15); assertEquals(ToDo.NORMAL, todo2.getPriority()); } /** * Test method for {@link ToDo#getLastModified()}. */ public void testGetLastModified() { long baseLastModified; // setPriority changes timestamp? baseLastModified = noteLastModifiedWait1Sec(); todo1.setPriority(ToDo.LOW); assertTrue(baseLastModified < todo1.getLastModified()); // setDescription changes timestamp? baseLastModified = noteLastModifiedWait1Sec(); todo1.setDescription("New ToDo #1"); assertTrue(baseLastModified < todo1.getLastModified()); // setComplete changes timestamp? baseLastModified = noteLastModifiedWait1Sec(); todo1.setComplete(true); assertTrue(baseLastModified < todo1.getLastModified()); // setDueDate changes timestamp? baseLastModified = noteLastModifiedWait1Sec(); todo1.setDueDate(new Date()); assertTrue(baseLastModified < todo1.getLastModified()); // setContext changes timestamp? baseLastModified = noteLastModifiedWait1Sec(); todo1.setContext("Office"); assertTrue(baseLastModified != todo1.getLastModified()); } /** * @return lastModified */ private long noteLastModifiedWait1Sec() { long baseLastModified; baseLastModified = todo1.getLastModified(); try { Thread.sleep(1000); // sleep 1 second } catch (InterruptedException e) { // do nothing } return baseLastModified; } /** * Test method for {@link ToDo#sync(ToDo, ToDo)}. */ public void testSync() { // clone todo1 ToDo todo1Clone = new ToDo(todo1); // clone todo2 ToDo todo2Clone = new ToDo(todo2); // make sure sync of todo1 and todo2 don't change either todo ToDo.sync(todo1, todo2); assertTrue(todo1.same(todo1Clone)); assertTrue(todo2.same(todo2Clone)); // change todo1 (wait some time for time to change) noteLastModifiedWait1Sec(); todo1.setPriority(ToDo.HIGH); // sync todo1 and its clone and make sure clone changes as well assertFalse(todo1.same(todo1Clone)); ToDo.sync(todo1,todo1Clone); assertTrue(todo1.same(todo1Clone)); } /** * Test method for {@link ToDo#equals(ToDo)}. */ public void testEquals() { // clone todo1 ToDo todo1Clone = new ToDo(todo1); assertTrue(todo1.equals(todo1Clone)); noteLastModifiedWait1Sec(); todo1.setPriority(ToDo.HIGH); assertFalse(todo1.equals(todo1Clone)); } /** * Test method for {@link ToDo#toString()}. */ public void testToString() { // base todo1, verify not completed assertEquals("[ ] ToDo #1", todo1.toString()); // set complete todo1.setComplete(true); // verify completed assertEquals("[X] ToDo #1", todo1.toString()); // set due date todo1.setDueDate(parseDate("9/20/06")); // verify shows due date assertEquals("[X] ToDo #1 Due: 9/20/06",todo1.toString()); } private Date parseDate(String s) { Date result = null; try { result = df.parse(s); } catch (ParseException e) { fail("Bad Date: " + s); } return result; } /** * Test method for {@link ToDo#isOverDue(java.util.Date)}. */ public void testIsOverDue() { // set due date for 1 day later todo1.setDueDate(parseDate("09/21/06")); // verify not overdue assertFalse(todo1.isOverDue(parseDate("09/20/06"))); // verify overdue assertTrue(todo1.isOverDue(parseDate("09/22/06"))); // make sure dates are date only (not time) todo1.setDueDate(new Date()); noteLastModifiedWait1Sec(); // using for the wait 1 second (fails at 11:59:59) assertFalse(todo1.isOverDue(new Date())); // make sure it works cross back to 11:59pm of prior day todo1.setDueDate(new Date(parseDate("09/21/06").getTime() - 1 )); assertTrue(todo1.isOverDue(parseDate("09/21/06"))); } }