Skip to content

Commit eb8779d

Browse files
authored
Merge pull request #53 from oubaydos/setGeneration
Set generation
2 parents 9496213 + 3206018 commit eb8779d

File tree

6 files changed

+109
-48
lines changed

6 files changed

+109
-48
lines changed

src/main/java/io/javarig/TypeEnum.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import io.javarig.generator.collection.list.ArrayListGenerator;
55
import io.javarig.generator.collection.map.HashMapGenerator;
66
import io.javarig.generator.collection.map.TreeMapGenerator;
7+
import io.javarig.generator.collection.set.HashSetGenerator;
8+
import io.javarig.generator.collection.set.LinkedHashSetGenerator;
9+
import io.javarig.generator.collection.set.TreeSetGenerator;
710
import io.javarig.generator.primitive.*;
811

912
import java.lang.reflect.Type;
@@ -31,6 +34,10 @@ public enum TypeEnum {
3134
TREE_MAP(TreeMap.class, TreeMapGenerator.class),
3235
LIST(List.class, ArrayListGenerator.class),
3336
ARRAY_LIST(ArrayList.class, ArrayListGenerator.class),
37+
SET(Set.class, HashSetGenerator.class),
38+
HASH_SET(HashSet.class, HashSetGenerator.class),
39+
LINKED_HASH_SET(LinkedHashSet.class, LinkedHashSetGenerator.class),
40+
TREE_SET(TreeSet.class, TreeSetGenerator.class),
3441
ENUM(null, EnumGenerator.class),
3542
ARRAY(null, ArrayGenerator.class),
3643
OBJECT(null, ObjectGenerator.class);
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package io.javarig.generator.collection.set;
2+
3+
import io.javarig.RandomInstanceGenerator;
4+
5+
import java.lang.reflect.Type;
6+
import java.util.HashSet;
7+
import java.util.Set;
8+
9+
public class HashSetGenerator extends SetGenerator{
10+
public HashSetGenerator(Type type, RandomInstanceGenerator randomInstanceGenerator) {
11+
super(type, randomInstanceGenerator);
12+
}
13+
14+
@SuppressWarnings({"rawtypes"})
15+
@Override
16+
public Class<? extends Set> getImplementationType() {
17+
return HashSet.class;
18+
}
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package io.javarig.generator.collection.set;
2+
3+
import io.javarig.RandomInstanceGenerator;
4+
5+
import java.lang.reflect.Type;
6+
import java.util.LinkedHashSet;
7+
import java.util.Set;
8+
9+
public class LinkedHashSetGenerator extends SetGenerator{
10+
public LinkedHashSetGenerator(Type type, RandomInstanceGenerator randomInstanceGenerator) {
11+
super(type, randomInstanceGenerator);
12+
}
13+
14+
@SuppressWarnings({"rawtypes"})
15+
@Override
16+
public Class<? extends Set> getImplementationType() {
17+
return LinkedHashSet.class;
18+
}
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package io.javarig.generator.collection.set;
2+
3+
import io.javarig.RandomInstanceGenerator;
4+
5+
import java.lang.reflect.Type;
6+
import java.util.Set;
7+
import java.util.TreeSet;
8+
9+
public class TreeSetGenerator extends SetGenerator{
10+
public TreeSetGenerator(Type type, RandomInstanceGenerator randomInstanceGenerator) {
11+
super(type, randomInstanceGenerator);
12+
}
13+
14+
@SuppressWarnings({"rawtypes"})
15+
@Override
16+
public Class<? extends Set> getImplementationType() {
17+
return TreeSet.class;
18+
}
19+
}

src/test/java/io/javarig/generation/javapredefinedtypes/collection/CollectionGenerationTest.java

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

src/test/java/io/javarig/generation/javapredefinedtypes/collection/ListGenerationTest.java renamed to src/test/java/io/javarig/generation/javapredefinedtypes/collection/SingleGenericTypeCollectionGenerationTest.java

Lines changed: 45 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -9,93 +9,105 @@
99
import lombok.extern.slf4j.Slf4j;
1010
import org.junit.jupiter.api.BeforeEach;
1111
import org.junit.jupiter.api.Test;
12+
import org.junit.jupiter.params.ParameterizedTest;
13+
import org.junit.jupiter.params.provider.MethodSource;
1214

1315
import java.lang.reflect.Type;
14-
import java.util.ArrayList;
15-
import java.util.List;
16+
import java.util.*;
1617

1718
import static org.assertj.core.api.Assertions.assertThat;
1819
import static org.assertj.core.api.Assertions.assertThatThrownBy;
19-
import static org.assertj.core.api.InstanceOfAssertFactories.LIST;
20+
import static org.assertj.core.api.InstanceOfAssertFactories.COLLECTION;
2021

2122
@Slf4j
22-
public class ListGenerationTest {
23+
public class SingleGenericTypeCollectionGenerationTest {
2324
private RandomInstanceGenerator randomInstanceGenerator;
25+
private static final Class<?>[] implementedCollectionClasses = {List.class, ArrayList.class, Set.class, HashSet.class, LinkedHashSet.class, TreeSet.class};
2426

2527
@BeforeEach
2628
public void setUp() {
2729
randomInstanceGenerator = new RandomInstanceGenerator();
2830
}
29-
@Test
30-
public void shouldReturnList() {
31+
private static Class<?>[] getImplementedCollectionClasses(){
32+
return SingleGenericTypeCollectionGenerationTest.implementedCollectionClasses;
33+
}
34+
35+
@ParameterizedTest
36+
@MethodSource("getImplementedCollectionClasses")
37+
public void shouldReturnCollectionOfAppropriateType(Class<?> collectionClass) {
3138
//given
3239
Class<?> type = String.class;
3340
//when
34-
Object generated = randomInstanceGenerator.generate(List.class, type);
41+
Object generated = randomInstanceGenerator.generate(collectionClass, type);
3542
//then
36-
log.info("shouldReturnList : {}", generated);
43+
log.info("shouldReturn{} : {}",collectionClass.getSimpleName(), generated);
3744
assertThat(generated).isNotNull();
38-
assertThat(generated).isInstanceOf(List.class);
45+
assertThat(generated).isInstanceOf(collectionClass);
3946

4047
//asserting type
41-
assertThat(generated).asInstanceOf(LIST).first().isInstanceOf(type);
48+
assertThat(generated).asInstanceOf(COLLECTION).first().isInstanceOf(type);
4249
}
4350

44-
@Test
45-
public void shouldReturnListWithExactSize() {
51+
@ParameterizedTest
52+
@MethodSource("getImplementedCollectionClasses")
53+
public void shouldReturnTheAppropriateCollectionWithExactSize(Class<?> collectionClass) {
4654
//given
4755
int size = 20;
4856
Class<?> type = String.class;
4957
//when
50-
Object generated = randomInstanceGenerator.generate(List.class, size, type);
58+
Object generated = randomInstanceGenerator.generate(collectionClass, size, type);
5159
//then
52-
log.info("shouldReturnListWithExactSize : {}", generated);
60+
log.info("shouldReturn{}WithExactSize : {}",collectionClass.getSimpleName(), generated);
5361
assertThat(generated).isNotNull();
54-
assertThat(generated).isInstanceOf(List.class);
55-
assertThat(generated).asInstanceOf(LIST).hasSize(size);
62+
assertThat(generated).isInstanceOf(collectionClass);
63+
assertThat(generated).asInstanceOf(COLLECTION).hasSize(size);
5664

5765
//asserting type
58-
assertThat(generated).asInstanceOf(LIST).first().isInstanceOf(type);
66+
assertThat(generated).asInstanceOf(COLLECTION).first().isInstanceOf(type);
5967
}
6068

61-
@Test
62-
public void shouldReturnListWithSizeBetween() {
69+
@ParameterizedTest
70+
@MethodSource("getImplementedCollectionClasses")
71+
public void shouldReturnTheAppropriateCollectionWithSizeBetween(Class<?> collectionClass) {
6372
//given
6473
int minSize = 20;
6574
int maxSize = 40;
6675
Class<?> type = String.class;
6776
//when
68-
Object generated = randomInstanceGenerator.generate(List.class, minSize, maxSize, type);
77+
Object generated = randomInstanceGenerator.generate(collectionClass, minSize, maxSize, type);
6978
//then
7079
log.info("shouldReturnListWithSizeBetween : {}", generated);
7180
assertThat(generated).isNotNull();
72-
assertThat(generated).isInstanceOf(List.class);
73-
assertThat(generated).asInstanceOf(LIST).hasSizeBetween(minSize, maxSize);
81+
assertThat(generated).isInstanceOf(collectionClass);
82+
assertThat(generated).asInstanceOf(COLLECTION).hasSizeBetween(minSize, maxSize);
7483

7584
//asserting type
76-
assertThat(generated).asInstanceOf(LIST).first().isInstanceOf(type);
85+
assertThat(generated).asInstanceOf(COLLECTION).first().isInstanceOf(type);
7786
}
78-
@Test
79-
public void shouldThrowInvalidGenericParamsNumberExceptionWhenTryingToGenerateAListWithAZeroGenericParams() {
87+
@ParameterizedTest
88+
@MethodSource("getImplementedCollectionClasses")
89+
public void shouldThrowInvalidGenericParamsNumberExceptionWhenTryingToGenerateACollectionWithAZeroGenericParams(Class<?> collectionClass) {
8090
int required = 1;
81-
assertThatThrownBy(() -> randomInstanceGenerator.generate(List.class))
91+
assertThatThrownBy(() -> randomInstanceGenerator.generate(collectionClass))
8292
.isInstanceOf(InvalidGenericParametersNumberException.class)
8393
.hasMessage("invalid number of generic parameters, required %d and 0 was found".formatted(required));
8494
}
8595

86-
@Test
87-
public void shouldThrowInvalidGenericParamsNumberExceptionWhenTryingToGenerateAListWithAMoreThanOneGenericParams() {
96+
@ParameterizedTest
97+
@MethodSource("getImplementedCollectionClasses")
98+
public void shouldThrowInvalidGenericParamsNumberExceptionWhenTryingToGenerateACollectionWithAMoreThanOneGenericParams(Class<?> collectionClass) {
8899
int required = 1;
89100
Type[] genericParams = new Type[]{String.class, Integer.class};
90-
assertThatThrownBy(() -> randomInstanceGenerator.generate(List.class, genericParams))
101+
assertThatThrownBy(() -> randomInstanceGenerator.generate(collectionClass, genericParams))
91102
.isInstanceOf(InvalidGenericParametersNumberException.class)
92-
.hasMessage("invalid number of generic parameters, required %d and %d was found".formatted(required, genericParams.length));
103+
.hasMessage("invalid number of generic parameters, required %d and %d was found".formatted(required, genericParams.length)); // FIXME is this how should we check for message ? it would be better if we checked a type rather than a string that could be changed in the future without necessarily breaking the code
93104
}
94-
@Test
95-
public void shouldThrowIllegalArgumentExceptionGivenMinSizeEqualsMaxSize() {
105+
@ParameterizedTest
106+
@MethodSource("getImplementedCollectionClasses")
107+
public void shouldThrowIllegalArgumentExceptionGivenMinSizeEqualsMaxSize(Class<?> collectionClass) {
96108
int size = 30;
97109
assertThatThrownBy(() -> {//when
98-
randomInstanceGenerator.generate(ArrayList.class, size, size);
110+
randomInstanceGenerator.generate(collectionClass, size, size);
99111
}).isInstanceOf(IllegalArgumentException.class)
100112
.hasMessage("Start value must be smaller than end value.");
101113
}

0 commit comments

Comments
 (0)