Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 0 additions & 9 deletions src/main/java/net/datafaker/formats/Format.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,13 @@

import net.datafaker.sequence.FakeSequence;

import java.util.List;

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

public static Csv.CsvColumnBasedBuilder<String, Csv.Column> toCsv(Csv.Column... columns) {
return new Csv.CsvColumnBasedBuilder<String, Csv.Column>().columns(columns);
}

public static Csv.CsvColumnBasedBuilder<String, Csv.Column> toCsv(List<Csv.Column> columns) {
return new Csv.CsvColumnBasedBuilder<String, Csv.Column>().columns(columns);
}

public static Json.JsonBuilder toJson() {
return new Json.JsonBuilder();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ public CharSequence apply(IN input, Schema<IN, ?> schema) {
}

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,19 @@ public Object apply(Object input, Schema<Object, ?> schema) {
}

@Override
public Collection<Object> generate(FakeSequence<Object> input, Schema<Object, ?> schema) {
if (input.isInfinite()) {
throw new IllegalArgumentException("Should be finite size");
public Collection<Object> generate(Iterable<Object> input, Schema<Object, ?> schema) {
Collection<Object> collection;
if (input instanceof FakeSequence) {
if (((FakeSequence) input).isInfinite()) {
throw new IllegalArgumentException("Should be finite size");
}
collection = new ArrayList<>(((FakeSequence<Object>) input).get());
} else {
collection = new ArrayList<>();
for (Object o: input) {
collection.add(o);
}
}
Collection<Object> collection = new ArrayList<>(input.get());
for (Object elem: collection) {
apply(elem, schema);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ public String apply(IN input, Schema<IN, ?> schema) {
}

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

Expand Down
4 changes: 1 addition & 3 deletions src/main/java/net/datafaker/transformations/Transformer.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package net.datafaker.transformations;

import net.datafaker.sequence.FakeSequence;

public interface Transformer<IN, OUT> {
String LINE_SEPARATOR = System.lineSeparator();

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

OUT generate(FakeSequence<IN> input, final Schema<IN, ?> schema);
OUT generate(Iterable<IN> input, final Schema<IN, ?> schema);

OUT generate(final Schema<IN, ?> schema, int limit);
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ public CharSequence apply(IN input, Schema<IN, ?> schema) {
}

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ public CharSequence apply(IN input, Schema<IN, ?> schema) {
}

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import net.datafaker.transformations.SimpleField;
import net.datafaker.transformations.Transformer;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.StringJoiner;
Expand Down Expand Up @@ -303,20 +304,27 @@ private void appendNameToQuery(StringBuilder sb, String name) {
}

@Override
public String generate(FakeSequence<IN> input, Schema<IN, ?> schema) {
public String generate(Iterable<IN> input, Schema<IN, ?> schema) {
if (schema.getFields().length == 0) {
return EMPTY_RESULT;
}
if (input.isInfinite()) {
if (input instanceof FakeSequence && ((FakeSequence) input).isInfinite()) {
throw new IllegalArgumentException("The sequence should be finite of size");
}

List<IN> inputs;
if (input instanceof FakeStream) {
Stream<IN> stream = input.get();
Stream<IN> stream = ((FakeStream) input).get();
inputs = stream.collect(Collectors.toList());
} else if (input instanceof FakeSequence) {
inputs = ((FakeSequence<Object>) input).get();
} else if (input instanceof List) {
inputs = (List<IN>) input;
} else {
inputs = input.get();
inputs = new ArrayList<>();
for (IN o: input) {
inputs.add(o);
}
}

int limit = inputs.size();
Expand Down
83 changes: 0 additions & 83 deletions src/test/java/net/datafaker/formats/CsvTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

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

class CsvTest extends AbstractFakerTest {

@Test
void csvTest() {
final BaseFaker faker = new BaseFaker();
String separator = "@@@";
int limit = 20;
String csv =
Format.toCsv(
Csv.Column.of("first_name", () -> faker.name().firstName()),
Csv.Column.of("last_name", () -> faker.name().lastName()),
Csv.Column.of("address", () -> faker.address().streetAddress()))
.header(true)
.separator(separator)
.limit(limit)
.build()
.get();
int numberOfLines = 0;
int numberOfSeparator = 0;
for (int i = 0; i < csv.length(); i++) {
if (csv.regionMatches(i, LINE_SEPARATOR, 0, LINE_SEPARATOR.length())) {
numberOfLines++;
} else if (csv.regionMatches(i, separator, 0, separator.length())) {
numberOfSeparator++;
}
}

assertThat(limit + 1).isEqualTo(numberOfLines); // limit + 1 line for header
assertThat((limit + 1) * 2)
.isEqualTo(numberOfSeparator); // number of lines * (number of columns - 1)
}

@Test
void csvTestNew() {
final BaseFaker faker = new BaseFaker();
Expand Down Expand Up @@ -80,37 +48,6 @@ void csvTestNew() {
.isEqualTo(numberOfSeparator); // number of lines * (number of columns - 1)*/
}

@Test
void csvTestWithQuotes() {
String separator = "$$$";
int limit = 20;
final BaseFaker faker = new BaseFaker();
List<Csv.Column> columns = new ArrayList<>();
columns.add(Csv.Column.of("first_name", () -> faker.expression("#{Name.first_name}")));
columns.add(Csv.Column.of("last_name", () -> faker.expression("#{Name.last_name}")));
String csv =
Format.toCsv(columns)
.header(true)
.separator(separator)
.quote('%')
.limit(limit)
.build()
.get();
int numberOfLines = 0;
int numberOfSeparator = 0;
for (int i = 0; i < csv.length(); i++) {
if (csv.regionMatches(i, LINE_SEPARATOR, 0, LINE_SEPARATOR.length())) {
numberOfLines++;
} else if (csv.regionMatches(i, separator, 0, separator.length())) {
numberOfSeparator++;
}
}

assertThat(limit + 1).isEqualTo(numberOfLines); // limit + 1 line for header
assertThat((limit + 1) * (columns.size() - 1))
.isEqualTo(numberOfSeparator); // number of lines * (number of columns - 1)
}

@Test
void csvTestWithQuotesNew() {
String separator = "$$$";
Expand Down Expand Up @@ -139,26 +76,6 @@ void csvTestWithQuotesNew() {
.isEqualTo(numberOfSeparator); // number of lines * (number of columns - 1)
}

@Test
void testCsvWithComma() {

String csv =
Format.toCsv(
Csv.Column.of("values", () -> "1,2,3"),
Csv.Column.of("title", () -> "The \"fabulous\" artist"))
.header(true)
.separator(",")
.limit(1)
.build()
.get();

String expected =
"\"values\",\"title\"" + LINE_SEPARATOR +
"\"1,2,3\",\"The \"\"fabulous\"\" artist\"" + LINE_SEPARATOR;

assertThat(csv).isEqualTo(expected);
}

@Test
void testCsvWithCommaNew() {
Schema<Object, ? extends CharSequence> schema =
Expand Down
36 changes: 11 additions & 25 deletions src/test/java/net/datafaker/sequence/FakeCollectionTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
import net.datafaker.formats.Format;
import net.datafaker.providers.base.Address;
import net.datafaker.providers.base.BaseFaker;
import net.datafaker.providers.base.Name;
import net.datafaker.providers.base.Number;
import net.datafaker.transformations.CsvTransformer;
import net.datafaker.transformations.JsonTransformer;
import net.datafaker.transformations.Schema;
import org.junit.jupiter.api.RepeatedTest;
Expand Down Expand Up @@ -167,32 +167,19 @@ void checkWrongArguments() {
.hasMessage("Max length must be not less than min length and not negative");
}

@Test
void differentNumberOfHeadersAndColumns() {
assertThatThrownBy(() -> Format.toCsv(
faker.<Name>collection()
.suppliers(faker::name)
.minLen(3)
.maxLen(5)
.build())
.headers(() -> "firstName", () -> "lastname")
.columns(Name::firstName, Name::lastName, Name::fullName).build().get())
.isInstanceOf(IllegalArgumentException.class);
}

@Test
void toCsv() {
String separator = "$$$";
int limit = 5;
String csv = Format.toCsv(
faker.<Data>collection().minLen(limit).maxLen(limit)
.suppliers(BloodPressure::new, Glucose::new, Temperature::new)
.build())
.headers(() -> "name", () -> "value", () -> "range", () -> "unit")
.columns(Data::name, Data::value, Data::range, Data::unit)
.separator(separator)
.build().get();

CsvTransformer<Data> csvTransformer = CsvTransformer.<Data>builder().header(true).separator(separator).build();
String csv = csvTransformer.generate(
faker.collection(BloodPressure::new, Glucose::new, Temperature::new)
.len(limit).generate(),
Schema.of(
field("name", Data::name),
field("value", Data::value),
field("range", Data::range),
field("unit", Data::unit)));
int numberOfLines = 0;
int numberOfSeparator = 0;
for (int i = 0; i < csv.length(); i++) {
Expand All @@ -202,8 +189,7 @@ void toCsv() {
numberOfSeparator++;
}
}

assertThat(limit + 1).isEqualTo(numberOfLines); // limit + 1 line for header
assertThat(limit).isEqualTo(numberOfLines);
assertThat((limit + 1) * (4 - 1)).isEqualTo(numberOfSeparator); // number of lines * (number of columns - 1)
}

Expand Down
17 changes: 0 additions & 17 deletions src/test/java/net/datafaker/sequence/FakeStreamTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import net.datafaker.formats.Format;
import net.datafaker.providers.base.Address;
import net.datafaker.providers.base.BaseFaker;
import net.datafaker.providers.base.Name;
import net.datafaker.transformations.JsonTransformer;
import net.datafaker.transformations.Schema;
import org.junit.jupiter.api.RepeatedTest;
Expand Down Expand Up @@ -153,22 +152,6 @@ void isInfiniteTest() {
assertThat(finiteNames.isInfinite()).isFalse();
}

@Test
void differentNumberOfHeadersAndColumns() {
assertThatThrownBy(() -> Format.toCsv(
faker.<Name>stream()
.suppliers(faker::name)
.minLen(3)
.maxLen(5)
.build()
)
.headers(() -> "firstName", () -> "lastname")
.columns(Name::firstName, Name::lastName, Name::fullName)
.build()
.get())
.isInstanceOf(IllegalArgumentException.class);
}

@Test
void toCsv() {
String separator = "$$$";
Expand Down