diff --git a/modules/refined4s-extras-render/shared/src/main/scala/refined4s/modules/extras/derivation/types/all.scala b/modules/refined4s-extras-render/shared/src/main/scala/refined4s/modules/extras/derivation/types/all.scala index 11c2c05..a59a610 100644 --- a/modules/refined4s-extras-render/shared/src/main/scala/refined4s/modules/extras/derivation/types/all.scala +++ b/modules/refined4s-extras-render/shared/src/main/scala/refined4s/modules/extras/derivation/types/all.scala @@ -104,6 +104,9 @@ trait all { inline given derivedNonEmptyStringRender(using renderActual: Render[String]): Render[NonEmptyString] = renderActual.contramap(_.value) + inline given derivedNonBlankStringRender(using renderActual: Render[String]): Render[NonBlankString] = + renderActual.contramap(_.value) + inline given derivedUuidRender(using renderActual: Render[String]): Render[Uuid] = renderActual.contramap(_.value) diff --git a/modules/refined4s-extras-render/shared/src/test/scala/refined4s/modules/extras/derivation/generic/autoSpec.scala b/modules/refined4s-extras-render/shared/src/test/scala/refined4s/modules/extras/derivation/generic/autoSpec.scala index bc48782..a249ce4 100644 --- a/modules/refined4s-extras-render/shared/src/test/scala/refined4s/modules/extras/derivation/generic/autoSpec.scala +++ b/modules/refined4s-extras-render/shared/src/test/scala/refined4s/modules/extras/derivation/generic/autoSpec.scala @@ -8,6 +8,8 @@ import refined4s.modules.extras.derivation.generic.auto.given import refined4s.types.all.* import refined4s.types.networkGens +import java.nio.charset.StandardCharsets + /** @author Kevin Lee * @since 2024-01-01 */ @@ -81,6 +83,8 @@ object autoSpec extends Properties { // property("test Render[NonEmptyString]", testRenderNonEmptyString), // + property("test Render[NonBlankString]", testRenderNonBlankString), + // property("test Render[Uri]", testRenderUri), // @@ -495,6 +499,29 @@ object autoSpec extends Properties { actual ==== expected } + def testRenderNonBlankString: Property = + for { + nonWhitespaceString <- Gen + .string(hedgehog.extra.Gens.genNonWhitespaceChar, Range.linear(1, 10)) + .map(s => new String(s.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8)) + .log("nonWhitespaceString") + whitespaceString <- Gen + .string( + hedgehog.extra.Gens.genCharByRange(refined4s.types.strings.WhitespaceCharRange), + Range.linear(1, 10), + ) + .log("whitespaceString") + + s <- Gen.constant(scala.util.Random.shuffle((nonWhitespaceString + whitespaceString).toList).mkString).log("s") + } yield { + val input = NonBlankString.unsafeFrom(s) + + val expected = s + val actual = input.render + + actual ==== expected + } + def testRenderUri: Property = for { uri <- networkGens.genUriString.log("uri") diff --git a/modules/refined4s-extras-render/shared/src/test/scala/refined4s/modules/extras/derivation/types/allSpec.scala b/modules/refined4s-extras-render/shared/src/test/scala/refined4s/modules/extras/derivation/types/allSpec.scala index f3a3889..c84fc55 100644 --- a/modules/refined4s-extras-render/shared/src/test/scala/refined4s/modules/extras/derivation/types/allSpec.scala +++ b/modules/refined4s-extras-render/shared/src/test/scala/refined4s/modules/extras/derivation/types/allSpec.scala @@ -7,6 +7,7 @@ import refined4s.modules.extras.derivation.types.all.given import refined4s.types.all.* import refined4s.types.networkGens +import java.nio.charset.StandardCharsets import java.util.UUID /** @author Kevin Lee @@ -82,6 +83,8 @@ object allSpec extends Properties { // property("test Render[NonEmptyString]", testRenderNonEmptyString), // + property("test Render[NonBlankString]", testRenderNonBlankString), + // property("test Render[Uuid]", testRenderUuid), // property("test Render[Uri]", testRenderUri), @@ -496,6 +499,29 @@ object allSpec extends Properties { actual ==== expected } + def testRenderNonBlankString: Property = + for { + nonWhitespaceString <- Gen + .string(hedgehog.extra.Gens.genNonWhitespaceChar, Range.linear(1, 10)) + .map(s => new String(s.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8)) + .log("nonWhitespaceString") + whitespaceString <- Gen + .string( + hedgehog.extra.Gens.genCharByRange(refined4s.types.strings.WhitespaceCharRange), + Range.linear(1, 10), + ) + .log("whitespaceString") + + s <- Gen.constant(scala.util.Random.shuffle((nonWhitespaceString + whitespaceString).toList).mkString).log("s") + } yield { + val input = NonBlankString.unsafeFrom(s) + + val expected = s + val actual = input.render + + actual ==== expected + } + def testRenderUuid: Property = for { uuid <- Gen.constant(UUID.randomUUID()).log("uuid")