package br.com.caelum.vraptor.core;
import static javax.servlet.jsp.jstl.core.Config.FMT_FALLBACK_LOCALE;
import static javax.servlet.jsp.jstl.core.Config.FMT_LOCALE;
import static javax.servlet.jsp.jstl.core.Config.FMT_LOCALIZATION_CONTEXT;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.endsWith;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.startsWith;
import static org.mockito.Mockito.when;
import java.util.ListResourceBundle;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.jstl.fmt.LocalizationContext;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import br.com.caelum.vraptor.http.MutableRequest;
/**
* Test class for {@link JstlLocalization}.
*
* @author Otávio Scherer Garcia
*/
public class JstlLocalizationTest {
static final Locale PT_BR = new Locale("pt", "BR");
private JstlLocalization localization;
@Mock
MutableRequest request;
@Mock
ServletContext servletContext;
@Mock
HttpSession session;
private static ResourceBundle bundle = new ListResourceBundle() {
protected Object[][] getContents() {
return new Object[][] { { "my.key", "abc" } };
}
};
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
RequestInfo webRequest = new RequestInfo(servletContext, null, request, null);
localization = new JstlLocalization(webRequest);
LocalizationContext context = new LocalizationContext(bundle);
when(request.getAttribute(FMT_LOCALIZATION_CONTEXT + ".request")).thenReturn(context);
when(request.getSession()).thenReturn(session);
}
@Test
public void keyNotFound() {
String value = localization.getMessage("my.notfound.key");
assertThat(value, startsWith("???"));
assertThat(value, endsWith("???"));
}
@Test
public void keyFound() {
String value = localization.getMessage("my.key");
assertThat(value, equalTo("abc"));
System.out.println(localization.getBundle().getKeys());
}
@Test
public void findLocaleFromRequest() {
when(request.getAttribute(FMT_LOCALE + ".request")).thenReturn(PT_BR);
assertThat(localization.getLocale(), equalTo(PT_BR));
}
@Test
public void findLocaleFromSession() {
when(session.getAttribute(FMT_LOCALE + ".session")).thenReturn(PT_BR);
assertThat(localization.getLocale(), equalTo(PT_BR));
}
@Test
public void findLocaleFromServletContext() {
when(servletContext.getInitParameter(FMT_LOCALE)).thenReturn(PT_BR.toString());
assertThat(localization.getLocale(), equalTo(PT_BR));
}
@Test
public void findLocaleFromRequestLocale() {
when(request.getLocale()).thenReturn(PT_BR);
assertThat(localization.getLocale(), equalTo(PT_BR));
}
@Test
public void testLocaleWithSessionNotRequest() {
when(request.getAttribute(FMT_LOCALE + ".request")).thenReturn(PT_BR);
when(session.getAttribute(FMT_LOCALE + ".session")).thenReturn(Locale.ENGLISH);
assertThat(localization.getLocale(), equalTo(PT_BR));
}
@Test
public void testFallbackLocale() {
when(request.getAttribute(FMT_FALLBACK_LOCALE + ".request")).thenReturn(PT_BR);
assertThat(localization.getFallbackLocale(), equalTo(PT_BR));
}
}