blob: dde361c94bd5665d843fc434a085dd1f764c0105 [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* 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 com.intellij.junit3;
import com.intellij.rt.execution.junit.*;
import com.intellij.rt.execution.junit.segments.OutputObjectRegistry;
import com.intellij.rt.execution.junit.segments.SegmentedOutputStream;
import junit.framework.*;
import junit.textui.ResultPrinter;
import junit.textui.TestRunner;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Vector;
public class JUnit3IdeaTestRunner extends TestRunner implements IdeaTestRunner {
private TestListener myTestsListener;
private JUnit3OutputObjectRegistry myRegistry;
private ArrayList myListeners;
private boolean mySendTree;
public JUnit3IdeaTestRunner() {
super(DeafStream.DEAF_PRINT_STREAM);
}
public int startRunnerWithArgs(String[] args, ArrayList listeners, String name, boolean sendTree) {
myListeners = listeners;
mySendTree = sendTree;
if (sendTree) {
setPrinter(new TimeSender(myRegistry));
}
else {
setPrinter(new MockResultPrinter());
}
try {
Test suite = TestRunnerUtil.getTestSuite(this, args);
if (suite == null) return -1;
TestResult result = doRun(suite);
if (!result.wasSuccessful()) {
return -1;
}
return 0;
}
catch (Exception e) {
e.printStackTrace(System.err);
return -2;
}
}
public void clearStatus() {
super.clearStatus();
}
public void runFailed(String message) {
super.runFailed(message);
}
public void setStreams(SegmentedOutputStream segmentedOut, SegmentedOutputStream segmentedErr, int lastIdx) {
myRegistry = new JUnit3OutputObjectRegistry(segmentedOut, lastIdx);
myTestsListener = new TestResultsSender(myRegistry);
}
public Object getTestToStart(String[] args, String name) {
return TestRunnerUtil.getTestSuite(this, args);
}
public List getChildTests(Object description) {
return getTestCasesOf((Test)description);
}
public OutputObjectRegistry getRegistry() {
return myRegistry;
}
public String getTestClassName(Object child) {
return child instanceof TestSuite ? ((TestSuite)child).getName() : child.getClass().getName();
}
public String getStartDescription(Object child) {
final Test test = (Test)child;
if (test instanceof TestCase) {
return test.getClass().getName() + "," + ((TestCase)test).getName();
}
return test.toString();
}
protected TestResult createTestResult() {
TestResult testResult = super.createTestResult();
testResult.addListener(myTestsListener);
try {
for (int i = 0; i < myListeners.size(); i++) {
final IDEAJUnitListener junitListener = (IDEAJUnitListener)Class.forName((String)myListeners.get(i)).newInstance();
testResult.addListener(new TestListener() {
public void addError(Test test, Throwable t) {}
public void addFailure(Test test, AssertionFailedError t) {}
public void endTest(Test test) {
if (test instanceof TestCase) {
junitListener.testFinished(test.getClass().getName(), ((TestCase)test).getName());
}
}
public void startTest(Test test) {
if (test instanceof TestCase) {
junitListener.testStarted(test.getClass().getName(), ((TestCase)test).getName());
}
}
});
}
}
catch (Exception e) {
//do nothing
}
return testResult;
}
public TestResult doRun(Test suite, boolean wait) { //todo
try {
TreeSender.sendTree(this, suite, mySendTree);
}
catch (Exception e) {
//noinspection HardCodedStringLiteral
System.err.println("Internal Error occured.");
e.printStackTrace(System.err);
}
return super.doRun(suite, wait);
}
static Vector getTestCasesOf(Test test) {
Vector testCases = new Vector();
if (test instanceof TestRunnerUtil.SuiteMethodWrapper) {
test = ((TestRunnerUtil.SuiteMethodWrapper)test).getSuite();
}
if (test instanceof TestSuite) {
TestSuite testSuite = (TestSuite)test;
for (Enumeration each = testSuite.tests(); each.hasMoreElements();) {
Object childTest = each.nextElement();
if (childTest instanceof TestSuite && !((TestSuite)childTest).tests().hasMoreElements()) continue;
testCases.addElement(childTest);
}
}
return testCases;
}
public static class MockResultPrinter extends ResultPrinter {
public MockResultPrinter() {
super(DeafStream.DEAF_PRINT_STREAM);
}
}
}