blob: c00efde1e08c6834e47d3cb00acdf4aff6741529 [file] [log] [blame]
package org.junit.runner;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.startsWith;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assume.assumeThat;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.ExcludeCategories;
import org.junit.rules.ExpectedException;
import org.junit.rules.TestName;
import org.junit.runner.manipulation.Filter;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
public class FilterFactoriesTest {
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Rule
public TestName testName = new TestName();
private Request createSuiteRequest() {
return Request.aClass(DummySuite.class);
}
@Test
public void shouldCreateFilterWithArguments() throws Exception {
Filter filter = FilterFactories.createFilterFromFilterSpec(
createSuiteRequest(),
ExcludeCategories.class.getName() + "=" + DummyCategory.class.getName());
assertThat(filter.describe(), startsWith("excludes "));
}
@Test
public void shouldCreateFilterWithNoArguments() throws Exception {
Filter filter = FilterFactories.createFilterFromFilterSpec(
createSuiteRequest(), FilterFactoryStub.class.getName());
assertThat(filter, instanceOf(DummyFilter.class));
}
@Test
public void shouldPassOnDescriptionToFilterFactory() throws Exception {
Request request = createSuiteRequest();
Description description = request.getRunner().getDescription();
Filter filter = FilterFactories.createFilterFromFilterSpec(
request, FilterFactoryStub.class.getName());
// This assumption tested in shouldCreateFilterWithNoArguments()
assumeThat(filter, instanceOf(DummyFilter.class));
DummyFilter dummyFilter = (DummyFilter) filter;
assertThat(dummyFilter.getTopLevelDescription(), is(description));
}
@Test
public void shouldCreateFilter() throws Exception {
Filter filter = FilterFactories.createFilter(
FilterFactoryStub.class,
new FilterFactoryParams(
Description.createSuiteDescription(testName.getMethodName()),
""));
assertThat(filter, instanceOf(DummyFilter.class));
}
@Test
public void shouldThrowExceptionIfNotFilterFactory() throws Exception {
expectedException.expect(FilterFactory.FilterNotCreatedException.class);
FilterFactories.createFilterFactory(NonFilterFactory.class.getName());
}
@Test
public void shouldThrowExceptionIfNotInstantiable() throws Exception {
expectedException.expect(FilterFactory.FilterNotCreatedException.class);
FilterFactories.createFilterFactory(NonInstantiableFilterFactory.class);
}
public static class NonFilterFactory {
}
public static class NonInstantiableFilterFactory implements FilterFactory {
private NonInstantiableFilterFactory() {
}
public Filter createFilter(FilterFactoryParams params) throws FilterNotCreatedException {
throw new FilterNotCreatedException(new Exception("not implemented"));
}
}
public static class FilterFactoryStub implements FilterFactory {
public Filter createFilter(FilterFactoryParams params) {
return new DummyFilter(params.getTopLevelDescription());
}
}
private static class DummyFilter extends Filter {
private final Description fTopLevelDescription;
public DummyFilter(Description topLevelDescription) {
fTopLevelDescription = topLevelDescription;
}
public Description getTopLevelDescription() {
return fTopLevelDescription;
}
@Override
public boolean shouldRun(Description description) {
return false;
}
@Override
public String describe() {
return null;
}
}
public static class DummyCategory {
}
@RunWith(Suite.class)
@SuiteClasses(DummyTest.class)
public static class DummySuite {
}
public static class DummyTest {
@Test
public void passes() {
}
}
}