package br.com.caelum.vraptor.i18n;
import static org.junit.Assert.assertEquals;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class LocalizedFormatterTest {
private MockResourceBundle bundle;
private Date data;
private LocalizedFormatter locator;
private DateTime joda;
private Calendar cal;
private DateFormat formatter;
@Before
public void setup(){
bundle = new MockResourceBundle(Locale.US);
joda = new DateTime(2013, 2, 1, 15, 45, 13, 111);
data = joda.toDate();
cal = joda.toGregorianCalendar();
formatter = DateFormat.getDateInstance(DateFormat.DEFAULT, bundle.getLocale());
locator = new LocalizedFormatter(bundle, bundle.getLocale(), new NullSafeLocalized());
}
@Test
public void should_format_date_using_default_format() {
assertEquals(formatter.format(data), locator.get(data).toString());
}
@Test
public void should_format_date_using_custom_format() {
formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss", bundle.getLocale());
assertEquals(formatter.format(data), locator.get(data).pattern("dd/MM/yyyy hh:mm:ss").toString());
}
@Test
public void should_format_date_using_full_format() {
formatter = DateFormat.getDateInstance(DateFormat.FULL, bundle.getLocale());
assertEquals(formatter.format(data), ((LocalizedData)locator.get(data)).format("full").toString());
}
@Test
public void should_format_calendar_using_default_format(){
assertEquals(formatter.format(cal.getTime()), locator.get(cal).toString());
}
@Test
public void should_format_calendar_using_custom_format(){
formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss", bundle.getLocale());
assertEquals(formatter.format(cal.getTime()), locator.get(cal).pattern("dd/MM/yyyy hh:mm:ss").toString());
}
@Test
public void should_format_calendar_using_full_format() {
formatter = DateFormat.getDateInstance(DateFormat.FULL, bundle.getLocale());
assertEquals(formatter.format(cal.getTime()), ((LocalizedData)locator.get(cal)).format("full").toString());
}
@Test
public void should_format_joda_time_using_default_format(){
assertEquals(formatter.format(joda.toDate()), locator.get(joda).toString());
}
@Test
public void should_format_joda_time_using_custom_format(){
formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss", bundle.getLocale());
assertEquals(formatter.format(joda.toDate()), locator.get(joda).pattern("dd/MM/yyyy hh:mm:ss").toString());
}
@Test
public void should_format_joda_time_using_full_format() {
formatter = DateFormat.getDateInstance(DateFormat.FULL, bundle.getLocale());
assertEquals(formatter.format(joda.toDate()), ((LocalizedData) locator.get(joda)).format("full").toString());
}
@Test
public void should_format_date_using_properties() {
String message = "yyyy.MM.dd G 'at' HH:mm:ss z";
bundle.addWord("formats.time.pirate", message);
formatter = new SimpleDateFormat(message, Locale.US);
assertEquals(formatter.format(data), locator.get(data).custom("pirate").toString());
}
@Test
public void should_return_empty_string_instead_NPE_when_receive_null_parameter() {
assertEquals("", locator.get(null).custom("any_thing").toString());
}
}