boolean haltOnFailure, ClassLoader loader )
boolean haltOnFailure )
    public JUnitTestRunner( JUnitTest test, boolean haltOnError, boolean filtertrace,                            boolean haltOnFailure, ClassLoader loader )    {        //JUnitTestRunner.filtertrace = filtertrace;        this.filtertrace = filtertrace;        this.junitTest = test;        this.haltOnError = haltOnError;        this.haltOnFailure = haltOnFailure;        try        {            Class testClass = null;            if( loader == null )            {                testClass = Class.forName( test.getName() );            }            else            {                testClass = loader.loadClass( test.getName() );                AntClassLoader.initializeClass( testClass );            }            Method suiteMethod = null;            try            {                // check if there is a suite method                suiteMethod = testClass.getMethod( "suite", new Class[ 0 ] );            }            catch( Exception e )            {                // no appropriate suite method found. We don't report any                // error here since it might be perfectly normal. We don't                // know exactly what is the cause, but we're doing exactly                // the same as JUnit TestRunner do. We swallow the exceptions.            }            if( suiteMethod != null )            {                // if there is a suite method available, then try                // to extract the suite from it. If there is an error                // here it will be caught below and reported.                suite = (Test)suiteMethod.invoke( null, new Class[ 0 ] );            }            else            {                // try to extract a test suite automatically                // this will generate warnings if the class is no suitable Test                suite = new TestSuite( testClass );            }        }        catch( Exception e )        {            retCode = ERRORS;            exception = e;        }    }