package org.gedcomx.date; import org.testng.annotations.Test; import static org.fest.assertions.api.Assertions.assertThat; import static org.fest.assertions.api.Assertions.fail; /** * @author John Clark. */ public class UtilTest { /** * Parse */ @Test public void errorOnParseNullDate() { try { GedcomxDateUtil.parse(null); fail("GedcomxDateException expected because date is null"); } catch(GedcomxDateException e) { assertThat(e.getMessage()).isEqualTo("Invalid Date"); } } @Test public void errorOnParseInvalidDate() { try { GedcomxDateUtil.parse(""); fail("GedcomxDateException expected because date is null"); } catch(GedcomxDateException e) { assertThat(e.getMessage()).isEqualTo("Invalid Date"); } } @Test public void shouldParseRecurring() { GedcomxDate date = GedcomxDateUtil.parse("R3/+1000/P1Y"); assertThat(date).isInstanceOf(GedcomxDateRecurring.class); assertThat(date.getType()).isEqualTo(GedcomxDateType.RECURRING); } @Test public void shouldParseRange() { GedcomxDate date = GedcomxDateUtil.parse("A+1000/P1Y"); assertThat(date).isInstanceOf(GedcomxDateRange.class); assertThat(date.getType()).isEqualTo(GedcomxDateType.RANGE); } @Test public void shouldParseSingleDayRange() { GedcomxDate date = GedcomxDateUtil.parse("+1934-08-31/+1934-09-01"); assertThat(date).isInstanceOf(GedcomxDateRange.class); assertThat(date.getType()).isEqualTo(GedcomxDateType.RANGE); assertThat(((GedcomxDateRange)date).getDuration().getDays()).isEqualTo(1); } @Test public void shouldParseApproximate() { GedcomxDate date = GedcomxDateUtil.parse("A+1000"); assertThat(date).isInstanceOf(GedcomxDateApproximate.class); assertThat(date.getType()).isEqualTo(GedcomxDateType.APPROXIMATE); } @Test public void shouldParseSimple() { GedcomxDate date = GedcomxDateUtil.parse("+1000"); assertThat(date).isInstanceOf(GedcomxDateSimple.class); assertThat(date.getType()).isEqualTo(GedcomxDateType.SIMPLE); } /** * getDuration */ @Test public void errorOnInvalidStart() { try { GedcomxDateUtil.getDuration(null, new GedcomxDateSimple("+1000")); fail("GedcomxDateException expected because start is null"); } catch(GedcomxDateException e) { assertThat(e.getMessage()).isEqualTo("Start and End must be simple dates"); } } @Test public void errorOnInvalidEnd() { try { GedcomxDateUtil.getDuration(new GedcomxDateSimple("+1000"), null); fail("GedcomxDateException expected because end is null"); } catch(GedcomxDateException e) { assertThat(e.getMessage()).isEqualTo("Start and End must be simple dates"); } } @Test public void shouldOverflowSeconds() { GedcomxDateDuration duration = GedcomxDateUtil.getDuration( new GedcomxDateSimple("+0999-12-31T23:59:59"), new GedcomxDateSimple("+1000-01-01T00:00:00")); assertThat(duration.getYears()).isEqualTo(null); assertThat(duration.getMonths()).isEqualTo(null); assertThat(duration.getDays()).isEqualTo(null); assertThat(duration.getHours()).isEqualTo(null); assertThat(duration.getMinutes()).isEqualTo(null); assertThat(duration.getSeconds()).isEqualTo(1); } @Test public void shouldOverflowMinutes() { GedcomxDateDuration duration = GedcomxDateUtil.getDuration( new GedcomxDateSimple("+0999-12-31T23:59:00"), new GedcomxDateSimple("+1000-01-01T00:00:00")); assertThat(duration.getYears()).isEqualTo(null); assertThat(duration.getMonths()).isEqualTo(null); assertThat(duration.getDays()).isEqualTo(null); assertThat(duration.getHours()).isEqualTo(null); assertThat(duration.getMinutes()).isEqualTo(1); assertThat(duration.getSeconds()).isEqualTo(null); } @Test public void shouldOverflowHours() { GedcomxDateDuration duration = GedcomxDateUtil.getDuration( new GedcomxDateSimple("+0999-12-31T23:00:00"), new GedcomxDateSimple("+1000-01-01T00:00:00")); assertThat(duration.getYears()).isEqualTo(null); assertThat(duration.getMonths()).isEqualTo(null); assertThat(duration.getDays()).isEqualTo(null); assertThat(duration.getHours()).isEqualTo(1); assertThat(duration.getMinutes()).isEqualTo(null); assertThat(duration.getSeconds()).isEqualTo(null); } @Test public void shouldOverflowDays() { GedcomxDateDuration duration = GedcomxDateUtil.getDuration( new GedcomxDateSimple("+0999-12-31T00:00:00"), new GedcomxDateSimple("+1000-01-01T00:00:00")); assertThat(duration.getYears()).isEqualTo(null); assertThat(duration.getMonths()).isEqualTo(null); assertThat(duration.getDays()).isEqualTo(1); assertThat(duration.getHours()).isEqualTo(null); assertThat(duration.getMinutes()).isEqualTo(null); assertThat(duration.getSeconds()).isEqualTo(null); } @Test public void shouldOverflowMonths() { GedcomxDateDuration duration = GedcomxDateUtil.getDuration( new GedcomxDateSimple("+0999-12-01T00:00:00"), new GedcomxDateSimple("+1000-01-01T00:00:00")); assertThat(duration.getYears()).isEqualTo(null); assertThat(duration.getMonths()).isEqualTo(1); assertThat(duration.getDays()).isEqualTo(null); assertThat(duration.getHours()).isEqualTo(null); assertThat(duration.getMinutes()).isEqualTo(null); assertThat(duration.getSeconds()).isEqualTo(null); } @Test public void shouldOverflowYears() { GedcomxDateDuration duration = GedcomxDateUtil.getDuration( new GedcomxDateSimple("+0999-01-01T00:00:00"), new GedcomxDateSimple("+1000-01-01T00:00:00")); assertThat(duration.getYears()).isEqualTo(1); assertThat(duration.getMonths()).isEqualTo(null); assertThat(duration.getDays()).isEqualTo(null); assertThat(duration.getHours()).isEqualTo(null); assertThat(duration.getMinutes()).isEqualTo(null); assertThat(duration.getSeconds()).isEqualTo(null); } @Test public void errorOnStartGreaterThanEnd() { try { GedcomxDateUtil.getDuration( new GedcomxDateSimple("+1000-01-01T00:00:00"), new GedcomxDateSimple("+0999-01-01T00:00:00")); fail("GedcomxDateException expected because start > end"); } catch(GedcomxDateException e) { assertThat(e.getMessage()).isEqualTo("Start Date must be less than End Date"); } } @Test public void errorOnStartGreaterOrEqualToEnd() { try { GedcomxDateUtil.getDuration( new GedcomxDateSimple("+1900-07-03"), new GedcomxDateSimple("+1899-05-10")); fail("GedcomxDateException expected because start > end"); } catch(GedcomxDateException e) { assertThat(e.getMessage()).isEqualTo("Start Date must be less than End Date"); } } @Test public void shouldZipStart() { GedcomxDateDuration duration = GedcomxDateUtil.getDuration( new GedcomxDateSimple("+0999-01-01T00:00:00Z"), new GedcomxDateSimple("+1000")); assertThat(duration.getYears()).isEqualTo(1); assertThat(duration.getMonths()).isEqualTo(null); assertThat(duration.getDays()).isEqualTo(null); assertThat(duration.getHours()).isEqualTo(null); assertThat(duration.getMinutes()).isEqualTo(null); assertThat(duration.getSeconds()).isEqualTo(null); } @Test public void shouldZipEnd() { GedcomxDateDuration duration = GedcomxDateUtil.getDuration( new GedcomxDateSimple("+0999"), new GedcomxDateSimple("+1000-01-01T00:00:00Z")); assertThat(duration.getYears()).isEqualTo(1); assertThat(duration.getMonths()).isEqualTo(null); assertThat(duration.getDays()).isEqualTo(null); assertThat(duration.getHours()).isEqualTo(null); assertThat(duration.getMinutes()).isEqualTo(null); assertThat(duration.getSeconds()).isEqualTo(null); } @Test public void shouldCalcTrickyDuration() { GedcomxDateDuration duration = GedcomxDateUtil.getDuration( new GedcomxDateSimple("+1970-01-31"), new GedcomxDateSimple("+1973-02-01")); assertThat(duration.getYears()).isEqualTo(3); assertThat(duration.getMonths()).isEqualTo(null); assertThat(duration.getDays()).isEqualTo(1); assertThat(duration.getHours()).isEqualTo(null); assertThat(duration.getMinutes()).isEqualTo(null); assertThat(duration.getSeconds()).isEqualTo(null); } @Test public void shouldCalcSimpleDuration() { GedcomxDate date = GedcomxDateUtil.parse("+1970-01-31/P01D"); assertThat(date.getType()).isEqualTo(GedcomxDateType.RANGE); GedcomxDateDuration duration = ((GedcomxDateRange)date).getDuration(); assertThat(duration.getYears()).isEqualTo(null); assertThat(duration.getMonths()).isEqualTo(null); assertThat(duration.getDays()).isEqualTo(1); assertThat(duration.getHours()).isEqualTo(null); assertThat(duration.getMinutes()).isEqualTo(null); assertThat(duration.getSeconds()).isEqualTo(null); GedcomxDateSimple endDate = ((GedcomxDateRange)date).getEnd(); assertThat(endDate.getYear()).isEqualTo(1970); assertThat(endDate.getMonth()).isEqualTo(2); assertThat(endDate.getDay()).isEqualTo(1); } /** * addDuration */ @Test public void errorOnInvalidAddDurationStartDate() { try { GedcomxDateUtil.addDuration(null, new GedcomxDateDuration("P1Y")); fail("GedcomxDateException expected because start date is null"); } catch(GedcomxDateException e) { assertThat(e.getMessage()).isEqualTo("Invalid Start Date"); } } @Test public void errorOnInvalidAddDurationDuration() { try { GedcomxDateUtil.addDuration(new GedcomxDateSimple("+1000"), null); fail("GedcomxDateException expected because duration is null"); } catch(GedcomxDateException e) { assertThat(e.getMessage()).isEqualTo("Invalid Duration"); } } @Test public void shouldPassThroughNegativeTZ() { GedcomxDateSimple simple = GedcomxDateUtil.addDuration( new GedcomxDateSimple("+1000-01-01T12:00:00-10:30"), new GedcomxDateDuration("PT90S")); assertThat(simple.getYear()).isEqualTo(1000); assertThat(simple.getMonth()).isEqualTo(1); assertThat(simple.getDay()).isEqualTo(1); assertThat(simple.getHours()).isEqualTo(12); assertThat(simple.getMinutes()).isEqualTo(1); assertThat(simple.getSeconds()).isEqualTo(30); assertThat(simple.getTzHours()).isEqualTo(-10); assertThat(simple.getTzMinutes()).isEqualTo(30); } @Test public void shouldPassThroughPositiveTZ() { GedcomxDateSimple simple = GedcomxDateUtil.addDuration( new GedcomxDateSimple("+1000-01-01T12:00:00+10:00"), new GedcomxDateDuration("PT90S")); assertThat(simple.getYear()).isEqualTo(1000); assertThat(simple.getMonth()).isEqualTo(1); assertThat(simple.getDay()).isEqualTo(1); assertThat(simple.getHours()).isEqualTo(12); assertThat(simple.getMinutes()).isEqualTo(1); assertThat(simple.getSeconds()).isEqualTo(30); assertThat(simple.getTzHours()).isEqualTo(10); assertThat(simple.getTzMinutes()).isEqualTo(0); } @Test public void shouldAddSeconds() { GedcomxDateSimple simple = GedcomxDateUtil.addDuration( new GedcomxDateSimple("+1000"), new GedcomxDateDuration("PT90S")); assertThat(simple.getYear()).isEqualTo(1000); assertThat(simple.getMonth()).isEqualTo(1); assertThat(simple.getDay()).isEqualTo(1); assertThat(simple.getHours()).isEqualTo(0); assertThat(simple.getMinutes()).isEqualTo(1); assertThat(simple.getSeconds()).isEqualTo(30); } @Test public void shouldAddMinutes() { GedcomxDateSimple simple = GedcomxDateUtil.addDuration( new GedcomxDateSimple("+1000"), new GedcomxDateDuration("PT90M")); assertThat(simple.getYear()).isEqualTo(1000); assertThat(simple.getMonth()).isEqualTo(1); assertThat(simple.getDay()).isEqualTo(1); assertThat(simple.getHours()).isEqualTo(1); assertThat(simple.getMinutes()).isEqualTo(30); assertThat(simple.getSeconds()).isEqualTo(null); } @Test public void shouldAddHours() { GedcomxDateSimple simple = GedcomxDateUtil.addDuration( new GedcomxDateSimple("+1000"), new GedcomxDateDuration("PT50H")); assertThat(simple.getYear()).isEqualTo(1000); assertThat(simple.getMonth()).isEqualTo(1); assertThat(simple.getDay()).isEqualTo(3); assertThat(simple.getHours()).isEqualTo(2); assertThat(simple.getMinutes()).isEqualTo(null); assertThat(simple.getSeconds()).isEqualTo(null); } @Test public void shouldAddDays() { GedcomxDateSimple simple = GedcomxDateUtil.addDuration( new GedcomxDateSimple("+2004"), new GedcomxDateDuration("P62D")); assertThat(simple.getYear()).isEqualTo(2004); assertThat(simple.getMonth()).isEqualTo(3); assertThat(simple.getDay()).isEqualTo(3); assertThat(simple.getHours()).isEqualTo(null); assertThat(simple.getMinutes()).isEqualTo(null); assertThat(simple.getSeconds()).isEqualTo(null); } @Test public void shouldAddYearsWorthOfDays() { GedcomxDateSimple simple = GedcomxDateUtil.addDuration( new GedcomxDateSimple("+2001"), new GedcomxDateDuration("P366D")); assertThat(simple.getYear()).isEqualTo(2002); assertThat(simple.getMonth()).isEqualTo(1); assertThat(simple.getDay()).isEqualTo(2); assertThat(simple.getHours()).isEqualTo(null); assertThat(simple.getMinutes()).isEqualTo(null); assertThat(simple.getSeconds()).isEqualTo(null); } @Test public void shouldAddMonths() { GedcomxDateSimple simple = GedcomxDateUtil.addDuration( new GedcomxDateSimple("+1000"), new GedcomxDateDuration("P25M")); assertThat(simple.getYear()).isEqualTo(1002); assertThat(simple.getMonth()).isEqualTo(2); assertThat(simple.getDay()).isEqualTo(null); assertThat(simple.getHours()).isEqualTo(null); assertThat(simple.getMinutes()).isEqualTo(null); assertThat(simple.getSeconds()).isEqualTo(null); } @Test public void shouldAddYears() { GedcomxDateSimple simple = GedcomxDateUtil.addDuration( new GedcomxDateSimple("-0001"), new GedcomxDateDuration("P20Y")); assertThat(simple.getYear()).isEqualTo(19); assertThat(simple.getMonth()).isEqualTo(null); assertThat(simple.getDay()).isEqualTo(null); assertThat(simple.getHours()).isEqualTo(null); assertThat(simple.getMinutes()).isEqualTo(null); assertThat(simple.getSeconds()).isEqualTo(null); } @Test public void shouldAddNegativeYears() { GedcomxDateSimple simple = GedcomxDateUtil.addDuration( new GedcomxDateSimple("-1000"), new GedcomxDateDuration("P200Y")); assertThat(simple.getYear()).isEqualTo(-800); assertThat(simple.getMonth()).isEqualTo(null); assertThat(simple.getDay()).isEqualTo(null); assertThat(simple.getHours()).isEqualTo(null); assertThat(simple.getMinutes()).isEqualTo(null); assertThat(simple.getSeconds()).isEqualTo(null); } @Test public void errorOnToManyYears() { try { GedcomxDateSimple simple = GedcomxDateUtil.addDuration( new GedcomxDateSimple("+9999"), new GedcomxDateDuration("P1Y")); fail("GedcomxDateException expected because years exceed 9999"); } catch(GedcomxDateException e) { assertThat(e.getMessage()).isEqualTo("New date out of range"); } } /** * multipleDuration */ @Test public void errorOnInvalidDuration() { try { GedcomxDateUtil.multiplyDuration(null, 1); fail("GedcomxDateException expected because duration is null"); } catch(GedcomxDateException e) { assertThat(e.getMessage()).isEqualTo("Invalid Duration"); } } @Test public void errorOnInvalidMultiplier() { try { GedcomxDateUtil.multiplyDuration(new GedcomxDateDuration("P100Y"), 0); fail("GedcomxDateException expected because multiplier is 0"); } catch(GedcomxDateException e) { assertThat(e.getMessage()).isEqualTo("Invalid Multiplier"); } } @Test public void successOnValidDurations() { GedcomxDateDuration duration; duration = GedcomxDateUtil.multiplyDuration(new GedcomxDateDuration("P100Y"), 1); assertThat(duration.toFormalString()).isEqualTo("P100Y"); duration = GedcomxDateUtil.multiplyDuration(new GedcomxDateDuration("P100Y"), 2); assertThat(duration.toFormalString()).isEqualTo("P200Y"); duration = GedcomxDateUtil.multiplyDuration(new GedcomxDateDuration("P100Y2M3DT5H3M12S"), 3); assertThat(duration.toFormalString()).isEqualTo("P300Y6M9DT15H9M36S"); } /** * daysInMonth */ @Test public void errorOnInvalidMonth() { try { GedcomxDateUtil.daysInMonth(13, 2000); fail("GedcomxDateException expected because 13 is not a month"); } catch(GedcomxDateException e) { assertThat(e.getMessage()).isEqualTo("Unknown Month"); } } @Test public void successOnValidStuff() { assertThat(GedcomxDateUtil.daysInMonth(1, 2001)).isEqualTo(31); assertThat(GedcomxDateUtil.daysInMonth(2, 2001)).isEqualTo(28); assertThat(GedcomxDateUtil.daysInMonth(3, 2001)).isEqualTo(31); assertThat(GedcomxDateUtil.daysInMonth(4, 2001)).isEqualTo(30); assertThat(GedcomxDateUtil.daysInMonth(5, 2001)).isEqualTo(31); assertThat(GedcomxDateUtil.daysInMonth(6, 2001)).isEqualTo(30); assertThat(GedcomxDateUtil.daysInMonth(7, 2001)).isEqualTo(31); assertThat(GedcomxDateUtil.daysInMonth(8, 2001)).isEqualTo(31); assertThat(GedcomxDateUtil.daysInMonth(9, 2001)).isEqualTo(30); assertThat(GedcomxDateUtil.daysInMonth(10, 2001)).isEqualTo(31); assertThat(GedcomxDateUtil.daysInMonth(11, 2001)).isEqualTo(30); assertThat(GedcomxDateUtil.daysInMonth(12, 2001)).isEqualTo(31); // Test each branch of the leapyear calculation assertThat(GedcomxDateUtil.daysInMonth(2, 2003)).isEqualTo(28); assertThat(GedcomxDateUtil.daysInMonth(2, 2004)).isEqualTo(29); assertThat(GedcomxDateUtil.daysInMonth(2, 1900)).isEqualTo(28); assertThat(GedcomxDateUtil.daysInMonth(2, 2000)).isEqualTo(29); } @Test public void successOnZipStartMonth() { GedcomxDateUtil.Date start = new GedcomxDateUtil.Date(); GedcomxDateUtil.Date end = new GedcomxDateUtil.Date(); start.month = 5; GedcomxDateUtil.zipDates(start, end); assertThat(end.month).isEqualTo(1); } @Test public void successOnZipEndMonth() { GedcomxDateUtil.Date start = new GedcomxDateUtil.Date(); GedcomxDateUtil.Date end = new GedcomxDateUtil.Date(); end.month = 5; GedcomxDateUtil.zipDates(start, end); assertThat(start.month).isEqualTo(1); } @Test public void successOnZipStartDay() { GedcomxDateUtil.Date start = new GedcomxDateUtil.Date(); GedcomxDateUtil.Date end = new GedcomxDateUtil.Date(); start.day = 5; GedcomxDateUtil.zipDates(start, end); assertThat(end.day).isEqualTo(1); } @Test public void successOnZipEndDay() { GedcomxDateUtil.Date start = new GedcomxDateUtil.Date(); GedcomxDateUtil.Date end = new GedcomxDateUtil.Date(); end.day = 5; GedcomxDateUtil.zipDates(start, end); assertThat(start.day).isEqualTo(1); } @Test public void successOnZipStartHour() { GedcomxDateUtil.Date start = new GedcomxDateUtil.Date(); GedcomxDateUtil.Date end = new GedcomxDateUtil.Date(); start.hours = 5; GedcomxDateUtil.zipDates(start, end); assertThat(end.hours).isEqualTo(0); } @Test public void successOnZipEndHour() { GedcomxDateUtil.Date start = new GedcomxDateUtil.Date(); GedcomxDateUtil.Date end = new GedcomxDateUtil.Date(); end.hours = 5; GedcomxDateUtil.zipDates(start, end); assertThat(start.hours).isEqualTo(0); } @Test public void successOnZipStartMinute() { GedcomxDateUtil.Date start = new GedcomxDateUtil.Date(); GedcomxDateUtil.Date end = new GedcomxDateUtil.Date(); start.minutes = 5; GedcomxDateUtil.zipDates(start, end); assertThat(end.minutes).isEqualTo(0); } @Test public void successOnZipEndMinute() { GedcomxDateUtil.Date start = new GedcomxDateUtil.Date(); GedcomxDateUtil.Date end = new GedcomxDateUtil.Date(); end.minutes = 5; GedcomxDateUtil.zipDates(start, end); assertThat(start.minutes).isEqualTo(0); } @Test public void successOnZipStartSecond() { GedcomxDateUtil.Date start = new GedcomxDateUtil.Date(); GedcomxDateUtil.Date end = new GedcomxDateUtil.Date(); start.seconds = 5; GedcomxDateUtil.zipDates(start, end); assertThat(end.seconds).isEqualTo(0); } @Test public void successOnZipEndSecond() { GedcomxDateUtil.Date start = new GedcomxDateUtil.Date(); GedcomxDateUtil.Date end = new GedcomxDateUtil.Date(); end.seconds = 5; GedcomxDateUtil.zipDates(start, end); assertThat(start.seconds).isEqualTo(0); } /** * zipDuration */ @Test public void successOnZipDurationSeconds() { GedcomxDateUtil.Date date = new GedcomxDateUtil.Date(); date.year = 2000; GedcomxDateDuration duration = new GedcomxDateDuration("PT1S"); GedcomxDateUtil.zipDuration(date, duration); assertThat(date.seconds).isEqualTo(0); assertThat(date.minutes).isEqualTo(0); assertThat(date.hours).isEqualTo(0); assertThat(date.day).isEqualTo(1); assertThat(date.month).isEqualTo(1); assertThat(date.year).isEqualTo(2000); } @Test public void successOnZipDurationMinutes() { GedcomxDateUtil.Date date = new GedcomxDateUtil.Date(); date.year = 2000; GedcomxDateDuration duration = new GedcomxDateDuration("PT1M"); GedcomxDateUtil.zipDuration(date, duration); assertThat(date.seconds).isEqualTo(null); assertThat(date.minutes).isEqualTo(0); assertThat(date.hours).isEqualTo(0); assertThat(date.day).isEqualTo(1); assertThat(date.month).isEqualTo(1); assertThat(date.year).isEqualTo(2000); } @Test public void successOnZipDurationHours() { GedcomxDateUtil.Date date = new GedcomxDateUtil.Date(); date.year = 2000; GedcomxDateDuration duration = new GedcomxDateDuration("PT1H"); GedcomxDateUtil.zipDuration(date, duration); assertThat(date.seconds).isEqualTo(null); assertThat(date.minutes).isEqualTo(null); assertThat(date.hours).isEqualTo(0); assertThat(date.day).isEqualTo(1); assertThat(date.month).isEqualTo(1); assertThat(date.year).isEqualTo(2000); } @Test public void successOnZipDurationDays() { GedcomxDateUtil.Date date = new GedcomxDateUtil.Date(); date.year = 2000; GedcomxDateDuration duration = new GedcomxDateDuration("P1D"); GedcomxDateUtil.zipDuration(date, duration); assertThat(date.seconds).isEqualTo(null); assertThat(date.minutes).isEqualTo(null); assertThat(date.hours).isEqualTo(null); assertThat(date.day).isEqualTo(1); assertThat(date.month).isEqualTo(1); assertThat(date.year).isEqualTo(2000); } @Test public void successOnZipDurationMonths() { GedcomxDateUtil.Date date = new GedcomxDateUtil.Date(); date.year = 2000; GedcomxDateDuration duration = new GedcomxDateDuration("P1M"); GedcomxDateUtil.zipDuration(date, duration); assertThat(date.seconds).isEqualTo(null); assertThat(date.minutes).isEqualTo(null); assertThat(date.hours).isEqualTo(null); assertThat(date.day).isEqualTo(null); assertThat(date.month).isEqualTo(1); assertThat(date.year).isEqualTo(2000); } @Test public void successOnZipDurationNothing() { GedcomxDateUtil.Date date = new GedcomxDateUtil.Date(); date.year = 2000; GedcomxDateDuration duration = new GedcomxDateDuration("P1Y"); GedcomxDateUtil.zipDuration(date, duration); assertThat(date.seconds).isEqualTo(null); assertThat(date.minutes).isEqualTo(null); assertThat(date.hours).isEqualTo(null); assertThat(date.day).isEqualTo(null); assertThat(date.month).isEqualTo(null); assertThat(date.year).isEqualTo(2000); } }