package br.com.caelum.iogi.reflection; import static org.junit.Assert.*; import org.junit.Test; import br.com.caelum.iogi.conversion.StringConverter; import br.com.caelum.iogi.parameters.Parameter; import br.com.caelum.iogi.parameters.Parameters; public class NewObjectTest { private abstract static class SampleParent { abstract void setInherited(String inherited); abstract String getInherited(); } @SuppressWarnings("unused") private static class Sample extends SampleParent { private String simple, returning, inherited; public void setSimple(String simple) { this.simple = simple; } public String getSimple() { return simple; } public void setReturning(String returning) { this.returning = returning; } public String getReturning() { return returning; } @Override public void setInherited(String inherited) { this.inherited = inherited; } @Override public String getInherited() { return this.inherited; } } private abstract static class GenericParent<T> { public abstract T getInherited(); public abstract void setInherited(T t); } @SuppressWarnings("unused") private static class GenericSample<T> extends GenericParent<T>{ private T generic, inherited; public void setGeneric(T generic) { this.generic = generic; } public T getGeneric() { return generic; } @Override public T getInherited() { return inherited; } @Override public void setInherited(T t) { this.inherited = t; } } @Test public void valueWithPropertiesSetReturnsTheInitialValue() throws Exception { Sample sampleObject = new Sample(); NewObject newObject = new NewObject(new StringConverter(), new Parameters(), sampleObject); assertSame(sampleObject, newObject.valueWithPropertiesSet()); } @Test public void callsSetterMethodsToPopulateInstance() { Parameters parameters = new Parameters(new Parameter("simple", "value")); NewObject newObject = new NewObject(new StringConverter(), parameters, new Sample()); Sample populatedSampleObject = (Sample) newObject.valueWithPropertiesSet(); assertEquals("value", populatedSampleObject.getSimple()); } @Test public void callsSetterMethodsThatReturnValues() { Parameters parameters = new Parameters(new Parameter("returning", "value")); NewObject newObject = new NewObject(new StringConverter(), parameters, new Sample()); Sample populatedSampleObject = (Sample) newObject.valueWithPropertiesSet(); assertEquals("value", populatedSampleObject.getReturning()); } @Test @SuppressWarnings("unchecked") public void callsGenericSetterMethods() throws Exception { Parameters parameters = new Parameters(new Parameter("generic", "value")); NewObject newObject = new NewObject(new StringConverter(), parameters, new GenericSample<String>()); GenericSample<String> populatedSampleObject = (GenericSample<String>) newObject.valueWithPropertiesSet(); assertEquals("value", populatedSampleObject.getGeneric()); } @Test public void callsInheritedSetterMethods() throws Exception { Parameters parameters = new Parameters(new Parameter("inherited", "value")); NewObject newObject = new NewObject(new StringConverter(), parameters, new Sample()); Sample populatedSampleObject = (Sample) newObject.valueWithPropertiesSet(); assertEquals("value", populatedSampleObject.getInherited()); } @SuppressWarnings("unchecked") @Test public void callsInheritedGenericSetterMethods() throws Exception { Parameters parameters = new Parameters(new Parameter("inherited", "value")); NewObject newObject = new NewObject(new StringConverter(), parameters, new GenericSample<String>()); GenericSample<String> populatedSampleObject = (GenericSample<String>) newObject.valueWithPropertiesSet(); assertEquals("value", populatedSampleObject.getInherited()); } }