From 7821ee5da847fc8a9afa5fd685cf090a4fb9f72c Mon Sep 17 00:00:00 2001 From: Andreas Kutschera Date: Fri, 3 Mar 2023 16:22:30 +0100 Subject: [PATCH] fix: create BigDecimal as SpecialSpecimen Refs: #85 --- .../nylle/javafixture/SpecimenType.java | 3 +++ .../javafixture/specimen/SpecialSpecimen.java | 13 +++++++++++++ .../nylle/javafixture/SpecimenTypeTest.java | 3 +++ .../specimen/SpecialSpecimenTest.java | 19 +++++++++++++++++++ 4 files changed, 38 insertions(+) diff --git a/src/main/java/com/github/nylle/javafixture/SpecimenType.java b/src/main/java/com/github/nylle/javafixture/SpecimenType.java index 2fb2748..3d7c5e4 100644 --- a/src/main/java/com/github/nylle/javafixture/SpecimenType.java +++ b/src/main/java/com/github/nylle/javafixture/SpecimenType.java @@ -165,6 +165,9 @@ public boolean isSpecialType() { if (asClass().equals(java.math.BigInteger.class)) { return true; } + if (asClass().equals(java.math.BigDecimal.class)) { + return true; + } if (asClass().equals(java.io.File.class)) { return true; } diff --git a/src/main/java/com/github/nylle/javafixture/specimen/SpecialSpecimen.java b/src/main/java/com/github/nylle/javafixture/specimen/SpecialSpecimen.java index f40ca12..420ad50 100644 --- a/src/main/java/com/github/nylle/javafixture/specimen/SpecialSpecimen.java +++ b/src/main/java/com/github/nylle/javafixture/specimen/SpecialSpecimen.java @@ -3,10 +3,12 @@ import com.github.nylle.javafixture.Context; import com.github.nylle.javafixture.CustomizationContext; import com.github.nylle.javafixture.ISpecimen; +import com.github.nylle.javafixture.PseudoRandom; import com.github.nylle.javafixture.SpecimenType; import java.io.File; import java.lang.annotation.Annotation; +import java.math.BigDecimal; import java.math.BigInteger; import java.net.URI; import java.net.URISyntaxException; @@ -44,6 +46,9 @@ public T create(CustomizationContext customizationContext, Annotation[] annotati if (type.asClass().equals(BigInteger.class)) { return (T) createBigInteger(); } + if (type.asClass().equals(BigDecimal.class)) { + return (T) createBigDecimal(); + } try { return (T) new URI("https://localhost/" + UUID.randomUUID()); } catch (URISyntaxException e) { @@ -61,4 +66,12 @@ private BigInteger createBigInteger() { } return result; } + + private BigDecimal createBigDecimal() { + var bd = new BigDecimal(new PseudoRandom().nextLong(new Random().nextBoolean())); + if (context.getConfiguration().usePositiveNumbersOnly()) { + return bd.abs(); + } + return bd; + } } diff --git a/src/test/java/com/github/nylle/javafixture/SpecimenTypeTest.java b/src/test/java/com/github/nylle/javafixture/SpecimenTypeTest.java index 5813233..f8ea0f3 100644 --- a/src/test/java/com/github/nylle/javafixture/SpecimenTypeTest.java +++ b/src/test/java/com/github/nylle/javafixture/SpecimenTypeTest.java @@ -16,6 +16,7 @@ import java.io.File; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; +import java.math.BigDecimal; import java.math.BigInteger; import java.net.URI; import java.time.Duration; @@ -262,6 +263,7 @@ void isSpecialType() { assertThat(new SpecimenType() {}.isSpecialType()).isTrue(); assertThat(new SpecimenType() {}.isSpecialType()).isTrue(); assertThat(new SpecimenType() {}.isSpecialType()).isTrue(); + assertThat(new SpecimenType() {}.isSpecialType()).isTrue(); } @TestWithCases @@ -269,6 +271,7 @@ void isSpecialType() { @TestCase(class1 = File.class, bool2 = true) @TestCase(class1 = URI.class, bool2 = true) @TestCase(class1 = BigInteger.class, bool2 = true) + @TestCase(class1 = BigDecimal.class, bool2 = true) void isSpecialTypeFromClass(Class value, boolean expected) { assertThat(SpecimenType.fromClass(value).isSpecialType()).isEqualTo(expected); } diff --git a/src/test/java/com/github/nylle/javafixture/specimen/SpecialSpecimenTest.java b/src/test/java/com/github/nylle/javafixture/specimen/SpecialSpecimenTest.java index b72463f..27ec69a 100644 --- a/src/test/java/com/github/nylle/javafixture/specimen/SpecialSpecimenTest.java +++ b/src/test/java/com/github/nylle/javafixture/specimen/SpecialSpecimenTest.java @@ -11,6 +11,7 @@ import java.io.File; import java.lang.annotation.Annotation; +import java.math.BigDecimal; import java.math.BigInteger; import java.net.URI; import java.util.Map; @@ -111,4 +112,22 @@ void createNonNegativeBigInteger() { assertThat(actual).isNotNegative(); } + @Test + @DisplayName("create BigDecimal creates random number") + void createBigDecimal() { + var sut = new SpecialSpecimen<>(new SpecimenType() {}, context); + var actual = sut.create(noContext(), new Annotation[0]); + + assertThat(actual).isInstanceOf(BigDecimal.class); + } + + @Test + @DisplayName("create BigDecimal acreates non-negative random number when context demands it") + void createNonNegativeBigDecimal() { + var context = new Context(Configuration.configure().usePositiveNumbersOnly(true)); + var sut = new SpecialSpecimen<>(new SpecimenType() {}, context); + var actual = sut.create(noContext(), new Annotation[0]); + + assertThat(actual).isNotNegative(); + } }