blob: 97e1ea4e859b451c60bd30c8b376f0a4e171a1c3 [file] [log] [blame]
package junitparams;
import org.junit.Test;
import org.junit.runner.Description;
import org.junit.runner.JUnitCore;
import org.junit.runner.Request;
import org.junit.runner.Result;
import org.junit.runner.manipulation.Filter;
import org.junit.runner.manipulation.NoTestsRemainException;
import static org.assertj.core.api.Assertions.*;
public class FilterableTest {
@Test
public void shouldRunAllTests() throws Exception {
Request request = Request.aClass(SampleTestCase.class);
Result result = new JUnitCore().run(request);
assertThat(result.getRunCount()).isEqualTo(3);
}
@Test
public void shouldRunSingleTestWithoutParameters() throws Exception {
Request request = requestSingleMethodRun(SampleTestCase.class, "firstTestMethod");
Result result = new JUnitCore().run(request);
assertThat(result.getRunCount()).isEqualTo(1);
}
@Test
public void shouldRunParametrisedTest() throws Exception {
Request request = requestSingleMethodRun(SampleTestCase.class, "secondTestMethod");
Result result = new JUnitCore().run(request);
assertThat(result.getRunCount()).isEqualTo(2);
}
@Test
public void shouldReturnOneDescriptionForSimpleTestCase() throws Exception {
Request request = requestSingleMethodRun(SampleTestCase.class, "firstTestMethod");
Description description = request.getRunner().getDescription();
assertThat(description.getChildren()).hasSize(1);
assertThat(description.getChildren().get(0).getChildren()).hasSize(0);
}
@Test
public void shouldReturnParametrizedDescriptionsForParametrizedTestCase() throws Exception {
Request request = requestSingleMethodRun(SampleTestCase.class, "secondTestMethod");
Description description = request.getRunner().getDescription();
assertThat(description.getChildren()).hasSize(1);
assertThat(description.getChildren().get(0).getChildren()).hasSize(2);
}
@Test
public void shouldApplyFiltersCumulatively() throws Exception {
JUnitParamsRunner runner = new JUnitParamsRunner(SampleTestCase.class);
// Remove the first method.
new SingleMethodFilter("firstTestMethod").apply(runner);
try {
// Now remove all instances of the second method.
new SingleMethodFilter("secondTestMethod").apply(runner);
fail("Filtering did not apply cumulatively");
} catch (NoTestsRemainException expected) {
// expected
}
}
private Request requestSingleMethodRun(Class<SampleTestCase> clazz, String methodName) {
return Request.aClass(clazz).filterWith(new SingleMethodFilter(methodName));
}
private static class SingleMethodFilter extends Filter {
private final String methodName;
public SingleMethodFilter(String methodName) {
this.methodName = methodName;
}
@Override
public boolean shouldRun(Description description) {
return description.getDisplayName().contains(methodName);
}
@Override
public String describe() {
return methodName;
}
}
}