001: /*
002: * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//httpclient/src/test/org/apache/commons/httpclient/TestExceptions.java,v 1.4 2004/03/25 20:37:20 olegk Exp $
003: * $Revision: 480424 $
004: * $Date: 2006-11-29 06:56:49 +0100 (Wed, 29 Nov 2006) $
005: *
006: * ====================================================================
007: *
008: * Licensed to the Apache Software Foundation (ASF) under one or more
009: * contributor license agreements. See the NOTICE file distributed with
010: * this work for additional information regarding copyright ownership.
011: * The ASF licenses this file to You under the Apache License, Version 2.0
012: * (the "License"); you may not use this file except in compliance with
013: * the License. You may obtain a copy of the License at
014: *
015: * http://www.apache.org/licenses/LICENSE-2.0
016: *
017: * Unless required by applicable law or agreed to in writing, software
018: * distributed under the License is distributed on an "AS IS" BASIS,
019: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
020: * See the License for the specific language governing permissions and
021: * limitations under the License.
022: * ====================================================================
023: *
024: * This software consists of voluntary contributions made by many
025: * individuals on behalf of the Apache Software Foundation. For more
026: * information on the Apache Software Foundation, please see
027: * <http://www.apache.org/>.
028: *
029: */
030: package org.apache.commons.httpclient;
031:
032: import java.io.ByteArrayOutputStream;
033: import java.io.IOException;
034: import java.io.PrintStream;
035: import java.io.PrintWriter;
036: import java.io.StringWriter;
037:
038: import junit.framework.Test;
039: import junit.framework.TestCase;
040: import junit.framework.TestSuite;
041:
042: /**
043: *
044: * @author <a href="mailto:laura@lwerner.org">Laura Werner</a>
045: */
046: public class TestExceptions extends TestCase {
047:
048: // ------------------------------------------------------------ Constructor
049: public TestExceptions(String testName) {
050: super (testName);
051: }
052:
053: // ------------------------------------------------------------------- Main
054: public static void main(String args[]) {
055: String[] testCaseName = { TestExceptions.class.getName() };
056: junit.textui.TestRunner.main(testCaseName);
057: }
058:
059: // ------------------------------------------------------- TestCase Methods
060:
061: public static Test suite() {
062: return new TestSuite(TestExceptions.class);
063: }
064:
065: /** Make sure that you can retrieve the "cause" from an HttpException */
066: public void testGetCause() {
067:
068: Exception aCause = new IOException("the cause");
069:
070: try {
071: throw new HttpException("http exception", aCause);
072: } catch (HttpException e) {
073: assertEquals("Retrieve cause from caught exception", e
074: .getCause(), aCause);
075: }
076: }
077:
078: /** Make sure HttpConnection prints its stack trace to a PrintWriter properly */
079: public void testStackTraceWriter() {
080:
081: Exception aCause = new IOException("initial exception");
082: try {
083: throw new HttpException("http exception", aCause);
084: } catch (HttpException e) {
085: // Get the stack trace printed into a string
086: StringWriter stringWriter = new StringWriter();
087: PrintWriter writer = new PrintWriter(stringWriter);
088: e.printStackTrace(writer);
089: writer.flush();
090: String stackTrace = stringWriter.toString();
091:
092: // Do some validation on what got printed
093: validateStackTrace(e, stackTrace);
094: }
095: }
096:
097: /** Make sure HttpConnection prints its stack trace to a PrintStream properly */
098: public void testStackTraceStream() {
099:
100: Exception aCause = new IOException("initial exception");
101: try {
102: throw new HttpException("http exception", aCause);
103: } catch (HttpException e) {
104: // Get the stack trace printed into a string
105: ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
106: PrintStream stream = new PrintStream(byteStream);
107: e.printStackTrace(stream);
108: stream.flush();
109: String stackTrace = byteStream.toString(); // Assume default charset
110:
111: // Do some validation on what got printed
112: validateStackTrace(e, stackTrace);
113: }
114: }
115:
116: /**
117: * Make sure an HttpException stack trace has the right info in it.
118: * This doesn't bother parsing the whole thing, just does some sanity checks.
119: */
120: private void validateStackTrace(HttpException exception,
121: String stackTrace) {
122: assertTrue("Starts with exception string", stackTrace
123: .startsWith(exception.toString()));
124:
125: Throwable cause = exception.getCause();
126: if (cause != null) {
127: assertTrue("Contains 'cause'", stackTrace.toLowerCase()
128: .indexOf("cause") != -1);
129: assertTrue("Contains cause.toString()", stackTrace
130: .indexOf(cause.toString()) != -1);
131: }
132: }
133: }
|