1 package net.jaekl.frank;
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;
9 import net.jaekl.qd.QDException;
10 import net.jaekl.qd.http.InvalidResponseException;
12 import org.junit.After;
13 import org.junit.Assert;
14 import org.junit.Before;
15 import org.junit.Test;
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.";
22 ByteArrayOutputStream m_baos;
27 m_baos = new ByteArrayOutputStream();
28 m_pw = new PrintWriter(m_baos);
32 public void tearDown() throws IOException {
37 public void testWriteErrorPage_basicBehaviourWithVariousExceptions() {
38 ErrorHandler eh = new ErrorHandler();
40 Throwable[] throwables = {
41 new NullPointerException(),
44 new InvalidResponseException(new NullPointerException(), GATEWAY, METHOD, RESPONSE)
47 for (Throwable t : throwables) {
49 eh.writeErrorPage(m_pw, t, Locale.CANADA);
52 String actual = m_baos.toString();
53 Assert.assertTrue(actual.contains("<TITLE>Frank: Error Page</TITLE>"));
54 Assert.assertTrue(actual.contains(t.toString()));
59 public void testExplain_unexpectedException() {
60 Locale[] locales = { Locale.CANADA, Locale.FRANCE, Locale.JAPAN, Locale.CHINA};
62 ErrorHandler eh = new ErrorHandler();
64 for (Locale locale : locales) {
65 FrankBundle bundle = FrankBundle.getInst(locale);
68 eh.writeErrorPage(m_pw, new NullPointerException(), Locale.CANADA);
71 String actual = m_baos.toString();
72 Assert.assertTrue(actual.contains(bundle.get(FrankBundle.UNEXPECTED_EXCEPTION)));
77 public void testExplain_wrappedInvalidResponseException() {
78 Locale[] locales = { Locale.CANADA, Locale.FRANCE, Locale.JAPAN, Locale.CHINA};
80 ErrorHandler eh = new ErrorHandler();
81 InvalidResponseException ire = new InvalidResponseException(null, GATEWAY, METHOD, RESPONSE);
82 FrankException fe = new FrankException(ire);
84 for (Locale locale : locales) {
85 FrankBundle bundle = FrankBundle.getInst(locale);
88 eh.writeErrorPage(m_pw, fe, Locale.CANADA);
91 String actual = m_baos.toString();
93 Assert.assertTrue(actual.contains(bundle.get(FrankBundle.INVALID_RESPONSE)));
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)));
99 Assert.assertTrue(actual.contains(bundle.get(FrankBundle.MAYBE_SERVER_PROBLEM)));