Skip to content

Commit

Permalink
Improve handling of TestSuites. Closes junit-teamgh-96
Browse files Browse the repository at this point in the history
  • Loading branch information
dsaff committed Apr 6, 2010
1 parent 1d86784 commit 2de4d6f
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 14 deletions.
23 changes: 17 additions & 6 deletions src/main/java/junit/framework/TestSuite.java
Expand Up @@ -48,8 +48,8 @@ public class TestSuite implements Test {
* ...as the moon sets over the early morning Merlin, Oregon
* mountains, our intrepid adventurers type...
*/
static public Test createTest(Class<? extends TestCase> theClass, String name) {
Constructor<? extends TestCase> constructor;
static public Test createTest(Class<?> theClass, String name) {
Constructor<?> constructor;
try {
constructor= getTestConstructor(theClass);
} catch (NoSuchMethodException e) {
Expand Down Expand Up @@ -78,7 +78,7 @@ static public Test createTest(Class<? extends TestCase> theClass, String name) {
* Gets a constructor which takes a single String as
* its argument or a no arg constructor.
*/
public static Constructor<? extends TestCase> getTestConstructor(Class<? extends TestCase> theClass) throws NoSuchMethodException {
public static Constructor<?> getTestConstructor(Class<?> theClass) throws NoSuchMethodException {
try {
return theClass.getConstructor(String.class);
} catch (NoSuchMethodException e) {
Expand Down Expand Up @@ -125,7 +125,11 @@ public TestSuite() {
* Parts of this method were written at 2337 meters in the Hueffihuette,
* Kanton Uri
*/
public TestSuite(final Class<? extends TestCase> theClass) {
public TestSuite(final Class<?> theClass) {
addTestsFromTestCase(theClass);
}

private void addTestsFromTestCase(final Class<?> theClass) {
fName= theClass.getName();
try {
getTestConstructor(theClass); // Avoid generating multiple error messages
Expand Down Expand Up @@ -172,7 +176,14 @@ public TestSuite(String name) {
*/
public TestSuite (Class<?>... classes) {
for (Class<?> each : classes)
addTest(new TestSuite(each.asSubclass(TestCase.class)));
addTest(testCaseForClass(each));
}

private Test testCaseForClass(Class<?> each) {
if (TestCase.class.isAssignableFrom(each))
return new TestSuite(each.asSubclass(TestCase.class));
else
return warning(each.getCanonicalName() + " does not extend TestCase");
}

/**
Expand Down Expand Up @@ -270,7 +281,7 @@ public String toString() {
return super.toString();
}

private void addTestMethod(Method m, List<String> names, Class<? extends TestCase> theClass) {
private void addTestMethod(Method m, List<String> names, Class<?> theClass) {
String name= m.getName();
if (names.contains(name))
return;
Expand Down
23 changes: 15 additions & 8 deletions src/test/java/junit/tests/framework/SuiteTest.java
@@ -1,5 +1,7 @@
package junit.tests.framework;

import java.util.Collections;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestResult;
Expand Down Expand Up @@ -28,6 +30,8 @@ public static Test suite() {
suite.addTest(new SuiteTest("testNotVoidTestCase"));
suite.addTest(new SuiteTest("testNotExistingTestCase"));
suite.addTest(new SuiteTest("testInheritedTests"));
suite.addTest(new SuiteTest("testOneTestCaseEclipseSeesSameStructureAs381"));
suite.addTest(new SuiteTest("testNoTestCaseClass"));
suite.addTest(new SuiteTest("testShadowedTests"));
suite.addTest(new SuiteTest("testAddTestSuite"));
suite.addTest(new SuiteTest("testCreateSuiteFromArray"));
Expand All @@ -40,13 +44,12 @@ public void testInheritedTests() {
assertTrue(fResult.wasSuccessful());
assertEquals(2, fResult.runCount());
}
// This test case is obsolete, since the compiler will catch this error in 1.5
// public void testNoTestCaseClass() {
// Test t= new TestSuite(NoTestCaseClass.class);
// t.run(fResult);
// assertEquals(1, fResult.runCount()); // warning test
// assertTrue(! fResult.wasSuccessful());
// }
public void testNoTestCaseClass() {
Test t= new TestSuite(NoTestCaseClass.class);
t.run(fResult);
assertEquals(1, fResult.runCount()); // warning test
assertTrue(! fResult.wasSuccessful());
}
public void testNoTestCases() {
Test t= new TestSuite(NoTestCases.class);
t.run(fResult);
Expand All @@ -71,13 +74,17 @@ public void testNotVoidTestCase() {
assertTrue(suite.countTestCases() == 1);
}
public void testOneTestCase() {
Test t= new TestSuite(OneTestCase.class);
TestSuite t= new TestSuite(OneTestCase.class);
t.run(fResult);
assertTrue(fResult.runCount() == 1);
assertTrue(fResult.failureCount() == 0);
assertTrue(fResult.errorCount() == 0);
assertTrue(fResult.wasSuccessful());
}
public void testOneTestCaseEclipseSeesSameStructureAs381() {
TestSuite t= new TestSuite(ThreeTestCases .class);
assertEquals(3, Collections.list(t.tests()).size());
}
public void testShadowedTests() {
TestSuite suite= new TestSuite(OverrideTestCase.class);
suite.run(fResult);
Expand Down
15 changes: 15 additions & 0 deletions src/test/java/junit/tests/framework/ThreeTestCases.java
@@ -0,0 +1,15 @@
package junit.tests.framework;

/**
* Test class used in SuiteTest
*/
import junit.framework.TestCase;

public class ThreeTestCases extends TestCase {
public void testCase() {
}
public void testCase2() {
}
public void testCase3thisTimeItsPersonal() {
}
}

0 comments on commit 2de4d6f

Please sign in to comment.