/** * Creates a deadline from a string in the format {@value #DATE_FORMAT}. * * @param source a string in the format {@value #DATE_FORMAT}. * @return a deadline from a string in the format {@value #DATE_FORMAT}. * @throws ParseException if the specified source string cannot be parsed. */ public static Deadline parse(final String source) throws ParseException { return fromUnixMillis(simpleDateFormat.parse(source).getTime()); }
/** * Creates a deadline from a string in the format {@value #DATE_FORMAT}. * * @param source a string in the format {@value #DATE_FORMAT}. * @return a deadline from a string in the format {@value #DATE_FORMAT}. * @throws ParseException if the specified source string cannot be parsed. */ public static Deadline parse(final String source) throws ParseException { return fromUnixMillis(simpleDateFormat.parse(source).getTime()); }
/** * Calculates a deadline with a given time in milliseconds plus a given time value. Non-positive time values * represent an indefinite timeout without a deadline. * * @param timeMillis A time in UNIX milliseconds, usually the current time. * @param timeValue time value to add to {@code timeMillis}. * @return a deadline representing the current time plus the given time value. */ public static Deadline calculate(final long timeMillis, final TimeValue timeValue) { if (TimeValue.isPositive(timeValue)) { // TODO handle unlikely overflow final long deadline = timeMillis + timeValue.toMillis(); return deadline < 0 ? Deadline.MAX_VALUE : Deadline.fromUnixMillis(deadline); } return Deadline.MAX_VALUE; }
/** * Calculates a deadline with a given time in milliseconds plus a given time value. Non-positive time values * represent an indefinite timeout without a deadline. * * @param timeMillis A time in UNIX milliseconds, usually the current time. * @param timeValue time value to add to {@code timeMillis}. * @return a deadline representing the current time plus the given time value. */ public static Deadline calculate(final long timeMillis, final TimeValue timeValue) { if (TimeValue.isPositive(timeValue)) { // TODO handle unlikely overflow final long deadline = timeMillis + timeValue.toMillis(); return deadline < 0 ? Deadline.MAX_VALUE : Deadline.fromUnixMillis(deadline); } return Deadline.MAX_VALUE; }
@Test public void testIsBefore() { final long nowPlusOneMin = System.currentTimeMillis() + 60000; final Deadline deadline = Deadline.fromUnixMillis(nowPlusOneMin); Assert.assertTrue(deadline.isBefore(nowPlusOneMin + 1)); }
@Test public void testValue() { final long nowPlusOneMin = System.currentTimeMillis() + 60000; final Deadline deadline = Deadline.fromUnixMillis(nowPlusOneMin); Assert.assertEquals(nowPlusOneMin, deadline.getValue()); } }
@Test public void testIsMin() { Assert.assertTrue(Deadline.fromUnixMillis(0).isMin()); Assert.assertFalse(Deadline.fromUnixMillis(1000).isMin()); Assert.assertFalse(Deadline.MAX_VALUE.isMin()); Assert.assertTrue(Deadline.MIN_VALUE.isMin()); }
@Test public void testIsNotExpired() { Assert.assertFalse(Deadline.fromUnixMillis(0).isNotExpired()); Assert.assertFalse(Deadline.fromUnixMillis(1).isNotExpired()); Assert.assertTrue(Deadline.MAX_VALUE.isNotExpired()); Assert.assertFalse(Deadline.MIN_VALUE.isNotExpired()); }
@Test public void testIsMax() { Assert.assertFalse(Deadline.fromUnixMillis(0).isMax()); Assert.assertFalse(Deadline.fromUnixMillis(1000).isMax()); Assert.assertFalse(Deadline.MIN_VALUE.isMax()); Assert.assertTrue(Deadline.MAX_VALUE.isMax()); }
@Test public void testIsExpired() { Assert.assertTrue(Deadline.fromUnixMillis(0).isExpired()); Assert.assertTrue(Deadline.fromUnixMillis(1).isExpired()); Assert.assertFalse(Deadline.MAX_VALUE.isExpired()); Assert.assertTrue(Deadline.MIN_VALUE.isExpired()); }
@Test public void testFormat() throws ParseException { final Deadline deadline = Deadline.fromUnixMillis(1000); final Deadline deadline2 = Deadline.parse(deadline.toString()); Assert.assertEquals(1000, deadline2.getValue()); }
@Test public void testMin() { Assert.assertEquals(Deadline.MIN_VALUE, Deadline.MIN_VALUE.min(Deadline.MAX_VALUE)); Assert.assertEquals(Deadline.MIN_VALUE, Deadline.MAX_VALUE.min(Deadline.MIN_VALUE)); // final Deadline deadline0 = Deadline.fromUnixMillis(0); Assert.assertEquals(Deadline.MIN_VALUE, deadline0.min(Deadline.MIN_VALUE)); Assert.assertEquals(deadline0, deadline0.min(Deadline.MAX_VALUE)); // final Deadline deadline1 = Deadline.fromUnixMillis(0); Assert.assertEquals(Deadline.MIN_VALUE, deadline1.min(Deadline.MIN_VALUE)); Assert.assertEquals(deadline0, deadline1.min(Deadline.MAX_VALUE)); }
@Test public void testMessage() { final Deadline deadline = Deadline.fromUnixMillis(1000).freeze(); Assert.assertTrue(deadline.toString(), deadline.isExpired()); final String format = deadline.formatTarget(); final TimeValue diff = TimeValue.ofMilliseconds(deadline.remaining()); Assert.assertEquals("Deadline: " + format + ", " + diff + " overdue", DeadlineTimeoutException.from(deadline).getMessage()); }