package net.time4j.i18n;
import net.time4j.PlainTimestamp;
import java.text.ParseException;
import java.util.Arrays;
import java.util.Locale;
import net.time4j.format.expert.ChronoFormatter;
import net.time4j.format.expert.Iso8601Format;
import net.time4j.format.expert.PatternType;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
@RunWith(Parameterized.class)
public class DateTimePatternTest {
@Parameterized.Parameters
(name= "{index}: "
+ "(pattern={0},locale={1},value={2},text={3})")
public static Iterable<Object[]> data() {
return Arrays.asList(
new Object[][] {
{"uuuuMMdd'T'HHmmssSSSSSSSSS",
"",
"2012-06-30T23:59:59,123456789",
"20120630T235959123456789"},
{"MM/dd/yyyy hh:mm a",
"",
"2012-06-30T23:45",
"06/30/2012 11:45 PM"},
{"MM/dd/yyyy hh:mm a",
"",
"2012-06-30T12:45",
"06/30/2012 12:45 PM"},
{"MM/dd/yyyy KK:mm a",
"",
"2012-06-30T23:45",
"06/30/2012 11:45 PM"},
{"MM/dd/yyyy KK:mm a",
"",
"2012-06-30T12:45",
"06/30/2012 00:45 PM"},
{"MM/dd/yyyy kk:mm a",
"",
"2012-06-30T23:45",
"06/30/2012 23:45 PM"},
{"MM/dd/yyyy kk:mm a",
"",
"2012-06-30T00:45",
"06/30/2012 24:45 AM"},
{"uuuu-MM-dd '('A 'milliseconds of day)'",
"",
"2012-06-30T23:59:59,123",
"2012-06-30 (86399123 milliseconds of day)"},
{"MM/dd/yyyy hh:mm a (e)",
"de",
"2014-05-30T23:45",
"05/30/2014 11:45 nachm. (5)"},
{"MM/dd/yyyy hh:mm a (ee)",
"us",
"2014-05-30T23:45",
"05/30/2014 11:45 pm (06)"},
{"E, dd.MM.uuuu HH:mm",
"de",
"2014-05-30T23:45",
"Fr., 30.05.2014 23:45"},
{"EE, dd.MM.uuuu HH:mm",
"de",
"2014-05-30T23:45",
"Fr., 30.05.2014 23:45"},
{"EEE, dd.MM.uuuu HH:mm",
"de",
"2014-05-30T23:45",
"Fr., 30.05.2014 23:45"},
{"EEEE, dd.MM.uuuu HH:mm",
"de",
"2014-05-30T23:45",
"Freitag, 30.05.2014 23:45"},
{"EEEEE, dd.MM.uuuu HH:mm",
"de",
"2014-05-30T23:45",
"F, 30.05.2014 23:45"},
{"EEEEEE, dd.MM.uuuu HH:mm",
"de",
"2014-05-30T23:45",
"Fr., 30.05.2014 23:45"},
{"EEE, MM/dd/uuuu hh:mm a",
"us",
"2014-05-30T23:45",
"Fri, 05/30/2014 11:45 pm"},
{"EEEE, MM/dd/uuuu hh:mm a",
"us",
"2014-05-30T23:45",
"Friday, 05/30/2014 11:45 pm"},
{"EEEEE, MM/dd/uuuu hh:mm a",
"us",
"2014-05-30T23:45",
"F, 05/30/2014 11:45 pm"},
{"EEEEEE, MM/dd/uuuu hh:mm a",
"us",
"2014-05-30T23:45",
"Fr, 05/30/2014 11:45 pm"}
}
);
}
private ChronoFormatter<PlainTimestamp> formatter;
private PlainTimestamp value;
private String text;
public DateTimePatternTest(
String pattern,
String locale,
String value,
String text
) throws ParseException {
super();
this.formatter =
ChronoFormatter.setUp(PlainTimestamp.class, toLocale(locale))
.addPattern(pattern, PatternType.CLDR).build();
this.value = Iso8601Format.EXTENDED_DATE_TIME.parse(value);
this.text = text;
}
@Test
public void print() {
assertThat(
this.formatter.format(this.value),
is(this.text));
}
@Test
public void parse() throws ParseException {
assertThat(
this.formatter.parse(this.text),
is(this.value));
}
private static Locale toLocale(String locale) {
if (locale.isEmpty()) {
return Locale.ROOT;
} else if (locale.equals("en")) {
return Locale.UK;
} else if (locale.equals("us")) {
return Locale.US;
} else if (locale.equals("in")) {
return new Locale("en", "IN");
}
return new Locale(locale, locale.toUpperCase());
}
}