Skip to content

Commit ab453cf

Browse files
committed
create a seperate config class
1 parent 4edc8e1 commit ab453cf

9 files changed

+62
-32
lines changed

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

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,31 @@
11
package io.javarig;
22

3+
import io.javarig.config.JavaRIGConfig;
34
import io.javarig.exception.InstanceGenerationException;
45
import io.javarig.exception.NestedObjectRecursionException;
56
import io.javarig.generator.TypeGenerator;
67
import lombok.AllArgsConstructor;
7-
import lombok.Builder;
88
import lombok.Getter;
9-
import lombok.NoArgsConstructor;
109
import lombok.NonNull;
10+
import lombok.RequiredArgsConstructor;
11+
1112
import org.apache.commons.lang3.Validate;
1213

1314
import java.lang.reflect.Type;
1415
import java.util.Stack;
1516

17+
@RequiredArgsConstructor
1618
@Getter
17-
@Builder
18-
@NoArgsConstructor
19-
@AllArgsConstructor
2019
public class RandomInstanceGenerator {
21-
20+
2221
private final Stack<Type> objectStack = new Stack<>();
2322
private final TypeGeneratorFactory typeGeneratorFactory = new TypeGeneratorFactory();
23+
private final JavaRIGConfig generalConfig;
24+
private JavaRIGConfig oneTimeConfig = null;
2425

25-
// default values
26-
public final static int DEFAULT_MAX_SIZE_EXCLUSIVE = 15;
27-
public final static int DEFAULT_MIN_SIZE_INCLUSIVE = 5;
28-
29-
// configurations
30-
@Builder.Default private int maxSizeExclusive = DEFAULT_MAX_SIZE_EXCLUSIVE;
31-
@Builder.Default private int minSizeInclusive = DEFAULT_MIN_SIZE_INCLUSIVE;
26+
public RandomInstanceGenerator() {
27+
this.generalConfig = JavaRIGConfig.builder().build();
28+
}
3229

3330
/**
3431
* generate a random instance of the given type
@@ -60,8 +57,11 @@ public <T> T generate(
6057
int collectionSize
6158
) throws InstanceGenerationException {
6259
validateSize(collectionSize);
63-
setSize(collectionSize);
64-
return generate(type);
60+
JavaRIGConfig oneTimeConfig = JavaRIGConfig.builder()
61+
.maxSizeExclusive(collectionSize + 1)
62+
.minSizeInclusive(collectionSize)
63+
.build();
64+
return generateWithOneTimeConfig(type, oneTimeConfig);
6565
}
6666

6767
/**
@@ -73,13 +73,15 @@ public <T> T generate(
7373
* a default constructor , class have a non-public default constructor , setter cannot be invoked ... )
7474
*/
7575
public <T> T generate(@NonNull Type objectType,
76-
int minSizeInclusive,
77-
int maxSizeExclusive
76+
int minSizeInclusive,
77+
int maxSizeExclusive
7878
) throws InstanceGenerationException {
7979
validateSize(minSizeInclusive, maxSizeExclusive);
80-
this.maxSizeExclusive = maxSizeExclusive;
81-
this.minSizeInclusive = minSizeInclusive;
82-
return generate(objectType);
80+
JavaRIGConfig oneTimeConfig = JavaRIGConfig.builder()
81+
.maxSizeExclusive(maxSizeExclusive)
82+
.minSizeInclusive(minSizeInclusive)
83+
.build();
84+
return generateWithOneTimeConfig(objectType, oneTimeConfig);
8385
}
8486

8587
/**
@@ -98,7 +100,6 @@ public <T> T generate(
98100
return generate(parameterizedType);
99101
}
100102

101-
102103
/**
103104
* generate a random instance of a generic collection with a fixed size
104105
*
@@ -134,6 +135,13 @@ public <T> T generate(
134135
return generate(parameterizedType, minSizeInclusive, maxSizeExclusive);
135136
}
136137

138+
private <T> T generateWithOneTimeConfig(@NonNull Type type, JavaRIGConfig oneTimeConfig) {
139+
this.oneTimeConfig = oneTimeConfig;
140+
T generatedObject = generate(type);
141+
this.oneTimeConfig = null;
142+
return generatedObject;
143+
}
144+
137145
/**
138146
* check if type exists in objectStack, if so then object can't be generated because there is recursion
139147
* in this object's fields (there is a field that it's instantiation depends on owner object)
@@ -156,9 +164,4 @@ private void validateSize(int size) {
156164
Validate.isTrue(size >= 0, "Size must be non-negative.");
157165
}
158166

159-
private void setSize(int size){
160-
this.maxSizeExclusive = size + 1;
161-
this.minSizeInclusive = size;
162-
}
163-
164167
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package io.javarig.config;
2+
3+
public class DefaultConfigValues {
4+
public final static int DEFAULT_MAX_SIZE_EXCLUSIVE = 15;
5+
public final static int DEFAULT_MIN_SIZE_INCLUSIVE = 5;
6+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package io.javarig.config;
2+
3+
import lombok.Builder;
4+
import lombok.Getter;
5+
6+
@Getter
7+
@Builder
8+
public class JavaRIGConfig {
9+
@Builder.Default private int maxSizeExclusive = DefaultConfigValues.DEFAULT_MAX_SIZE_EXCLUSIVE;
10+
@Builder.Default private int minSizeInclusive = DefaultConfigValues.DEFAULT_MIN_SIZE_INCLUSIVE;
11+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ private Object generatePrimitiveArray(Class<?> primitiveType) {
3535

3636
private Object[] generateArray(Class<?> arrayParameterType) {
3737
List<Object> objectList = getRandomInstanceGenerator()
38-
.generate(List.class, getRandomInstanceGenerator().getMinSizeInclusive(), getRandomInstanceGenerator().getMaxSizeExclusive(), arrayParameterType);
38+
.generate(List.class, getConfig().getMinSizeInclusive(), getConfig().getMaxSizeExclusive(), arrayParameterType);
3939
Object[] arrayInstance = (Object[]) Array.newInstance(arrayParameterType, 0);
4040
arrayInstance = objectList.toArray(arrayInstance);
4141
return arrayInstance;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ public StringGenerator(Type type, RandomInstanceGenerator randomInstanceGenerato
1616

1717
@Override
1818
public String generate() {
19-
return RandomStringUtils.randomAlphanumeric(getRandomInstanceGenerator().getMinSizeInclusive(), getRandomInstanceGenerator().getMaxSizeExclusive());
19+
return RandomStringUtils.randomAlphanumeric(getConfig().getMinSizeInclusive(), getConfig().getMaxSizeExclusive());
2020
}
2121
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.javarig.generator;
22

33
import io.javarig.RandomInstanceGenerator;
4+
import io.javarig.config.JavaRIGConfig;
45
import io.javarig.exception.InstanceGenerationException;
56
import lombok.Getter;
67
import lombok.RequiredArgsConstructor;
@@ -19,6 +20,14 @@ public abstract class TypeGenerator {
1920
private final Random random = new Random();
2021
private final Type type;
2122
private final RandomInstanceGenerator randomInstanceGenerator;
23+
24+
protected JavaRIGConfig getConfig(){
25+
if(getRandomInstanceGenerator().getOneTimeConfig() != null) {
26+
return getRandomInstanceGenerator().getOneTimeConfig();
27+
}
28+
return getRandomInstanceGenerator().getGeneralConfig();
29+
}
30+
2231
/**
2332
* generates a random object, its type is known from the extending class
2433
*/

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public int getNumberOfGenericParams() {
2828

2929
@Override
3030
public T generate() throws InstanceGenerationException {
31-
int randomSize = getRandom().nextInt(getRandomInstanceGenerator().getMinSizeInclusive(), getRandomInstanceGenerator().getMaxSizeExclusive());
31+
int randomSize = getRandom().nextInt(getConfig().getMinSizeInclusive(), getConfig().getMaxSizeExclusive());
3232
checkIfValidNumberOfGenericArguments(getType());
3333
ParameterizedType parameterizedType = (ParameterizedType) getType();
3434
Type listParameterType = parameterizedType.getActualTypeArguments()[0];

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public int getNumberOfGenericParams() {
3333
@Override
3434
public Map<Object, Object> generate() throws InstanceGenerationException {
3535
checkIfValidNumberOfGenericArguments(getType());
36-
int size = getRandom().nextInt(getRandomInstanceGenerator().getMinSizeInclusive(), getRandomInstanceGenerator().getMaxSizeExclusive());
36+
int size = getRandom().nextInt(getConfig().getMinSizeInclusive(), getConfig().getMaxSizeExclusive());
3737
ParameterizedType parameterizedType = (ParameterizedType) getType();
3838
return generate(parameterizedType, size);
3939
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.javarig.generation;
22

33
import io.javarig.RandomInstanceGenerator;
4+
import io.javarig.config.DefaultConfigValues;
45
import io.javarig.exception.*;
56
import io.javarig.testclasses.*;
67
import lombok.extern.slf4j.Slf4j;
@@ -164,7 +165,7 @@ public void shouldGenerateObjectWithFieldsContainingSetterPrefix() {
164165
.extracting(ClassWithFieldContainingSetterPrefix::getSettersList)
165166
.asList()
166167
.isNotNull()
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
168+
.hasSizeBetween(DefaultConfigValues.DEFAULT_MIN_SIZE_INCLUSIVE, DefaultConfigValues.DEFAULT_MAX_SIZE_EXCLUSIVE)// could be better if we had access to collectionGenerator defaultMin defaultMax size as public static fields
168169
.element(0)
169170
.isNotNull()
170171
.asString()
@@ -204,7 +205,7 @@ public void shouldGenerateAGenericClass(Type genericType) {
204205
.extracting(GenericTestClass::getList)
205206
.asList()
206207
.isNotNull()
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
208+
.hasSizeBetween(DefaultConfigValues.DEFAULT_MIN_SIZE_INCLUSIVE, DefaultConfigValues.DEFAULT_MAX_SIZE_EXCLUSIVE)// could be better if we had access to collectionGenerator defaultMin defaultMax size as public static fields
208209
.element(0)
209210
.isInstanceOf((Class<?>) genericType);
210211
}

0 commit comments

Comments
 (0)