package edu.pdx.cs410J.family;
import org.junit.Assert;
import static org.junit.Assert.*;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
/**
* This is the abstract superclass of classes that test family tree
* classes. It contains a number of helper methods.
*/
public abstract class FamilyTestCase {
/**
* Asserts that two <code>Person</code>s have the same contents
*/
void assertEquals(Person p1, Person p2) {
if (p1 == null) {
assertNull(p2);
return;
} else if (p2 == null) {
assertNull(p1);
return;
}
assertNotNull(p1);
assertNotNull(p2);
Assert.assertEquals(p1.getId(), p2.getId());
Assert.assertEquals(p1.getGender(), p2.getGender());
Assert.assertEquals(p1.getFirstName(), p2.getFirstName());
Assert.assertEquals(p1.getMiddleName(), p2.getMiddleName());
Assert.assertEquals(p1.getLastName(), p2.getLastName());
assertEquals(p1.getMother(), p2.getMother());
assertEquals(p1.getFather(), p2.getFather());
assertEquals(p1.getDateOfBirth(), p2.getDateOfBirth());
assertEquals(p1.getDateOfDeath(), p2.getDateOfDeath());
Assert.assertEquals(p1.getMarriages().size(), p2.getMarriages().size());
Iterator<Marriage> iter1 = p1.getMarriages().iterator();
Iterator<Marriage> iter2 = p2.getMarriages().iterator();
while (iter1.hasNext() && iter2.hasNext()) {
assertEquals( iter1.next(), iter2.next() );
}
}
/**
* Asserts that two <code>Date</code> represent the same day
* (ignores times)
*/
void assertEquals(Date d1, Date d2) {
if (d1 == null) {
assertNull(d2);
return;
} else if (d2 == null) {
assertNull(d1);
return;
}
Calendar c1 = Calendar.getInstance();
c1.setTime(d1);
Calendar c2 = Calendar.getInstance();
c2.setTime(d2);
Assert.assertEquals(c1.get(Calendar.DAY_OF_YEAR),
c2.get(Calendar.DAY_OF_YEAR));
Assert.assertEquals(c1.get(Calendar.YEAR), c2.get(Calendar.YEAR));
}
/**
* Asserts that two <code>Marriage</code>s are the same
*/
void assertEquals(Marriage m1, Marriage m2) {
if (m1 == null) {
assertNotNull(m2);
return;
} else if (m2 == null) {
assertNull(m1);
return;
}
// To avoid infinite recursion, we compare people using their ids
Assert.assertEquals(m1.getHusband().getId(), m2.getHusband().getId());
Assert.assertEquals(m1.getWife().getId(), m2.getWife().getId());
assertEquals(m1.getDate(), m2.getDate());
Assert.assertEquals(m1.getLocation(), m2.getLocation());
}
/**
* Asserts that two <code>FamilyTree</code>s has the same contents
*/
void assertEquals(FamilyTree tree1, FamilyTree tree2) {
Assert.assertEquals(tree1.getPeople().size(), tree2.getPeople().size());
for ( Person person : tree1.getPeople() )
{
Person p2 = tree2.getPerson( person.getId() );
assertNotNull( p2 );
assertEquals( person, p2 );
}
}
/**
* Asserts that one String contains another
*/
void assertContains(String container, String containee) {
assertTrue(container.indexOf(containee) != -1);
}
/**
* Asserts that one String contains another
*/
void assertContains(String message, String container,
String containee) {
assertTrue(message, container.indexOf(containee) != -1);
}
}