Skip to content

Commit 1ae6295

Browse files
committed
Delete collectionGenerator interface, and move maxSizeExclusive and minSizeInclusive configs to RandomInstanceGenerator class
1 parent d8c677a commit 1ae6295

9 files changed

+39
-70
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,6 @@ target/
2424
*.iml
2525
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
2626
hs_err_pid*
27+
28+
# vscode files
29+
.vscode/

src/main/java/io/javarig/RandomInstanceGenerator.java

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,27 @@
22

33
import io.javarig.exception.InstanceGenerationException;
44
import io.javarig.exception.NestedObjectRecursionException;
5-
import io.javarig.generator.CollectionGenerator;
65
import io.javarig.generator.TypeGenerator;
6+
import lombok.Getter;
77
import lombok.NonNull;
88
import org.apache.commons.lang3.Validate;
99

1010
import java.lang.reflect.Type;
1111
import java.util.Stack;
12-
import java.util.function.Consumer;
1312

13+
@Getter
1414
public class RandomInstanceGenerator {
15-
15+
1616
private final Stack<Type> objectStack = new Stack<>();
1717
private final TypeGeneratorFactory typeGeneratorFactory = new TypeGeneratorFactory();
1818

19-
@SuppressWarnings({"unchecked"})
20-
private synchronized <T> T generate(Type type, Consumer<TypeGenerator> generatorSetup) throws InstanceGenerationException {
21-
checkForRecursion(type);
22-
objectStack.push(type);
23-
TypeGenerator generator = typeGeneratorFactory.getGenerator(type, this);
24-
generatorSetup.accept(generator);
25-
T generated = (T) generator.generate();
26-
objectStack.pop();
27-
return generated;
28-
}
19+
// default values
20+
public final static int DEFAULT_MAX_SIZE_EXCLUSIVE = 15;
21+
public final static int DEFAULT_MIN_SIZE_INCLUSIVE = 5;
22+
23+
// configurations
24+
private int maxSizeExclusive = DEFAULT_MAX_SIZE_EXCLUSIVE;
25+
private int minSizeInclusive = DEFAULT_MIN_SIZE_INCLUSIVE;
2926

3027
/**
3128
* generate a random instance of the given type
@@ -34,9 +31,14 @@ private synchronized <T> T generate(Type type, Consumer<TypeGenerator> generator
3431
* @throws InstanceGenerationException if the instance cannot be generated for some reason (class doesn't have
3532
* a default constructor , class have a non-public default constructor , setter cannot be invoked ... )
3633
*/
34+
@SuppressWarnings({"unchecked"})
3735
public <T> T generate(@NonNull Type objectType) throws InstanceGenerationException {
38-
return generate(objectType, ignore -> {
39-
});
36+
checkForRecursion(objectType);
37+
objectStack.push(objectType);
38+
TypeGenerator generator = typeGeneratorFactory.getGenerator(objectType, this);
39+
T generated = (T) generator.generate();
40+
objectStack.pop();
41+
return generated;
4042
}
4143

4244
/**
@@ -52,11 +54,8 @@ public <T> T generate(
5254
int collectionSize
5355
) throws InstanceGenerationException {
5456
validateSize(collectionSize);
55-
return generate(type, generator -> {
56-
if(generator instanceof CollectionGenerator collectionGenerator){
57-
collectionGenerator.setSize(collectionSize);
58-
}
59-
});
57+
setSize(collectionSize);
58+
return generate(type);
6059
}
6160

6261
/**
@@ -72,12 +71,9 @@ public <T> T generate(@NonNull Type objectType,
7271
int maxSizeExclusive
7372
) throws InstanceGenerationException {
7473
validateSize(minSizeInclusive, maxSizeExclusive);
75-
return generate(objectType, generator -> {
76-
if(generator instanceof CollectionGenerator collectionGenerator){
77-
collectionGenerator.setMinSizeInclusive(minSizeInclusive);
78-
collectionGenerator.setMaxSizeExclusive(maxSizeExclusive);
79-
}
80-
});
74+
this.maxSizeExclusive = maxSizeExclusive;
75+
this.minSizeInclusive = minSizeInclusive;
76+
return generate(objectType);
8177
}
8278

8379
/**
@@ -154,4 +150,9 @@ private void validateSize(int size) {
154150
Validate.isTrue(size >= 0, "Size must be non-negative.");
155151
}
156152

153+
private void setSize(int size){
154+
this.maxSizeExclusive = size + 1;
155+
this.minSizeInclusive = size;
156+
}
157+
157158
}

src/main/java/io/javarig/generator/ArrayGenerator.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@
1313

1414
@Setter
1515
@Getter
16-
public class ArrayGenerator extends TypeGenerator implements CollectionGenerator {
17-
private int minSizeInclusive = DEFAULT_MIN_SIZE_INCLUSIVE;
18-
private int maxSizeExclusive = DEFAULT_MAX_SIZE_EXCLUSIVE;
16+
public class ArrayGenerator extends TypeGenerator {
1917

2018
public ArrayGenerator(Type type, RandomInstanceGenerator randomInstanceGenerator) {
2119
super(type, randomInstanceGenerator);
@@ -37,7 +35,7 @@ private Object generatePrimitiveArray(Class<?> primitiveType) {
3735

3836
private Object[] generateArray(Class<?> arrayParameterType) {
3937
List<Object> objectList = getRandomInstanceGenerator()
40-
.generate(List.class, getMinSizeInclusive(), getMaxSizeExclusive(), arrayParameterType);
38+
.generate(List.class, getRandomInstanceGenerator().getMinSizeInclusive(), getRandomInstanceGenerator().getMaxSizeExclusive(), arrayParameterType);
4139
Object[] arrayInstance = (Object[]) Array.newInstance(arrayParameterType, 0);
4240
arrayInstance = objectList.toArray(arrayInstance);
4341
return arrayInstance;

src/main/java/io/javarig/generator/CollectionGenerator.java

Lines changed: 0 additions & 23 deletions
This file was deleted.

src/main/java/io/javarig/generator/StringGenerator.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,13 @@
99

1010
@Setter
1111
@Getter
12-
public class StringGenerator extends TypeGenerator implements CollectionGenerator {
13-
private int minSizeInclusive = DEFAULT_MIN_SIZE_INCLUSIVE;
14-
private int maxSizeExclusive = DEFAULT_MAX_SIZE_EXCLUSIVE;
15-
12+
public class StringGenerator extends TypeGenerator {
1613
public StringGenerator(Type type, RandomInstanceGenerator randomInstanceGenerator) {
1714
super(type, randomInstanceGenerator);
1815
}
1916

2017
@Override
2118
public String generate() {
22-
return RandomStringUtils.randomAlphanumeric(this.getMinSizeInclusive(), this.getMaxSizeExclusive());
19+
return RandomStringUtils.randomAlphanumeric(getRandomInstanceGenerator().getMinSizeInclusive(), getRandomInstanceGenerator().getMaxSizeExclusive());
2320
}
2421
}
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
package io.javarig.generator.collection;
22

3-
import io.javarig.generator.CollectionGenerator;
43
import io.javarig.generator.GenericTypeGenerator;
54

65

7-
public interface GenericCollectionGenerator<T> extends CollectionGenerator, GenericTypeGenerator {
6+
public interface GenericCollectionGenerator<T> extends GenericTypeGenerator {
87
Class<? extends T> getImplementationType();
98

109
}

src/main/java/io/javarig/generator/collection/SingleGenericTypeCollectionGenerator.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
@SuppressWarnings({"rawtypes", "unchecked"})
1717
public abstract class SingleGenericTypeCollectionGenerator<T extends Collection> extends TypeGenerator implements GenericCollectionGenerator<T> {
1818
private final static int NUMBER_OF_GENERIC_PARAMS = 1;
19-
private int minSizeInclusive = DEFAULT_MIN_SIZE_INCLUSIVE;
20-
private int maxSizeExclusive = DEFAULT_MAX_SIZE_EXCLUSIVE;
2119

2220
public SingleGenericTypeCollectionGenerator(Type type, RandomInstanceGenerator randomInstanceGenerator) {
2321
super(type, randomInstanceGenerator);
@@ -30,7 +28,7 @@ public int getNumberOfGenericParams() {
3028

3129
@Override
3230
public T generate() throws InstanceGenerationException {
33-
int randomSize = getRandom().nextInt(getMinSizeInclusive(), getMaxSizeExclusive());
31+
int randomSize = getRandom().nextInt(getRandomInstanceGenerator().getMinSizeInclusive(), getRandomInstanceGenerator().getMaxSizeExclusive());
3432
checkIfValidNumberOfGenericArguments(getType());
3533
ParameterizedType parameterizedType = (ParameterizedType) getType();
3634
Type listParameterType = parameterizedType.getActualTypeArguments()[0];

src/main/java/io/javarig/generator/collection/map/MapGenerator.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
@SuppressWarnings({"rawtypes", "unchecked"})
2121
public abstract class MapGenerator extends TypeGenerator implements GenericCollectionGenerator<Map> {
2222
private final static int NUMBER_OF_GENERIC_PARAMS = 2;
23-
private int minSizeInclusive = DEFAULT_MIN_SIZE_INCLUSIVE;
24-
private int maxSizeExclusive = DEFAULT_MAX_SIZE_EXCLUSIVE;
2523

2624
public MapGenerator(Type type, RandomInstanceGenerator randomInstanceGenerator) {
2725
super(type, randomInstanceGenerator);
@@ -35,10 +33,9 @@ public int getNumberOfGenericParams() {
3533
@Override
3634
public Map<Object, Object> generate() throws InstanceGenerationException {
3735
checkIfValidNumberOfGenericArguments(getType());
38-
int size = getRandom().nextInt(getMinSizeInclusive(), getMaxSizeExclusive());
36+
int size = getRandom().nextInt(getRandomInstanceGenerator().getMinSizeInclusive(), getRandomInstanceGenerator().getMaxSizeExclusive());
3937
ParameterizedType parameterizedType = (ParameterizedType) getType();
4038
return generate(parameterizedType, size);
41-
4239
}
4340

4441
/**

src/test/java/io/javarig/generation/ObjectGenerationTest.java

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

33
import io.javarig.RandomInstanceGenerator;
44
import io.javarig.exception.*;
5-
import io.javarig.generator.CollectionGenerator;
65
import io.javarig.testclasses.*;
76
import lombok.extern.slf4j.Slf4j;
87
import org.junit.jupiter.api.BeforeEach;
@@ -165,7 +164,7 @@ public void shouldGenerateObjectWithFieldsContainingSetterPrefix() {
165164
.extracting(ClassWithFieldContainingSetterPrefix::getSettersList)
166165
.asList()
167166
.isNotNull()
168-
.hasSizeBetween(CollectionGenerator.DEFAULT_MIN_SIZE_INCLUSIVE, CollectionGenerator.DEFAULT_MAX_SIZE_EXCLUSIVE)// could be better if we had access to collectionGenerator defaultMin defaultMax size as public static fields
167+
.hasSizeBetween(RandomInstanceGenerator.DEFAULT_MIN_SIZE_INCLUSIVE, RandomInstanceGenerator.DEFAULT_MAX_SIZE_EXCLUSIVE)// could be better if we had access to collectionGenerator defaultMin defaultMax size as public static fields
169168
.element(0)
170169
.isNotNull()
171170
.asString()
@@ -205,7 +204,7 @@ public void shouldGenerateAGenericClass(Type genericType) {
205204
.extracting(GenericTestClass::getList)
206205
.asList()
207206
.isNotNull()
208-
.hasSizeBetween(CollectionGenerator.DEFAULT_MIN_SIZE_INCLUSIVE, CollectionGenerator.DEFAULT_MAX_SIZE_EXCLUSIVE)// could be better if we had access to collectionGenerator defaultMin defaultMax size as public static fields
207+
.hasSizeBetween(RandomInstanceGenerator.DEFAULT_MIN_SIZE_INCLUSIVE, RandomInstanceGenerator.DEFAULT_MAX_SIZE_EXCLUSIVE)// could be better if we had access to collectionGenerator defaultMin defaultMax size as public static fields
209208
.element(0)
210209
.isInstanceOf((Class<?>) genericType);
211210
}

0 commit comments

Comments
 (0)