From df36ffabb1c1a268e62b9f42e7310ecf0aff7ba0 Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Tue, 26 Sep 2017 15:58:46 +0200
Subject: [PATCH] Fixed a few bugs with the serialization tests

---
 app/build.gradle.kts                          |  4 +++-
 .../serializer/DateTimeSerializer.kt          | 21 +++++++++++++------
 .../kuschku/libquassel/SerializerUnitTest.kt  |  7 ++++---
 3 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 1dc2ea01c..bb47d3bf5 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -86,7 +86,9 @@ dependencies {
   implementation(appArch("persistence.room", "runtime"))
   kapt(appArch("persistence.room", "compiler"))
 
-  implementation(appArch("paging", "runtime", version = "1.0.0-alpha1"))
+  implementation(appArch("paging", "runtime", version = "1.0.0-alpha1")) {
+    exclude(group = "junit", module = "junit")
+  }
 
   implementation("org.threeten:threetenbp:1.3.6")
 
diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/DateTimeSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/DateTimeSerializer.kt
index fd14d529f..3d6f407e2 100644
--- a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/DateTimeSerializer.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/DateTimeSerializer.kt
@@ -2,10 +2,7 @@ package de.kuschku.libquassel.protocol.primitive.serializer
 
 import de.kuschku.libquassel.protocol.Quassel_Features
 import de.kuschku.libquassel.util.nio.ChainedByteBuffer
-import org.threeten.bp.Instant
-import org.threeten.bp.LocalDateTime
-import org.threeten.bp.OffsetDateTime
-import org.threeten.bp.ZoneOffset
+import org.threeten.bp.*
 import org.threeten.bp.temporal.ChronoField
 import org.threeten.bp.temporal.JulianFields
 import org.threeten.bp.temporal.Temporal
@@ -37,6 +34,12 @@ object DateTimeSerializer : Serializer<Temporal> {
         ByteSerializer.serialize(buffer, TimeSpec.OffsetFromUTC.value, features)
         IntSerializer.serialize(buffer, data.offset.totalSeconds, features)
       }
+      is ZonedDateTime  -> {
+        IntSerializer.serialize(buffer, data.getLong(JulianFields.JULIAN_DAY).toInt(), features)
+        IntSerializer.serialize(buffer, data.getLong(ChronoField.MILLI_OF_DAY).toInt(), features)
+        ByteSerializer.serialize(buffer, TimeSpec.OffsetFromUTC.value, features)
+        IntSerializer.serialize(buffer, data.offset.totalSeconds, features)
+      }
       is Instant        -> {
         val time = data.atOffset(ZoneOffset.UTC)
         IntSerializer.serialize(buffer, time.getLong(JulianFields.JULIAN_DAY).toInt(), features)
@@ -56,12 +59,18 @@ object DateTimeSerializer : Serializer<Temporal> {
     if (milliOfDay == -1L || julianDay == -1L)
       return Instant.EPOCH
     return when (timeSpec) {
-      TimeSpec.LocalTime ->
+      TimeSpec.LocalTime     ->
         Instant.EPOCH.atZone(ZoneOffset.systemDefault())
           .with(JulianFields.JULIAN_DAY, julianDay)
           .with(ChronoField.MILLI_OF_DAY, milliOfDay)
           .toInstant()
-      else               ->
+      TimeSpec.OffsetFromUTC ->
+        Instant.EPOCH.atOffset(
+          ZoneOffset.ofTotalSeconds(IntSerializer.deserialize(buffer, features)))
+          .with(JulianFields.JULIAN_DAY, julianDay)
+          .with(ChronoField.MILLI_OF_DAY, milliOfDay)
+          .toInstant()
+      else                   ->
         Instant.EPOCH.atOffset(ZoneOffset.UTC)
           .with(JulianFields.JULIAN_DAY, julianDay)
           .with(ChronoField.MILLI_OF_DAY, milliOfDay)
diff --git a/lib/src/test/java/de/kuschku/libquassel/SerializerUnitTest.kt b/lib/src/test/java/de/kuschku/libquassel/SerializerUnitTest.kt
index 85f57bd66..829653e92 100644
--- a/lib/src/test/java/de/kuschku/libquassel/SerializerUnitTest.kt
+++ b/lib/src/test/java/de/kuschku/libquassel/SerializerUnitTest.kt
@@ -44,12 +44,13 @@ class SerializerUnitTest {
   @Test
   fun dateTimeSerializer() {
     assertEquals(Instant.EPOCH, roundTrip(DateTimeSerializer, Instant.EPOCH))
-    assertEquals(Instant.now(), roundTrip(DateTimeSerializer, Instant.now()))
+    val now = Instant.now()
+    assertEquals(now, roundTrip(DateTimeSerializer, now))
 
     val value1 = Instant.EPOCH.atOffset(ZoneOffset.ofTotalSeconds(1234))
-    assertEquals(value1, roundTrip(DateTimeSerializer, value1))
+    assertEquals(value1.toInstant(), roundTrip(DateTimeSerializer, value1))
     val value2 = Instant.now().atOffset(ZoneOffset.ofTotalSeconds(1234))
-    assertEquals(value2, roundTrip(DateTimeSerializer, value2))
+    assertEquals(value2.toInstant(), roundTrip(DateTimeSerializer, value2))
 
     val value3 = LocalDateTime.of(1970, 1, 1, 0, 0)
       .atZone(ZoneOffset.systemDefault()).toInstant()
-- 
GitLab