package edu.stanford.nlp.time; import edu.stanford.nlp.util.ErasureUtils; import edu.stanford.nlp.util.Pair; import org.joda.time.Partial; import org.junit.Test; import static org.junit.Assert.assertEquals; /** * Tests basic SUTime operations * * @author Angel Chang */ public class SUTimeTest { private static void resolveAndCheckRange(String message, SUTime.Temporal t, SUTime.Time anchor, String expected) { SUTime.Temporal res = t.resolve(anchor); SUTime.Range range = res.getRange(); assertEquals(message, expected, range.toISOString()); } @Test public void testResolveDowToDay() { Partial p = new Partial(JodaTimeUtils.standardISOWeekFields, new int[]{2016,1,1,0,0,0,0}); assertEquals("[year=2016, weekOfWeekyear=1, dayOfWeek=1, hourOfDay=0, minuteOfHour=0, secondOfMinute=0, millisOfSecond=0]", p.toString()); Partial p2 = JodaTimeUtils.resolveDowToDay(p); assertEquals("2016-01-04T00:00:00.000", p2.toString()); } @Test public void testNext() { SUTime.Time anchorTime = new SUTime.IsoDate(2016, 6, 19); // Sunday Pair<SUTime.Temporal, String>[] testPairs = ErasureUtils.uncheckedCast(new Pair[]{ Pair.makePair(SUTime.MONDAY, "2016-06-20/2016-06-20"), Pair.makePair(SUTime.TUESDAY, "2016-06-21/2016-06-21"), Pair.makePair(SUTime.WEDNESDAY, "2016-06-22/2016-06-22"), Pair.makePair(SUTime.THURSDAY, "2016-06-23/2016-06-23"), Pair.makePair(SUTime.FRIDAY, "2016-06-24/2016-06-24"), Pair.makePair(SUTime.SATURDAY, "2016-06-25/2016-06-25"), Pair.makePair(SUTime.SUNDAY, "2016-06-26/2016-06-26"), Pair.makePair(SUTime.MORNING, "2016-06-20T06:00:00.000/2016-06-20T12:00"), Pair.makePair(SUTime.AFTERNOON, "2016-06-20T12:00:00.000/PT6H"), // TODO: Check this... Pair.makePair(SUTime.EVENING, "2016-06-20T18:00:00.000/PT2H"), // TODO: Check this... Pair.makePair(SUTime.NIGHT, "2016-06-20T14:00:00.000/2016-06-21T00:00:00.000"), Pair.makePair(SUTime.DAY, "2016-06-20/2016-06-20"), Pair.makePair(SUTime.WEEK, "2016-06-20/2016-06-26"), Pair.makePair(SUTime.MONTH, "2016-07-01/2016-07-31"), Pair.makePair(SUTime.MONTH.multiplyBy(3), "2016-06-19/2016-09-19"), Pair.makePair(SUTime.QUARTER, "2016-07-01/2016-09-30"), Pair.makePair(SUTime.YEAR, "2017-01-01/2017-12-31"), Pair.makePair(SUTime.WINTER, "2017-12-01/2017-03"), Pair.makePair(SUTime.SPRING, "2017-03-01/2017-06"), Pair.makePair(SUTime.SUMMER, "2017-06-01/2017-09"), Pair.makePair(SUTime.FALL, "2017-09-01/2017-12"), }); for (int i = 0; i < testPairs.length; i++) { Pair<SUTime.Temporal, String> p = testPairs[i]; SUTime.RelativeTime rel1 = new SUTime.RelativeTime(SUTime.TIME_REF, SUTime.TemporalOp.NEXT, p.first()); resolveAndCheckRange("Next for " + p.first() + " (" + i + ')', rel1, anchorTime, p.second()); } } @Test public void testThis() { SUTime.Time anchorTime = new SUTime.IsoDate(2016, 6, 19); // Sunday Pair<SUTime.Temporal, String>[] testPairs = ErasureUtils.uncheckedCast(new Pair[]{ Pair.makePair(SUTime.MONDAY, "2016-06-13/2016-06-13"), // TODO: is this section right, should this be interpreted to be in the past? Pair.makePair(SUTime.TUESDAY, "2016-06-14/2016-06-14"), Pair.makePair(SUTime.WEDNESDAY, "2016-06-15/2016-06-15"), Pair.makePair(SUTime.THURSDAY, "2016-06-16/2016-06-16"), Pair.makePair(SUTime.FRIDAY, "2016-06-17/2016-06-17"), Pair.makePair(SUTime.SATURDAY, "2016-06-18/2016-06-18"), Pair.makePair(SUTime.SUNDAY, "2016-06-19/2016-06-19"), Pair.makePair(SUTime.MORNING, "2016-06-19T06:00:00.000/2016-06-19T12:00"), Pair.makePair(SUTime.AFTERNOON, "2016-06-19T12:00:00.000/PT6H"), // TODO: Check this... Pair.makePair(SUTime.EVENING, "2016-06-19T18:00:00.000/PT2H"), // TODO: Check this... Pair.makePair(SUTime.NIGHT, "2016-06-19T14:00:00.000/2016-06-20T00:00:00.000"), Pair.makePair(SUTime.DAY, "2016-06-19/2016-06-19"), Pair.makePair(SUTime.WEEK, "2016-06-13/2016-06-19"), // TODO: is this right (Sunday is a weird day...) Pair.makePair(SUTime.MONTH, "2016-06-01/2016-06-30"), Pair.makePair(SUTime.MONTH.multiplyBy(3), "2016-05-04/2016-08-03" /*, "2016-06-01/2016-08-31"*/), // TODO: check... Pair.makePair(SUTime.QUARTER, "2016-04-01/2016-06-30"), Pair.makePair(SUTime.YEAR, "2016-01-01/2016-12-31"), Pair.makePair(SUTime.WINTER, "2016-12-01/2016-03"), Pair.makePair(SUTime.SPRING, "2016-03-01/2016-06"), Pair.makePair(SUTime.SUMMER, "2016-06-01/2016-09"), Pair.makePair(SUTime.FALL, "2016-09-01/2016-12"), }); for (int i = 0; i < testPairs.length; i++) { Pair<SUTime.Temporal, String> p = testPairs[i]; SUTime.RelativeTime rel1 = new SUTime.RelativeTime(SUTime.TIME_REF, SUTime.TemporalOp.THIS, p.first()); resolveAndCheckRange("This for " + p.first() + " (" + i + ')', rel1, anchorTime, p.second()); } } }