package org.mafagafogigante.dungeon.date;
import static org.mafagafogigante.dungeon.date.DungeonTimeUnit.DAY;
import static org.mafagafogigante.dungeon.date.DungeonTimeUnit.HOUR;
import static org.mafagafogigante.dungeon.date.DungeonTimeUnit.MINUTE;
import static org.mafagafogigante.dungeon.date.DungeonTimeUnit.MONTH;
import static org.mafagafogigante.dungeon.date.DungeonTimeUnit.SECOND;
import static org.mafagafogigante.dungeon.date.DungeonTimeUnit.YEAR;
import org.junit.Assert;
import org.junit.Test;
public class DungeonTimeParserTest {
@Test
public void parsePeriodShouldWorkWithSingulars() throws Exception {
Assert.assertTrue(DungeonTimeParser.parsePeriod("1 millisecond").equals(new Duration(1)));
Assert.assertTrue(DungeonTimeParser.parsePeriod("1 second").equals(new Duration(SECOND.milliseconds)));
Assert.assertTrue(DungeonTimeParser.parsePeriod("1 hour").equals(new Duration(HOUR.milliseconds)));
Assert.assertTrue(DungeonTimeParser.parsePeriod("1 minute").equals(new Duration(MINUTE.milliseconds)));
Assert.assertTrue(DungeonTimeParser.parsePeriod("1 day").equals(new Duration(DAY.milliseconds)));
Assert.assertTrue(DungeonTimeParser.parsePeriod("1 month").equals(new Duration(MONTH.milliseconds)));
Assert.assertTrue(DungeonTimeParser.parsePeriod("1 year").equals(new Duration(YEAR.milliseconds)));
}
@Test
public void parsePeriodShouldWorkWithPlurals() throws Exception {
Assert.assertTrue(DungeonTimeParser.parsePeriod("2 milliseconds").equals(new Duration(2)));
Assert.assertTrue(DungeonTimeParser.parsePeriod("2 seconds").equals(new Duration(2 * SECOND.milliseconds)));
Assert.assertTrue(DungeonTimeParser.parsePeriod("2 minutes").equals(new Duration(2 * MINUTE.milliseconds)));
Assert.assertTrue(DungeonTimeParser.parsePeriod("2 hours").equals(new Duration(2 * HOUR.milliseconds)));
Assert.assertTrue(DungeonTimeParser.parsePeriod("2 days").equals(new Duration(2 * DAY.milliseconds)));
Assert.assertTrue(DungeonTimeParser.parsePeriod("2 months").equals(new Duration(2 * MONTH.milliseconds)));
Assert.assertTrue(DungeonTimeParser.parsePeriod("2 years").equals(new Duration(2 * YEAR.milliseconds)));
}
@Test
public void parsePeriodShouldWorkWithMultipleUnits() throws Exception {
Duration twoMinutesAndTenSeconds = new Duration(2 * MINUTE.milliseconds + 10 * SECOND.milliseconds);
Assert.assertTrue(DungeonTimeParser.parsePeriod("2 minutes and 10 seconds").equals(twoMinutesAndTenSeconds));
}
@Test
public void parsePeriodShouldWorkWithTheJavadocExample() throws Exception {
long duration = 2 * YEAR.milliseconds + 5 * MONTH.milliseconds + 8 * DAY.milliseconds + 20 * HOUR.milliseconds;
Duration javadocExample = new Duration(duration);
Assert.assertTrue(DungeonTimeParser.parsePeriod("2 years, 5 months, 8 days, and 20 hours").equals(javadocExample));
}
@Test(expected = IllegalArgumentException.class)
public void parsePeriodShouldThrowExceptionOnEmptyString() throws Exception {
DungeonTimeParser.parsePeriod("");
}
@Test(expected = IllegalArgumentException.class)
public void parsePeriodShouldThrowExceptionOnMissingUnits() throws Exception {
DungeonTimeParser.parsePeriod("1");
}
@Test(expected = IllegalArgumentException.class)
public void parsePeriodShouldThrowExceptionOnMissingMultipliers() throws Exception {
DungeonTimeParser.parsePeriod("second");
}
@Test(expected = IllegalArgumentException.class)
public void parsePeriodShouldThrowExceptionOnNegativeMultipliers() throws Exception {
DungeonTimeParser.parsePeriod("-1 seconds");
}
@Test(expected = IllegalArgumentException.class)
public void parsePeriodShouldThrowExceptionOnZeroMultipliers() throws Exception {
DungeonTimeParser.parsePeriod("0 seconds");
}
@Test(expected = IllegalArgumentException.class)
public void parsePeriodShouldThrowExceptionOnMalformedInput() throws Exception {
DungeonTimeParser.parsePeriod("and second");
}
@Test(expected = IllegalArgumentException.class)
public void parsePeriodShouldThrowExceptionOnInvalidUnits() throws Exception {
DungeonTimeParser.parsePeriod("1 foo");
}
}