Add translations for French and Japanese
[frank.git] / test / net / jaekl / frank / ErrorHandlerTest.java
1 package net.jaekl.frank;
2
3 import java.io.ByteArrayOutputStream;
4 import java.io.IOException;
5 import java.io.PrintWriter;
6 import java.net.SocketTimeoutException;
7 import java.sql.SQLException;
8 import java.util.Locale;
9
10 import net.jaekl.qd.QDException;
11 import net.jaekl.qd.http.InvalidResponseException;
12
13 import org.junit.After;
14 import org.junit.Assert;
15 import org.junit.Before;
16 import org.junit.Test;
17
18 public class ErrorHandlerTest {
19         static final String GATEWAY = "http://www.jaekl.net/api";
20         static final String METHOD = "SampleApiMethod";
21         static final String RESPONSE = "Required parameter not specified.";
22         
23         ByteArrayOutputStream m_baos;
24         PrintWriter m_pw;
25         
26         @Before
27         public void setUp() {
28                 m_baos = new ByteArrayOutputStream();
29                 m_pw = new PrintWriter(m_baos);
30         }
31         
32         @After
33         public void tearDown() throws IOException {
34                 m_pw.close();
35         }
36         
37         @Test
38         public void testWriteErrorPage_basicBehaviourWithVariousExceptions() {
39                 ErrorHandler eh = new ErrorHandler();
40                 
41                 Throwable[] throwables = { 
42                                 new NullPointerException(),
43                                 new QDException(),
44                                 new SQLException(),
45                                 new InvalidResponseException(new NullPointerException(), GATEWAY, METHOD, RESPONSE)
46                 };
47                 
48                 for (Throwable t : throwables) {
49                         m_baos.reset();
50                         eh.writeErrorPage(m_pw, t, Locale.CANADA);
51                         m_pw.flush();
52                         
53                         String actual = m_baos.toString();
54                         Assert.assertTrue(actual.contains("<TITLE>Frank: Error Page</TITLE>"));
55                         Assert.assertTrue(actual.contains(t.toString()));
56                 }
57         }
58         
59         @Test
60         public void testExplain_simpleExceptions() {
61                 Locale[] locales = { Locale.CANADA, Locale.FRANCE, Locale.JAPAN, Locale.CHINA};
62                 Object[][] data = { 
63                                 {new NullPointerException(), FrankBundle.UNEXPECTED_EXCEPTION},
64                                 {new SocketTimeoutException(), FrankBundle.SERVER_TIMEOUT}
65                         };
66                 
67                 ErrorHandler eh = new ErrorHandler();
68                 
69                 for (Locale locale : locales) {
70                         FrankBundle bundle = FrankBundle.getInst(locale);
71                         
72                         for (Object[] tuple : data) {
73                                 Exception e = (Exception)tuple[0];
74                                 String key = (String)tuple[1];
75                                 
76                                 m_baos.reset();
77                                 eh.writeErrorPage(m_pw, e, locale);
78                                 m_pw.flush();
79                                 
80                                 String actual = m_baos.toString();
81                                 Assert.assertTrue(actual.contains(bundle.get(key)));
82                         }
83                 }
84         }
85         
86         @Test
87         public void testExplain_wrappedInvalidResponseException() {
88                 Locale[] locales = { Locale.CANADA, Locale.FRANCE, Locale.JAPAN, Locale.CHINA};
89                 
90                 ErrorHandler eh = new ErrorHandler();
91                 InvalidResponseException ire = new InvalidResponseException(null, GATEWAY, METHOD, RESPONSE);
92                 FrankException fe = new FrankException(ire);
93                 
94                 for (Locale locale : locales) {
95                         FrankBundle bundle = FrankBundle.getInst(locale);
96                         
97                         m_baos.reset();
98                         eh.writeErrorPage(m_pw, fe,  locale);
99                         m_pw.flush();
100                         
101                         String actual = m_baos.toString();
102                         
103                         Assert.assertTrue(actual.contains(bundle.get(FrankBundle.INVALID_RESPONSE)));
104                         
105                         Assert.assertTrue(actual.contains(bundle.get(FrankBundle.URL_CONTACTED)));
106                         Assert.assertTrue(actual.contains(bundle.get(FrankBundle.REQUEST_MADE)));
107                         Assert.assertTrue(actual.contains(bundle.get(FrankBundle.ANSWER_RECEIVED)));
108                         
109                         Assert.assertTrue(actual.contains(bundle.get(FrankBundle.MAYBE_SERVER_PROBLEM)));
110                 }
111         }
112 }