package com.ctrip.framework.apollo.util.parser;
import static org.junit.Assert.assertEquals;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import org.junit.Test;
/**
* @author Jason Song(song_s@ctrip.com)
*/
public class DateParserTest {
private Parsers.DateParser dateParser = Parsers.forDate();
private String shortDateText = "2016-09-28";
private String mediumDateText = "2016-09-28 15:10:10";
private String longDateText = "2016-09-28 15:10:10.123";
@Test
public void testParseShortFormat() throws Exception {
String format = "yyyy-MM-dd";
Date expected = assembleDate(2016, 9, 28, 0, 0, 0, 0);
checkWithFormat(expected, shortDateText, format);
checkWithFormat(expected, mediumDateText, format);
checkWithFormat(expected, longDateText, format);
}
@Test
public void testParseMediumFormat() throws Exception {
String format = "yyyy-MM-dd HH:mm:ss";
Date expected = assembleDate(2016, 9, 28, 15, 10, 10, 0);
checkWithFormat(expected, mediumDateText, format);
checkWithFormat(expected, longDateText, format);
}
@Test
public void testParseLongFormat() throws Exception {
String format = "yyyy-MM-dd HH:mm:ss.SSS";
Date expected = assembleDate(2016, 9, 28, 15, 10, 10, 123);
checkWithFormat(expected, longDateText, format);
}
@Test
public void testParseWithNoFormat() throws Exception {
Date shortDate = assembleDate(2016, 9, 28, 0, 0, 0, 0);
Date mediumDate = assembleDate(2016, 9, 28, 15, 10, 10, 0);
Date longDate = assembleDate(2016, 9, 28, 15, 10, 10, 123);
check(shortDate, shortDateText);
check(mediumDate, mediumDateText);
check(longDate, longDateText);
}
@Test
public void testParseWithFormatAndLocale() throws Exception {
Date someDate = assembleDate(2016, 9, 28, 15, 10, 10, 123);
Locale someLocale = Locale.FRENCH;
String someFormat = "EEE, d MMM yyyy HH:mm:ss.SSS Z";
SimpleDateFormat someDateFormat = new SimpleDateFormat(someFormat, someLocale);
String dateText = someDateFormat.format(someDate);
checkWithFormatAndLocale(someDate, dateText, someFormat, someLocale);
}
@Test(expected = ParserException.class)
public void testParseError() throws Exception {
String someInvalidDate = "someInvalidDate";
String format = "yyyy-MM-dd";
dateParser.parse(someInvalidDate, format);
}
private void check(Date expected, String text) throws Exception {
assertEquals(expected, dateParser.parse(text));
}
private void checkWithFormat(Date expected, String text, String format) throws Exception {
assertEquals(expected, dateParser.parse(text, format));
}
private void checkWithFormatAndLocale(Date expected, String text, String format, Locale locale) throws Exception {
assertEquals(expected, dateParser.parse(text, format, locale));
}
private Date assembleDate(int year, int month, int day, int hour, int minute, int second, int millisecond) {
Calendar date = Calendar.getInstance();
date.set(year, month - 1, day, hour, minute, second); //Month in Calendar is 0 based
date.set(Calendar.MILLISECOND, millisecond);
return date.getTime();
}
}