diff --git a/core/src/main/scala/com/softwaremill/diffx/DiffContext.scala b/core/src/main/scala/com/softwaremill/diffx/DiffContext.scala index 7adf2fca..75ee7562 100644 --- a/core/src/main/scala/com/softwaremill/diffx/DiffContext.scala +++ b/core/src/main/scala/com/softwaremill/diffx/DiffContext.scala @@ -67,7 +67,7 @@ object Tree { def empty[T]: Node[T] = Tree.Node[T](Map.empty) case class Leaf[T](v: T) extends Tree[T] { - override def merge(tree: Tree[T]): Tree[T] = this + override def merge(tree: Tree[T]): Tree[T] = tree } case class Node[T](tries: Map[ModifyPath, Tree[T]]) extends Tree[T] { override def merge(tree: Tree[T]): Tree[T] = { diff --git a/core/src/test/scala/com/softwaremill/diffx/test/DiffModifyIntegrationTest.scala b/core/src/test/scala/com/softwaremill/diffx/test/DiffModifyIntegrationTest.scala index 426f43b3..59e37583 100644 --- a/core/src/test/scala/com/softwaremill/diffx/test/DiffModifyIntegrationTest.scala +++ b/core/src/test/scala/com/softwaremill/diffx/test/DiffModifyIntegrationTest.scala @@ -320,4 +320,31 @@ class DiffModifyIntegrationTest extends AnyFlatSpec with Matchers with AutoDeriv ) ) } + + it should "allow propagate modification from substituted diff instance" in { + case class Address(house: Int, street: String) + case class Person(name: String, address: Address) + + val add = Diff.summon[Address].ignore(_.house) + val d = Diff + .summon[Person] + .modify(_.address) + .setTo(add) + + val a1 = Address(123, "Robin St.") + val a2 = Address(456, "Robin St.") + + val p1 = Person("Mason", a1) + val p2 = Person("Mason", a2) + d(p1, p2) shouldBe DiffResultObject( + "Person", + ListMap( + "name" -> IdenticalValue("Mason"), + "address" -> DiffResultObject( + "Address", + ListMap("house" -> IdenticalValue(""), "street" -> IdenticalValue("Robin St.")) + ) + ) + ) + } }