net.lightbody.bmp.proxy.jetty.util.TestCase.java Source code

Java tutorial

Introduction

Here is the source code for net.lightbody.bmp.proxy.jetty.util.TestCase.java

Source

// ========================================================================
// $Id: TestCase.java,v 1.8 2005/08/13 00:01:28 gregwilkins Exp $
// Copyright 1997-2004 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at 
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ========================================================================

package net.lightbody.bmp.proxy.jetty.util;

import net.lightbody.bmp.proxy.jetty.log.LogFactory;
import org.apache.commons.logging.Log;

import java.io.InputStream;
import java.util.Enumeration;
import java.util.Vector;

/*-------------------------------------------------------------------*/
/** Test Harness and report.
 * Test Harness for production of standard test reports:
 *
 * <pre>
 *      Test t1 = new Test("All_Pass");
 *      Test t2 = new Test("All_Fail");
 *
 *      t1.check(true,"Boolean check that passes");
 *      t2.check(false,"Boolean check that fails");
 *      t1.checkEquals("Foo","Foo","Object comparison that passes");
 *      t2.checkEquals("Foo","Bar","Object comparison that fails");
 *      t1.checkEquals(1,1,"Long comparison that passes");
 *      t2.checkEquals(1,2,"Long comparison that fails");
 *      t1.checkEquals(1.1,1.1,"Double comparison that passes");
 *      t2.checkEquals(1.1,2.2,"Double comparison that fails");
 *      t1.checkEquals('a','a',"Char comparison that passes");
 *      t2.checkEquals('a','b',"Char comparison that fails");
 *      
 *      Test.report();
 * </pre>
 *
 * @see net.lightbody.bmp.proxy.jetty.util.Code
 * @version $Id: TestCase.java,v 1.8 2005/08/13 00:01:28 gregwilkins Exp $
 * @author Greg Wilkins
 */
public class TestCase {
    private static Log log = LogFactory.getLog(TestCase.class);

    /*-------------------------------------------------------------------*/
    private static Vector tests = new Vector();
    private static final String fail = "FAIL";
    private static final char[] spaces = "                                                                                 "
            .toCharArray();

    static final String SelfFailTest = "net.lightbody.bmp.proxy.jetty.util.TestCase all fail";

    /*-------------------------------------------------------------------*/
    private String testCase;
    private StringBuffer reportBuf = new StringBuffer(512);
    private boolean passed = true;

    /*-------------------------------------------------------------------*/
    /** TestCase constructor.
     *  @param testCase   the name of the test case
     */
    public TestCase(String testCase) {
        if (log.isDebugEnabled())
            log.debug("Constructed test case: " + testCase);
        this.testCase = testCase;
        tests.addElement(this);
    }

    /*-------------------------------------------------------------------*/
    /** Check a boolean test case.
     *  @param b        Boolean to check
     *  @param check    Description of this check
     */
    public void check(boolean b, String check) {
        if (!b) {
            reportBuf.append(testCase + " : " + check + " - ");
            passed = false;
            reportBuf.append(fail);
            reportBuf.append('\n');
            reportBuf.append(spaces, 0, testCase.length() + 3);
            reportBuf.append("check!=true");
            if (log.isDebugEnabled())
                log.debug(check + " FAILED");
        }
        reportBuf.append('\n');
    }

    /*-------------------------------------------------------------------*/
    /** Check that string contains a substring.
     *  @return Index of substring
     */
    public int checkContains(String string, String subString, String check) {
        return realCheckContains(string, 0, subString, check);
    }

    /*-------------------------------------------------------------------*/
    /** Check that string contains a substring.
     *  @return Index of substring
     */
    public int checkContains(String string, int offset, String subString, String check) {
        return realCheckContains(string, offset, subString, check);
    }

    /*-------------------------------------------------------------------*/
    /** Check that string contains a substring.
     *  @return Index of substring
     */
    public int realCheckContains(String string, int offset, String subString, String check) {
        int index = -1;
        if ((string == null && subString == null)
                || (string != null && (subString == null || (index = string.indexOf(subString, offset)) >= 0))) {
            // do nothing
        } else {
            reportBuf.append(testCase + " : " + check + " - ");
            passed = false;
            reportBuf.append(fail);
            reportBuf.append('\n');
            reportBuf.append(spaces, 0, testCase.length() + 3);
            reportBuf.append('"' + subString + "\" not contained in \"");

            if (offset < string.length())
                reportBuf.append(string.substring(offset));
            else
                reportBuf.append("string<offset:" + offset + ":'" + string + "'");
            reportBuf.append("\"");
            if (log.isDebugEnabled())
                log.debug(check + " FAILED: " + reportBuf.toString());
            reportBuf.append('\n');
        }
        return index;
    }

    /*-------------------------------------------------------------------*/
    /** Check that string does not contain a substring.
     *  @return Index of substring
     */
    public int checkNotContained(String string, String subString, String check) {
        return checkNotContained(string, 0, subString, check);
    }

    /*-------------------------------------------------------------------*/
    /** Check that string does not contain a substring.
     *  @return Index of substring
     */
    public int checkNotContained(String string, int offset, String subString, String check) {
        int index = -1;
        if ((string == null && subString == null)
                || (string != null && (subString == null || (index = string.indexOf(subString, offset)) >= 0))) {
            reportBuf.append(testCase + " : " + check + " - ");
            passed = false;
            reportBuf.append(fail);
            reportBuf.append('\n');
            reportBuf.append(spaces, 0, testCase.length() + 3);
            reportBuf.append('"' + subString + "\" IS contained in \"" + string.substring(offset) + '"');
            if (log.isDebugEnabled())
                log.debug(check + " FAILED");
            reportBuf.append('\n');
        }
        return index;
    }

    /*-------------------------------------------------------------------*/
    /** Check a pair of objects for equality test case.
     *  @param o1       First object to compare
     *  @param o2       Second object to compare
     *  @param check    Description of this check
     */
    public void checkEquals(Object o1, Object o2, String check) {
        commonCheckEquals(o1, o2, check);
    }

    /*-------------------------------------------------------------------*/
    /** Check a a pair of longs for equality.
     *  @param l1       First Long to compare
     *  @param l2       Second Long to compare
     *  @param check    Description of this check
     */
    public void checkEquals(long l1, long l2, String check) {
        commonCheckEquals(new Long(l1), new Long(l2), check);
    }

    /*-------------------------------------------------------------------*/
    /** Check a a pair of doubles for equality.
     *  @param d1       First double to compare
     *  @param d2       Second double to compare
     *  @param check    Description of this check
     */
    public void checkEquals(double d1, double d2, String check) {
        commonCheckEquals(new Double(d1), new Double(d2), check);
    }

    /*-------------------------------------------------------------------*/
    /** Check a a pair of chars for equality.
     *  @param c1       First char to compare
     *  @param c2       Second char to compare
     *  @param check    Description of this check
     */
    public void checkEquals(char c1, char c2, String check) {
        commonCheckEquals(new Character(c1), new Character(c2), check);
    }

    /*-------------------------------------------------------------------*/
    /** Check contents of a pair of InputStreams for equality.
     * @param in1 First InputStream
     * @param in2 Second InputStream
     * @param check Description
     */
    public void checkEquals(InputStream in1, InputStream in2, String check) {
        int c1;
        int c2;
        try {
            while ((c1 = in1.read()) == (c2 = in2.read())) {
                if (c1 == -1) {
                    commonCheckEquals(null, null, check);
                    return;
                }
            }
            commonCheckEquals("" + c1, "" + c2, check);
        } catch (Exception e) {
            commonCheckEquals(e.toString(), null, check);
        }
    }

    /*-------------------------------------------------------------------*/
    /** Internal check a pair of objects for equality test case.
     *  @param o1       First object to compare
     *  @param o2       Second object to compare
     *  @param check    Description of this check
     */
    private void commonCheckEquals(Object o1, Object o2, String check) {
        if (o1 == o2 || (o1 != null && o1.equals(o2))) {
            // do nothing
        } else {
            reportBuf.append(testCase + " : " + check + " - ");
            passed = false;
            reportBuf.append(fail);
            reportBuf.append('\n');
            reportBuf.append(spaces, 0, testCase.length() + 3);
            reportBuf.append(
                    ((o1 != null) ? (o1.toString()) : "null") + " != " + ((o2 != null) ? (o2.toString()) : "null"));
            if (log.isDebugEnabled())
                log.debug(3 + check + " FAILED");
            reportBuf.append('\n');
        }
    }

    /*-------------------------------------------------------------------*/
    /** Produce test report.
     *  
     */
    public static void report() {
        Enumeration e = tests.elements();
        while (e.hasMoreElements()) {
            TestCase t = (TestCase) e.nextElement();
            if (!t.passed) {
                System.err.print("\nTest Case: " + t.testCase);
                System.err.println("  - FAILED");
                System.err.println(t.reportBuf.toString());
            }
        }

        System.err.println("\nTEST SUMMARY:");
        e = tests.elements();
        boolean failed = false;
        while (e.hasMoreElements()) {
            TestCase t = (TestCase) e.nextElement();
            if (!t.passed) {
                if (!t.testCase.equals(SelfFailTest)) {
                    System.err.print("Test Case: " + t.testCase);
                    System.err.println("  - FAILED");
                    failed = true;
                }
            }
        }
        if (failed)
            System.exit(1);
        System.exit(0);
    }
}