package com.ctrip.framework.apollo.util.parser;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class DurationParserTest {
private Parsers.DurationParser durationParser = Parsers.forDuration();
@Test
public void testParseMilliSeconds() throws Exception {
String text = "345MS";
long expected = 345;
checkParseToMillis(expected, text);
}
@Test
public void testParseMilliSecondsWithNoSuffix() throws Exception {
String text = "123";
long expected = 123;
checkParseToMillis(expected, text);
}
@Test
public void testParseSeconds() throws Exception {
String text = "20S";
long expected = 20 * 1000;
checkParseToMillis(expected, text);
}
@Test
public void testParseMinutes() throws Exception {
String text = "15M";
long expected = 15 * 60 * 1000;
checkParseToMillis(expected, text);
}
@Test
public void testParseHours() throws Exception {
String text = "10H";
long expected = 10 * 3600 * 1000;
checkParseToMillis(expected, text);
}
@Test
public void testParseDays() throws Exception {
String text = "2D";
long expected = 2 * 24 * 3600 * 1000;
checkParseToMillis(expected, text);
}
@Test
public void testParseFullText() throws Exception {
String text = "2D3H4M5S123MS";
long expected = 2 * 24 * 3600 * 1000 + 3 * 3600 * 1000 + 4 * 60 * 1000 + 5 * 1000 + 123;
checkParseToMillis(expected, text);
}
@Test
public void testParseFullTextWithLowerCase() throws Exception {
String text = "2d3h4m5s123ms";
long expected = 2 * 24 * 3600 * 1000 + 3 * 3600 * 1000 + 4 * 60 * 1000 + 5 * 1000 + 123;
checkParseToMillis(expected, text);
}
@Test
public void testParseFullTextWithNoMS() throws Exception {
String text = "2D3H4M5S123";
long expected = 2 * 24 * 3600 * 1000 + 3 * 3600 * 1000 + 4 * 60 * 1000 + 5 * 1000 + 123;
checkParseToMillis(expected, text);
}
@Test(expected = ParserException.class)
public void testParseException() throws Exception {
String text = "someInvalidText";
durationParser.parseToMillis(text);
}
private void checkParseToMillis(long expected, String text) throws Exception {
assertEquals(expected, durationParser.parseToMillis(text));
}
}