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
70 r.getAcceptableLanguages();
71
72
73 InBoundHeaders headers = new InBoundHeaders();
74 headers.add(HttpHeaders.ACCEPT_LANGUAGE, "fr");
75
76
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 }