1 package net.jaekl.frank;
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;
10 import net.jaekl.qd.QDException;
11 import net.jaekl.qd.http.InvalidResponseException;
13 import org.junit.After;
14 import org.junit.Assert;
15 import org.junit.Before;
16 import org.junit.Test;
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.";
23 ByteArrayOutputStream m_baos;
28 m_baos = new ByteArrayOutputStream();
29 m_pw = new PrintWriter(m_baos);
33 public void tearDown() throws IOException {
38 public void testWriteErrorPage_basicBehaviourWithVariousExceptions() {
39 ErrorHandler eh = new ErrorHandler();
41 Throwable[] throwables = {
42 new NullPointerException(),
45 new InvalidResponseException(new NullPointerException(), GATEWAY, METHOD, RESPONSE)
48 for (Throwable t : throwables) {
50 eh.writeErrorPage(m_pw, t, Locale.CANADA);
53 String actual = m_baos.toString();
54 Assert.assertTrue(actual.contains("<TITLE>Frank: Error Page</TITLE>"));
55 Assert.assertTrue(actual.contains(t.toString()));
60 public void testExplain_simpleExceptions() {
61 Locale[] locales = { Locale.CANADA, Locale.FRANCE, Locale.JAPAN, Locale.CHINA};
63 {new NullPointerException(), FrankBundle.UNEXPECTED_EXCEPTION},
64 {new SocketTimeoutException(), FrankBundle.SERVER_TIMEOUT}
67 ErrorHandler eh = new ErrorHandler();
69 for (Locale locale : locales) {
70 FrankBundle bundle = FrankBundle.getInst(locale);
72 for (Object[] tuple : data) {
73 Exception e = (Exception)tuple[0];
74 String key = (String)tuple[1];
77 eh.writeErrorPage(m_pw, e, locale);
80 String actual = m_baos.toString();
81 Assert.assertTrue(actual.contains(bundle.get(key)));
87 public void testExplain_wrappedInvalidResponseException() {
88 Locale[] locales = { Locale.CANADA, Locale.FRANCE, Locale.JAPAN, Locale.CHINA};
90 ErrorHandler eh = new ErrorHandler();
91 InvalidResponseException ire = new InvalidResponseException(null, GATEWAY, METHOD, RESPONSE);
92 FrankException fe = new FrankException(ire);
94 for (Locale locale : locales) {
95 FrankBundle bundle = FrankBundle.getInst(locale);
98 eh.writeErrorPage(m_pw, fe, Locale.CANADA);
101 String actual = m_baos.toString();
103 Assert.assertTrue(actual.contains(bundle.get(FrankBundle.INVALID_RESPONSE)));
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)));
109 Assert.assertTrue(actual.contains(bundle.get(FrankBundle.MAYBE_SERVER_PROBLEM)));