package org.dcache.util; import org.junit.Test; import java.util.concurrent.TimeUnit; import org.dcache.util.TimeUtils.DurationParser; import static org.junit.Assert.*; public class TimeUtilsTest { @Test public void testDurationOfNanos() { CharSequence cs = TimeUtils.duration(13, TimeUnit.NANOSECONDS, TimeUtils.TimeUnitFormat.SHORT); assertEquals(cs.toString(), "13 ns"); } @Test public void testDurationOfSeconds() { CharSequence cs = TimeUtils.duration(13, TimeUnit.SECONDS, TimeUtils.TimeUnitFormat.SHORT); assertEquals(cs.toString(), "13 s" ); } @Test public void testDurationOfMin() { CharSequence cs = TimeUtils.duration(13, TimeUnit.MINUTES, TimeUtils.TimeUnitFormat.SHORT); assertEquals(cs.toString(), "13 min"); } @Test public void testDurationOfHours() { CharSequence cs = TimeUtils.duration(13, TimeUnit.HOURS, TimeUtils.TimeUnitFormat.SHORT); assertEquals(cs.toString(), "13 hours"); } @Test public void testDurationOfDays() { CharSequence cs = TimeUtils.duration(13, TimeUnit.DAYS, TimeUtils.TimeUnitFormat.SHORT); assertEquals(cs.toString(), "13 days"); } @Test public void testDurationFromNanos() { long duration = TimeUnit.SECONDS.toNanos(13); CharSequence cs = TimeUtils.duration(duration, TimeUnit.NANOSECONDS, TimeUtils.TimeUnitFormat.SHORT); assertEquals(cs.toString(), "13 s"); } @Test public void testDurationFromNanosToDays() { long duration = TimeUnit.DAYS.toNanos(13); CharSequence cs = TimeUtils.duration(duration, TimeUnit.NANOSECONDS, TimeUtils.TimeUnitFormat.SHORT); assertEquals(cs.toString(), "13 days"); } @Test public void testFormattingFromDaysNoLeadingZeros() { String formatted = getFormattedDuration("%D %H:%m:%s.%N"); assertEquals(formatted, "9 19:3:57.55100"); } @Test public void testFormattingFromDays() { String formatted = getFormattedDuration("%D %HH:%mm:%ss.%N"); assertEquals(formatted, "9 19:03:57.55100"); } @Test public void testFormattingFromHours() { String formatted = getFormattedDuration("%HH:%mm:%ss.%N"); assertEquals(formatted, "235:03:57.55100"); } @Test public void testFormattingFromMinutes() { String formatted = getFormattedDuration("%mm minutes, %ss.%N seconds"); assertEquals(formatted, "14103 minutes, 57.55100 seconds"); } @Test public void testFormattingFromSeconds() { String formatted = getFormattedDuration("%ss.%N seconds"); assertEquals(formatted, "846237.55100 seconds"); } @Test public void testScrambledFormatting() { String formatted = getFormattedDuration("%HH hours, %D days, %s.%N seconds, %m minutes"); assertEquals(formatted, "19 hours, 9 days, 57.55100 seconds, 3 minutes"); } @Test public void testRepeatedFormatting() { DurationParser parser = new DurationParser(846237551L, TimeUnit.MILLISECONDS); parser.parse(TimeUnit.HOURS); parser.parse(TimeUnit.SECONDS); assertEquals(parser.get(TimeUnit.HOURS), 235); assertEquals(parser.get(TimeUnit.SECONDS), 237); parser.clear(); parser.parseAll(); assertEquals(parser.get(TimeUnit.HOURS), 19); } public void testStrictlyDecreasing() { DurationParser parser = new DurationParser(846237551L, TimeUnit.MILLISECONDS); parser.parse(TimeUnit.HOURS); parser.parse(TimeUnit.SECONDS); IllegalStateException exception = null; try { parser.parse(TimeUnit.MINUTES); } catch (IllegalStateException e) { exception = e; } assertNotNull(exception); } @Test public void testFormattingWithGaps() { String formatted = getFormattedDuration("%H hours, %s.%N seconds"); assertEquals(formatted, "235 hours, 237.55100 seconds"); } private String getFormattedDuration(String format) { long duration = 846237551L; TimeUnit durationUnit = TimeUnit.MILLISECONDS; return TimeUtils.getFormattedDuration(duration, durationUnit, format); } }