package component.customisation; import com.flextrade.jfixture.JFixture; import com.flextrade.jfixture.SpecimenSupplier; import com.flextrade.jfixture.exceptions.ObjectCreationException; import com.flextrade.jfixture.utility.SpecimenType; import org.junit.Test; import testtypes.TypeWithCircularReference; import testtypes.TypeWithList; import java.math.BigDecimal; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; public class TestDefaultFluentCustomisation { @Test public void same_instance_adds_instance_per_type_customisation() { final String instance = "string"; JFixture fixture = new JFixture(); fixture.customise().sameInstance(String.class, instance); String first = fixture.create(String.class); String second = fixture.create(String.class); assertEquals(instance, first); assertEquals(instance, second); } @Test public void lazy_instance_adds_instance_with_factory_method_customisation() { JFixture fixture = new JFixture(); fixture.customise().lazyInstance(Integer.class, new SpecimenSupplier<Integer>() { int count = 5; @Override public Integer create() { return count--; }}); int first = fixture.create(int.class); assertEquals(5, first); int second = fixture.create(int.class); assertEquals(4, second); } @Test public void lazy_instance_with_functional_interface_adds_instance_with_factory_method_customisation() { JFixture fixture = new JFixture(); fixture.customise().lazyInstance(Integer.class, new SpecimenSupplier<Integer>() { int count = 5; public Integer create() { return count--; } }); int first = fixture.create(int.class); assertEquals(5, first); int second = fixture.create(int.class); assertEquals(4, second); } @Test public void use_sub_type_adds_sub_type_customisation() { JFixture fixture = new JFixture(); fixture.customise().useSubType(Number.class, BigDecimal.class); Number number = fixture.create(Number.class); assertTrue(number instanceof BigDecimal); } @Test public void customisations_can_be_chained() { JFixture fixture = new JFixture(); fixture.customise() .sameInstance(String.class, "string") .sameInstance(int.class, 10); assertEquals("string", fixture.create(String.class)); int value = fixture.create(int.class); assertEquals(10, value); } @Test(expected = ObjectCreationException.class) public void recursion_behaviour_can_be_set_to_throw_exception() { JFixture fixture = new JFixture(); fixture.customise().circularDependencyBehaviour().omitSpecimen(); // Need to omit first because it defaults to throwing fixture.customise().circularDependencyBehaviour().throwException(); fixture.create(TypeWithCircularReference.class); } @Test public void recursion_behaviour_can_be_set_to_omit_specimen() { JFixture fixture = new JFixture(); fixture.customise().circularDependencyBehaviour().omitSpecimen(); TypeWithCircularReference instance = fixture.create(TypeWithCircularReference.class); assertNotNull(instance); assertNull(instance.circular); } @Test public void repeat_count_can_be_set() { JFixture fixture = new JFixture(); fixture.customise().repeatCount(5); TypeWithList instance = fixture.create(SpecimenType.of(TypeWithList.class)); assertEquals(5, instance.getList().size()); } }