Skip to content

Commit 5e1598b

Browse files
authored
make locale-related provider tests more generic (#1718)
1 parent 1aabfad commit 5e1598b

File tree

8 files changed

+57
-72
lines changed

8 files changed

+57
-72
lines changed

src/main/java/net/datafaker/providers/base/BaseFaker.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,6 @@ public static Method getMethod(AbstractProvider<?> ap, String methodName) {
436436

437437
@Override
438438
public String toString() {
439-
return getClass().getSimpleName() + "@" + Integer.toHexString(hashCode());
439+
return getClass().getSimpleName() + "." + getContext().getLocale();
440440
}
441441
}

src/test/java/net/datafaker/providers/base/AbstractProviderListTest.java

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package net.datafaker.providers.base;
22

3+
import net.datafaker.Faker;
4+
import net.datafaker.internal.helper.LazyEvaluated;
5+
36
import java.util.HashSet;
47
import java.util.List;
8+
import java.util.Locale;
59
import java.util.Set;
610
import java.util.function.Supplier;
711
import java.util.regex.Pattern;
@@ -15,27 +19,41 @@
1519
* @param <T> the type of BaseFaker being tested
1620
*/
1721
public abstract class AbstractProviderListTest<T extends BaseFaker> {
22+
private static final LazyEvaluated<List<Locale>> locales = new LazyEvaluated<>(() ->
23+
new Faker().locality().allSupportedLocales().stream()
24+
.map(locale -> new Locale(locale))
25+
.toList());
26+
27+
private static final LazyEvaluated<List<BaseFaker>> fakers = new LazyEvaluated<>(() ->
28+
locales.get().stream()
29+
.map(locale -> new BaseFaker(locale))
30+
.toList());
31+
32+
protected List<BaseFaker> internationalFakers() {
33+
return fakers.get();
34+
}
35+
1836
protected List<String> getBaseList(T faker, String key) {
1937
return faker.fakeValuesService().fetchObject(key, faker.getContext());
2038
}
2139

2240
protected void testProviderList(ProviderListTest.TestSpec testSpec, T faker) {
2341
// Given
24-
Set<String> actual = new HashSet<>(getBaseList(faker, testSpec.key));
42+
Set<String> expected = new HashSet<>(getBaseList(faker, testSpec.key));
2543
// When
26-
String item = (String) testSpec.supplier.get();
44+
String actual = (String) testSpec.supplier.get();
2745
// Then
28-
assertThat(item).isNotEmpty();
46+
assertThat(actual).isNotEmpty();
2947
String collection = "\"" + testSpec.key + "\"";
30-
assertThat(actual)
31-
.as(() -> "Check actual list isn't empty and contains the item for the key " + collection)
48+
assertThat(expected)
49+
.as(() -> "Check expected list isn't empty and contains the actual for the key " + collection)
3250
.isNotEmpty()
33-
.contains(item);
34-
assertThat(actual)
51+
.contains(actual);
52+
assertThat(expected)
3553
.as(() -> "Actual should not have empty entries. " + collection)
3654
.noneMatch(String::isBlank);
3755
if (!testSpec.regex.isEmpty()) {
38-
assertThat(item).matches(Pattern.compile(testSpec.regex));
56+
assertThat(actual).matches(Pattern.compile(testSpec.regex));
3957
}
4058
}
4159

src/test/java/net/datafaker/providers/base/BaseFakerLocaleTest.java

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

src/test/java/net/datafaker/providers/base/ColorLocaleTest.java

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

33
import org.junit.jupiter.params.provider.Arguments;
44

5-
import java.util.List;
65
import java.util.stream.Stream;
76

87
import static org.junit.jupiter.params.provider.Arguments.arguments;
98

10-
public class ColorLocaleTest extends BaseFakerLocaleTest {
11-
12-
private final List<BaseFaker> fakers = List.of(
13-
fakerUA, fakerJP, fakerBY, fakerUZ, fakerArabic, fakerCA,
14-
fakerCZ, fakerDE, fakerFR, fakerHU, fakerAM, fakerKR,
15-
fakerPT, fakerRU, fakerSE, fakerTH, fakerTR, fakerCH,
16-
fakerBR, fakerDK);
9+
public class ColorLocaleTest extends ProviderListLocaleTest {
1710

1811
@Override
1912
protected Stream<Arguments> localeProviderListTest() {
20-
return fakers.stream()
13+
return internationalFakers().stream()
2114
.map(faker -> arguments(TestSpec.of(() -> faker.color().name(), "color.name"), faker));
2215
}
2316
}

src/test/java/net/datafaker/providers/base/CommerceLocaleTest.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,18 @@
66

77
import static org.junit.jupiter.params.provider.Arguments.arguments;
88

9-
public class CommerceLocaleTest extends BaseFakerLocaleTest {
10-
11-
private final Commerce commerceUA = fakerUA.commerce();
12-
private final String[] commerceProductNameUA = commerceUA.productName().split(" ");
9+
public class CommerceLocaleTest extends ProviderListLocaleTest {
1310

1411
@Override
1512
protected Stream<Arguments> localeProviderListTest() {
16-
return Stream.of(
17-
arguments(TestSpec.of(commerceUA::material, "commerce.product_name.material"), fakerUA),
18-
arguments(TestSpec.of(() -> commerceProductNameUA[0], "commerce.product_name.adjective"), fakerUA),
19-
arguments(TestSpec.of(() -> commerceProductNameUA[1], "commerce.product_name.material"), fakerUA),
20-
arguments(TestSpec.of(() -> commerceProductNameUA[2], "commerce.product_name.product"), fakerUA));
13+
return internationalFakers().stream().flatMap(faker -> {
14+
Commerce commerce = faker.commerce();
15+
return Stream.of(
16+
arguments(TestSpec.of(commerce::material, "commerce.product_name.material", "[\\p{L}\\p{M}\\p{Pi}\\p{Pf}]{2,}"), faker),
17+
arguments(TestSpec.of(commerce::brand, "commerce.brand", "\\w{2,}"), faker),
18+
arguments(TestSpec.of(commerce::vendor, "commerce.vendor", "[\\w\\s]{6,}"), faker)
19+
);
20+
}
21+
);
2122
}
2223
}

src/test/java/net/datafaker/providers/base/ProviderListLocaleTest.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,20 @@
55
import org.junit.jupiter.params.provider.Arguments;
66
import org.junit.jupiter.params.provider.MethodSource;
77

8+
import java.util.Locale;
89
import java.util.stream.Stream;
910

1011
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
11-
public abstract class ProviderListLocaleTest<T extends BaseFaker> extends AbstractProviderListTest<T> {
12+
public abstract class ProviderListLocaleTest extends AbstractProviderListTest<BaseFaker> {
13+
14+
protected final BaseFaker fakerUA = new BaseFaker(new Locale("uk", "UA"));
15+
protected final BaseFaker fakerIE = new BaseFaker(new Locale("en", "IE"));
16+
protected final BaseFaker fakerUZ = new BaseFaker(new Locale("uz", "UZ"));
17+
protected final BaseFaker fakerNZ = new BaseFaker(new Locale("en", "NZ"));
1218

1319
@ParameterizedTest
1420
@MethodSource("localeProviderListTest")
15-
protected void testProviderListFromLocale(TestSpec testSpec, T faker) {
21+
protected void testProviderListFromLocale(TestSpec testSpec, BaseFaker faker) {
1622
testProviderList(testSpec, faker);
1723
}
1824

src/test/java/net/datafaker/providers/base/UniversityLocaleTest.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,11 @@
66

77
import static org.junit.jupiter.params.provider.Arguments.arguments;
88

9-
public class UniversityLocaleTest extends BaseFakerLocaleTest {
10-
private final University universityUA = fakerUA.university();
11-
private final University universityUZ = fakerUZ.university();
9+
public class UniversityLocaleTest extends ProviderListLocaleTest {
1210

1311
@Override
1412
protected Stream<Arguments> localeProviderListTest() {
15-
return Stream.of(
16-
arguments(TestSpec.of(universityUA::name, "university.name"), fakerUA),
17-
arguments(TestSpec.of(universityUZ::name, "university.name"), fakerUZ)
18-
);
13+
return Stream.of(fakerUA, fakerUZ, fakerNZ)
14+
.map(faker -> arguments(TestSpec.of(() -> faker.university().name(), "university.name", ".{15,120}"), faker));
1915
}
2016
}

src/test/java/net/datafaker/providers/base/VehicleLocaleTest.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,19 @@
88
import static org.assertj.core.api.Assertions.assertThat;
99
import static org.junit.jupiter.params.provider.Arguments.arguments;
1010

11-
public class VehicleLocaleTest extends BaseFakerLocaleTest {
11+
public class VehicleLocaleTest extends ProviderListLocaleTest {
1212

1313
private static final String IRISH_VEHICLE_LICENCE_PLATE_REGEX = "[0-9]{2}[1|2]-[A-Z]{1,2}-[0-9]{1,6}";
1414
private static final String UKRAINIAN_VEHICLE_LICENCE_PLATE_REGEX = "^(AA|KA|AB|KB|AC|KC|AE|KE|AH|KH|AI|KI|AK|KK|AM|KM|AO|KO|AP|KP|AT|KT|AX|KX|BA|HA|BB|HB|BC|HC|BE|HE|BH|HH|BI|HI|BK|HK|BM|HM|BO|HO|BT|HT|BX|HX|CA|IA|CB|IB|CE|IE|CH|IH)\\d{4}[A-Z]{2}$";
1515

16-
17-
private final Vehicle vehicleUA = fakerUA.vehicle();
18-
1916
@Override
2017
protected Stream<Arguments> localeProviderListTest() {
21-
return Stream.of(
22-
arguments(TestSpec.of(vehicleUA::transmission, "vehicle.transmissions"), fakerUA),
23-
arguments(TestSpec.of(vehicleUA::fuelType, "vehicle.fuel_types"), fakerUA)
18+
return Stream.concat(
19+
internationalFakers().stream().map(faker ->
20+
arguments(TestSpec.of(() -> faker.vehicle().transmission(), "vehicle.transmissions", "[\\w\\s]{3,15}"), faker)),
21+
22+
internationalFakers().stream().map(faker ->
23+
arguments(TestSpec.of(() -> faker.vehicle().fuelType(), "vehicle.fuel_types", "[\\w\\d\\-\\/\\s]{3,30}"), faker))
2424
);
2525
}
2626

0 commit comments

Comments
 (0)