Components registration - package scanning

This commit is contained in:
Emmanuel BENOîT 2015-09-16 17:50:13 +02:00
parent 0c23f613d6
commit 6d0753c7a8
11 changed files with 169 additions and 2 deletions

View file

@ -5,12 +5,20 @@ import org.junit.Test;
import info.ebenoit.ebul.func.ThrowingBiConsumer;
import info.ebenoit.ebul.func.ThrowingConsumer;
import test.inherited.CBase;
import test.inherited.CChild;
import test.inherited.CChildOfAbstract;
import test.interfaces.CImplementation;
import test.simple.CSimple;
import static org.junit.Assert.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
@ -889,4 +897,51 @@ public class TestNewComponentInfo
injector.accept( cmp , inject );
assertSame( inject , cmp.dependency );
}
/**
* Test: {@link NewComponentInfo#scanPackage(String, boolean)} finds a simple {@link Component}-annotated class
*/
@Test
public void testScanPackageSimple( )
throws ComponentDefinitionException , ClassNotFoundException , IOException
{
ArrayList< NewComponentInfo< ? > > result = NewComponentInfo.scanPackage( "test.simple" , false );
assertEquals( 1 , result.size( ) );
assertSame( CSimple.class , result.get( 0 ).getSupplier( ).get( ).getClass( ) );
}
/**
* Test: {@link NewComponentInfo#scanPackage(String, boolean)} finds components that inherit each other, ignoring
* abstract classes
*/
@Test
public void testScanPackageInheritance( )
throws ComponentDefinitionException , ClassNotFoundException , IOException
{
ArrayList< NewComponentInfo< ? > > result = NewComponentInfo.scanPackage( "test.inherited" , false );
assertEquals( 3 , result.size( ) );
Set< ? > classes = result.stream( ).map( x -> x.getSupplier( ).get( ).getClass( ) )
.collect( Collectors.toSet( ) );
assertTrue( classes.contains( CBase.class ) );
assertTrue( classes.contains( CChild.class ) );
assertTrue( classes.contains( CChildOfAbstract.class ) );
}
/**
* Test: {@link NewComponentInfo#scanPackage(String, boolean)} finds components defined by implementing a
* {@link Component}-annotated interface
*/
@Test
public void testScanPackageInterfaces( )
throws ComponentDefinitionException , ClassNotFoundException , IOException
{
ArrayList< NewComponentInfo< ? > > result = NewComponentInfo.scanPackage( "test.interfaces" , false );
assertEquals( 1 , result.size( ) );
assertSame( CImplementation.class , result.get( 0 ).getSupplier( ).get( ).getClass( ) );
}
}

View file

@ -0,0 +1,9 @@
package test.inherited;
import info.ebenoit.ebul.cmp.Component;
@Component
public abstract class CAbstractBase
{
// EMPTY
}

View file

@ -0,0 +1,8 @@
package test.inherited;
public abstract class CAbstractChild
extends CBase
{
// EMPTY
}

View file

@ -0,0 +1,12 @@
package test.inherited;
import info.ebenoit.ebul.cmp.Component;
@Component
public class CBase
{
// EMPTY
}

View file

@ -0,0 +1,8 @@
package test.inherited;
public class CChild
extends CBase
{
// EMPTY
}

View file

@ -0,0 +1,8 @@
package test.inherited;
public class CChildOfAbstract
extends CAbstractBase
{
}

View file

@ -0,0 +1,8 @@
package test.interfaces;
public class CImplementation
implements CInterface
{
// EMPTY
}

View file

@ -0,0 +1,12 @@
package test.interfaces;
import info.ebenoit.ebul.cmp.Component;
@Component
public interface CInterface
{
// EMPTY
}

View file

@ -0,0 +1,12 @@
package test.simple;
import info.ebenoit.ebul.cmp.Component;
@Component
public class CSimple
{
// EMPTY
}