From 5d908a0bbe167189a6920dc3e9299fd6ef1439a9 Mon Sep 17 00:00:00 2001 From: Jan Date: Sat, 7 Sep 2024 16:15:17 +0200 Subject: [PATCH] feat: find builders in specimen-type --- .../nylle/javafixture/SpecimenType.java | 10 ++++++ .../nylle/javafixture/SpecimenTypeTest.java | 31 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/src/main/java/com/github/nylle/javafixture/SpecimenType.java b/src/main/java/com/github/nylle/javafixture/SpecimenType.java index bebb6f2..4bbb50e 100644 --- a/src/main/java/com/github/nylle/javafixture/SpecimenType.java +++ b/src/main/java/com/github/nylle/javafixture/SpecimenType.java @@ -224,6 +224,16 @@ public List getFactoryMethods() { .collect(Collectors.toList()); } + public List> findBuilders() { + return Stream.of(asClass().getDeclaredMethods()) + .filter(m -> Modifier.isStatic(m.getModifiers())) + .filter(m -> Modifier.isPublic(m.getModifiers())) + .filter(m -> !m.getReturnType().equals(asClass())) + .map(m -> Builder.create(m, this)) + .filter(b -> b != null) + .collect(toList()); + } + @Override public boolean equals(final Object o) { if (this == o) { diff --git a/src/test/java/com/github/nylle/javafixture/SpecimenTypeTest.java b/src/test/java/com/github/nylle/javafixture/SpecimenTypeTest.java index c969be9..ed1c497 100644 --- a/src/test/java/com/github/nylle/javafixture/SpecimenTypeTest.java +++ b/src/test/java/com/github/nylle/javafixture/SpecimenTypeTest.java @@ -2,6 +2,7 @@ import com.github.nylle.javafixture.annotations.testcases.TestCase; import com.github.nylle.javafixture.annotations.testcases.TestWithCases; +import com.github.nylle.javafixture.testobjects.ClassWithBuilder; import com.github.nylle.javafixture.testobjects.ITestGeneric; import com.github.nylle.javafixture.testobjects.TestAbstractClass; import com.github.nylle.javafixture.testobjects.TestEnum; @@ -58,6 +59,7 @@ import java.util.concurrent.LinkedTransferQueue; import java.util.concurrent.TransferQueue; +import static com.github.nylle.javafixture.CustomizationContext.noContext; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; @@ -368,6 +370,35 @@ void takesAValueMapper() { } } + @Nested + class FindBuilders { + + @Test + void returnsListOfBuilders() { + var specimenFactory = new SpecimenFactory(new Context(new Configuration())); + + var sut = new SpecimenType(){}; + + var actual = sut.findBuilders(); + + assertThat(actual).hasSize(1); + assertThat(actual.get(0).invoke(specimenFactory, noContext())).isInstanceOf(ClassWithBuilder.class); + } + + @TestWithCases + @TestCase(class1 = TestObject.class) + @TestCase(class1 = ITestGeneric.class) + @TestCase(class1 = TestEnum.class) + @TestCase(class1 = String.class) + void returnsEmptyListIfNoBuildersFound(Class typeWithoutBuilder) { + var sut = SpecimenType.fromClass(typeWithoutBuilder); + + var actual = sut.findBuilders(); + + assertThat(actual).isEmpty(); + } + } + @Test void getComponentType() { assertThat(new SpecimenType() {}.getComponentType()).isEqualTo(int.class);