package info.ebenoit.ebul.reflection; import java.io.Serializable; import java.util.ArrayList; import org.junit.Assert; import org.junit.Test; /** * Tests for the {@link PackageScanner} class * * @author <a href="mailto:ebenoit@ebenoit.info">E. BenoƮt</a> */ public class TestPackageScanner { /** Test: list the class names in the test package, without recursion */ @Test public void testGetClassNamesNoRecursion( ) throws Exception { final PackageScanner scanner = new PackageScanner( "test" , false ); final ArrayList< String > result = scanner.getClassNames( ); final ArrayList< String > expected = new ArrayList< >( ); expected.add( "test.PSTest1" ); Assert.assertEquals( expected , result ); } /** Test: list the class names in the test package, with recursion into test.sub */ @Test public void testGetClassNamesRecursion( ) throws Exception { final PackageScanner scanner = new PackageScanner( "test" , true ); final ArrayList< String > result = scanner.getClassNames( ); result.sort( ( final String a , final String b ) -> a.compareTo( b ) ); final ArrayList< String > expected = new ArrayList< >( ); expected.add( "test.PSTest1" ); expected.add( "test.sub.PSTest2" ); Assert.assertEquals( expected , result ); } /** Test: load all classes in test and test.sub */ @Test public void testLoadClasses( ) throws Exception { final PackageScanner scanner = new PackageScanner( "test" , true ); final ArrayList< Class< ? > > result = scanner.loadClasses( ); result.sort( ( final Class< ? > a , final Class< ? > b ) -> a.getCanonicalName( ) .compareTo( b.getCanonicalName( ) ) ); final ArrayList< Class< ? > > expected = new ArrayList< >( ); expected.add( test.PSTest1.class ); expected.add( test.sub.PSTest2.class ); Assert.assertEquals( expected , result ); } /** Test: find classes in test and test.sub that implement {@link Serializable} */ @Test public void testFindClasses( ) throws Exception { final PackageScanner scanner = new PackageScanner( "test" , true ); final ArrayList< Class< ? > > result = scanner.findClasses( a -> Serializable.class.isAssignableFrom( a ) ); final ArrayList< Class< ? > > expected = new ArrayList< >( ); expected.add( test.sub.PSTest2.class ); Assert.assertEquals( expected , result ); } /** Test: list the class names in the org.junit package, without recursion */ @Test public void testGetClassNamesJARNoRecursion( ) throws Exception { final PackageScanner scanner = new PackageScanner( "org.junit" , false ); final ArrayList< String > result = scanner.getClassNames( ); Assert.assertTrue( !result.isEmpty( ) ); Assert.assertTrue( result.stream( ).allMatch( s -> s.startsWith( "org.junit." ) ) ); Assert.assertTrue( result.stream( ).noneMatch( s -> s.startsWith( "org.junit.experimental." ) ) ); } /** Test: list the class names in the org.junit package, with recursion */ @Test public void testGetClassNamesJARRecursion( ) throws Exception { final PackageScanner scanner = new PackageScanner( "org.junit" , true ); final ArrayList< String > result = scanner.getClassNames( ); Assert.assertTrue( !result.isEmpty( ) ); Assert.assertTrue( result.stream( ).allMatch( s -> s.startsWith( "org.junit." ) ) ); Assert.assertTrue( result.stream( ).anyMatch( s -> s.startsWith( "org.junit.experimental." ) ) ); } /** * Test: list the class names in the org package, with recursion; both JUnit's classes and the PSTest3 class should * be in there */ @Test public void testGetClassNamesMixed( ) throws Exception { final PackageScanner scanner = new PackageScanner( "org" , true ); final ArrayList< String > result = scanner.getClassNames( ); Assert.assertTrue( !result.isEmpty( ) ); Assert.assertTrue( result.stream( ).anyMatch( s -> s.startsWith( "org.junit." ) ) ); Assert.assertTrue( result.contains( "org.PSTest3" ) ); } }