package org.activityinfo.importer.shared.converter;
import com.bedatadriven.rebar.time.calendar.LocalDate;
import org.activityinfo.core.shared.type.converter.StringToLocalDateConverter;
import org.junit.Ignore;
import org.junit.Test;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;
public class LocalDateConverterTest {
@Test
public void simpleTests() {
StringToLocalDateConverter converter = new StringToLocalDateConverter();
assertThat(converter.convert("2011-01-15"), equalTo(ymd(2011,1,15)));
assertThat(converter.convert("15 May 2049"), equalTo(ymd(2049,5,15)));
assertThat(converter.convert("4/30/07"), equalTo(ymd(2007,4,30)));
}
@Test
public void monthNameDayYear() {
assertThat(convertString("Oct 31st, 1940"), equalTo(ymd(1940,10,31)));
}
@Test
public void longDateTest() {
assertThat(convertString("Wed, 14th of May, 1999"), equalTo(ymd(1999,5,14)));
}
private LocalDate convertString(String string) {
return new StringToLocalDateConverter().convert(string);
}
private LocalDate ymd(int year, int month, int day) {
return new LocalDate(year, month, day);
}
@Ignore
@Test
public void exhaustiveTest() {
int styles[] = new int[] { DateFormat.SHORT, DateFormat.MEDIUM, DateFormat.LONG };
String languages[] = new String[] { "en", "fr", "es", "it", "pt", "nl" };
for(int style : styles) {
for(String language : languages) {
testFormat(language, DateFormat.getDateInstance(style, Locale.forLanguageTag(language)));
}
}
}
private void testFormat(String language, DateFormat format) {
StringToLocalDateConverter converter = new StringToLocalDateConverter();
for(int year=1950;year<2050;++year) {
for(int month=1;month<=12;++month) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month - 1);
int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
for(int day=1;day<=daysInMonth;++day) {
calendar.set(Calendar.DAY_OF_MONTH, day);
Date date = calendar.getTime();
LocalDate localDate = new LocalDate(date);
String string = format.format(date);
try {
LocalDate converted = converter.convert(string);
if(!converted.equals(localDate)) {
System.out.println("[" + language +"] " + string + " => " + converted +
" [expected: " + localDate + "]");
}
} catch(Exception e) {
System.out.println("[" + language +"] " + string + " => " + "ERROR: " + e.getMessage());
}
}
}
}
}
}