package net.time4j.format.expert;
import net.time4j.Moment;
import net.time4j.tz.Timezone;
import java.text.ParseException;
import java.util.Arrays;
import java.util.Locale;
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 MomentPatternTest {
@Parameterized.Parameters
(name= "{index}: "
+ "(pattern={0},locale={1},timezone={2},value={3},text={4})")
public static Iterable<Object[]> data() {
return Arrays.asList(
new Object[][] {
{"uuuu-MM-dd'T'HH:mm:ss.SSSSSSSSSX",
"",
"Asia/Tokyo",
"2012-06-30T23:59:60,123456789Z",
"2012-07-01T08:59:60.123456789+09"},
{"uuuu-MM-dd'T'HH:mm:ss.SSSSSSSSSXXX",
"",
"Asia/Tokyo",
"2012-06-30T23:59:60,123456789Z",
"2012-07-01T08:59:60.123456789+09:00"},
{"uuuu-MM-dd'T'HH:mm:ss.SSSSSSSSSXXX",
"",
"Europe/Berlin",
"2012-06-30T23:59:60,123456789Z",
"2012-07-01T01:59:60.123456789+02:00"},
{"uuuu-MM-dd'T'HH:mm:ss.SSSSSSXXX",
"",
"Europe/Berlin",
"2012-06-30T23:59:60,123456000Z",
"2012-07-01T01:59:60.123456+02:00"},
{"uuuu-MM-dd'T'HH:mm:ss.SSSXXX",
"",
"Europe/Berlin",
"2012-06-30T23:59:60,123000000Z",
"2012-07-01T01:59:60.123+02:00"},
{"uuuu-MM-dd'T'HH:mm:ss.SSSX",
"",
"Europe/Berlin",
"2012-06-30T23:59:60,123000000Z",
"2012-07-01T01:59:60.123+02"},
{"uuuu-MM-dd'T'HH:mm:ss.SSSX",
"",
"Asia/Kolkata",
"2012-06-30T23:59:60,123000000Z",
"2012-07-01T05:29:60.123+0530"},
{"d. MMMM uuuu HH:mm:ss.SSSSSSSSSXXX",
"de",
"Europe/Berlin",
"2012-06-30T23:59:60,123456789Z",
"1. Juli 2012 01:59:60.123456789+02:00"},
{"d. MMMM uuuu HH:mm[:ss]XXX",
"de",
"Europe/Berlin",
"2012-06-30T23:59:60Z",
"1. Juli 2012 01:59:60+02:00"},
{"d. MMMM uuuu HH:mm[:ss.SSSSSSSSS]XXX",
"de",
"Europe/Berlin",
"2012-06-30T23:59:60,123456789Z",
"1. Juli 2012 01:59:60.123456789+02:00"},
{"uuuu-MM-dd'T'HH:mm:ss.SSSXXXXX",
"",
"Asia/Kolkata",
"2012-06-30T23:59:60,123000000Z",
"2012-07-01T05:29:60.123+05:30"},
{"uuuu-MM-dd'T'HH:mm:ss.SSSXXXXX",
"",
"Europe/Berlin",
"2012-06-30T23:59:60,123000000Z",
"2012-07-01T01:59:60.123+02:00"},
{"d. MMMM uuuu HH:mm:ss'['VV']'",
"de",
"Europe/Berlin",
"2012-06-30T23:59:60Z",
"1. Juli 2012 01:59:60[Europe/Berlin]"},
{"d. MMMM uuuu HH:mm'['VV']'",
"de",
"Europe/Berlin",
"2012-05-10T23:59Z",
"11. Mai 2012 01:59[Europe/Berlin]"},
{"d. MMM uuuu HH:mm'['VV']'",
"de",
"Europe/Berlin",
"2012-05-10T23:59Z",
"11. Mai 2012 01:59[Europe/Berlin]"},
{"dd.MM.uuuu HH:mmVV",
"de",
"Europe/Berlin",
"2012-03-10T23:59Z",
"11.03.2012 00:59Europe/Berlin"},
{"MMMM/dd/uuuu HH:mm:ssXXX",
"us",
"America/Los_Angeles",
"2012-06-30T23:59:60Z",
"June/30/2012 16:59:60-07:00"},
{"MMMM/dd/uuuu HH:mm:ss '['VV']'",
"us",
"America/Los_Angeles",
"2012-06-30T23:59:60Z",
"June/30/2012 16:59:60 [America/Los_Angeles]"},
{"MMMM/dd/uuuu HH:mmXXX",
"us",
"America/Los_Angeles",
"2012-02-21T14:30Z",
"February/21/2012 06:30-08:00"},
{"uuuu-MM-dd'T'HH:mm:ss.SSSZ",
"",
"Asia/Kolkata",
"2012-06-30T23:59:60,123000000Z",
"2012-07-01T05:29:60.123+0530"},
{"uuuu-MM-dd'T'HH:mm:ss.SSSZ",
"",
"Europe/Berlin",
"2012-06-30T23:59:60,123000000Z",
"2012-07-01T01:59:60.123+0200"},
{"uuuu-MM-dd'T'HH:mm:ss.SSSZZZZ",
"",
"Asia/Kolkata",
"2012-06-30T23:59:60,123000000Z",
"2012-07-01T05:29:60.123GMT+05:30"},
{"uuuu-MM-dd'T'HH:mm:ss.SSSZZZZ",
"",
"Europe/Berlin",
"2012-06-30T23:59:60,123000000Z",
"2012-07-01T01:59:60.123GMT+02:00"},
{"uuuu-MM-dd'T'HH:mm:ss.SSSZZZZZ",
"",
"Asia/Kolkata",
"2012-06-30T23:59:60,123000000Z",
"2012-07-01T05:29:60.123+05:30"},
{"uuuu-MM-dd'T'HH:mm:ss.SSSZZZZZ",
"",
"Europe/Berlin",
"2012-06-30T23:59:60,123000000Z",
"2012-07-01T01:59:60.123+02:00"},
{"uuuu-MM-dd'T'HH:mm:ss.SSSOOOO",
"",
"Asia/Kolkata",
"2012-06-30T23:59:60,123000000Z",
"2012-07-01T05:29:60.123GMT+05:30"},
{"uuuu-MM-dd'T'HH:mm:ss.SSSOOOO",
"",
"Europe/Berlin",
"2012-06-30T23:59:60,123000000Z",
"2012-07-01T01:59:60.123GMT+02:00"},
{"uuuu-MM-dd'T'HH:mm:ss.SSSO",
"",
"Asia/Kolkata",
"2012-06-30T23:59:60,123000000Z",
"2012-07-01T05:29:60.123GMT+5:30"},
{"uuuu-MM-dd'T'HH:mm:ss.SSS'['VV']'",
"",
"Asia/Calcutta",
"2012-06-30T23:59:60,123000000Z",
"2012-07-01T05:29:60.123[Asia/Calcutta]"}, // alias-Test
{"uuuu-MM-dd'T'HH:mm:ss.SSSO",
"",
"Europe/Berlin",
"2012-06-30T23:59:60,123000000Z",
"2012-07-01T01:59:60.123GMT+2"},
{"uuuu-MM-dd'T'HH:mmXXX'['VV']'",
"de",
"Europe/Berlin",
"2015-10-25T01:00Z",
"2015-10-25T02:00+01:00[Europe/Berlin]"}
}
);
}
private ChronoFormatter<Moment> formatter;
private Moment value;
private String text;
public MomentPatternTest(
String pattern,
String locale,
String tzid,
String value,
String text
) throws ParseException {
super();
this.formatter =
ChronoFormatter.setUp(Moment.class, toLocale(locale))
.addPattern(pattern, PatternType.CLDR).build()
.withTimezone(Timezone.of(tzid).getID());
this.value = Iso8601Format.EXTENDED_DATE_TIME_OFFSET.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.equals("en")) {
return Locale.UK;
} else if (locale.equals("us")) {
return Locale.US;
} else if (locale.equals("in")) {
return new Locale("en", "IN");
} else if (locale.equals("ar-DZ")) {
return new Locale("ar", "DZ");
}
return new Locale(locale, locale.toUpperCase());
}
}