package org.test4j.junit.filter.finder; import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.junit.Assert; import org.junit.Test; import org.test4j.junit.filter.acceptor.TestAcceptor; import org.test4j.junit.filter.acceptor.TestAcceptor.AllTestAcceptor; import org.test4j.junit.filter.finder.ClasspathTestClazFinder; public class ClasspathTestClazFinderTest { class AcceptAllClassesInTestDirTester extends AllTestAcceptor { @Override public boolean isAcceptedByPatterns(String className) { return className.startsWith("forfilter.tests."); } @Override public boolean searchInJars() { return false; } } @Test public void allClasses() { TestAcceptor tester = new AcceptAllClassesInTestDirTester(); Collection<Class<?>> classes = new ClasspathTestClazFinder(tester).find(); Assert.assertEquals(8, classes.size()); classes.contains(forfilter.tests.ju38.JU38AbstractTest.class); classes.contains(forfilter.tests.ju38.JU38ConcreteTest.class); classes.contains(forfilter.tests.ju38.JU38TestWithoutBase.class); classes.contains(forfilter.tests.p1.P1Test.class); classes.contains(forfilter.tests.p1.P1NoTest.class); classes.contains(forfilter.tests.p1.P1NoTest.InnerTest.class); classes.contains(forfilter.tests.p2.AbstractP2Test.class); classes.contains(forfilter.tests.p2.ConcreteP2Test.class); } @Test public void allClassNames() { final Set<String> allClasses = new HashSet<String>(); allClasses.add("forfilter.tests.ju38.JU38AbstractTest"); allClasses.add("forfilter.tests.ju38.JU38ConcreteTest"); allClasses.add("forfilter.tests.ju38.JU38TestWithoutBase"); allClasses.add("forfilter.tests.p1.P1Test"); allClasses.add("forfilter.tests.p1.P1NoTest"); allClasses.add("forfilter.tests.p1.P1NoTest$InnerTest"); allClasses.add("forfilter.tests.p2.AbstractP2Test"); allClasses.add("forfilter.tests.p2.ConcreteP2Test"); TestAcceptor tester = new AcceptAllClassesInTestDirTester() { @Override public boolean isAcceptedByPatterns(String className) { if (className.startsWith("forfilter.tests.")) { Assert.assertTrue(allClasses.contains(className)); } return super.isAcceptedByPatterns(className); } }; Collection<Class<?>> classes = new ClasspathTestClazFinder(tester).find(); Assert.assertEquals(allClasses.size(), classes.size()); } @Test public void allClassesExceptInner() { TestAcceptor tester = new AcceptAllClassesInTestDirTester() { @Override public boolean acceptInnerClass() { return false; } }; Collection<Class<?>> classes = new ClasspathTestClazFinder(tester).find(); Assert.assertEquals(7, classes.size()); } @Test public void selectClassByAcceptClass() { TestAcceptor tester = new AcceptAllClassesInTestDirTester() { @Override public boolean isCorrectTestType(Class<?> clazz) { return clazz.getName().endsWith("NoTest"); } }; Collection<Class<?>> classes = new ClasspathTestClazFinder(tester).find(); Assert.assertEquals(1, classes.size()); } @Test public void dontSearchJarsIfSpecified() { TestAcceptor tester = new AllTestAcceptor() { @Override public boolean searchInJars() { return false; } @Override public boolean isAcceptedByPatterns(String className) { return className.startsWith("injar."); } }; Collection<Class<?>> classes = new ClasspathTestClazFinder(tester).find(); Assert.assertEquals(0, classes.size()); } @Test public void useFallbackValueIfClasspathPropertyIsSpecifiedButNotSetInSystem() { System.clearProperty("my.class.path"); TestAcceptor acceptor = new AcceptAllClassesInTestDirTester(); Collection<Class<?>> classes = new ClasspathTestClazFinder(acceptor).find(); Assert.assertEquals(8, classes.size()); } }