From b7f2e10662b0898ce9ae4f1065cad1605ab4412f Mon Sep 17 00:00:00 2001 From: Mateusz Kubuszok Date: Thu, 3 Oct 2024 18:27:07 +0200 Subject: [PATCH] Pin down the current behavior in regard to implicit resolution, so that Community Build would see how the changes in 3.7 actually break the current behavior --- .../scalaland/chimney/IssuesScala3Spec.scala | 23 +++++++++++++++++++ .../io/scalaland/chimney/IssuesSpec.scala | 17 ++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 chimney/src/test/scala-3/io/scalaland/chimney/IssuesScala3Spec.scala 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") + } }