diff --git a/chimney/src/test/scala-3/io/scalaland/chimney/IssuesScala3Spec.scala b/chimney/src/test/scala-3/io/scalaland/chimney/IssuesScala3Spec.scala new file mode 100644 index 000000000..bab815a07 --- /dev/null +++ b/chimney/src/test/scala-3/io/scalaland/chimney/IssuesScala3Spec.scala @@ -0,0 +1,23 @@ +package io.scalaland.chimney + +import io.scalaland.chimney.dsl.* + +class IssuesScala3Spec extends ChimneySpec { + + test("fix issue #592 (givens in companion)") { + case class Foo(a: Int, b: String) + case class Bar(a: Int, b: String) + case class Baz(a: Int) + object Foo { + given totalTransformer: Transformer[Foo, Bar] = + Transformer.define[Foo, Bar].withFieldConst(_.a, 10).buildTransformer + given partialTransformer: PartialTransformer[Foo, Bar] = + PartialTransformer.define[Foo, Bar].withFieldConst(_.a, 20).buildTransformer + given patcher: Patcher[Foo, Baz] = (_, baz) => Foo(baz.a, "patched") + } + + Foo(1, "value").transformInto[Bar] ==> Bar(10, "value") + Foo(1, "value").transformIntoPartial[Bar].asOption.get ==> Bar(20, "value") + Foo(1, "value").patchUsing(Baz(30)) ==> Foo(30, "patched") + } +} diff --git a/chimney/src/test/scala/io/scalaland/chimney/IssuesSpec.scala b/chimney/src/test/scala/io/scalaland/chimney/IssuesSpec.scala index 862722a81..9db2d72b2 100644 --- a/chimney/src/test/scala/io/scalaland/chimney/IssuesSpec.scala +++ b/chimney/src/test/scala/io/scalaland/chimney/IssuesSpec.scala @@ -787,4 +787,21 @@ class IssuesSpec extends ChimneySpec { assert(writer.transform(color.yellow) == yellowTarget) assert(writer.transform(color.orange) == orangeTarget) } + + test("fix issue #592 (implicits in companion)") { + case class Foo(a: Int, b: String) + case class Bar(a: Int, b: String) + case class Baz(a: Int) + object Foo { + implicit val totalTransformer: Transformer[Foo, Bar] = + Transformer.define[Foo, Bar].withFieldConst(_.a, 10).buildTransformer + implicit val partialTransformer: PartialTransformer[Foo, Bar] = + PartialTransformer.define[Foo, Bar].withFieldConst(_.a, 20).buildTransformer + implicit val patcher: Patcher[Foo, Baz] = (_, baz) => Foo(baz.a, "patched") + } + + Foo(1, "value").transformInto[Bar] ==> Bar(10, "value") + Foo(1, "value").transformIntoPartial[Bar].asOption.get ==> Bar(20, "value") + Foo(1, "value").patchUsing(Baz(30)) ==> Foo(30, "patched") + } }