Skip to content

Commit f0d872d

Browse files
committed
refactor: check for pre-defined specimen in factory
Refs: #98
1 parent b099bba commit f0d872d

File tree

7 files changed

+28
-113
lines changed

7 files changed

+28
-113
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public <T> ISpecimen<T> build(final SpecimenType<T> type) {
3232
}
3333

3434
if (type.isEnum()) {
35-
return new EnumSpecimen<>(type, context);
35+
return new EnumSpecimen<>(type );
3636
}
3737

3838
if (type.isCollection()) {
Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.github.nylle.javafixture.specimen;
22

3-
import com.github.nylle.javafixture.Context;
43
import com.github.nylle.javafixture.CustomizationContext;
54
import com.github.nylle.javafixture.ISpecimen;
65
import com.github.nylle.javafixture.SpecimenType;
@@ -12,9 +11,8 @@ public class EnumSpecimen<T> implements ISpecimen<T> {
1211

1312
private final SpecimenType<T> type;
1413
private final Random random;
15-
private final Context context;
1614

17-
public EnumSpecimen(final SpecimenType<T> type, final Context context) {
15+
public EnumSpecimen(final SpecimenType<T> type ) {
1816

1917
if (type == null) {
2018
throw new IllegalArgumentException("type: null");
@@ -24,17 +22,12 @@ public EnumSpecimen(final SpecimenType<T> type, final Context context) {
2422
throw new IllegalArgumentException("type: " + type.getName());
2523
}
2624

27-
if (context == null) {
28-
throw new IllegalArgumentException("context: null");
29-
}
30-
3125
this.type = type;
3226
this.random = new Random();
33-
this.context = context;
3427
}
3528

3629
@Override
3730
public T create(CustomizationContext customizationContext, Annotation[] annotations) {
38-
return context.preDefined(type, type.getEnumConstants()[random.nextInt(type.getEnumConstants().length)]);
31+
return type.getEnumConstants()[random.nextInt(type.getEnumConstants().length)];
3932
}
4033
}

src/main/java/com/github/nylle/javafixture/specimen/PrimitiveSpecimen.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ public class PrimitiveSpecimen<T> implements ISpecimen<T> {
1616
private final SpecimenType<T> type;
1717
private final PseudoRandom pseudoRandom;
1818
private final Configuration configuration;
19-
private final Context context;
2019

2120
public PrimitiveSpecimen(final SpecimenType<T> type, final Context context) {
2221

@@ -35,46 +34,45 @@ public PrimitiveSpecimen(final SpecimenType<T> type, final Context context) {
3534
this.type = type;
3635
this.pseudoRandom = new PseudoRandom();
3736
this.configuration = context.getConfiguration();
38-
this.context = context;
3937
}
4038

4139
@Override
4240
public T create(final CustomizationContext customizationContext, Annotation[] annotations) {
4341
if (type.asClass().equals(String.class)) {
4442
StringConstraints constraints = getStringConstraints(annotations);
45-
return context.preDefined(type, (T) pseudoRandom.nextString(constraints));
43+
return (T) pseudoRandom.nextString(constraints);
4644
}
4745

4846
if (type.asClass().equals(Boolean.class) || type.asClass().equals(boolean.class)) {
49-
return context.preDefined(type, (T) pseudoRandom.nextBool());
47+
return (T) pseudoRandom.nextBool();
5048
}
5149

5250
if (type.asClass().equals(Character.class) || type.asClass().equals(char.class)) {
53-
return context.preDefined(type, (T) pseudoRandom.nextChar());
51+
return (T) pseudoRandom.nextChar();
5452
}
5553

5654
if (type.asClass().equals(Byte.class) || type.asClass().equals(byte.class)) {
57-
return context.preDefined(type, (T) pseudoRandom.nextByte());
55+
return (T) pseudoRandom.nextByte();
5856
}
5957

6058
if (type.asClass().equals(Short.class) || type.asClass().equals(short.class)) {
61-
return context.preDefined(type, (T) pseudoRandom.nextShort(configuration.usePositiveNumbersOnly()));
59+
return (T) pseudoRandom.nextShort(configuration.usePositiveNumbersOnly());
6260
}
6361

6462
if (type.asClass().equals(Integer.class) || type.asClass().equals(int.class)) {
65-
return context.preDefined(type, (T) pseudoRandom.nextInt(configuration.usePositiveNumbersOnly()));
63+
return (T) pseudoRandom.nextInt(configuration.usePositiveNumbersOnly());
6664
}
6765

6866
if (type.asClass().equals(Long.class) || type.asClass().equals(long.class)) {
69-
return context.preDefined(type, (T) pseudoRandom.nextLong(configuration.usePositiveNumbersOnly()));
67+
return (T) pseudoRandom.nextLong(configuration.usePositiveNumbersOnly());
7068
}
7169

7270
if (type.asClass().equals(Float.class) || type.asClass().equals(float.class)) {
73-
return context.preDefined(type, (T) pseudoRandom.nextFloat(configuration.usePositiveNumbersOnly()));
71+
return (T) pseudoRandom.nextFloat(configuration.usePositiveNumbersOnly());
7472
}
7573

7674
if (type.asClass().equals(Double.class) || type.asClass().equals(double.class)) {
77-
return context.preDefined(type, (T) pseudoRandom.nextDouble(configuration.usePositiveNumbersOnly()));
75+
return (T) pseudoRandom.nextDouble(configuration.usePositiveNumbersOnly());
7876
}
7977

8078
throw new SpecimenException("Unsupported type: " + type);

src/main/java/com/github/nylle/javafixture/specimen/TimeSpecimen.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,41 +49,41 @@ public T create(final CustomizationContext customizationContext, Annotation[] an
4949
if (Temporal.class.isAssignableFrom(type.asClass())) {
5050
try {
5151
Method now = type.asClass().getMethod("now", Clock.class);
52-
return context.preDefined(type, (T) now.invoke(null, context.getConfiguration().getClock()));
52+
return (T) now.invoke(null, context.getConfiguration().getClock());
5353
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
5454
throw new SpecimenException("Unsupported type: " + type.asClass());
5555
}
5656
}
5757

5858
if (type.asClass().equals(java.util.Date.class)) {
59-
return context.preDefined(type, (T) java.sql.Timestamp.valueOf(LocalDateTime.now(context.getConfiguration().getClock())));
59+
return (T) java.sql.Timestamp.valueOf(LocalDateTime.now(context.getConfiguration().getClock()));
6060
}
6161

6262
if (type.asClass().equals(java.sql.Date.class)) {
63-
return context.preDefined(type, (T) java.sql.Date.valueOf(LocalDateTime.now(context.getConfiguration().getClock()).toLocalDate()));
63+
return (T) java.sql.Date.valueOf(LocalDateTime.now(context.getConfiguration().getClock()).toLocalDate());
6464
}
6565

6666
if (type.asClass().equals(MonthDay.class)) {
67-
return context.preDefined(type, (T) MonthDay.now(context.getConfiguration().getClock()));
67+
return (T) MonthDay.now(context.getConfiguration().getClock());
6868
}
6969

7070
if (type.asClass().equals(JapaneseEra.class)) {
71-
return context.preDefined(type, (T) JapaneseEra.values()[random.nextInt(JapaneseEra.values().length)]);
71+
return (T) JapaneseEra.values()[random.nextInt(JapaneseEra.values().length)];
7272
}
7373

7474
if (type.asClass().equals(ZoneOffset.class)) {
75-
return context.preDefined(type, (T) ZoneOffset.ofHours(new Random().nextInt(19)));
75+
return (T) ZoneOffset.ofHours(new Random().nextInt(19));
7676
}
7777
if (type.asClass().equals(Duration.class)) {
78-
return context.preDefined(type, (T) Duration.ofDays(random.nextInt()));
78+
return (T) Duration.ofDays(random.nextInt());
7979
}
8080

8181
if (type.asClass().equals(Period.class)) {
82-
return context.preDefined(type, (T) Period.ofDays(random.nextInt()));
82+
return (T) Period.ofDays(random.nextInt());
8383
}
8484

8585
if (type.asClass().equals(ZoneId.class)) {
86-
return context.preDefined(type, (T) ZoneId.of(ZoneId.getAvailableZoneIds().iterator().next()));
86+
return (T) ZoneId.of(ZoneId.getAvailableZoneIds().iterator().next());
8787
}
8888

8989
throw new SpecimenException("Unsupported type: " + type.asClass());
Lines changed: 7 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,46 @@
11
package com.github.nylle.javafixture.specimen;
22

3-
import com.github.nylle.javafixture.Configuration;
4-
import com.github.nylle.javafixture.Context;
53
import com.github.nylle.javafixture.SpecimenType;
64
import com.github.nylle.javafixture.testobjects.TestEnum;
75
import org.junit.jupiter.api.Test;
86

97
import java.lang.annotation.Annotation;
10-
import java.util.Map;
118

12-
import static com.github.nylle.javafixture.Configuration.configure;
139
import static com.github.nylle.javafixture.CustomizationContext.noContext;
14-
import static com.github.nylle.javafixture.Fixture.fixture;
1510
import static org.assertj.core.api.Assertions.assertThat;
11+
import static org.assertj.core.api.Assertions.assertThatCode;
1612
import static org.assertj.core.api.Assertions.assertThatThrownBy;
1713

1814
class EnumSpecimenTest {
1915

2016
@Test
2117
void typeIsRequired() {
22-
assertThatThrownBy(() -> new EnumSpecimen<>(null, new Context(configure())))
18+
assertThatThrownBy(() -> new EnumSpecimen<>(null ))
2319
.isInstanceOf(IllegalArgumentException.class)
2420
.hasMessageContaining("type: null");
2521
}
2622

2723
@Test
2824
void onlyEnumTypes() {
29-
assertThatThrownBy(() -> new EnumSpecimen<>(SpecimenType.fromClass(Object.class), new Context(configure())))
25+
assertThatThrownBy(() -> new EnumSpecimen<>(SpecimenType.fromClass(Object.class) ))
3026
.isInstanceOf(IllegalArgumentException.class)
3127
.hasMessageContaining("type: " + Object.class.getName());
3228
}
3329

3430
@Test
35-
void contextIsRequired() {
36-
assertThatThrownBy(() -> new EnumSpecimen<>(SpecimenType.fromClass(TestEnum.class), null))
37-
.isInstanceOf(IllegalArgumentException.class)
38-
.hasMessageContaining("context: null");
31+
void contextIsNotRequired() {
32+
assertThatCode(() -> new EnumSpecimen<>(SpecimenType.fromClass(TestEnum.class) ))
33+
.doesNotThrowAnyException();
3934
}
4035

4136
@Test
4237
void createEnum() {
43-
var sut = new EnumSpecimen<>(SpecimenType.fromClass(TestEnum.class), new Context(configure()));
38+
var sut = new EnumSpecimen<>(SpecimenType.fromClass(TestEnum.class) );
4439

4540
var actual = sut.create(noContext(), new Annotation[0]);
4641

4742
assertThat(actual).isInstanceOf(TestEnum.class);
4843
assertThat(actual.toString()).isIn("VALUE1", "VALUE2", "VALUE3");
4944
}
5045

51-
@Test
52-
void canBePredefined() {
53-
var expected = fixture().create(TestEnum.class);
54-
55-
var context = new Context(Configuration.configure(), Map.of(SpecimenType.fromClass(TestEnum.class), expected));
56-
57-
var sut = new EnumSpecimen<>(SpecimenType.fromClass(TestEnum.class), context);
58-
59-
var actual = sut.create(noContext(), new Annotation[0]);
60-
61-
assertThat(actual).isSameAs(expected);
62-
}
6346
}

src/test/java/com/github/nylle/javafixture/specimen/PrimitiveSpecimenTest.java

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
11
package com.github.nylle.javafixture.specimen;
22

3-
import com.github.nylle.javafixture.Configuration;
43
import com.github.nylle.javafixture.Context;
54
import com.github.nylle.javafixture.SpecimenType;
65
import com.github.nylle.javafixture.annotations.testcases.TestCase;
76
import com.github.nylle.javafixture.annotations.testcases.TestWithCases;
87
import org.junit.jupiter.api.Test;
98

109
import java.lang.annotation.Annotation;
11-
import java.util.Map;
1210

1311
import static com.github.nylle.javafixture.Configuration.configure;
1412
import static com.github.nylle.javafixture.CustomizationContext.noContext;
15-
import static com.github.nylle.javafixture.Fixture.fixture;
1613
import static com.github.nylle.javafixture.SpecimenType.fromClass;
1714
import static org.assertj.core.api.Assertions.assertThat;
1815
import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -130,26 +127,4 @@ void createDouble(boolean positiveOnly, double min, double max) {
130127
assertThat(actual).isBetween(min, max);
131128
}
132129

133-
@TestWithCases
134-
@TestCase(class1 = String.class)
135-
@TestCase(class1 = Boolean.class)
136-
@TestCase(class1 = Character.class)
137-
@TestCase(class1 = Byte.class)
138-
@TestCase(class1 = Short.class)
139-
@TestCase(class1 = Integer.class)
140-
@TestCase(class1 = Long.class)
141-
@TestCase(class1 = Float.class)
142-
@TestCase(class1 = Double.class)
143-
void canBePredefined(Class type) {
144-
var expected = fixture().create(type);
145-
146-
var context = new Context(Configuration.configure(), Map.of(SpecimenType.fromClass(type), expected));
147-
148-
var sut = new PrimitiveSpecimen<>(SpecimenType.fromClass(type), context);
149-
150-
var actual = sut.create(noContext(), new Annotation[0]);
151-
152-
assertThat(actual).isSameAs(expected);
153-
}
154-
155130
}

src/test/java/com/github/nylle/javafixture/specimen/TimeSpecimenTest.java

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import java.util.Map;
3737

3838
import static com.github.nylle.javafixture.CustomizationContext.noContext;
39-
import static com.github.nylle.javafixture.Fixture.fixture;
4039
import static org.assertj.core.api.Assertions.assertThat;
4140
import static org.assertj.core.api.Assertions.assertThatThrownBy;
4241
import static org.mockito.Mockito.when;
@@ -130,37 +129,4 @@ void createWithClock() {
130129
assertThat(actual).isEqualTo(Instant.MIN);
131130
}
132131

133-
@TestWithCases
134-
@TestCase(class1 = Instant.class)
135-
@TestCase(class1 = HijrahDate.class)
136-
@TestCase(class1 = JapaneseDate.class)
137-
@TestCase(class1 = LocalDate.class)
138-
@TestCase(class1 = LocalDateTime.class)
139-
@TestCase(class1 = LocalTime.class)
140-
@TestCase(class1 = MinguoDate.class)
141-
@TestCase(class1 = OffsetDateTime.class)
142-
@TestCase(class1 = OffsetTime.class)
143-
@TestCase(class1 = ThaiBuddhistDate.class)
144-
@TestCase(class1 = Year.class)
145-
@TestCase(class1 = YearMonth.class)
146-
@TestCase(class1 = ZonedDateTime.class)
147-
@TestCase(class1 = java.sql.Date.class)
148-
@TestCase(class1 = java.util.Date.class)
149-
@TestCase(class1 = Duration.class)
150-
@TestCase(class1 = JapaneseEra.class)
151-
@TestCase(class1 = MonthDay.class)
152-
@TestCase(class1 = Period.class)
153-
@TestCase(class1 = ZoneId.class)
154-
@TestCase(class1 = ZoneOffset.class)
155-
void canBePredefined(Class type) {
156-
var expected = fixture().create(type);
157-
158-
var context = new Context(Configuration.configure(), Map.of(SpecimenType.fromClass(type), expected));
159-
160-
var sut = new TimeSpecimen<>(SpecimenType.fromClass(type), context);
161-
162-
var actual = sut.create(noContext(), new Annotation[0]);
163-
164-
assertThat(actual).isSameAs(expected);
165-
}
166132
}

0 commit comments

Comments
 (0)