View Javadoc

1   package com.atlassian.plugins.rest.module.filter;
2   
3   import static org.junit.Assert.assertEquals;
4   import static org.mockito.Mockito.mock;
5   
6   import java.util.List;
7   import java.util.Locale;
8   
9   import javax.ws.rs.core.HttpHeaders;
10  
11  import org.junit.Test;
12  
13  import com.sun.jersey.core.header.InBoundHeaders;
14  import com.sun.jersey.spi.container.ContainerRequest;
15  import com.sun.jersey.spi.container.WebApplication;
16  
17  public class AcceptLanguageFilterTest {
18      private static final ContainerRequest createRequestWithLanguages(String langs) {
19          WebApplication wa = mock(WebApplication.class);
20          InBoundHeaders headers = new InBoundHeaders();
21          headers.add(HttpHeaders.ACCEPT_LANGUAGE, langs);
22          return new ContainerRequest(wa, null, null, null, headers, null);
23      }
24  
25      private static final List<Locale> parse(String langs) {
26          AcceptLanguageFilter f = new AcceptLanguageFilter();
27          ContainerRequest req = createRequestWithLanguages(langs);
28          ContainerRequest r = f.filter(req);
29          return r.getAcceptableLanguages();
30      }
31  
32      @Test
33      public void testLanguageTag() {
34          List<Locale> l = parse("en-US");
35          assertEquals("size", 1, l.size());
36          assertEquals("content#0", Locale.forLanguageTag("en-US"), l.get(0));
37      }
38  
39      @Test
40      public void testUNM49Tag() {
41          List<Locale> l = parse("es-419");
42          assertEquals("size", 1, l.size());
43          assertEquals("content#0", Locale.forLanguageTag("es-419"), l.get(0));
44      }
45  
46      @Test
47      public void testAcceptableLanguageTag() {
48          List<Locale> l = parse("en-US;q=0.123");
49          assertEquals("size", 1, l.size());
50          assertEquals("content#0", Locale.forLanguageTag("en-US"), l.get(0));
51      }
52  
53      @Test
54      public void testAcceptableLanguageTagList() {
55          List<Locale> l = parse("en-US;q=0.123, fr;q=0.2, en;q=0.3, *;q=0.01");
56          assertEquals("size", 4, l.size());
57          assertEquals("content#0", Locale.forLanguageTag("en"), l.get(0));
58          assertEquals("content#1", Locale.forLanguageTag("fr"), l.get(1));
59          assertEquals("content#2", Locale.forLanguageTag("en-US"), l.get(2));
60          assertEquals("content#3", new Locale("*"), l.get(3));
61      }
62  
63      @Test
64      public void testHeadersChange() {
65          ContainerRequest r = createRequestWithLanguages("en-US");
66          AcceptLanguageFilter f = new AcceptLanguageFilter();
67          r = f.filter(r);
68  
69          // Parse & cache langs
70          r.getAcceptableLanguages();
71  
72          // Change headers value
73          InBoundHeaders headers = new InBoundHeaders();
74          headers.add(HttpHeaders.ACCEPT_LANGUAGE, "fr");
75  
76          // Parse again
77          r.setHeaders(headers);
78          List<Locale> l = r.getAcceptableLanguages();
79          assertEquals("size", 1, l.size());
80          assertEquals("content#0", Locale.forLanguageTag("fr"), l.get(0));
81      }
82  }