Skip to content
This repository was archived by the owner on Jan 24, 2025. It is now read-only.

Commit 142860c

Browse files
Display ignored fields as ignored (#267)
* Display ignored fields as ignored * Fix tuple instances and tests * Fix testFrameworks integrations
1 parent 80042d2 commit 142860c

File tree

22 files changed

+336
-297
lines changed

22 files changed

+336
-297
lines changed

core/src/main/scala/com/softwaremill/diffx/Diff.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ trait Diff[-T] { outer =>
3131
object Diff extends MiddlePriorityDiff with TupleInstances {
3232
def apply[T: Diff]: Diff[T] = implicitly[Diff[T]]
3333

34-
def identical[T]: Diff[T] = (left: T, _: T, _: DiffContext) => Identical(left)
3534
def ignored[T]: Diff[T] = (_: T, _: T, _: DiffContext) => DiffResult.Ignored
3635

3736
def compare[T: Diff](left: T, right: T): DiffResult = apply[T].apply(left, right)

core/src/main/scala/com/softwaremill/diffx/DiffResult.scala

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,16 @@ trait DiffResult extends Product with Serializable {
99
showIndented(indentLevel, renderIdentical)
1010

1111
private[diffx] def showIndented(indent: Int, renderIdentical: Boolean)(implicit c: ConsoleColorConfig): String
12+
13+
protected def i(indent: Int): String = " " * indent
1214
}
1315

1416
object DiffResult {
1517
private[diffx] final val indentLevel = 5
16-
val Ignored = Identical("<ignored>")
18+
val Ignored: IdenticalValue[Any] = IdenticalValue("<ignored>")
1719
}
1820

19-
case class DiffResultObject(name: String, fields: Map[String, DiffResult]) extends DiffResultDifferent {
21+
case class DiffResultObject(name: String, fields: Map[String, DiffResult]) extends DiffResult {
2022
override private[diffx] def showIndented(indent: Int, renderIdentical: Boolean)(implicit
2123
c: ConsoleColorConfig
2224
): String = {
@@ -41,13 +43,15 @@ case class DiffResultObject(name: String, fields: Map[String, DiffResult]) exten
4143
) = {
4244
s"${i(indent)}${defaultColor(s"$field: ")}"
4345
}
46+
47+
override def isIdentical: Boolean = fields.values.forall(_.isIdentical)
4448
}
4549

46-
case class DiffResultMap(fields: Map[DiffResult, DiffResult]) extends DiffResultDifferent {
50+
case class DiffResultMap(entries: Map[DiffResult, DiffResult]) extends DiffResult {
4751
override private[diffx] def showIndented(indent: Int, renderIdentical: Boolean)(implicit
4852
c: ConsoleColorConfig
4953
): String = {
50-
val showFields = fields
54+
val showFields = entries
5155
.filter { case (k, v) =>
5256
renderIdentical || !v.isIdentical || !k.isIdentical
5357
}
@@ -71,9 +75,11 @@ case class DiffResultMap(fields: Map[DiffResult, DiffResult]) extends DiffResult
7175
) = {
7276
s"${i(indent)}${defaultColor(s"${key.showIndented(indent + indentLevel, renderIdentical)}")}"
7377
}
78+
79+
override def isIdentical: Boolean = entries.forall { case (k, v) => k.isIdentical && v.isIdentical }
7480
}
7581

76-
case class DiffResultSet(diffs: List[DiffResult]) extends DiffResultDifferent {
82+
case class DiffResultSet(diffs: List[DiffResult]) extends DiffResult {
7783
override private[diffx] def showIndented(indent: Int, renderIdentical: Boolean)(implicit
7884
c: ConsoleColorConfig
7985
): String = {
@@ -82,42 +88,44 @@ case class DiffResultSet(diffs: List[DiffResult]) extends DiffResultDifferent {
8288
.map(f => s"${i(indent)}${f.showIndented(indent + indentLevel, renderIdentical)}")
8389
showFields.mkString(defaultColor("Set(\n"), ",\n", defaultColor(")"))
8490
}
91+
92+
override def isIdentical: Boolean = diffs.forall(_.isIdentical)
8593
}
8694

87-
case class DiffResultString(diffs: List[DiffResult]) extends DiffResultDifferent {
95+
case class DiffResultString(diffs: List[DiffResult]) extends DiffResult {
8896
override private[diffx] def showIndented(indent: Int, renderIdentical: Boolean)(implicit
8997
c: ConsoleColorConfig
9098
): String = {
9199
s"${diffs.map(_.showIndented(indent, renderIdentical)).mkString("\n")}"
92100
}
93-
}
94101

95-
trait DiffResultDifferent extends DiffResult {
96-
override def isIdentical: Boolean = false
97-
98-
protected def i(indent: Int): String = " " * indent
102+
override def isIdentical: Boolean = diffs.forall(_.isIdentical)
99103
}
100104

101-
case class DiffResultValue[T](left: T, right: T) extends DiffResultDifferent {
105+
case class DiffResultValue[T](left: T, right: T) extends DiffResult {
102106
override def showIndented(indent: Int, renderIdentical: Boolean)(implicit c: ConsoleColorConfig): String =
103107
showChange(s"$left", s"$right")
108+
109+
override def isIdentical: Boolean = false
104110
}
105111

106-
case class Identical[T](value: T) extends DiffResult {
112+
case class IdenticalValue[T](value: T) extends DiffResult {
107113
override def isIdentical: Boolean = true
108114

109115
override def showIndented(indent: Int, renderIdentical: Boolean)(implicit c: ConsoleColorConfig): String =
110116
defaultColor(s"$value")
111117
}
112118

113-
case class DiffResultMissing[T](value: T) extends DiffResultDifferent {
119+
case class DiffResultMissing[T](value: T) extends DiffResult {
114120
override def showIndented(indent: Int, renderIdentical: Boolean)(implicit c: ConsoleColorConfig): String = {
115121
rightColor(s"$value")
116122
}
123+
override def isIdentical: Boolean = false
117124
}
118125

119-
case class DiffResultAdditional[T](value: T) extends DiffResultDifferent {
126+
case class DiffResultAdditional[T](value: T) extends DiffResult {
120127
override def showIndented(indent: Int, renderIdentical: Boolean)(implicit c: ConsoleColorConfig): String = {
121128
leftColor(s"$value")
122129
}
130+
override def isIdentical: Boolean = false
123131
}

core/src/main/scala/com/softwaremill/diffx/DiffxSupport.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ trait DiffxSupport extends DiffxEitherSupport with DiffxConsoleSupport with Diff
1212
if ((left == null && right != null) || (left != null && right == null)) {
1313
DiffResultValue(left, right)
1414
} else if (left == null && right == null) {
15-
Identical(null)
15+
IdenticalValue(null)
1616
} else {
1717
compareNotNull(left, right)
1818
}

core/src/main/scala/com/softwaremill/diffx/TupleInstances.scala

Lines changed: 21 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,7 @@ trait TupleInstances {
99
context: DiffContext
1010
): DiffResult = {
1111
val results = List("_1" -> d1.apply(left._1, right._1), "_2" -> d2.apply(left._2, right._2)).toMap
12-
if (results.values.forall(_.isIdentical)) {
13-
Identical(left)
14-
} else {
15-
DiffResultObject("Tuple2", results)
16-
}
12+
DiffResultObject("Tuple2", results)
1713
}
1814
}
1915

@@ -29,11 +25,7 @@ trait TupleInstances {
2925
"_2" -> d2.apply(left._2, right._2),
3026
"_3" -> d3.apply(left._3, right._3)
3127
).toMap
32-
if (results.values.forall(_.isIdentical)) {
33-
Identical(left)
34-
} else {
35-
DiffResultObject("Tuple3", results)
36-
}
28+
DiffResultObject("Tuple3", results)
3729
}
3830
}
3931

@@ -54,11 +46,7 @@ trait TupleInstances {
5446
"_3" -> d3.apply(left._3, right._3),
5547
"_4" -> d4.apply(left._4, right._4)
5648
).toMap
57-
if (results.values.forall(_.isIdentical)) {
58-
Identical(left)
59-
} else {
60-
DiffResultObject("Tuple4", results)
61-
}
49+
DiffResultObject("Tuple4", results)
6250
}
6351
}
6452

@@ -81,11 +69,7 @@ trait TupleInstances {
8169
"_4" -> d4.apply(left._4, right._4),
8270
"_5" -> d5.apply(left._5, right._5)
8371
).toMap
84-
if (results.values.forall(_.isIdentical)) {
85-
Identical(left)
86-
} else {
87-
DiffResultObject("Tuple5", results)
88-
}
72+
DiffResultObject("Tuple5", results)
8973
}
9074
}
9175

@@ -110,11 +94,7 @@ trait TupleInstances {
11094
"_5" -> d5.apply(left._5, right._5),
11195
"_6" -> d6.apply(left._6, right._6)
11296
).toMap
113-
if (results.values.forall(_.isIdentical)) {
114-
Identical(left)
115-
} else {
116-
DiffResultObject("Tuple6", results)
117-
}
97+
DiffResultObject("Tuple6", results)
11898
}
11999
}
120100

@@ -141,11 +121,7 @@ trait TupleInstances {
141121
"_6" -> d6.apply(left._6, right._6),
142122
"_7" -> d7.apply(left._7, right._7)
143123
).toMap
144-
if (results.values.forall(_.isIdentical)) {
145-
Identical(left)
146-
} else {
147-
DiffResultObject("Tuple7", results)
148-
}
124+
DiffResultObject("Tuple7", results)
149125
}
150126
}
151127

@@ -174,11 +150,7 @@ trait TupleInstances {
174150
"_7" -> d7.apply(left._7, right._7),
175151
"_8" -> d8.apply(left._8, right._8)
176152
).toMap
177-
if (results.values.forall(_.isIdentical)) {
178-
Identical(left)
179-
} else {
180-
DiffResultObject("Tuple8", results)
181-
}
153+
DiffResultObject("Tuple8", results)
182154
}
183155
}
184156

@@ -209,11 +181,7 @@ trait TupleInstances {
209181
"_8" -> d8.apply(left._8, right._8),
210182
"_9" -> d9.apply(left._9, right._9)
211183
).toMap
212-
if (results.values.forall(_.isIdentical)) {
213-
Identical(left)
214-
} else {
215-
DiffResultObject("Tuple9", results)
216-
}
184+
DiffResultObject("Tuple9", results)
217185
}
218186
}
219187

@@ -247,11 +215,7 @@ trait TupleInstances {
247215
"_9" -> d9.apply(left._9, right._9),
248216
"_10" -> d10.apply(left._10, right._10)
249217
).toMap
250-
if (results.values.forall(_.isIdentical)) {
251-
Identical(left)
252-
} else {
253-
DiffResultObject("Tuple10", results)
254-
}
218+
DiffResultObject("Tuple10", results)
255219
}
256220
}
257221

@@ -287,11 +251,7 @@ trait TupleInstances {
287251
"_10" -> d10.apply(left._10, right._10),
288252
"_11" -> d11.apply(left._11, right._11)
289253
).toMap
290-
if (results.values.forall(_.isIdentical)) {
291-
Identical(left)
292-
} else {
293-
DiffResultObject("Tuple11", results)
294-
}
254+
DiffResultObject("Tuple11", results)
295255
}
296256
}
297257

@@ -329,11 +289,7 @@ trait TupleInstances {
329289
"_11" -> d11.apply(left._11, right._11),
330290
"_12" -> d12.apply(left._12, right._12)
331291
).toMap
332-
if (results.values.forall(_.isIdentical)) {
333-
Identical(left)
334-
} else {
335-
DiffResultObject("Tuple12", results)
336-
}
292+
DiffResultObject("Tuple12", results)
337293
}
338294
}
339295

@@ -374,7 +330,7 @@ trait TupleInstances {
374330
"_13" -> d13.apply(left._13, right._13)
375331
).toMap
376332
if (results.values.forall(_.isIdentical)) {
377-
Identical(left)
333+
IdenticalValue(left)
378334
} else {
379335
DiffResultObject("Tuple13", results)
380336
}
@@ -419,11 +375,7 @@ trait TupleInstances {
419375
"_13" -> d13.apply(left._13, right._13),
420376
"_14" -> d14.apply(left._14, right._14)
421377
).toMap
422-
if (results.values.forall(_.isIdentical)) {
423-
Identical(left)
424-
} else {
425-
DiffResultObject("Tuple14", results)
426-
}
378+
DiffResultObject("Tuple14", results)
427379
}
428380
}
429381

@@ -467,11 +419,7 @@ trait TupleInstances {
467419
"_14" -> d14.apply(left._14, right._14),
468420
"_15" -> d15.apply(left._15, right._15)
469421
).toMap
470-
if (results.values.forall(_.isIdentical)) {
471-
Identical(left)
472-
} else {
473-
DiffResultObject("Tuple15", results)
474-
}
422+
DiffResultObject("Tuple15", results)
475423
}
476424
}
477425

@@ -517,11 +465,7 @@ trait TupleInstances {
517465
"_15" -> d15.apply(left._15, right._15),
518466
"_16" -> d16.apply(left._16, right._16)
519467
).toMap
520-
if (results.values.forall(_.isIdentical)) {
521-
Identical(left)
522-
} else {
523-
DiffResultObject("Tuple16", results)
524-
}
468+
DiffResultObject("Tuple16", results)
525469
}
526470
}
527471

@@ -569,11 +513,7 @@ trait TupleInstances {
569513
"_16" -> d16.apply(left._16, right._16),
570514
"_17" -> d17.apply(left._17, right._17)
571515
).toMap
572-
if (results.values.forall(_.isIdentical)) {
573-
Identical(left)
574-
} else {
575-
DiffResultObject("Tuple17", results)
576-
}
516+
DiffResultObject("Tuple17", results)
577517
}
578518
}
579519

@@ -623,11 +563,7 @@ trait TupleInstances {
623563
"_17" -> d17.apply(left._17, right._17),
624564
"_18" -> d18.apply(left._18, right._18)
625565
).toMap
626-
if (results.values.forall(_.isIdentical)) {
627-
Identical(left)
628-
} else {
629-
DiffResultObject("Tuple18", results)
630-
}
566+
DiffResultObject("Tuple18", results)
631567
}
632568
}
633569

@@ -679,11 +615,7 @@ trait TupleInstances {
679615
"_18" -> d18.apply(left._18, right._18),
680616
"_19" -> d19.apply(left._19, right._19)
681617
).toMap
682-
if (results.values.forall(_.isIdentical)) {
683-
Identical(left)
684-
} else {
685-
DiffResultObject("Tuple19", results)
686-
}
618+
DiffResultObject("Tuple19", results)
687619
}
688620
}
689621

@@ -738,11 +670,7 @@ trait TupleInstances {
738670
"_19" -> d19.apply(left._19, right._19),
739671
"_20" -> d20.apply(left._20, right._20)
740672
).toMap
741-
if (results.values.forall(_.isIdentical)) {
742-
Identical(left)
743-
} else {
744-
DiffResultObject("Tuple20", results)
745-
}
673+
DiffResultObject("Tuple20", results)
746674
}
747675
}
748676

@@ -799,11 +727,7 @@ trait TupleInstances {
799727
"_20" -> d20.apply(left._20, right._20),
800728
"_21" -> d21.apply(left._21, right._21)
801729
).toMap
802-
if (results.values.forall(_.isIdentical)) {
803-
Identical(left)
804-
} else {
805-
DiffResultObject("Tuple21", results)
806-
}
730+
DiffResultObject("Tuple21", results)
807731
}
808732
}
809733

@@ -887,11 +811,7 @@ trait TupleInstances {
887811
"_21" -> d21.apply(left._21, right._21),
888812
"_22" -> d22.apply(left._22, right._22)
889813
).toMap
890-
if (results.values.forall(_.isIdentical)) {
891-
Identical(left)
892-
} else {
893-
DiffResultObject("Tuple22", results)
894-
}
814+
DiffResultObject("Tuple22", results)
895815
}
896816
}
897817

0 commit comments

Comments
 (0)