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

Commit 73f59ff

Browse files
committed
Add platform specific instances
1 parent 8fe6a0a commit 73f59ff

File tree

4 files changed

+56
-1
lines changed

4 files changed

+56
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ trait Diff[-T] { outer =>
2929
}
3030
}
3131

32-
object Diff extends MiddlePriorityDiff with TupleInstances {
32+
object Diff extends MiddlePriorityDiff with TupleInstances with DiffxPlatformExtensions {
3333
def apply[T: Diff]: Diff[T] = implicitly[Diff[T]]
3434

3535
def ignored[T]: Diff[T] = (_: T, _: T, _: DiffContext) => DiffResult.Ignored
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package com.softwaremill.diffx
2+
3+
trait DiffxPlatformExtensions
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.softwaremill.diffx
2+
3+
import java.time._
4+
import java.util.UUID
5+
6+
trait DiffxPlatformExtensions {
7+
implicit val diffUuid: Diff[UUID] = Diff.fallback
8+
9+
implicit val diffInstant: Diff[Instant] = Diff.fallback
10+
implicit val diffLocalDate: Diff[LocalDate] = Diff.fallback
11+
implicit val diffLocalTime: Diff[LocalTime] = Diff.fallback
12+
implicit val diffLocalDateTime: Diff[LocalDateTime] = Diff.fallback
13+
implicit val diffOffsetDateTime: Diff[OffsetDateTime] = Diff.fallback
14+
implicit val diffZonedDateTime: Diff[ZonedDateTime] = Diff.fallback
15+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.softwaremill.diffx.test
2+
3+
import com.softwaremill.diffx.{Diff, DiffResult}
4+
import org.scalatest.freespec.AnyFreeSpec
5+
import org.scalatest.matchers.should.Matchers
6+
7+
import java.time._
8+
import java.util.UUID
9+
10+
class DiffxJvmInstancesTest extends AnyFreeSpec with Matchers {
11+
val cases = List(
12+
TestCase("LocalDate", LocalDate.now(), LocalDate.now().plusDays(1)),
13+
TestCase("LocalTime", LocalTime.now(), LocalTime.now().plusHours(1)),
14+
TestCase("LocalDateTime", LocalDateTime.now(), LocalDateTime.now().plusDays(1)),
15+
TestCase("OffsetDateTime", OffsetDateTime.now(), OffsetDateTime.now().plusDays(1)),
16+
TestCase("ZonedDateTime", ZonedDateTime.now(), ZonedDateTime.now().plusDays(1)),
17+
TestCase("Instant", Instant.now(), Instant.now().plusMillis(100)),
18+
TestCase("UUID", UUID.randomUUID(), UUID.randomUUID())
19+
)
20+
21+
cases.foreach { tc =>
22+
tc.clazz - {
23+
s"identical ${tc.clazz}s should be identical" in {
24+
tc.compareIdentical.isIdentical shouldBe true
25+
}
26+
27+
s"different ${tc.clazz}s should be different" in {
28+
tc.compareDifferent.isIdentical shouldBe false
29+
}
30+
}
31+
}
32+
33+
case class TestCase[T: Diff](clazz: String, v1: T, v2: T) {
34+
def compareIdentical: DiffResult = Diff.compare(v1, v1)
35+
def compareDifferent: DiffResult = Diff.compare(v1, v2)
36+
}
37+
}

0 commit comments

Comments
 (0)