blob: 58aff128624f4e0ca7415fd86782359ff5336211 [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 junit.framework.Test;
import junit.framework.TestSuite;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class TestAllInPackage2 extends TestSuite {
public TestAllInPackage2(JUnit3IdeaTestRunner runner, final String name, String[] classMethodNames) {
super(name);
int testClassCount = 0;
final Set allNames = new HashSet(Arrays.asList(classMethodNames));
for (int i = 0; i < classMethodNames.length; i++) {
String classMethodName = classMethodNames[i];
Test suite = TestRunnerUtil.createClassOrMethodSuite(runner, classMethodName);
if (suite != null) {
skipSuiteComponents(allNames, suite);
}
}
for (int i = 0; i < classMethodNames.length; i++) {
String classMethodName = classMethodNames[i];
Test suite = TestRunnerUtil.createClassOrMethodSuite(runner, classMethodName);
if (suite != null) {
boolean skip;
if (suite instanceof TestSuite) {
skip = !allNames.contains(((TestSuite)suite).getName());
} else if (suite instanceof TestRunnerUtil.SuiteMethodWrapper) {
skip = !allNames.contains(((TestRunnerUtil.SuiteMethodWrapper)suite).getClassName());
} else {
skip = false;
}
if (!skip) {
if (suite instanceof TestSuite && ((TestSuite)suite).getName() == null) {
attachSuiteInfo(suite, classMethodName);
}
addTest(suite);
testClassCount++;
}
}
}
String message = TestRunnerUtil.testsFoundInPackageMesage(testClassCount, name);
System.out.println(message);
}
private static void skipSuiteComponents(Set allNames, Test suite) {
if (suite instanceof TestRunnerUtil.SuiteMethodWrapper) {
final Test test = ((TestRunnerUtil.SuiteMethodWrapper)suite).getSuite();
final String currentSuiteName = ((TestRunnerUtil.SuiteMethodWrapper)suite).getClassName();
skipSubtests(allNames, test, currentSuiteName);
}
}
private static void skipSubtests(Set allNames, Test test, String currentSuiteName) {
if (test instanceof TestSuite) {
for (int idx = 0; idx < ((TestSuite)test).testCount(); idx++) {
Test childTest = ((TestSuite)test).testAt(idx);
final String testName = childTest.toString();
if (!currentSuiteName.equals(testName)) {
allNames.remove(testName);
}
skipSubtests(allNames, childTest, currentSuiteName);
}
}
}
private static void attachSuiteInfo(Test test, String name) {
if (test instanceof TestSuite) {
TestSuite testSuite = (TestSuite)test;
if (testSuite.getName() == null)
testSuite.setName(name);
}
}
}