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