Given ambiguity of a property name in extended interfaces, should the
EntityBuilder methods instance() and instanceFor() behave like demonstrated
in the test below? Or are properties simply required not to be ambiguous?
Cheers,
Marc
====================================
package [some.package];
import org.qi4j.api.entity.EntityComposite;
import org.qi4j.api.entity.EntityBuilder;
import org.qi4j.api.unitofwork.UnitOfWork;
import org.qi4j.api.common.UseDefaults;
import org.qi4j.api.property.Property;
import org.qi4j.test.AbstractQi4jTest;
import org.qi4j.bootstrap.ModuleAssembly;
import org.qi4j.bootstrap.AssemblyException;
import org.qi4j.entitystore.memory.MemoryEntityStoreService;
import org.qi4j.spi.uuid.UuidIdentityGeneratorService;
import org.junit.Test;
import org.junit.Assert;
public class EntityBuilderTest
extends AbstractQi4jTest
{
public void assemble( ModuleAssembly module )
throws AssemblyException
{
module.addEntities( AscEntity.class, DescEntity.class );
module.addServices( MemoryEntityStoreService.class,
UuidIdentityGeneratorService.class );
}
@Test
public void propertyNameAmbiguityTest() throws Exception
{
UnitOfWork unitOfWork = unitOfWorkFactory.newUnitOfWork();
try
{
{
EntityBuilder<AscEntity> builder = unitOfWork.newEntityBuilder(
AscEntity.class );
builder.instance().name().set( "instance()" );
System.out.println( "ASC/before, expecting instance(): " +
builder.instance().name().get() + " ### is this A?");
// Assert.assertEquals( "ASC/before", "instance()",
builder.instance().name().get() );
AscEntity entity = builder.newInstance();
System.out.println( "ASC/after, expecting instance(): " +
entity.name().get() + "\n" );
// Assert.assertEquals( "ASC/after", "instance()",
entity.name().get() );
}
{
EntityBuilder<AscEntity> builder = unitOfWork.newEntityBuilder(
AscEntity.class );
builder.instanceFor( A.class ).name().set(
"instanceFor(A.class)" );
System.out.println( "ASC/before, expecting
instanceFor(A.class): " + builder.instance().name().get() );
// Assert.assertEquals( "ASC/before", "instanceFor(A.class)",
builder.instance().name().get() );
AscEntity entity = builder.newInstance();
System.out.println( "ASC/after, expecting
instanceFor(A.class): " + entity.name().get() + "\n" );
// Assert.assertEquals( "ASC/after", "instanceFor(A.class)",
entity.name().get() );
}
{
EntityBuilder<AscEntity> builder = unitOfWork.newEntityBuilder(
AscEntity.class );
builder.instanceFor( B.class ).name().set(
"instanceFor(B.class)" );
System.out.println( "ASC/before, expecting
instanceFor(B.class): " + builder.instance().name().get() + " ### B not
used" );
// Assert.assertEquals( "ASC/before", "instanceFor(B.class)",
builder.instance().name().get() );
AscEntity entity = builder.newInstance();
System.out.println( "ASC/after, expecting
instanceFor(B.class): " + entity.name().get() + " ### B not used \n" );
// Assert.assertEquals( "ASC/after", "instanceFor(B.class)",
entity.name().get() );
}
{
EntityBuilder<DescEntity> builder = unitOfWork.newEntityBuilder(
DescEntity.class );
builder.instance().name().set( "instance()" );
System.out.println( "DESC/before, expecting instance(): " +
builder.instance().name().get() + " ### is this B?");
// Assert.assertEquals( "DESC/before", "instance()",
builder.instance().name().get() );
DescEntity entity = builder.newInstance();
System.out.println( "DESC/after, expecting instance(): " +
entity.name().get() + " ### where did the default go? \n" );
// Assert.assertEquals( "DESC/after", "instance()",
entity.name().get() );
}
{
EntityBuilder<DescEntity> builder = unitOfWork.newEntityBuilder(
DescEntity.class );
builder.instanceFor( A.class ).name().set(
"instanceFor(A.class)" );
System.out.println( "DESC/before, expecting
instanceFor(A.class): " + builder.instance().name().get() + " ### A.class
not used" );
// Assert.assertEquals( "DESC/before", "instanceFor(A.class)",
builder.instance().name().get() );
DescEntity entity = builder.newInstance();
System.out.println( "DESC/after, expecting
instanceFor(A.class): " + entity.name().get() + " ### where did A come
from? \n" );
// Assert.assertEquals( "DESC/after", "instanceFor(A.class)",
entity.name().get() );
}
{
EntityBuilder<DescEntity> builder = unitOfWork.newEntityBuilder(
DescEntity.class );
builder.instanceFor( B.class ).name().set(
"instanceFor(B.class)" );
System.out.println( "DESC/before, expecting
instanceFor(B.class): " + builder.instance().name().get() );
// Assert.assertEquals( "DESC/before", "instanceFor(B.class)",
builder.instance().name().get() );
DescEntity entity = builder.newInstance();
System.out.println( "DESC/after, expecting
instanceFor(B.class): " + entity.name().get() + " ### where did B go? \n"
);
// Assert.assertEquals( "DESC/after", "instanceFor(B.class)",
entity.name().get() );
}
}
finally
{
unitOfWork.discard();
}
}
public interface AscEntity
extends EntityComposite, A, B
{
}
public interface DescEntity
extends EntityComposite, B, A
{
}
public interface A
{
@UseDefaults
Property<String> name();
}
public interface B
{
@UseDefaults
Property<String> name();
}
}
====================================
--
View this message in context:
http://old.nabble.com/Expected-EntityBuilder-behaviour--tp28982480p28982480.html
Sent from the Qi4j-dev mailing list archive at Nabble.com.
_______________________________________________
qi4j-dev mailing list
[email protected]
http://lists.ops4j.org/mailman/listinfo/qi4j-dev