From dd0380c5d0d9ed247286b616b326ada42c7ef0a5 Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Tue, 15 Jan 2019 20:46:37 +0100
Subject: [PATCH] Add tests for deserialization

---
 .../serializer/BoolSerializerTest.kt          |  6 +++++-
 .../serializer/BufferInfoSerializerTest.kt    |  3 +++
 .../serializer/ByteArraySerializerTest.kt     |  3 +++
 .../serializer/ByteSerializerTest.kt          |  5 +++++
 .../serializer/CharSerializerTest.kt          | 10 ++++++++++
 .../serializer/DateTimeSerializerTest.kt      | 14 ++++++++-----
 .../primitive/serializer/IntSerializerTest.kt |  6 ++++++
 .../serializer/LongSerializerTest.kt          |  5 +++++
 .../serializer/MessageSerializerTest.kt       |  6 ++++++
 .../serializer/ShortSerializerTest.kt         |  5 +++++
 .../serializer/StringSerializerTest.kt        | 20 ++++++++++++++++++-
 .../libquassel/util/SerializerHelpers.kt      |  6 ++++++
 12 files changed, 82 insertions(+), 7 deletions(-)

diff --git a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/BoolSerializerTest.kt b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/BoolSerializerTest.kt
index 4f8cc8b24..282ca3d5d 100644
--- a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/BoolSerializerTest.kt
+++ b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/BoolSerializerTest.kt
@@ -19,14 +19,18 @@
 
 package de.kuschku.libquassel.protocol.primitive.serializer
 
+import de.kuschku.libquassel.util.deserialize
 import de.kuschku.libquassel.util.roundTrip
 import org.junit.Assert.assertEquals
 import org.junit.Test
 
 class BoolSerializerTest {
   @Test
-  fun testFalse() {
+  fun test() {
     assertEquals(true, roundTrip(BoolSerializer, true))
+    assertEquals(true, deserialize(BoolSerializer, byteArrayOf(1)))
+
     assertEquals(false, roundTrip(BoolSerializer, false))
+    assertEquals(false, deserialize(BoolSerializer, byteArrayOf(0)))
   }
 }
diff --git a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/BufferInfoSerializerTest.kt b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/BufferInfoSerializerTest.kt
index 124f46083..b3cf67206 100644
--- a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/BufferInfoSerializerTest.kt
+++ b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/BufferInfoSerializerTest.kt
@@ -21,6 +21,7 @@ package de.kuschku.libquassel.protocol.primitive.serializer
 
 import de.kuschku.libquassel.protocol.Buffer_Type
 import de.kuschku.libquassel.quassel.BufferInfo
+import de.kuschku.libquassel.util.deserialize
 import de.kuschku.libquassel.util.roundTrip
 import org.junit.Assert.assertEquals
 import org.junit.Test
@@ -36,6 +37,7 @@ class BufferInfoSerializerTest {
       ""
     )
     assertEquals(value, roundTrip(BufferInfoSerializer, value))
+    assertEquals(value, deserialize(BufferInfoSerializer, byteArrayOf(-1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, -1, -1, -1, 0, 0, 0, 0)))
   }
 
   @Test
@@ -48,5 +50,6 @@ class BufferInfoSerializerTest {
       "äẞ\u0000\uFFFF"
     )
     assertEquals(value, roundTrip(BufferInfoSerializer, value))
+    assertEquals(value, deserialize(BufferInfoSerializer, byteArrayOf(127, -1, -1, -1, 127, -1, -1, -1, 0, 15, 127, -1, -1, -1, 0, 0, 0, 9, -61, -92, -31, -70, -98, 0, -17, -65, -65)))
   }
 }
diff --git a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/ByteArraySerializerTest.kt b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/ByteArraySerializerTest.kt
index f8378916c..50d561034 100644
--- a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/ByteArraySerializerTest.kt
+++ b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/ByteArraySerializerTest.kt
@@ -19,6 +19,7 @@
 
 package de.kuschku.libquassel.protocol.primitive.serializer
 
+import de.kuschku.libquassel.util.deserialize
 import de.kuschku.libquassel.util.roundTrip
 import org.junit.Assert.assertArrayEquals
 import org.junit.Test
@@ -29,11 +30,13 @@ class ByteArraySerializerTest {
   fun testBaseCase() {
     val value = byteArrayOf()
     assertArrayEquals(value, roundTrip(ByteArraySerializer, ByteBuffer.wrap(value))?.array())
+    assertArrayEquals(value, deserialize(ByteArraySerializer, byteArrayOf(0, 0, 0, 0))?.array())
   }
 
   @Test
   fun testNormal() {
     val value = byteArrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
     assertArrayEquals(value, roundTrip(ByteArraySerializer, ByteBuffer.wrap(value))?.array())
+    assertArrayEquals(value, deserialize(ByteArraySerializer, byteArrayOf(0, 0, 0, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9))?.array())
   }
 }
diff --git a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/ByteSerializerTest.kt b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/ByteSerializerTest.kt
index 8892bbfdc..e66020dc0 100644
--- a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/ByteSerializerTest.kt
+++ b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/ByteSerializerTest.kt
@@ -19,6 +19,7 @@
 
 package de.kuschku.libquassel.protocol.primitive.serializer
 
+import de.kuschku.libquassel.util.deserialize
 import de.kuschku.libquassel.util.roundTrip
 import org.junit.Assert.assertEquals
 import org.junit.Test
@@ -28,20 +29,24 @@ class ByteSerializerTest {
   @Test
   fun testZero() {
     assertEquals(0.toByte(), roundTrip(ByteSerializer, 0.toByte()))
+    assertEquals(0.toByte(), deserialize(ByteSerializer, byteArrayOf(0)))
   }
 
   @Test
   fun testMinimal() {
     assertEquals(Byte.MIN_VALUE, roundTrip(ByteSerializer, Byte.MIN_VALUE))
+    assertEquals(Byte.MIN_VALUE, deserialize(ByteSerializer, byteArrayOf(-128)))
   }
 
   @Test
   fun testMaximal() {
     assertEquals(Byte.MAX_VALUE, roundTrip(ByteSerializer, Byte.MAX_VALUE))
+    assertEquals(Byte.MAX_VALUE, deserialize(ByteSerializer, byteArrayOf(127)))
   }
 
   @Test
   fun testAllOnes() {
     assertEquals((0.toByte().inv()), roundTrip(ByteSerializer, (0.toByte().inv())))
+    assertEquals((0.toByte().inv()), deserialize(ByteSerializer, byteArrayOf(-1)))
   }
 }
diff --git a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/CharSerializerTest.kt b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/CharSerializerTest.kt
index 4cc17c512..5f242f426 100644
--- a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/CharSerializerTest.kt
+++ b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/CharSerializerTest.kt
@@ -19,6 +19,7 @@
 
 package de.kuschku.libquassel.protocol.primitive.serializer
 
+import de.kuschku.libquassel.util.deserialize
 import de.kuschku.libquassel.util.roundTrip
 import org.junit.Assert.assertEquals
 import org.junit.Test
@@ -27,9 +28,18 @@ class CharSerializerTest {
   @Test
   fun testAll() {
     assertEquals(' ', roundTrip(CharSerializer, ' '))
+    assertEquals(' ', deserialize(CharSerializer, byteArrayOf(0, 32)))
+
     assertEquals('a', roundTrip(CharSerializer, 'a'))
+    assertEquals('a', deserialize(CharSerializer, byteArrayOf(0, 97)))
+
     assertEquals('ä', roundTrip(CharSerializer, 'ä'))
+    assertEquals('ä', deserialize(CharSerializer, byteArrayOf(0, -28)))
+
     assertEquals('\u0000', roundTrip(CharSerializer, '\u0000'))
+    assertEquals('\u0000', deserialize(CharSerializer, byteArrayOf(0, 0)))
+
     assertEquals('\uFFFF', roundTrip(CharSerializer, '\uFFFF'))
+    assertEquals('\uFFFF', deserialize(CharSerializer, byteArrayOf(-1, -1)))
   }
 }
diff --git a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/DateTimeSerializerTest.kt b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/DateTimeSerializerTest.kt
index cd01454a6..2a6b68e07 100644
--- a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/DateTimeSerializerTest.kt
+++ b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/DateTimeSerializerTest.kt
@@ -19,11 +19,13 @@
 
 package de.kuschku.libquassel.protocol.primitive.serializer
 
+import de.kuschku.libquassel.util.deserialize
 import de.kuschku.libquassel.util.roundTrip
 import org.junit.Assert.assertEquals
 import org.junit.Test
 import org.threeten.bp.Instant
 import org.threeten.bp.LocalDateTime
+import org.threeten.bp.Month
 import org.threeten.bp.ZoneOffset
 
 class DateTimeSerializerTest {
@@ -31,15 +33,14 @@ class DateTimeSerializerTest {
   fun testEpoch() {
     val value = roundTrip(DateTimeSerializer, Instant.EPOCH)
     assertEquals(Instant.EPOCH, value)
+    assertEquals(Instant.EPOCH, deserialize(DateTimeSerializer, byteArrayOf(0, 37, 61, -116, 0, 0, 0, 0, 2)))
   }
 
   @Test
   fun testEpochAtTimezone() {
     val value = Instant.EPOCH.atOffset(ZoneOffset.ofTotalSeconds(1234))
-    assertEquals(
-      value,
-      roundTrip(DateTimeSerializer, value)
-    )
+    assertEquals(value, roundTrip(DateTimeSerializer, value))
+    assertEquals(value, deserialize(DateTimeSerializer, byteArrayOf(0, 37, 61, -116, 0, 18, -44, 80, 3, 0, 0, 4, -46)))
   }
 
   @Test
@@ -47,11 +48,14 @@ class DateTimeSerializerTest {
     val value = LocalDateTime.of(1970, 1, 1, 0, 0)
       .atZone(ZoneOffset.systemDefault()).toInstant()
     assertEquals(value, roundTrip(DateTimeSerializer, value))
+    assertEquals(value, deserialize(DateTimeSerializer, byteArrayOf(0, 37, 61, -117, 4, -17, 109, -128, 2)))
   }
 
   @Test
   fun testNormalCase() {
-    val value = LocalDateTime.now().atZone(ZoneOffset.systemDefault()).toInstant()
+    val value = LocalDateTime.of(2019, Month.JANUARY, 15, 20, 25)
+      .atZone(ZoneOffset.systemDefault()).toInstant()
     assertEquals(value, roundTrip(DateTimeSerializer, value))
+    assertEquals(value, deserialize(DateTimeSerializer, byteArrayOf(0, 37, -125, -125, 4, 42, -106, -32, 2)))
   }
 }
diff --git a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/IntSerializerTest.kt b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/IntSerializerTest.kt
index b28075ee0..a9c449af2 100644
--- a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/IntSerializerTest.kt
+++ b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/IntSerializerTest.kt
@@ -19,28 +19,34 @@
 
 package de.kuschku.libquassel.protocol.primitive.serializer
 
+import de.kuschku.libquassel.util.deserialize
 import de.kuschku.libquassel.util.roundTrip
 import org.junit.Assert.assertEquals
 import org.junit.Test
+import kotlin.experimental.inv
 
 class IntSerializerTest {
   @Test
   fun testZero() {
     assertEquals(0, roundTrip(IntSerializer, 0))
+    assertEquals(0, deserialize(IntSerializer, byteArrayOf(0, 0, 0, 0)))
   }
 
   @Test
   fun testMinimal() {
     assertEquals(Int.MIN_VALUE, roundTrip(IntSerializer, Int.MIN_VALUE))
+    assertEquals(Int.MIN_VALUE, deserialize(IntSerializer, byteArrayOf(-128, 0, 0, 0)))
   }
 
   @Test
   fun testMaximal() {
     assertEquals(Int.MAX_VALUE, roundTrip(IntSerializer, Int.MAX_VALUE))
+    assertEquals(Int.MAX_VALUE, deserialize(IntSerializer, byteArrayOf(127, -1, -1, -1)))
   }
 
   @Test
   fun testAllOnes() {
     assertEquals(0.inv(), roundTrip(IntSerializer, 0.inv()))
+    assertEquals(0.inv(), deserialize(IntSerializer, byteArrayOf(-1, -1, -1, -1)))
   }
 }
diff --git a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/LongSerializerTest.kt b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/LongSerializerTest.kt
index e69e7231f..7bcd8d586 100644
--- a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/LongSerializerTest.kt
+++ b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/LongSerializerTest.kt
@@ -19,6 +19,7 @@
 
 package de.kuschku.libquassel.protocol.primitive.serializer
 
+import de.kuschku.libquassel.util.deserialize
 import de.kuschku.libquassel.util.roundTrip
 import org.junit.Assert.assertEquals
 import org.junit.Test
@@ -27,20 +28,24 @@ class LongSerializerTest {
   @Test
   fun testZero() {
     assertEquals(0L, roundTrip(LongSerializer, 0L))
+    assertEquals(0L, deserialize(LongSerializer, byteArrayOf(0, 0, 0, 0, 0, 0, 0, 0)))
   }
 
   @Test
   fun testMinimal() {
     assertEquals(Long.MIN_VALUE, roundTrip(LongSerializer, Long.MIN_VALUE))
+    assertEquals(Long.MIN_VALUE, deserialize(LongSerializer, byteArrayOf(-128, 0, 0, 0, 0, 0, 0, 0)))
   }
 
   @Test
   fun testMaximal() {
     assertEquals(Long.MAX_VALUE, roundTrip(LongSerializer, Long.MAX_VALUE))
+    assertEquals(Long.MAX_VALUE, deserialize(LongSerializer, byteArrayOf(127, -1, -1, -1, -1, -1, -1, -1)))
   }
 
   @Test
   fun testAllOnes() {
     assertEquals(0L.inv(), roundTrip(LongSerializer, 0L.inv()))
+    assertEquals(0L.inv(), deserialize(LongSerializer, byteArrayOf(-1, -1, -1, -1, -1, -1, -1, -1)))
   }
 }
diff --git a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/MessageSerializerTest.kt b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/MessageSerializerTest.kt
index 9f874a2e2..5cc08b616 100644
--- a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/MessageSerializerTest.kt
+++ b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/MessageSerializerTest.kt
@@ -22,6 +22,7 @@ package de.kuschku.libquassel.protocol.primitive.serializer
 import de.kuschku.libquassel.protocol.*
 import de.kuschku.libquassel.quassel.BufferInfo
 import de.kuschku.libquassel.quassel.QuasselFeatures
+import de.kuschku.libquassel.util.deserialize
 import de.kuschku.libquassel.util.roundTrip
 import org.junit.Assert.assertEquals
 import org.junit.Test
@@ -50,6 +51,7 @@ class MessageSerializerTest {
     )
     val other = roundTrip(MessageSerializer, value, features = QuasselFeatures.empty())
     assertEquals(value, other)
+    assertEquals(value, deserialize(MessageSerializer, byteArrayOf(-1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), features = QuasselFeatures.empty()))
   }
 
   @Test
@@ -74,6 +76,7 @@ class MessageSerializerTest {
     )
     val other = roundTrip(MessageSerializer, value, features = QuasselFeatures.empty())
     assertEquals(value, other)
+    assertEquals(value, deserialize(MessageSerializer, byteArrayOf(127, -1, -1, -1, 90, -33, -109, -106, 0, 7, -1, -1, -113, 127, -1, -1, -1, 127, -1, -1, -1, 0, 15, 127, -1, -1, -1, 0, 0, 0, 9, -61, -92, -31, -70, -98, 0, -17, -65, -65, 0, 0, 0, 9, -61, -92, -31, -70, -98, 0, -17, -65, -65, 0, 0, 0, 9, -61, -92, -31, -70, -98, 0, -17, -65, -65), features = QuasselFeatures.empty()))
   }
 
   @Test
@@ -98,6 +101,7 @@ class MessageSerializerTest {
     )
     val other = roundTrip(MessageSerializer, value, features = QuasselFeatures.all())
     assertEquals(value, other)
+    assertEquals(value, deserialize(MessageSerializer, byteArrayOf(-1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), features = QuasselFeatures.all()))
   }
 
   @Test
@@ -122,6 +126,7 @@ class MessageSerializerTest {
     )
     val other = roundTrip(MessageSerializer, value, features = QuasselFeatures.all())
     assertEquals(value, other)
+    assertEquals(value, deserialize(MessageSerializer, byteArrayOf(127, -1, -1, -1, -1, -1, -1, -1, 0, 0, 1, 98, -7, 88, -127, -16, 0, 7, -1, -1, -113, 127, -1, -1, -1, 127, -1, -1, -1, 0, 15, 127, -1, -1, -1, 0, 0, 0, 9, -61, -92, -31, -70, -98, 0, -17, -65, -65, 0, 0, 0, 9, -61, -92, -31, -70, -98, 0, -17, -65, -65, 0, 0, 0, 9, -61, -92, -31, -70, -98, 0, -17, -65, -65, 0, 0, 0, 9, -61, -92, -31, -70, -98, 0, -17, -65, -65, 0, 0, 0, 9, -61, -92, -31, -70, -98, 0, -17, -65, -65, 0, 0, 0, 9, -61, -92, -31, -70, -98, 0, -17, -65, -65), features = QuasselFeatures.all()))
   }
 
   @Test
@@ -146,5 +151,6 @@ class MessageSerializerTest {
     )
     val other = roundTrip(MessageSerializer, value, features = QuasselFeatures.all())
     assertEquals(value, other)
+    assertEquals(value, deserialize(MessageSerializer, byteArrayOf(127, -1, -1, -1, -1, -1, -1, -1, 0, 0, 19, -121, -1, -1, -40, -16, 0, 7, -1, -1, -113, 127, -1, -1, -1, 127, -1, -1, -1, 0, 15, 127, -1, -1, -1, 0, 0, 0, 9, -61, -92, -31, -70, -98, 0, -17, -65, -65, 0, 0, 0, 9, -61, -92, -31, -70, -98, 0, -17, -65, -65, 0, 0, 0, 9, -61, -92, -31, -70, -98, 0, -17, -65, -65, 0, 0, 0, 9, -61, -92, -31, -70, -98, 0, -17, -65, -65, 0, 0, 0, 9, -61, -92, -31, -70, -98, 0, -17, -65, -65, 0, 0, 0, 9, -61, -92, -31, -70, -98, 0, -17, -65, -65), features = QuasselFeatures.all()))
   }
 }
diff --git a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/ShortSerializerTest.kt b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/ShortSerializerTest.kt
index 983f13056..79d090def 100644
--- a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/ShortSerializerTest.kt
+++ b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/ShortSerializerTest.kt
@@ -19,6 +19,7 @@
 
 package de.kuschku.libquassel.protocol.primitive.serializer
 
+import de.kuschku.libquassel.util.deserialize
 import de.kuschku.libquassel.util.roundTrip
 import org.junit.Assert.assertEquals
 import org.junit.Test
@@ -28,20 +29,24 @@ class ShortSerializerTest {
   @Test
   fun testZero() {
     assertEquals(0.toShort(), roundTrip(ShortSerializer, 0.toShort()))
+    assertEquals(0.toShort(), deserialize(ShortSerializer, byteArrayOf(0, 0)))
   }
 
   @Test
   fun testMinimal() {
     assertEquals(Short.MIN_VALUE, roundTrip(ShortSerializer, Short.MIN_VALUE))
+    assertEquals(Short.MIN_VALUE, deserialize(ShortSerializer, byteArrayOf(-128, 0)))
   }
 
   @Test
   fun testMaximal() {
     assertEquals(Short.MAX_VALUE, roundTrip(ShortSerializer, Short.MAX_VALUE))
+    assertEquals(Short.MAX_VALUE, deserialize(ShortSerializer, byteArrayOf(127, -1)))
   }
 
   @Test
   fun testAllOnes() {
     assertEquals((0.toShort().inv()), roundTrip(ShortSerializer, (0.toShort().inv())))
+    assertEquals((0.toShort().inv()), deserialize(ShortSerializer, byteArrayOf(-1, -1)))
   }
 }
diff --git a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/StringSerializerTest.kt b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/StringSerializerTest.kt
index f17fc1982..9ba4c0b4a 100644
--- a/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/StringSerializerTest.kt
+++ b/lib/src/test/java/de/kuschku/libquassel/protocol/primitive/serializer/StringSerializerTest.kt
@@ -19,6 +19,7 @@
 
 package de.kuschku.libquassel.protocol.primitive.serializer
 
+import de.kuschku.libquassel.util.deserialize
 import de.kuschku.libquassel.util.roundTrip
 import org.hamcrest.BaseMatcher
 import org.hamcrest.Description
@@ -28,7 +29,7 @@ import org.junit.Test
 
 class StringSerializerTest {
   @Test
-  fun testVigListOfNaughtyStrings() {
+  fun testBigListOfNaughtyStrings() {
     this::class.java.getResourceAsStream("/blns.txt").bufferedReader(Charsets.UTF_8).forEachLine {
       // Ignore comments
       if (!it.startsWith('#')) {
@@ -38,6 +39,23 @@ class StringSerializerTest {
     }
   }
 
+  @Test
+  fun testSample() {
+    val value = """
+      : ACHTUNG!
+      ALLES TURISTEN UND NONTEKNISCHEN LOOKENPEEPERS!
+      DAS KOMPUTERMASCHINE IST NICHT FÜR DER GEFINGERPOKEN UND MITTENGRABEN! ODERWISE IST EASY TO SCHNAPPEN DER SPRINGENWERK, BLOWENFUSEN UND POPPENCORKEN MIT SPITZENSPARKEN.
+      IST NICHT FÜR GEWERKEN BEI DUMMKOPFEN. DER RUBBERNECKEN SIGHTSEEREN KEEPEN DAS COTTONPICKEN HÄNDER IN DAS POCKETS MUSS.
+      ZO RELAXEN UND WATSCHEN DER BLINKENLICHTEN.
+    """.trimIndent()
+
+    assertEquals(value, roundTrip(StringSerializer.UTF8, value))
+    assertEquals(value, deserialize(StringSerializer.UTF8, byteArrayOf(0, 0, 1, -118, 58, 32, 65, 67, 72, 84, 85, 78, 71, 33, 10, 65, 76, 76, 69, 83, 32, 84, 85, 82, 73, 83, 84, 69, 78, 32, 85, 78, 68, 32, 78, 79, 78, 84, 69, 75, 78, 73, 83, 67, 72, 69, 78, 32, 76, 79, 79, 75, 69, 78, 80, 69, 69, 80, 69, 82, 83, 33, 10, 68, 65, 83, 32, 75, 79, 77, 80, 85, 84, 69, 82, 77, 65, 83, 67, 72, 73, 78, 69, 32, 73, 83, 84, 32, 78, 73, 67, 72, 84, 32, 70, -61, -100, 82, 32, 68, 69, 82, 32, 71, 69, 70, 73, 78, 71, 69, 82, 80, 79, 75, 69, 78, 32, 85, 78, 68, 32, 77, 73, 84, 84, 69, 78, 71, 82, 65, 66, 69, 78, 33, 32, 79, 68, 69, 82, 87, 73, 83, 69, 32, 73, 83, 84, 32, 69, 65, 83, 89, 32, 84, 79, 32, 83, 67, 72, 78, 65, 80, 80, 69, 78, 32, 68, 69, 82, 32, 83, 80, 82, 73, 78, 71, 69, 78, 87, 69, 82, 75, 44, 32, 66, 76, 79, 87, 69, 78, 70, 85, 83, 69, 78, 32, 85, 78, 68, 32, 80, 79, 80, 80, 69, 78, 67, 79, 82, 75, 69, 78, 32, 77, 73, 84, 32, 83, 80, 73, 84, 90, 69, 78, 83, 80, 65, 82, 75, 69, 78, 46, 10, 73, 83, 84, 32, 78, 73, 67, 72, 84, 32, 70, -61, -100, 82, 32, 71, 69, 87, 69, 82, 75, 69, 78, 32, 66, 69, 73, 32, 68, 85, 77, 77, 75, 79, 80, 70, 69, 78, 46, 32, 68, 69, 82, 32, 82, 85, 66, 66, 69, 82, 78, 69, 67, 75, 69, 78, 32, 83, 73, 71, 72, 84, 83, 69, 69, 82, 69, 78, 32, 75, 69, 69, 80, 69, 78, 32, 68, 65, 83, 32, 67, 79, 84, 84, 79, 78, 80, 73, 67, 75, 69, 78, 32, 72, -61, -124, 78, 68, 69, 82, 32, 73, 78, 32, 68, 65, 83, 32, 80, 79, 67, 75, 69, 84, 83, 32, 77, 85, 83, 83, 46, 10, 90, 79, 32, 82, 69, 76, 65, 88, 69, 78, 32, 85, 78, 68, 32, 87, 65, 84, 83, 67, 72, 69, 78, 32, 68, 69, 82, 32, 66, 76, 73, 78, 75, 69, 78, 76, 73, 67, 72, 84, 69, 78, 46)))
+
+    assertEquals(value, roundTrip(StringSerializer.UTF16, value))
+    assertEquals(value, deserialize(StringSerializer.UTF16, byteArrayOf(0, 0, 3, 14, 0, 58, 0, 32, 0, 65, 0, 67, 0, 72, 0, 84, 0, 85, 0, 78, 0, 71, 0, 33, 0, 10, 0, 65, 0, 76, 0, 76, 0, 69, 0, 83, 0, 32, 0, 84, 0, 85, 0, 82, 0, 73, 0, 83, 0, 84, 0, 69, 0, 78, 0, 32, 0, 85, 0, 78, 0, 68, 0, 32, 0, 78, 0, 79, 0, 78, 0, 84, 0, 69, 0, 75, 0, 78, 0, 73, 0, 83, 0, 67, 0, 72, 0, 69, 0, 78, 0, 32, 0, 76, 0, 79, 0, 79, 0, 75, 0, 69, 0, 78, 0, 80, 0, 69, 0, 69, 0, 80, 0, 69, 0, 82, 0, 83, 0, 33, 0, 10, 0, 68, 0, 65, 0, 83, 0, 32, 0, 75, 0, 79, 0, 77, 0, 80, 0, 85, 0, 84, 0, 69, 0, 82, 0, 77, 0, 65, 0, 83, 0, 67, 0, 72, 0, 73, 0, 78, 0, 69, 0, 32, 0, 73, 0, 83, 0, 84, 0, 32, 0, 78, 0, 73, 0, 67, 0, 72, 0, 84, 0, 32, 0, 70, 0, -36, 0, 82, 0, 32, 0, 68, 0, 69, 0, 82, 0, 32, 0, 71, 0, 69, 0, 70, 0, 73, 0, 78, 0, 71, 0, 69, 0, 82, 0, 80, 0, 79, 0, 75, 0, 69, 0, 78, 0, 32, 0, 85, 0, 78, 0, 68, 0, 32, 0, 77, 0, 73, 0, 84, 0, 84, 0, 69, 0, 78, 0, 71, 0, 82, 0, 65, 0, 66, 0, 69, 0, 78, 0, 33, 0, 32, 0, 79, 0, 68, 0, 69, 0, 82, 0, 87, 0, 73, 0, 83, 0, 69, 0, 32, 0, 73, 0, 83, 0, 84, 0, 32, 0, 69, 0, 65, 0, 83, 0, 89, 0, 32, 0, 84, 0, 79, 0, 32, 0, 83, 0, 67, 0, 72, 0, 78, 0, 65, 0, 80, 0, 80, 0, 69, 0, 78, 0, 32, 0, 68, 0, 69, 0, 82, 0, 32, 0, 83, 0, 80, 0, 82, 0, 73, 0, 78, 0, 71, 0, 69, 0, 78, 0, 87, 0, 69, 0, 82, 0, 75, 0, 44, 0, 32, 0, 66, 0, 76, 0, 79, 0, 87, 0, 69, 0, 78, 0, 70, 0, 85, 0, 83, 0, 69, 0, 78, 0, 32, 0, 85, 0, 78, 0, 68, 0, 32, 0, 80, 0, 79, 0, 80, 0, 80, 0, 69, 0, 78, 0, 67, 0, 79, 0, 82, 0, 75, 0, 69, 0, 78, 0, 32, 0, 77, 0, 73, 0, 84, 0, 32, 0, 83, 0, 80, 0, 73, 0, 84, 0, 90, 0, 69, 0, 78, 0, 83, 0, 80, 0, 65, 0, 82, 0, 75, 0, 69, 0, 78, 0, 46, 0, 10, 0, 73, 0, 83, 0, 84, 0, 32, 0, 78, 0, 73, 0, 67, 0, 72, 0, 84, 0, 32, 0, 70, 0, -36, 0, 82, 0, 32, 0, 71, 0, 69, 0, 87, 0, 69, 0, 82, 0, 75, 0, 69, 0, 78, 0, 32, 0, 66, 0, 69, 0, 73, 0, 32, 0, 68, 0, 85, 0, 77, 0, 77, 0, 75, 0, 79, 0, 80, 0, 70, 0, 69, 0, 78, 0, 46, 0, 32, 0, 68, 0, 69, 0, 82, 0, 32, 0, 82, 0, 85, 0, 66, 0, 66, 0, 69, 0, 82, 0, 78, 0, 69, 0, 67, 0, 75, 0, 69, 0, 78, 0, 32, 0, 83, 0, 73, 0, 71, 0, 72, 0, 84, 0, 83, 0, 69, 0, 69, 0, 82, 0, 69, 0, 78, 0, 32, 0, 75, 0, 69, 0, 69, 0, 80, 0, 69, 0, 78, 0, 32, 0, 68, 0, 65, 0, 83, 0, 32, 0, 67, 0, 79, 0, 84, 0, 84, 0, 79, 0, 78, 0, 80, 0, 73, 0, 67, 0, 75, 0, 69, 0, 78, 0, 32, 0, 72, 0, -60, 0, 78, 0, 68, 0, 69, 0, 82, 0, 32, 0, 73, 0, 78, 0, 32, 0, 68, 0, 65, 0, 83, 0, 32, 0, 80, 0, 79, 0, 67, 0, 75, 0, 69, 0, 84, 0, 83, 0, 32, 0, 77, 0, 85, 0, 83, 0, 83, 0, 46, 0, 10, 0, 90, 0, 79, 0, 32, 0, 82, 0, 69, 0, 76, 0, 65, 0, 88, 0, 69, 0, 78, 0, 32, 0, 85, 0, 78, 0, 68, 0, 32, 0, 87, 0, 65, 0, 84, 0, 83, 0, 67, 0, 72, 0, 69, 0, 78, 0, 32, 0, 68, 0, 69, 0, 82, 0, 32, 0, 66, 0, 76, 0, 73, 0, 78, 0, 75, 0, 69, 0, 78, 0, 76, 0, 73, 0, 67, 0, 72, 0, 84, 0, 69, 0, 78, 0, 46)))
+  }
+
   @Test
   fun testAscii() {
     // The simple solution: Just test all
diff --git a/lib/src/test/java/de/kuschku/libquassel/util/SerializerHelpers.kt b/lib/src/test/java/de/kuschku/libquassel/util/SerializerHelpers.kt
index ea1ade487..a565b5070 100644
--- a/lib/src/test/java/de/kuschku/libquassel/util/SerializerHelpers.kt
+++ b/lib/src/test/java/de/kuschku/libquassel/util/SerializerHelpers.kt
@@ -22,6 +22,7 @@ package de.kuschku.libquassel.util
 import de.kuschku.libquassel.protocol.primitive.serializer.Serializer
 import de.kuschku.libquassel.quassel.QuasselFeatures
 import de.kuschku.libquassel.util.nio.ChainedByteBuffer
+import java.nio.ByteBuffer
 
 fun <T> roundTrip(serializer: Serializer<T>, value: T,
                   features: QuasselFeatures = QuasselFeatures.all()): T {
@@ -32,3 +33,8 @@ fun <T> roundTrip(serializer: Serializer<T>, value: T,
   val buffer = chainedBuffer.toBuffer()
   return serializer.deserialize(buffer, features)
 }
+
+fun <T> deserialize(serializer: Serializer<T>, values: ByteArray,
+                    features: QuasselFeatures = QuasselFeatures.all()): T {
+  return serializer.deserialize(ByteBuffer.wrap(byteArrayOf(*values)), features)
+}
-- 
GitLab