package org.test4j.junit.suitetest.suite;
import static org.junit.Assert.assertSame;
import static org.test4j.junit.filter.SuiteType.JUNIT38_TEST_CLASSES;
import static org.test4j.junit.filter.SuiteType.JUNT4_TEST_CLASSES;
import static org.test4j.junit.filter.SuiteType.SUITE_TEST_CLASSES;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import mockit.Mock;
import mockit.Mocked;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.RunnerBuilder;
import org.test4j.junit.annotations.TestPath;
import org.test4j.junit.annotations.TestPath.BaseType;
import org.test4j.junit.filter.ClasspathFilterFactory;
import org.test4j.junit.filter.SuiteType;
import org.test4j.junit.filter.finder.FilterCondiction;
import org.test4j.junit.filter.finder.TestClazFinder;
import org.test4j.module.ICore;
@SuppressWarnings("unchecked")
public class ClassPathSuiteTest implements ICore {
private TestClazFinder finder;
@Mocked({ "runners" })
private RunnerBuilder builder;
@RunWith(ClassPathSuite.class)
private static class PlainSuite {
}
@Test
public void findWithDefaultValues() throws InitializationError {
finder = new MockUp<TestClazFinder>() {
@Mock
public List<Class<?>> find() {
return Collections.EMPTY_LIST;
}
}.getMockInstance();
new MockUp<ClasspathFilterFactory>() {
@Mock(invocations = 1)
public TestClazFinder create(FilterCondiction testerFilter) {
want.object(testerFilter).reflectionEq(
new FilterCondiction(false, new String[0], new SuiteType[] { JUNT4_TEST_CLASSES },
new Class<?>[] { Object.class }, new Class<?>[0]));
return finder;
}
};
new ClassPathSuite(PlainSuite.class, builder);
}
@RunWith(ClassPathSuite.class)
@TestPath(patterns = { "filter1", "!filter2" }, inJars = true, value = { SUITE_TEST_CLASSES, JUNIT38_TEST_CLASSES }, baseType = @BaseType(includes = ClassPathSuiteTest.class, excludes = { ClassPathSuite.class }))
private static class ComplexSuite {
}
@Test
public void findWithComplexValues() throws InitializationError {
finder = new MockUp<TestClazFinder>() {
@Mock
public List<Class<?>> find() {
return Collections.EMPTY_LIST;
}
}.getMockInstance();
new MockUp<ClasspathFilterFactory>() {
@Mock(invocations = 1)
public TestClazFinder create(FilterCondiction testerFilter) {
want.object(testerFilter).reflectionEq(
new FilterCondiction(true, new String[] { "filter1", "!filter2" }, new SuiteType[] {
SUITE_TEST_CLASSES, JUNIT38_TEST_CLASSES },
new Class<?>[] { ClassPathSuiteTest.class }, new Class<?>[] { ClassPathSuite.class }));
return finder;
}
};
new ClassPathSuite(ComplexSuite.class, builder);
}
private static class Test1 {
}
private static class Test2 {
}
@Test
public void sortReturnedClassesByName() throws InitializationError {
final List<Class<?>> listOfClasses = new ArrayList<Class<?>>();
listOfClasses.add(Test2.class);
listOfClasses.add(Test1.class);
finder = new MockUp<TestClazFinder>() {
@Mock
public List<Class<?>> find() {
return listOfClasses;
}
}.getMockInstance();
new MockUp<ClasspathFilterFactory>() {
@Mock(invocations = 1)
public TestClazFinder create(FilterCondiction testerFilter) {
return finder;
}
};
new ClassPathSuite(PlainSuite.class, builder);
assertSame(Test1.class, listOfClasses.get(0));
assertSame(Test2.class, listOfClasses.get(1));
}
// @RunWith(ClasspathSuite.class)
// public static class SuiteWithBefore {
// @BeforeSuite
// public static void before() {
// beforeWasRun = true;
// }
// }
// private static boolean beforeWasRun;
// @Test
// public void beforeSuite(RunNotifier notifier) throws InitializationError {
// beforeWasRun = false;
// ClasspathSuite cpsuite = new ClasspathSuite(SuiteWithBefore.class, builder);
// cpsuite.run(notifier);
// want.bool(beforeWasRun).is(true);
// }
}