001package edu.pdx.cs.joy.family; 002 003import org.junit.jupiter.api.Assertions; 004 005import java.util.Calendar; 006import java.util.Date; 007import java.util.Iterator; 008 009import static org.junit.jupiter.api.Assertions.*; 010 011/** 012 * This is the abstract superclass of classes that test family tree 013 * classes. It contains a number of helper methods. 014 */ 015public abstract class FamilyTestCase { 016 017 018 /** 019 * Asserts that two <code>Person</code>s have the same contents 020 */ 021 void assertEquals(Person p1, Person p2) { 022 if (p1 == null) { 023 assertNull(p2); 024 return; 025 026 } else if (p2 == null) { 027 assertNull(p1); 028 return; 029 } 030 031 assertNotNull(p1); 032 assertNotNull(p2); 033 034 Assertions.assertEquals(p1.getId(), p2.getId()); 035 Assertions.assertEquals(p1.getGender(), p2.getGender()); 036 Assertions.assertEquals(p1.getFirstName(), p2.getFirstName()); 037 Assertions.assertEquals(p1.getMiddleName(), p2.getMiddleName()); 038 Assertions.assertEquals(p1.getLastName(), p2.getLastName()); 039 assertEquals(p1.getMother(), p2.getMother()); 040 assertEquals(p1.getFather(), p2.getFather()); 041 assertEquals(p1.getDateOfBirth(), p2.getDateOfBirth()); 042 assertEquals(p1.getDateOfDeath(), p2.getDateOfDeath()); 043 044 Assertions.assertEquals(p1.getMarriages().size(), p2.getMarriages().size()); 045 046 Iterator<Marriage> iter1 = p1.getMarriages().iterator(); 047 Iterator<Marriage> iter2 = p2.getMarriages().iterator(); 048 while (iter1.hasNext() && iter2.hasNext()) { 049 assertEquals( iter1.next(), iter2.next() ); 050 } 051 052 } 053 054 /** 055 * Asserts that two <code>Date</code> represent the same day 056 * (ignores times) 057 */ 058 void assertEquals(Date d1, Date d2) { 059 if (d1 == null) { 060 assertNull(d2); 061 return; 062 063 } else if (d2 == null) { 064 assertNull(d1); 065 return; 066 } 067 068 Calendar c1 = Calendar.getInstance(); 069 c1.setTime(d1); 070 Calendar c2 = Calendar.getInstance(); 071 c2.setTime(d2); 072 073 Assertions.assertEquals(c1.get(Calendar.DAY_OF_YEAR), 074 c2.get(Calendar.DAY_OF_YEAR)); 075 Assertions.assertEquals(c1.get(Calendar.YEAR), c2.get(Calendar.YEAR)); 076 } 077 078 /** 079 * Asserts that two <code>Marriage</code>s are the same 080 */ 081 void assertEquals(Marriage m1, Marriage m2) { 082 if (m1 == null) { 083 assertNotNull(m2); 084 return; 085 086 } else if (m2 == null) { 087 assertNull(m1); 088 return; 089 } 090 091 // To avoid infinite recursion, we compare people using their ids 092 Assertions.assertEquals(m1.getHusband().getId(), m2.getHusband().getId()); 093 Assertions.assertEquals(m1.getWife().getId(), m2.getWife().getId()); 094 assertEquals(m1.getDate(), m2.getDate()); 095 Assertions.assertEquals(m1.getLocation(), m2.getLocation()); 096 } 097 098 /** 099 * Asserts that two <code>FamilyTree</code>s has the same contents 100 */ 101 void assertEquals(FamilyTree tree1, FamilyTree tree2) { 102 Assertions.assertEquals(tree1.getPeople().size(), tree2.getPeople().size()); 103 104 for ( Person person : tree1.getPeople() ) 105 { 106 Person p2 = tree2.getPerson( person.getId() ); 107 assertNotNull( p2 ); 108 assertEquals( person, p2 ); 109 } 110 } 111 112 /** 113 * Asserts that one String contains another 114 */ 115 void assertContains(String container, String containee) { 116 assertTrue(container.indexOf(containee) != -1); 117 } 118 119 /** 120 * Asserts that one String contains another 121 */ 122 void assertContains(String message, String container, 123 String containee) { 124 assertTrue(container.indexOf(containee) != -1, message); 125 } 126 127}