Skip to content

Commit 2818ed9

Browse files
authored
Make arg for generate Transformer Iterable rather than FakeSequence (#683)
1 parent 6c464a0 commit 2818ed9

File tree

11 files changed

+44
-153
lines changed

11 files changed

+44
-153
lines changed

src/main/java/net/datafaker/formats/Format.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,13 @@
22

33
import net.datafaker.sequence.FakeSequence;
44

5-
import java.util.List;
65

76
@Deprecated // Use Transformer
87
public class Format {
98
public static <T> Csv.CsvCollectionBasedBuilder<T> toCsv(FakeSequence<T> sequence) {
109
return new Csv.CsvCollectionBasedBuilder<T>().sequence(sequence);
1110
}
1211

13-
public static Csv.CsvColumnBasedBuilder<String, Csv.Column> toCsv(Csv.Column... columns) {
14-
return new Csv.CsvColumnBasedBuilder<String, Csv.Column>().columns(columns);
15-
}
16-
17-
public static Csv.CsvColumnBasedBuilder<String, Csv.Column> toCsv(List<Csv.Column> columns) {
18-
return new Csv.CsvColumnBasedBuilder<String, Csv.Column>().columns(columns);
19-
}
20-
2112
public static Json.JsonBuilder toJson() {
2213
return new Json.JsonBuilder();
2314
}

src/main/java/net/datafaker/transformations/CsvTransformer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ public CharSequence apply(IN input, Schema<IN, ?> schema) {
3838
}
3939

4040
@Override
41-
public String generate(FakeSequence<IN> input, Schema<IN, ?> schema) {
42-
if (input.isInfinite()) {
41+
public String generate(Iterable<IN> input, Schema<IN, ?> schema) {
42+
if (input instanceof FakeSequence && ((FakeSequence) input).isInfinite()) {
4343
throw new IllegalArgumentException("The sequence should be finite of size");
4444
}
4545

src/main/java/net/datafaker/transformations/JavaObjectTransformer.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,19 @@ public Object apply(Object input, Schema<Object, ?> schema) {
4040
}
4141

4242
@Override
43-
public Collection<Object> generate(FakeSequence<Object> input, Schema<Object, ?> schema) {
44-
if (input.isInfinite()) {
45-
throw new IllegalArgumentException("Should be finite size");
43+
public Collection<Object> generate(Iterable<Object> input, Schema<Object, ?> schema) {
44+
Collection<Object> collection;
45+
if (input instanceof FakeSequence) {
46+
if (((FakeSequence) input).isInfinite()) {
47+
throw new IllegalArgumentException("Should be finite size");
48+
}
49+
collection = new ArrayList<>(((FakeSequence<Object>) input).get());
50+
} else {
51+
collection = new ArrayList<>();
52+
for (Object o: input) {
53+
collection.add(o);
54+
}
4655
}
47-
Collection<Object> collection = new ArrayList<>(input.get());
4856
for (Object elem: collection) {
4957
apply(elem, schema);
5058
}

src/main/java/net/datafaker/transformations/JsonTransformer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ public String apply(IN input, Schema<IN, ?> schema) {
5050
}
5151

5252
@Override
53-
public String generate(FakeSequence<IN> input, Schema<IN, ?> schema) {
54-
if (input.isInfinite()) {
53+
public String generate(Iterable<IN> input, Schema<IN, ?> schema) {
54+
if (input instanceof FakeSequence && ((FakeSequence) input).isInfinite()) {
5555
throw new IllegalArgumentException("The sequence should be finite of size");
5656
}
5757

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package net.datafaker.transformations;
22

3-
import net.datafaker.sequence.FakeSequence;
4-
53
public interface Transformer<IN, OUT> {
64
String LINE_SEPARATOR = System.lineSeparator();
75

@@ -12,7 +10,7 @@ default OUT apply(IN input, Schema<IN, ?> schema, int rowId) {
1210
return apply(input, schema);
1311
}
1412

15-
OUT generate(FakeSequence<IN> input, final Schema<IN, ?> schema);
13+
OUT generate(Iterable<IN> input, final Schema<IN, ?> schema);
1614

1715
OUT generate(final Schema<IN, ?> schema, int limit);
1816
}

src/main/java/net/datafaker/transformations/XmlTransformer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ public CharSequence apply(IN input, Schema<IN, ?> schema) {
3030
}
3131

3232
@Override
33-
public String generate(FakeSequence<IN> input, Schema<IN, ?> schema) {
34-
if (input.isInfinite()) {
33+
public String generate(Iterable<IN> input, Schema<IN, ?> schema) {
34+
if (input instanceof FakeSequence && ((FakeSequence) input).isInfinite()) {
3535
throw new IllegalArgumentException("The sequence should be finite of size");
3636
}
3737

src/main/java/net/datafaker/transformations/YamlTransformer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ public CharSequence apply(IN input, Schema<IN, ?> schema) {
2424
}
2525

2626
@Override
27-
public String generate(FakeSequence<IN> input, Schema<IN, ?> schema) {
28-
if (input.isInfinite()) {
27+
public String generate(Iterable<IN> input, Schema<IN, ?> schema) {
28+
if (input instanceof FakeSequence && ((FakeSequence)input).isInfinite()) {
2929
throw new IllegalArgumentException("The sequence should be finite of size");
3030
}
3131

src/main/java/net/datafaker/transformations/sql/SqlTransformer.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import net.datafaker.transformations.SimpleField;
99
import net.datafaker.transformations.Transformer;
1010

11+
import java.util.ArrayList;
1112
import java.util.Collection;
1213
import java.util.List;
1314
import java.util.StringJoiner;
@@ -303,20 +304,27 @@ private void appendNameToQuery(StringBuilder sb, String name) {
303304
}
304305

305306
@Override
306-
public String generate(FakeSequence<IN> input, Schema<IN, ?> schema) {
307+
public String generate(Iterable<IN> input, Schema<IN, ?> schema) {
307308
if (schema.getFields().length == 0) {
308309
return EMPTY_RESULT;
309310
}
310-
if (input.isInfinite()) {
311+
if (input instanceof FakeSequence && ((FakeSequence) input).isInfinite()) {
311312
throw new IllegalArgumentException("The sequence should be finite of size");
312313
}
313314

314315
List<IN> inputs;
315316
if (input instanceof FakeStream) {
316-
Stream<IN> stream = input.get();
317+
Stream<IN> stream = ((FakeStream) input).get();
317318
inputs = stream.collect(Collectors.toList());
319+
} else if (input instanceof FakeSequence) {
320+
inputs = ((FakeSequence<Object>) input).get();
321+
} else if (input instanceof List) {
322+
inputs = (List<IN>) input;
318323
} else {
319-
inputs = input.get();
324+
inputs = new ArrayList<>();
325+
for (IN o: input) {
326+
inputs.add(o);
327+
}
320328
}
321329

322330
int limit = inputs.size();

src/test/java/net/datafaker/formats/CsvTest.java

Lines changed: 0 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010
import org.junit.jupiter.params.ParameterizedTest;
1111
import org.junit.jupiter.params.provider.ValueSource;
1212

13-
import java.util.ArrayList;
14-
import java.util.List;
1513
import java.util.Random;
1614

1715
import static net.datafaker.transformations.Field.field;
@@ -21,36 +19,6 @@
2119

2220
class CsvTest extends AbstractFakerTest {
2321

24-
@Test
25-
void csvTest() {
26-
final BaseFaker faker = new BaseFaker();
27-
String separator = "@@@";
28-
int limit = 20;
29-
String csv =
30-
Format.toCsv(
31-
Csv.Column.of("first_name", () -> faker.name().firstName()),
32-
Csv.Column.of("last_name", () -> faker.name().lastName()),
33-
Csv.Column.of("address", () -> faker.address().streetAddress()))
34-
.header(true)
35-
.separator(separator)
36-
.limit(limit)
37-
.build()
38-
.get();
39-
int numberOfLines = 0;
40-
int numberOfSeparator = 0;
41-
for (int i = 0; i < csv.length(); i++) {
42-
if (csv.regionMatches(i, LINE_SEPARATOR, 0, LINE_SEPARATOR.length())) {
43-
numberOfLines++;
44-
} else if (csv.regionMatches(i, separator, 0, separator.length())) {
45-
numberOfSeparator++;
46-
}
47-
}
48-
49-
assertThat(limit + 1).isEqualTo(numberOfLines); // limit + 1 line for header
50-
assertThat((limit + 1) * 2)
51-
.isEqualTo(numberOfSeparator); // number of lines * (number of columns - 1)
52-
}
53-
5422
@Test
5523
void csvTestNew() {
5624
final BaseFaker faker = new BaseFaker();
@@ -80,37 +48,6 @@ void csvTestNew() {
8048
.isEqualTo(numberOfSeparator); // number of lines * (number of columns - 1)*/
8149
}
8250

83-
@Test
84-
void csvTestWithQuotes() {
85-
String separator = "$$$";
86-
int limit = 20;
87-
final BaseFaker faker = new BaseFaker();
88-
List<Csv.Column> columns = new ArrayList<>();
89-
columns.add(Csv.Column.of("first_name", () -> faker.expression("#{Name.first_name}")));
90-
columns.add(Csv.Column.of("last_name", () -> faker.expression("#{Name.last_name}")));
91-
String csv =
92-
Format.toCsv(columns)
93-
.header(true)
94-
.separator(separator)
95-
.quote('%')
96-
.limit(limit)
97-
.build()
98-
.get();
99-
int numberOfLines = 0;
100-
int numberOfSeparator = 0;
101-
for (int i = 0; i < csv.length(); i++) {
102-
if (csv.regionMatches(i, LINE_SEPARATOR, 0, LINE_SEPARATOR.length())) {
103-
numberOfLines++;
104-
} else if (csv.regionMatches(i, separator, 0, separator.length())) {
105-
numberOfSeparator++;
106-
}
107-
}
108-
109-
assertThat(limit + 1).isEqualTo(numberOfLines); // limit + 1 line for header
110-
assertThat((limit + 1) * (columns.size() - 1))
111-
.isEqualTo(numberOfSeparator); // number of lines * (number of columns - 1)
112-
}
113-
11451
@Test
11552
void csvTestWithQuotesNew() {
11653
String separator = "$$$";
@@ -139,26 +76,6 @@ void csvTestWithQuotesNew() {
13976
.isEqualTo(numberOfSeparator); // number of lines * (number of columns - 1)
14077
}
14178

142-
@Test
143-
void testCsvWithComma() {
144-
145-
String csv =
146-
Format.toCsv(
147-
Csv.Column.of("values", () -> "1,2,3"),
148-
Csv.Column.of("title", () -> "The \"fabulous\" artist"))
149-
.header(true)
150-
.separator(",")
151-
.limit(1)
152-
.build()
153-
.get();
154-
155-
String expected =
156-
"\"values\",\"title\"" + LINE_SEPARATOR +
157-
"\"1,2,3\",\"The \"\"fabulous\"\" artist\"" + LINE_SEPARATOR;
158-
159-
assertThat(csv).isEqualTo(expected);
160-
}
161-
16279
@Test
16380
void testCsvWithCommaNew() {
16481
Schema<Object, ? extends CharSequence> schema =

src/test/java/net/datafaker/sequence/FakeCollectionTest.java

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import net.datafaker.formats.Format;
55
import net.datafaker.providers.base.Address;
66
import net.datafaker.providers.base.BaseFaker;
7-
import net.datafaker.providers.base.Name;
87
import net.datafaker.providers.base.Number;
8+
import net.datafaker.transformations.CsvTransformer;
99
import net.datafaker.transformations.JsonTransformer;
1010
import net.datafaker.transformations.Schema;
1111
import org.junit.jupiter.api.RepeatedTest;
@@ -167,32 +167,19 @@ void checkWrongArguments() {
167167
.hasMessage("Max length must be not less than min length and not negative");
168168
}
169169

170-
@Test
171-
void differentNumberOfHeadersAndColumns() {
172-
assertThatThrownBy(() -> Format.toCsv(
173-
faker.<Name>collection()
174-
.suppliers(faker::name)
175-
.minLen(3)
176-
.maxLen(5)
177-
.build())
178-
.headers(() -> "firstName", () -> "lastname")
179-
.columns(Name::firstName, Name::lastName, Name::fullName).build().get())
180-
.isInstanceOf(IllegalArgumentException.class);
181-
}
182-
183170
@Test
184171
void toCsv() {
185172
String separator = "$$$";
186173
int limit = 5;
187-
String csv = Format.toCsv(
188-
faker.<Data>collection().minLen(limit).maxLen(limit)
189-
.suppliers(BloodPressure::new, Glucose::new, Temperature::new)
190-
.build())
191-
.headers(() -> "name", () -> "value", () -> "range", () -> "unit")
192-
.columns(Data::name, Data::value, Data::range, Data::unit)
193-
.separator(separator)
194-
.build().get();
195-
174+
CsvTransformer<Data> csvTransformer = CsvTransformer.<Data>builder().header(true).separator(separator).build();
175+
String csv = csvTransformer.generate(
176+
faker.collection(BloodPressure::new, Glucose::new, Temperature::new)
177+
.len(limit).generate(),
178+
Schema.of(
179+
field("name", Data::name),
180+
field("value", Data::value),
181+
field("range", Data::range),
182+
field("unit", Data::unit)));
196183
int numberOfLines = 0;
197184
int numberOfSeparator = 0;
198185
for (int i = 0; i < csv.length(); i++) {
@@ -202,8 +189,7 @@ void toCsv() {
202189
numberOfSeparator++;
203190
}
204191
}
205-
206-
assertThat(limit + 1).isEqualTo(numberOfLines); // limit + 1 line for header
192+
assertThat(limit).isEqualTo(numberOfLines);
207193
assertThat((limit + 1) * (4 - 1)).isEqualTo(numberOfSeparator); // number of lines * (number of columns - 1)
208194
}
209195

0 commit comments

Comments
 (0)