package org.junit.internal.runners;
import junit.extensions.TestDecorator;
import junit.framework.AssertionFailedError;
import junit.framework.JUnit4TestAdapter;
import junit.framework.JUnit4TestCaseFacade;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestListener;
import junit.framework.TestResult;
import junit.framework.TestSuite;
import org.junit.runner.Description;
import org.junit.runner.Runner;
import org.junit.runner.notification.RunNotifier;
import org.junit.runner.notification.Failure;
public class OldTestClassRunner extends Runner {
private Test fTest;
@SuppressWarnings("unchecked")
public OldTestClassRunner(Class<?> klass) {
this(new TestSuite((Class<? extends TestCase>) klass));
}
public OldTestClassRunner(Test test) {
super();
fTest= test;
}
@Override
public void run(RunNotifier notifier) {
TestResult result= new TestResult();
result.addListener(getListener(notifier));
fTest.run(result);
}
private TestListener getListener(final RunNotifier notifier) {
return new TestListener() {
public void endTest(Test test) {
// TODO: uncovered
notifier.fireTestFinished(asDescription(test));
}
public void startTest(Test test) {
notifier.fireTestStarted(asDescription(test));
}
// Implement junit.framework.TestListener
//TODO method not covered
public void addError(Test test, Throwable t) {
Failure failure= new Failure(asDescription(test), t);
notifier.fireTestFailure(failure);
}
private Description asDescription(Test test) {
if (test instanceof JUnit4TestCaseFacade) {
JUnit4TestCaseFacade facade= (JUnit4TestCaseFacade) test;
return facade.getDescription();
}
return Description.createTestDescription(test.getClass(), getName(test));
}
private String getName(Test test) {
if (test instanceof TestCase)
return ((TestCase) test).getName();
else
return test.toString();
}
//TODO method not covered
public void addFailure(Test test, AssertionFailedError t) {
addError(test, t);
}
};
}
@Override
public Description getDescription() {
return makeDescription(fTest);
}
private Description makeDescription(Test test) {
if (test instanceof TestCase) {
TestCase tc= (TestCase) test;
return Description.createTestDescription(tc.getClass(), tc.getName());
} else if (test instanceof TestSuite) {
TestSuite ts= (TestSuite) test;
Description description= Description.createSuiteDescription(ts.getName());
int n= ts.testCount();
for (int i= 0; i < n; i++)
description.addChild(makeDescription(ts.testAt(i)));
return description;
} else if (test instanceof JUnit4TestAdapter) {
JUnit4TestAdapter adapter= (JUnit4TestAdapter) test;
return adapter.getDescription();
} else if (test instanceof TestDecorator) {
TestDecorator decorator= (TestDecorator) test;
return makeDescription(decorator.getTest());
} else {
// This is the best we can do in this case
return Description.createSuiteDescription(test.getClass());
}
}
}