From a7fd86d6670c348d1d9b7735830c87a274311e11 Mon Sep 17 00:00:00 2001 From: Michal Kovac <miso@github.ksp.sk> Date: Fri, 4 Jun 2021 14:15:11 +0200 Subject: [PATCH 1/2] Fixes #24 crash when keys were removed from a map --- src/main/scala/diff.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/scala/diff.scala b/src/main/scala/diff.scala index 6c24f65..c70401b 100644 --- a/src/main/scala/diff.scala +++ b/src/main/scala/diff.scala @@ -305,7 +305,7 @@ abstract class DiffShowInstances2 extends DiffShowInstancesLowPriority { val identical = left.keys.toList intersect right.keys.toList val removed = left.keys.toList diff right.keys.toList val added = right.keys.toList diff left.keys.toList - def show( keys: List[K] ) = keys.map( k => DiffShow.show( k ) -> DiffShow.show( right( k ) ) ) + def show( keys: List[K], m: Map[K, V] ) = keys.map( k => DiffShow.show( k ) -> DiffShow.show( m( k ) ) ) val changed = for { key <- left.keys.toList diff removed Different( s ) <- DiffShow.diff( left( key ), right( key ) ) :: Nil @@ -316,8 +316,8 @@ abstract class DiffShowInstances2 extends DiffShowInstancesLowPriority { "Map", identical.map( _ => None ) ++ Seq( changed, - show( removed ).map( ( arrow _ ).tupled ).map( red ), - show( added ).map( ( arrow _ ).tupled ).map( green ) + show( removed, left ).map( ( arrow _ ).tupled ).map( red ), + show( added, right ).map( ( arrow _ ).tupled ).map( green ) ).flatten.map( s => Option( ( "", s ) ) ) ) if ( removed.isEmpty && added.isEmpty && changed.isEmpty ) From 04cea25244c346fe59ddc27b7df7e02ac50576fe Mon Sep 17 00:00:00 2001 From: kovac <ext-michal.kovac@here.com> Date: Fri, 4 Jun 2021 14:22:09 +0200 Subject: [PATCH 2/2] Add tests --- src/test/scala/Main.scala | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/test/scala/Main.scala b/src/test/scala/Main.scala index 35136e9..b46a19a 100644 --- a/src/test/scala/Main.scala +++ b/src/test/scala/Main.scala @@ -178,6 +178,23 @@ class AllTests extends FunSuite { assertIdentical( Foo1.Foo2.Foo3, Foo1.Foo2.Foo3 ) } + { + // testing issue when comparing Maps (https://github.com/xdotai/diff/issues/24) + println( + DiffShow[Map[String, String]](DiffShow.mapDiffShow).diff( + Map("a" -> "b"), + Map("a" -> "b", "c" -> "d") + ).string + ) + + println( + DiffShow[Map[String, String]](DiffShow.mapDiffShow).diff( + Map("a" -> "b", "c" -> "d"), + Map("a" -> "b") + ).string + ) + } + /* //import pprint.Config.Defaults._