package org.nuunframework.ensemble;
import static org.fest.assertions.Assertions.assertThat;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.junit.Before;
import org.junit.Test;
import org.nuunframework.ensemble.Ensemble;
import org.nuunframework.ensemble.sample.Person;
import org.nuunframework.ensemble.sample.PersonRepresentation;
import org.nuunframework.ensemble.util.Types;
public class EnsembleTest
{
@Before
public void init()
{
}
@Test
public void map_should_be_correct() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException
{
// @f:off
class holder { PersonRepresentation pr; } // @f:on
final holder holder = new holder();
Ensemble<Person, PersonRepresentation> map = new Ensemble<Person, PersonRepresentation>()
{
@Override
protected void play()
{
// @f:off
d().fillFullname(s().getFirstname(), s().getLastname()); // + 3 calls
d().fillFullAddress( // + 1 call
s().getAddress().getLine1 (), // + 2 calls
s().getAddress().getLine2 (), // + 2 calls
s().getAddress().getTown (), // + 2 calls
s().getAddress().getCountry(), // + 2 calls
//s().getAddress().getCode() // -----------
"97300" // = 12 calls
);
// @f:off
}
};
Method methodForConfigure = Types.methodFor(Ensemble.class, "configure");
methodForConfigure.setAccessible(true);
methodForConfigure.invoke(map);
System.err.println("" + map.getRecording() );
assertThat(map.getRecording()).hasSize(12);
// assertThat(holder.pr).isNotNull();
// assertThat(holder.pr).isInstanceOf(PersonRepresentation.class);
// holder.pr.getFullname();
}
@Test
public void source_should_be_correct() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException
{
// @f:off
class holder { Person person; } // @f:on
final holder holder = new holder();
Ensemble<Person, PersonRepresentation> map = new Ensemble<Person, PersonRepresentation>()
{
@Override
protected void play()
{
holder.person = s();
}
};
Method methodForConfigure = Types.methodFor(Ensemble.class, "play");
methodForConfigure.setAccessible(true);
methodForConfigure.invoke(map);
assertThat(methodForConfigure).isNotNull();
assertThat(holder.person).isNotNull();
assertThat(holder.person).isInstanceOf(Person.class);
// holder.person.getFirstname();
}
@Test
public void destination_should_be_correct() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException
{
// @f:off
class holder { PersonRepresentation pr; } // @f:on
final holder holder = new holder();
Ensemble<Person, PersonRepresentation> map = new Ensemble<Person, PersonRepresentation>()
{
@Override
protected void play()
{
holder.pr = destination();
}
};
Method methodForConfigure = Types.methodFor(Ensemble.class, "play");
methodForConfigure.setAccessible(true);
methodForConfigure.invoke(map);
assertThat(methodForConfigure).isNotNull();
assertThat(holder.pr).isNotNull();
assertThat(holder.pr).isInstanceOf(PersonRepresentation.class);
// holder.pr.getFullname();
}
}