Skip to content

Commit 5d908a0

Browse files
committed
feat: find builders in specimen-type
1 parent 6cb8947 commit 5d908a0

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

src/main/java/com/github/nylle/javafixture/SpecimenType.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,16 @@ public List<Method> getFactoryMethods() {
224224
.collect(Collectors.toList());
225225
}
226226

227+
public List<Builder<T>> findBuilders() {
228+
return Stream.of(asClass().getDeclaredMethods())
229+
.filter(m -> Modifier.isStatic(m.getModifiers()))
230+
.filter(m -> Modifier.isPublic(m.getModifiers()))
231+
.filter(m -> !m.getReturnType().equals(asClass()))
232+
.map(m -> Builder.create(m, this))
233+
.filter(b -> b != null)
234+
.collect(toList());
235+
}
236+
227237
@Override
228238
public boolean equals(final Object o) {
229239
if (this == o) {

src/test/java/com/github/nylle/javafixture/SpecimenTypeTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.github.nylle.javafixture.annotations.testcases.TestCase;
44
import com.github.nylle.javafixture.annotations.testcases.TestWithCases;
5+
import com.github.nylle.javafixture.testobjects.ClassWithBuilder;
56
import com.github.nylle.javafixture.testobjects.ITestGeneric;
67
import com.github.nylle.javafixture.testobjects.TestAbstractClass;
78
import com.github.nylle.javafixture.testobjects.TestEnum;
@@ -58,6 +59,7 @@
5859
import java.util.concurrent.LinkedTransferQueue;
5960
import java.util.concurrent.TransferQueue;
6061

62+
import static com.github.nylle.javafixture.CustomizationContext.noContext;
6163
import static org.assertj.core.api.Assertions.assertThat;
6264
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
6365

@@ -368,6 +370,35 @@ void takesAValueMapper() {
368370
}
369371
}
370372

373+
@Nested
374+
class FindBuilders {
375+
376+
@Test
377+
void returnsListOfBuilders() {
378+
var specimenFactory = new SpecimenFactory(new Context(new Configuration()));
379+
380+
var sut = new SpecimenType<ClassWithBuilder>(){};
381+
382+
var actual = sut.findBuilders();
383+
384+
assertThat(actual).hasSize(1);
385+
assertThat(actual.get(0).invoke(specimenFactory, noContext())).isInstanceOf(ClassWithBuilder.class);
386+
}
387+
388+
@TestWithCases
389+
@TestCase(class1 = TestObject.class)
390+
@TestCase(class1 = ITestGeneric.class)
391+
@TestCase(class1 = TestEnum.class)
392+
@TestCase(class1 = String.class)
393+
void returnsEmptyListIfNoBuildersFound(Class<?> typeWithoutBuilder) {
394+
var sut = SpecimenType.fromClass(typeWithoutBuilder);
395+
396+
var actual = sut.findBuilders();
397+
398+
assertThat(actual).isEmpty();
399+
}
400+
}
401+
371402
@Test
372403
void getComponentType() {
373404
assertThat(new SpecimenType<int[]>() {}.getComponentType()).isEqualTo(int.class);

0 commit comments

Comments
 (0)