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

Reply via email to