Skip to content

Commit

Permalink
Restore backward compatibility with sub class of ParentRunner that ov…
Browse files Browse the repository at this point in the history
…erride getName method
  • Loading branch information
Gordiychuk committed Mar 23, 2016
1 parent 72f049e commit bb41b51
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 9 deletions.
7 changes: 4 additions & 3 deletions src/main/java/org/junit/runner/Description.java
Original file line number Diff line number Diff line change
Expand Up @@ -127,11 +127,12 @@ public static Description createSuiteDescription(Class<?> testClass) {
/**
* Create a <code>Description</code> named after <code>testClass</code>
*
* @param testClass A {@link Class} containing tests
* @param testClass A not null {@link Class} containing tests
* @param annotations meta-data about the test, for downstream interpreters
* @return a <code>Description</code> of <code>testClass</code>
*/
public static Description createSuiteDescription(Class<?> testClass, String name, Annotation... annotations) {
return new Description(testClass, name, annotations);
public static Description createSuiteDescription(Class<?> testClass, Annotation... annotations) {
return new Description(testClass, testClass.getName(), annotations);
}

/**
Expand Down
16 changes: 10 additions & 6 deletions src/main/java/org/junit/runners/ParentRunner.java
Original file line number Diff line number Diff line change
Expand Up @@ -346,12 +346,16 @@ protected Annotation[] getRunnerAnnotations() {

@Override
public Description getDescription() {
Description description =
Description.createSuiteDescription(
getTestClass().getJavaClass(),
getName(),
getRunnerAnnotations()
);
Class<?> clazz = getTestClass().getJavaClass();
Description description;
// if subclass overrides `getName()` then we should use it
// to maintain backwards compatibility with JUnit 4.12
if (clazz == null || !clazz.getName().equals(getName())) {
description = Description.createSuiteDescription(getName(), getRunnerAnnotations());
} else {
description = Description.createSuiteDescription(clazz, getRunnerAnnotations());
}

for (T child : getFilteredChildren()) {
description.addChild(describeChild(child));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@
import org.junit.runner.notification.RunNotifier;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.junit.runners.ParentRunner;
import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.InitializationError;

import java.lang.reflect.Field;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.List;

import static org.junit.Assert.assertEquals;

Expand Down Expand Up @@ -44,6 +46,27 @@ public void testDescriptionContainCorrectTestClass() throws Exception {
);
}

@Test
public void testBackwardCompatibilityWithOverrideGetName() throws Exception {
final Class<TestWithClassRule> originalTestClass = TestWithClassRule.class;
final Class<?> waitClass = ParentRunnerClassLoaderTest.class;

ParentRunner<FrameworkMethod> subParentRunner = new BlockJUnit4ClassRunner(originalTestClass) {
@Override
protected String getName() {
return waitClass.getName();
}
};

Description description = subParentRunner.getDescription();
Class<?> result = description.getTestClass();

assertEquals("Subclass of ParentRunner can override getName method and specify another test class for run, " +
"we should maintain backwards compatibility with JUnit 4.12",
waitClass, result
);
}

private void runTestWithParentRunner(Class<?> testClass) throws InitializationError {
ParentRunner<?> runner = new BlockJUnit4ClassRunner(testClass);
runner.run(new RunNotifier());
Expand Down

0 comments on commit bb41b51

Please sign in to comment.