From 0ea27011d063d4fa0e34c6916e94d4606fe5aae0 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Mon, 8 Feb 2021 01:29:39 +0100 Subject: [PATCH] Additional testing --- .../kuschku/quasseldroid/ExampleUnitTest.kt | 1 - .../main/kotlin/de/kuschku/bitflags/Flags.kt | 1 - .../de/kuschku/codecoverage/Generated.kt | 2 +- .../protocol/features/LegacyFeature.kt | 1 - .../protocol/features/QuasselFeature.kt | 3 + .../libquassel/protocol/io/ByteBufferUtil.kt | 6 +- .../protocol/io/ChainedByteBuffer.kt | 5 +- .../libquassel/protocol/io/StringEncoder.kt | 18 +++-- .../serializers/primitive/BoolSerializer.kt | 2 +- .../serializers/primitive/ByteSerializer.kt | 2 +- .../serializers/primitive/DoubleSerializer.kt | 2 +- .../serializers/primitive/FloatSerializer.kt | 2 +- .../serializers/primitive/IntSerializer.kt | 2 +- .../serializers/primitive/LongSerializer.kt | 2 +- .../serializers/primitive/QCharSerializer.kt | 2 +- .../serializers/primitive/ShortSerializer.kt | 2 +- .../protocol/types/BufferActivity.kt | 1 - .../libquassel/protocol/types/BufferType.kt | 1 - .../libquassel/protocol/types/MessageFlag.kt | 1 - .../libquassel/protocol/types/MessageType.kt | 1 - .../libquassel/protocol/variant/QVariant.kt | 56 ++++++--------- .../protocol/io/StringEncoderTest.kt | 24 ++++--- .../handshake/ClientInitSerializerTest.kt | 14 ++++ .../primitive/BoolSerializerTest.kt | 12 ++++ .../primitive/BufferIdSerializerTest.kt | 66 +++++++++++++++++ .../primitive/BufferInfoSerializerTest.kt | 14 ++++ .../primitive/ByteBufferSerializerTest.kt | 12 ++++ .../primitive/ByteSerializerTest.kt | 13 ++++ .../primitive/DateTimeSerializerTest.kt | 13 +++- .../primitive/DoubleSerializerTest.kt | 13 ++++ .../primitive/FloatSerializerTest.kt | 12 ++++ .../primitive/IdentityIdSerializerTest.kt | 66 +++++++++++++++++ .../primitive/IntSerializerTest.kt | 12 ++++ .../primitive/LongSerializerTest.kt | 12 ++++ .../primitive/MessageSerializerTest.kt | 15 ++++ .../primitive/MsgIdSerializerTest.kt | 70 +++++++++++++++++++ .../primitive/NetworkIdSerializerTest.kt | 66 +++++++++++++++++ .../primitive/PeerPtrSerializerTest.kt | 70 +++++++++++++++++++ .../primitive/QCharSerializerTest.kt | 12 ++++ .../primitive/QVariantListSerializerTest.kt | 59 ++++++++++++++++ .../primitive/QVariantMapSerializerTest.kt | 28 +++++++- .../primitive/QVariantSerializerTest.kt | 12 ++++ .../primitive/ShortSerializerTest.kt | 12 ++++ .../primitive/StringSerializerTest.kt | 10 +++ .../primitive/UByteSerializerTest.kt | 12 ++++ .../primitive/UIntSerializerTest.kt | 12 ++++ .../primitive/ULongSerializerTest.kt | 12 ++++ .../primitive/UShortSerializerTest.kt | 12 ++++ .../primitive/VoidSerializerTest.kt | 43 ++++++++++++ .../protocol/testutil/byteBufferOf.kt | 15 +++- .../protocol/variant/QVariantTest.kt | 8 +++ 51 files changed, 792 insertions(+), 72 deletions(-) create mode 100644 protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/BufferIdSerializerTest.kt create mode 100644 protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/IdentityIdSerializerTest.kt create mode 100644 protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/MsgIdSerializerTest.kt create mode 100644 protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/NetworkIdSerializerTest.kt create mode 100644 protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/PeerPtrSerializerTest.kt create mode 100644 protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/QVariantListSerializerTest.kt create mode 100644 protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/VoidSerializerTest.kt diff --git a/app/src/test/java/de/kuschku/quasseldroid/ExampleUnitTest.kt b/app/src/test/java/de/kuschku/quasseldroid/ExampleUnitTest.kt index 6a9c5578c..990e55219 100644 --- a/app/src/test/java/de/kuschku/quasseldroid/ExampleUnitTest.kt +++ b/app/src/test/java/de/kuschku/quasseldroid/ExampleUnitTest.kt @@ -69,7 +69,6 @@ class ExampleUnitTest { channel.write(sizeBuffer) sizeBuffer.clear() } - println(sendBuffer.toBuffer().contentToString()) channel.write(sendBuffer) channel.flush() sendBuffer.clear() diff --git a/bitflags/src/main/kotlin/de/kuschku/bitflags/Flags.kt b/bitflags/src/main/kotlin/de/kuschku/bitflags/Flags.kt index cc6a8daa3..716d905a5 100644 --- a/bitflags/src/main/kotlin/de/kuschku/bitflags/Flags.kt +++ b/bitflags/src/main/kotlin/de/kuschku/bitflags/Flags.kt @@ -20,6 +20,5 @@ package de.kuschku.bitflags interface Flags<T, U> where U : Flag<T>, U : Enum<U> { - operator fun get(value: T): U? val all: Set<U> } diff --git a/coverage-annotations/src/main/kotlin/de/kuschku/codecoverage/Generated.kt b/coverage-annotations/src/main/kotlin/de/kuschku/codecoverage/Generated.kt index 7b3674fb8..a0492bb5b 100644 --- a/coverage-annotations/src/main/kotlin/de/kuschku/codecoverage/Generated.kt +++ b/coverage-annotations/src/main/kotlin/de/kuschku/codecoverage/Generated.kt @@ -22,5 +22,5 @@ package de.kuschku.codecoverage /** * Used to mark inline functions as generated for jacoco */ -@Retention(AnnotationRetention.SOURCE) +@Retention(AnnotationRetention.RUNTIME) annotation class Generated diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/features/LegacyFeature.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/features/LegacyFeature.kt index f069ccc47..fece09639 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/features/LegacyFeature.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/features/LegacyFeature.kt @@ -78,7 +78,6 @@ enum class LegacyFeature( fun get(feature: QuasselFeature) = features[feature] private val values = values().associateBy(LegacyFeature::value) - override fun get(value: UInt) = values[value] override val all: LegacyFeatures = values.values.toEnumSet() } } diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/features/QuasselFeature.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/features/QuasselFeature.kt index 3466e053d..09ee52b71 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/features/QuasselFeature.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/features/QuasselFeature.kt @@ -19,6 +19,9 @@ package de.kuschku.libquassel.protocol.features +import de.kuschku.codecoverage.Generated + +@Generated inline class QuasselFeatureName( val name: String, ) diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/io/ByteBufferUtil.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/io/ByteBufferUtil.kt index d4f7e0797..15bf1c782 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/io/ByteBufferUtil.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/io/ByteBufferUtil.kt @@ -21,12 +21,10 @@ package de.kuschku.libquassel.protocol.io import java.nio.ByteBuffer -fun copyData(from: ByteBuffer, to: ByteBuffer, desiredAmount: Int = -1) { +fun copyData(from: ByteBuffer, to: ByteBuffer, desiredAmount: Int) { val limit = from.limit() val availableAmount = minOf(from.remaining(), to.remaining()) - val amount = - if (desiredAmount < 0) availableAmount - else minOf(availableAmount, desiredAmount) + val amount = minOf(availableAmount, desiredAmount) from.limit(from.position() + amount) to.put(from) from.limit(limit) diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/io/ChainedByteBuffer.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/io/ChainedByteBuffer.kt index ba8aeade6..20c977ead 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/io/ChainedByteBuffer.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/io/ChainedByteBuffer.kt @@ -90,8 +90,11 @@ class ChainedByteBuffer( val requested = minOf(value.remaining(), chunkSize) if (bufferList.lastOrNull()?.hasRemaining() != true) { ensureSpace(requested) + } else { + ensureSpace(minOf(bufferList.last().remaining(), requested)) } - copyData(value, bufferList.last()) + + copyData(value, bufferList.last(), requested) } } diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/io/StringEncoder.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/io/StringEncoder.kt index 08ebb2a33..782c8946d 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/io/StringEncoder.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/io/StringEncoder.kt @@ -52,13 +52,21 @@ class StringEncoder(charset: Charset) { return encodeInternal(charBuffer) } - fun encodeChar(data: Char?): ByteBuffer { - if (!encoder.canEncode(data ?: '\u0000')) { - return ByteBuffer.allocateDirect(2) + private fun replacementChar(data: Char?): Char { + return if (data == null || !encoder.canEncode(data)) { + if (encoder.canEncode('\uFFFD')) { + '\uFFFD' + } else { + '\u0000' + } + } else { + data } + } - val charBuffer = charBuffer(2) - charBuffer.put(data ?: '\u0000') + fun encodeChar(data: Char?): ByteBuffer { + val charBuffer = charBuffer(1) + charBuffer.put(replacementChar(data)) charBuffer.flip() return encodeInternal(charBuffer) } diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/BoolSerializer.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/BoolSerializer.kt index 0e0b73a6a..1e51bd537 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/BoolSerializer.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/BoolSerializer.kt @@ -26,7 +26,7 @@ import java.nio.ByteBuffer object BoolSerializer : QtSerializer<Boolean> { override val qtType: QtType = QtType.Bool - override val javaType: Class<Boolean> = Boolean::class.java + override val javaType: Class<Boolean> = Boolean::class.javaObjectType override fun serialize(buffer: ChainedByteBuffer, data: Boolean, featureSet: FeatureSet) { buffer.put( diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/ByteSerializer.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/ByteSerializer.kt index e996faf6e..2d3d7083c 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/ByteSerializer.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/ByteSerializer.kt @@ -26,7 +26,7 @@ import java.nio.ByteBuffer object ByteSerializer : QtSerializer<Byte> { override val qtType: QtType = QtType.Char - override val javaType: Class<Byte> = Byte::class.java + override val javaType: Class<Byte> = Byte::class.javaObjectType override fun serialize(buffer: ChainedByteBuffer, data: Byte, featureSet: FeatureSet) { buffer.put(data) diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/DoubleSerializer.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/DoubleSerializer.kt index 6217ea633..1e81a519d 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/DoubleSerializer.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/DoubleSerializer.kt @@ -26,7 +26,7 @@ import java.nio.ByteBuffer object DoubleSerializer : QtSerializer<Double> { override val qtType: QtType = QtType.Double - override val javaType: Class<Double> = Double::class.java + override val javaType: Class<Double> = Double::class.javaObjectType override fun serialize(buffer: ChainedByteBuffer, data: Double, featureSet: FeatureSet) { buffer.putDouble(data) diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/FloatSerializer.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/FloatSerializer.kt index 9cfaf16be..636262b56 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/FloatSerializer.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/FloatSerializer.kt @@ -26,7 +26,7 @@ import java.nio.ByteBuffer object FloatSerializer : QtSerializer<Float> { override val qtType: QtType = QtType.Float - override val javaType: Class<Float> = Float::class.java + override val javaType: Class<Float> = Float::class.javaObjectType override fun serialize(buffer: ChainedByteBuffer, data: Float, featureSet: FeatureSet) { buffer.putFloat(data) diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/IntSerializer.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/IntSerializer.kt index 98a38bea7..54db40355 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/IntSerializer.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/IntSerializer.kt @@ -26,7 +26,7 @@ import java.nio.ByteBuffer object IntSerializer : QtSerializer<Int> { override val qtType: QtType = QtType.Int - override val javaType: Class<Int> = Int::class.java + override val javaType: Class<Int> = Int::class.javaObjectType override fun serialize(buffer: ChainedByteBuffer, data: Int, featureSet: FeatureSet) { buffer.putInt(data) diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/LongSerializer.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/LongSerializer.kt index 82bfdcff4..d592f55ef 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/LongSerializer.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/LongSerializer.kt @@ -26,7 +26,7 @@ import java.nio.ByteBuffer object LongSerializer : QtSerializer<Long> { override val qtType: QtType = QtType.Long - override val javaType: Class<Long> = Long::class.java + override val javaType: Class<Long> = Long::class.javaObjectType override fun serialize(buffer: ChainedByteBuffer, data: Long, featureSet: FeatureSet) { buffer.putLong(data) diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/QCharSerializer.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/QCharSerializer.kt index bf78fc8c5..77045149b 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/QCharSerializer.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/QCharSerializer.kt @@ -28,7 +28,7 @@ import kotlin.concurrent.getOrSet object QCharSerializer : QtSerializer<Char> { override val qtType: QtType = QtType.QChar - override val javaType: Class<out Char> = Char::class.java + override val javaType: Class<out Char> = Char::class.javaObjectType private val encoderLocal = ThreadLocal<StringEncoder>() private fun encoder() = encoderLocal.getOrSet { StringEncoder(Charsets.UTF_16BE) } diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/ShortSerializer.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/ShortSerializer.kt index 409beba5f..d3ea4dd89 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/ShortSerializer.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/serializers/primitive/ShortSerializer.kt @@ -26,7 +26,7 @@ import java.nio.ByteBuffer object ShortSerializer : QtSerializer<Short> { override val qtType: QtType = QtType.Short - override val javaType: Class<Short> = Short::class.java + override val javaType: Class<Short> = Short::class.javaObjectType override fun serialize(buffer: ChainedByteBuffer, data: Short, featureSet: FeatureSet) { buffer.putShort(data) diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/types/BufferActivity.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/types/BufferActivity.kt index 557155d56..5aa12c8ae 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/types/BufferActivity.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/types/BufferActivity.kt @@ -33,7 +33,6 @@ enum class BufferActivity( companion object : Flags<UInt, BufferActivity> { private val values = values().associateBy(BufferActivity::value) - override fun get(value: UInt) = values[value] override val all: BufferActivities = values.values.toEnumSet() } } diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/types/BufferType.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/types/BufferType.kt index 356d0bbf1..cc71f3465 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/types/BufferType.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/types/BufferType.kt @@ -34,7 +34,6 @@ enum class BufferType( companion object : Flags<UShort, BufferType> { private val values = values().associateBy(BufferType::value) - override fun get(value: UShort) = values[value] override val all: BufferTypes = values.values.toEnumSet() } } diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/types/MessageFlag.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/types/MessageFlag.kt index 8d45bfed5..86008c5a4 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/types/MessageFlag.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/types/MessageFlag.kt @@ -34,7 +34,6 @@ enum class MessageFlag( companion object : Flags<UInt, MessageFlag> { private val values = values().associateBy(MessageFlag::value) - override fun get(value: UInt) = values[value] override val all: MessageFlags = values.values.toEnumSet() } } diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/types/MessageType.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/types/MessageType.kt index e0882d595..4badbe176 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/types/MessageType.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/types/MessageType.kt @@ -48,7 +48,6 @@ enum class MessageType( companion object : Flags<UInt, MessageType> { private val values = values().associateBy(MessageType::value) - override fun get(value: UInt) = values[value] override val all: MessageTypes = values.values.toEnumSet() } } diff --git a/protocol/src/main/java/de/kuschku/libquassel/protocol/variant/QVariant.kt b/protocol/src/main/java/de/kuschku/libquassel/protocol/variant/QVariant.kt index a006ff4c7..ae6ac6ab1 100644 --- a/protocol/src/main/java/de/kuschku/libquassel/protocol/variant/QVariant.kt +++ b/protocol/src/main/java/de/kuschku/libquassel/protocol/variant/QVariant.kt @@ -27,22 +27,29 @@ import de.kuschku.libquassel.protocol.serializers.QuasselSerializers import de.kuschku.libquassel.protocol.serializers.primitive.QtSerializer import de.kuschku.libquassel.protocol.serializers.primitive.QuasselSerializer import java.nio.ByteBuffer -import java.util.* typealias QVariant_ = QVariant<*> typealias QVariantList = List<QVariant_> typealias QVariantMap = Map<String, QVariant_> typealias QStringList = List<String?> -sealed class QVariant<T> constructor( - private val data: T, - open val serializer: QtSerializer<T>, -) { - class Typed<T> internal constructor(data: T, serializer: QtSerializer<T>) : - QVariant<T>(data, serializer) +sealed class QVariant<T> { + abstract val data: T + abstract val serializer: QtSerializer<T> - class Custom<T> internal constructor(data: T, override val serializer: QuasselSerializer<T>) : - QVariant<T>(data, serializer) + data class Typed<T> internal constructor( + override val data: T, + override val serializer: QtSerializer<T> + ) : QVariant<T>() { + override fun toString() = super.toString() + } + + data class Custom<T> internal constructor( + override val data: T, + override val serializer: QuasselSerializer<T> + ) : QVariant<T>() { + override fun toString() = super.toString() + } fun value(): T = data @@ -51,11 +58,13 @@ sealed class QVariant<T> constructor( serializer.serialize(buffer, data, featureSet) } - override fun toString() = when (data) { - is ByteBuffer -> - "QVariant(${serializer::class.java.simpleName}, ${data.contentToString()})" - else -> - "QVariant(${serializer::class.java.simpleName}, $data)" + override fun toString() = data.let { + when (it) { + is ByteBuffer -> + "QVariant(${serializer::class.java.simpleName}, ${it.contentToString()})" + else -> + "QVariant(${serializer::class.java.simpleName}, $it)" + } } @Suppress("UNCHECKED_CAST") @@ -63,25 +72,6 @@ sealed class QVariant<T> constructor( if (serializer.javaType == T::class.java && this.value() is T) this as QVariant<T> else null - override fun equals(other: Any?): Boolean { - if (this === other) return true - if (javaClass != other?.javaClass) return false - - other as QVariant<*> - - if (data != other.data) return false - if (serializer != other.serializer) return false - - return true - } - - override fun hashCode(): Int { - var result = data?.hashCode() ?: 0 - result = 31 * result + serializer.hashCode() - return result - } - - companion object { fun <T> of(data: T, serializer: QtSerializer<T>) = Typed(data, serializer) fun <T> of(data: T, serializer: QuasselSerializer<T>) = Custom(data, serializer) diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/io/StringEncoderTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/io/StringEncoderTest.kt index 2b356d8bd..cb1db12ab 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/io/StringEncoderTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/io/StringEncoderTest.kt @@ -47,6 +47,18 @@ class StringEncoderTest { ) } + @Test + fun testUnencodableString() { + assertEquals( + 0, + ascii.encode("\uFFFF").remaining() + ) + assertThat( + ascii.encode("\uFFFF"), + ByteBufferMatcher(byteBufferOf()) + ) + } + @Test fun testNullChar() { assertEquals( @@ -58,13 +70,9 @@ class StringEncoderTest { ByteBufferMatcher(byteBufferOf(0)) ) - assertEquals( - 1, - utf8.encodeChar(null).remaining() - ) assertThat( utf8.encodeChar(null), - ByteBufferMatcher(byteBufferOf(0)) + ByteBufferMatcher(byteBufferOf(0xEFu, 0xBFu, 0xBDu)) ) assertEquals( @@ -73,19 +81,19 @@ class StringEncoderTest { ) assertThat( utf16.encodeChar(null), - ByteBufferMatcher(byteBufferOf(0, 0)), + ByteBufferMatcher(byteBufferOf(0xFFu, 0xFDu)), ) } @Test fun testUnencodableChar() { assertEquals( - 2, + 1, ascii.encodeChar('\uFFFF').remaining() ) assertThat( ascii.encodeChar('\uFFFF'), - ByteBufferMatcher(byteBufferOf(0, 0)) + ByteBufferMatcher(byteBufferOf(0)) ) } } diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/handshake/ClientInitSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/handshake/ClientInitSerializerTest.kt index fca778612..a48194552 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/handshake/ClientInitSerializerTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/handshake/ClientInitSerializerTest.kt @@ -22,11 +22,25 @@ import de.kuschku.bitflags.none import de.kuschku.libquassel.protocol.features.FeatureSet import de.kuschku.libquassel.protocol.features.LegacyFeature import de.kuschku.libquassel.protocol.messages.handshake.ClientInit +import de.kuschku.libquassel.protocol.serializers.HandshakeSerializers +import de.kuschku.libquassel.protocol.serializers.QtSerializers +import de.kuschku.libquassel.protocol.serializers.primitive.BoolSerializer import de.kuschku.libquassel.protocol.testutil.byteBufferOf import de.kuschku.libquassel.protocol.testutil.handshakeSerializerTest +import de.kuschku.libquassel.protocol.variant.QtType +import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test +import org.junit.jupiter.api.Assertions.assertEquals as assertEquals class ClientInitSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + ClientInitSerializer, + HandshakeSerializers.find<ClientInit>("ClientInit"), + ) + } + @Test fun testSimple() = handshakeSerializerTest( ClientInitSerializer, diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/BoolSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/BoolSerializerTest.kt index c6dfa9a3c..4e38c0ba9 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/BoolSerializerTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/BoolSerializerTest.kt @@ -18,11 +18,23 @@ */ package de.kuschku.libquassel.protocol.serializers.primitive +import de.kuschku.libquassel.protocol.serializers.QtSerializers import de.kuschku.libquassel.protocol.testutil.byteBufferOf import de.kuschku.libquassel.protocol.testutil.qtSerializerTest +import de.kuschku.libquassel.protocol.variant.QtType +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test class BoolSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + BoolSerializer, + QtSerializers.find<Boolean>(QtType.Bool), + ) + } + @Test fun testTrue() = qtSerializerTest( BoolSerializer, diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/BufferIdSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/BufferIdSerializerTest.kt new file mode 100644 index 000000000..21f9d2cbd --- /dev/null +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/BufferIdSerializerTest.kt @@ -0,0 +1,66 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2020 Janne Mareike Koschinski + * Copyright (c) 2020 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.kuschku.libquassel.protocol.serializers.primitive + +import de.kuschku.libquassel.protocol.serializers.QuasselSerializers +import de.kuschku.libquassel.protocol.testutil.byteBufferOf +import de.kuschku.libquassel.protocol.testutil.qtSerializerTest +import de.kuschku.libquassel.protocol.testutil.quasselSerializerTest +import de.kuschku.libquassel.protocol.types.BufferId +import de.kuschku.libquassel.protocol.variant.QuasselType +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + +class BufferIdSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + BufferIdSerializer, + QuasselSerializers.find<BufferId>(QuasselType.BufferId), + ) + } + + @Test + fun testZero() = quasselSerializerTest( + BufferIdSerializer, + BufferId(0), + byteBufferOf(0, 0, 0, 0) + ) + + @Test + fun testMinimal() = quasselSerializerTest( + BufferIdSerializer, + BufferId.MIN_VALUE, + byteBufferOf(-128, 0, 0, 0) + ) + + @Test + fun testMaximal() = quasselSerializerTest( + BufferIdSerializer, + BufferId.MAX_VALUE, + byteBufferOf(127, -1, -1, -1) + ) + + @Test + fun testAllOnes() = quasselSerializerTest( + BufferIdSerializer, + BufferId(0.inv()), + byteBufferOf(-1, -1, -1, -1) + ) +} diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/BufferInfoSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/BufferInfoSerializerTest.kt index f32ae8ae1..934aef98c 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/BufferInfoSerializerTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/BufferInfoSerializerTest.kt @@ -20,15 +20,29 @@ package de.kuschku.libquassel.protocol.serializers.primitive import de.kuschku.bitflags.none import de.kuschku.bitflags.validValues +import de.kuschku.libquassel.protocol.serializers.QtSerializers +import de.kuschku.libquassel.protocol.serializers.QuasselSerializers import de.kuschku.libquassel.protocol.testutil.byteBufferOf import de.kuschku.libquassel.protocol.testutil.quasselSerializerTest import de.kuschku.libquassel.protocol.types.BufferId import de.kuschku.libquassel.protocol.types.BufferInfo import de.kuschku.libquassel.protocol.types.BufferType import de.kuschku.libquassel.protocol.types.NetworkId +import de.kuschku.libquassel.protocol.variant.QtType +import de.kuschku.libquassel.protocol.variant.QuasselType +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test class BufferInfoSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + BufferInfoSerializer, + QuasselSerializers.find<BufferInfo>(QuasselType.BufferInfo), + ) + } + @Test fun testBaseCase() = quasselSerializerTest( BufferInfoSerializer, diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/ByteBufferSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/ByteBufferSerializerTest.kt index dfaa87f44..b0671da59 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/ByteBufferSerializerTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/ByteBufferSerializerTest.kt @@ -18,13 +18,25 @@ */ package de.kuschku.libquassel.protocol.serializers.primitive +import de.kuschku.libquassel.protocol.serializers.QtSerializers import de.kuschku.libquassel.protocol.testutil.byteBufferOf import de.kuschku.libquassel.protocol.testutil.matchers.ByteBufferMatcher import de.kuschku.libquassel.protocol.testutil.qtSerializerTest +import de.kuschku.libquassel.protocol.variant.QtType +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test import java.nio.ByteBuffer class ByteBufferSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + ByteBufferSerializer, + QtSerializers.find<ByteBuffer>(QtType.QByteArray), + ) + } + @Test fun testBaseCase() = qtSerializerTest( ByteBufferSerializer, diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/ByteSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/ByteSerializerTest.kt index acb9c9960..0a8557f30 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/ByteSerializerTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/ByteSerializerTest.kt @@ -18,12 +18,25 @@ */ package de.kuschku.libquassel.protocol.serializers.primitive +import de.kuschku.libquassel.protocol.serializers.QtSerializers import de.kuschku.libquassel.protocol.testutil.byteBufferOf import de.kuschku.libquassel.protocol.testutil.qtSerializerTest +import de.kuschku.libquassel.protocol.variant.QtType +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test +import java.nio.ByteBuffer import kotlin.experimental.inv class ByteSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + ByteSerializer, + QtSerializers.find<Byte>(QtType.Char), + ) + } + @Test fun testZero() = qtSerializerTest( ByteSerializer, diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/DateTimeSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/DateTimeSerializerTest.kt index f2291dbf5..a93efda96 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/DateTimeSerializerTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/DateTimeSerializerTest.kt @@ -18,16 +18,27 @@ */ package de.kuschku.libquassel.protocol.serializers.primitive +import de.kuschku.libquassel.protocol.serializers.QtSerializers import de.kuschku.libquassel.protocol.testutil.byteBufferOf import de.kuschku.libquassel.protocol.testutil.matchers.TemporalMatcher import de.kuschku.libquassel.protocol.testutil.qtSerializerTest +import de.kuschku.libquassel.protocol.variant.QtType +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertThrows import org.threeten.bp.* import org.threeten.bp.chrono.JapaneseDate +import org.threeten.bp.temporal.Temporal class DateTimeSerializerTest { - private val serializer = DateTimeSerializer + @Test + fun testIsRegistered() { + assertEquals( + DateTimeSerializer, + QtSerializers.find<Temporal>(QtType.QDateTime), + ) + } @Test fun testEpoch() = qtSerializerTest( diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/DoubleSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/DoubleSerializerTest.kt index 5b6c41938..0242bcb35 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/DoubleSerializerTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/DoubleSerializerTest.kt @@ -18,11 +18,24 @@ */ package de.kuschku.libquassel.protocol.serializers.primitive +import de.kuschku.libquassel.protocol.serializers.QtSerializers import de.kuschku.libquassel.protocol.testutil.byteBufferOf import de.kuschku.libquassel.protocol.testutil.qtSerializerTest +import de.kuschku.libquassel.protocol.variant.QtType +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test +import org.threeten.bp.temporal.Temporal class DoubleSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + DoubleSerializer, + QtSerializers.find<Double>(QtType.Double), + ) + } + @Test fun testZero() = qtSerializerTest( DoubleSerializer, diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/FloatSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/FloatSerializerTest.kt index ea12027a0..b491e312c 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/FloatSerializerTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/FloatSerializerTest.kt @@ -18,11 +18,23 @@ */ package de.kuschku.libquassel.protocol.serializers.primitive +import de.kuschku.libquassel.protocol.serializers.QtSerializers import de.kuschku.libquassel.protocol.testutil.byteBufferOf import de.kuschku.libquassel.protocol.testutil.qtSerializerTest +import de.kuschku.libquassel.protocol.variant.QtType +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test class FloatSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + FloatSerializer, + QtSerializers.find<Float>(QtType.Float), + ) + } + @Test fun testZero() = qtSerializerTest( FloatSerializer, diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/IdentityIdSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/IdentityIdSerializerTest.kt new file mode 100644 index 000000000..34e0fc5b5 --- /dev/null +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/IdentityIdSerializerTest.kt @@ -0,0 +1,66 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2020 Janne Mareike Koschinski + * Copyright (c) 2020 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.kuschku.libquassel.protocol.serializers.primitive + +import de.kuschku.libquassel.protocol.serializers.QuasselSerializers +import de.kuschku.libquassel.protocol.testutil.byteBufferOf +import de.kuschku.libquassel.protocol.testutil.qtSerializerTest +import de.kuschku.libquassel.protocol.testutil.quasselSerializerTest +import de.kuschku.libquassel.protocol.types.IdentityId +import de.kuschku.libquassel.protocol.variant.QuasselType +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + +class IdentityIdSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + IdentityIdSerializer, + QuasselSerializers.find<IdentityId>(QuasselType.IdentityId), + ) + } + + @Test + fun testZero() = quasselSerializerTest( + IdentityIdSerializer, + IdentityId(0), + byteBufferOf(0, 0, 0, 0) + ) + + @Test + fun testMinimal() = quasselSerializerTest( + IdentityIdSerializer, + IdentityId.MIN_VALUE, + byteBufferOf(-128, 0, 0, 0) + ) + + @Test + fun testMaximal() = quasselSerializerTest( + IdentityIdSerializer, + IdentityId.MAX_VALUE, + byteBufferOf(127, -1, -1, -1) + ) + + @Test + fun testAllOnes() = quasselSerializerTest( + IdentityIdSerializer, + IdentityId(0.inv()), + byteBufferOf(-1, -1, -1, -1) + ) +} diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/IntSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/IntSerializerTest.kt index 019f3245e..21bd1bb8d 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/IntSerializerTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/IntSerializerTest.kt @@ -18,11 +18,23 @@ */ package de.kuschku.libquassel.protocol.serializers.primitive +import de.kuschku.libquassel.protocol.serializers.QtSerializers import de.kuschku.libquassel.protocol.testutil.byteBufferOf import de.kuschku.libquassel.protocol.testutil.qtSerializerTest +import de.kuschku.libquassel.protocol.variant.QtType +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test class IntSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + IntSerializer, + QtSerializers.find<Int>(QtType.Int), + ) + } + @Test fun testZero() = qtSerializerTest( IntSerializer, diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/LongSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/LongSerializerTest.kt index f6cc0729c..0c9fec88c 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/LongSerializerTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/LongSerializerTest.kt @@ -18,11 +18,23 @@ */ package de.kuschku.libquassel.protocol.serializers.primitive +import de.kuschku.libquassel.protocol.serializers.QtSerializers import de.kuschku.libquassel.protocol.testutil.byteBufferOf import de.kuschku.libquassel.protocol.testutil.qtSerializerTest +import de.kuschku.libquassel.protocol.variant.QtType +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test class LongSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + LongSerializer, + QtSerializers.find<Long>(QtType.Long), + ) + } + @Test fun testZero() = qtSerializerTest( LongSerializer, diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/MessageSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/MessageSerializerTest.kt index 0c5328670..e07503e16 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/MessageSerializerTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/MessageSerializerTest.kt @@ -22,13 +22,28 @@ package de.kuschku.libquassel.protocol.serializers.primitive import de.kuschku.bitflags.none import de.kuschku.bitflags.validValues import de.kuschku.libquassel.protocol.features.FeatureSet +import de.kuschku.libquassel.protocol.serializers.QtSerializers +import de.kuschku.libquassel.protocol.serializers.QuasselSerializers import de.kuschku.libquassel.protocol.testutil.byteBufferOf import de.kuschku.libquassel.protocol.testutil.quasselSerializerTest import de.kuschku.libquassel.protocol.types.* +import de.kuschku.libquassel.protocol.variant.QtType +import de.kuschku.libquassel.protocol.variant.QuasselType +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test import org.threeten.bp.Instant +import java.nio.ByteBuffer class MessageSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + MessageSerializer, + QuasselSerializers.find<Message>(QuasselType.Message), + ) + } + @Test fun testEmpty() = quasselSerializerTest( MessageSerializer, diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/MsgIdSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/MsgIdSerializerTest.kt new file mode 100644 index 000000000..ce2107d82 --- /dev/null +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/MsgIdSerializerTest.kt @@ -0,0 +1,70 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2020 Janne Mareike Koschinski + * Copyright (c) 2020 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.kuschku.libquassel.protocol.serializers.primitive + +import de.kuschku.libquassel.protocol.features.FeatureSet +import de.kuschku.libquassel.protocol.serializers.QuasselSerializers +import de.kuschku.libquassel.protocol.testutil.byteBufferOf +import de.kuschku.libquassel.protocol.testutil.quasselSerializerTest +import de.kuschku.libquassel.protocol.types.MsgId +import de.kuschku.libquassel.protocol.variant.QuasselType +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + +class MsgIdSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + MsgIdSerializer, + QuasselSerializers.find<MsgId>(QuasselType.MsgId), + ) + } + + @Test + fun testZero() = quasselSerializerTest( + MsgIdSerializer, + MsgId(0), + byteBufferOf(0, 0, 0, 0, 0, 0, 0, 0), + featureSets = listOf(FeatureSet.all()) + ) + + @Test + fun testMinimal() = quasselSerializerTest( + MsgIdSerializer, + MsgId.MIN_VALUE, + byteBufferOf(-128, 0, 0, 0, 0, 0, 0, 0), + featureSets = listOf(FeatureSet.all()) + ) + + @Test + fun testMaximal() = quasselSerializerTest( + MsgIdSerializer, + MsgId.MAX_VALUE, + byteBufferOf(127, -1, -1, -1, -1, -1, -1, -1), + featureSets = listOf(FeatureSet.all()) + ) + + @Test + fun testAllOnes() = quasselSerializerTest( + MsgIdSerializer, + MsgId(0.inv()), + byteBufferOf(-1, -1, -1, -1, -1, -1, -1, -1), + featureSets = listOf(FeatureSet.all()) + ) +} diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/NetworkIdSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/NetworkIdSerializerTest.kt new file mode 100644 index 000000000..996bc8975 --- /dev/null +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/NetworkIdSerializerTest.kt @@ -0,0 +1,66 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2020 Janne Mareike Koschinski + * Copyright (c) 2020 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.kuschku.libquassel.protocol.serializers.primitive + +import de.kuschku.libquassel.protocol.serializers.QuasselSerializers +import de.kuschku.libquassel.protocol.testutil.byteBufferOf +import de.kuschku.libquassel.protocol.testutil.qtSerializerTest +import de.kuschku.libquassel.protocol.testutil.quasselSerializerTest +import de.kuschku.libquassel.protocol.types.NetworkId +import de.kuschku.libquassel.protocol.variant.QuasselType +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + +class NetworkIdSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + NetworkIdSerializer, + QuasselSerializers.find<NetworkId>(QuasselType.NetworkId), + ) + } + + @Test + fun testZero() = quasselSerializerTest( + NetworkIdSerializer, + NetworkId(0), + byteBufferOf(0, 0, 0, 0) + ) + + @Test + fun testMinimal() = quasselSerializerTest( + NetworkIdSerializer, + NetworkId.MIN_VALUE, + byteBufferOf(-128, 0, 0, 0) + ) + + @Test + fun testMaximal() = quasselSerializerTest( + NetworkIdSerializer, + NetworkId.MAX_VALUE, + byteBufferOf(127, -1, -1, -1) + ) + + @Test + fun testAllOnes() = quasselSerializerTest( + NetworkIdSerializer, + NetworkId(0.inv()), + byteBufferOf(-1, -1, -1, -1) + ) +} diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/PeerPtrSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/PeerPtrSerializerTest.kt new file mode 100644 index 000000000..0018e5a64 --- /dev/null +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/PeerPtrSerializerTest.kt @@ -0,0 +1,70 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2020 Janne Mareike Koschinski + * Copyright (c) 2020 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.kuschku.libquassel.protocol.serializers.primitive + +import de.kuschku.libquassel.protocol.features.FeatureSet +import de.kuschku.libquassel.protocol.serializers.QuasselSerializers +import de.kuschku.libquassel.protocol.testutil.byteBufferOf +import de.kuschku.libquassel.protocol.testutil.quasselSerializerTest +import de.kuschku.libquassel.protocol.types.MsgId +import de.kuschku.libquassel.protocol.variant.QuasselType +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + +class PeerPtrSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + PeerPtrSerializer, + QuasselSerializers.find<ULong>(QuasselType.PeerPtr), + ) + } + + @Test + fun testZero() = quasselSerializerTest( + PeerPtrSerializer, + 0uL, + byteBufferOf(0, 0, 0, 0, 0, 0, 0, 0), + featureSets = listOf(FeatureSet.all()) + ) + + @Test + fun testMinimal() = quasselSerializerTest( + PeerPtrSerializer, + ULong.MIN_VALUE, + byteBufferOf(0, 0, 0, 0, 0, 0, 0, 0), + featureSets = listOf(FeatureSet.all()) + ) + + @Test + fun testMaximal() = quasselSerializerTest( + PeerPtrSerializer, + ULong.MAX_VALUE, + byteBufferOf(-1, -1, -1, -1, -1, -1, -1, -1), + featureSets = listOf(FeatureSet.all()) + ) + + @Test + fun testAllOnes() = quasselSerializerTest( + PeerPtrSerializer, + 0uL.inv(), + byteBufferOf(-1, -1, -1, -1, -1, -1, -1, -1), + featureSets = listOf(FeatureSet.all()) + ) +} diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/QCharSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/QCharSerializerTest.kt index 411635ccf..b152f1f40 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/QCharSerializerTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/QCharSerializerTest.kt @@ -18,12 +18,24 @@ */ package de.kuschku.libquassel.protocol.serializers.primitive +import de.kuschku.libquassel.protocol.serializers.QtSerializers import de.kuschku.libquassel.protocol.testutil.byteBufferOf import de.kuschku.libquassel.protocol.testutil.matchers.BomMatcherChar import de.kuschku.libquassel.protocol.testutil.qtSerializerTest +import de.kuschku.libquassel.protocol.variant.QtType +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test class QCharSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + QCharSerializer, + QtSerializers.find<Char>(QtType.QChar), + ) + } + @Test fun testNull() = qtSerializerTest( QCharSerializer, diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/QVariantListSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/QVariantListSerializerTest.kt new file mode 100644 index 000000000..4bbff8522 --- /dev/null +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/QVariantListSerializerTest.kt @@ -0,0 +1,59 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2020 Janne Mareike Koschinski + * Copyright (c) 2020 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.kuschku.libquassel.protocol.serializers.primitive + +import de.kuschku.libquassel.protocol.serializers.QtSerializers +import de.kuschku.libquassel.protocol.testutil.byteBufferOf +import de.kuschku.libquassel.protocol.testutil.matchers.MapMatcher +import de.kuschku.libquassel.protocol.testutil.qtSerializerTest +import de.kuschku.libquassel.protocol.variant.QVariantList +import de.kuschku.libquassel.protocol.variant.QVariantMap +import de.kuschku.libquassel.protocol.variant.QtType +import de.kuschku.libquassel.protocol.variant.qVariant +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + +class QVariantListSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + QVariantListSerializer, + QtSerializers.find<QVariantList>(QtType.QVariantList), + ) + } + + @Test + fun testEmpty() = qtSerializerTest( + QVariantListSerializer, + listOf(), + byteBufferOf(0, 0, 0, 0) + ) + + @Test + fun testNormal() = qtSerializerTest( + QVariantListSerializer, + listOf( + qVariant("AzureDiamond", QtType.QString), + qVariant("hunter2", QtType.QString) + ), + byteBufferOf( 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x18u, 0x00u, 0x41u, 0x00u, 0x7Au, 0x00u, 0x75u, 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x44u, 0x00u, 0x69u, 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x68u, 0x00u, 0x75u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x32u) + ) +} + diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/QVariantMapSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/QVariantMapSerializerTest.kt index bc38705c6..04d60612c 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/QVariantMapSerializerTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/QVariantMapSerializerTest.kt @@ -18,14 +18,26 @@ */ package de.kuschku.libquassel.protocol.serializers.primitive +import de.kuschku.libquassel.protocol.serializers.QtSerializers import de.kuschku.libquassel.protocol.testutil.byteBufferOf import de.kuschku.libquassel.protocol.testutil.matchers.MapMatcher import de.kuschku.libquassel.protocol.testutil.qtSerializerTest +import de.kuschku.libquassel.protocol.variant.QVariantMap import de.kuschku.libquassel.protocol.variant.QtType import de.kuschku.libquassel.protocol.variant.qVariant +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test class QVariantMapSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + QVariantMapSerializer, + QtSerializers.find<QVariantMap>(QtType.QVariantMap), + ) + } + @Test fun testEmpty() = qtSerializerTest( QVariantMapSerializer, @@ -50,8 +62,20 @@ class QVariantMapSerializerTest { mapOf( "" to qVariant<String?>(null, QtType.QString) ), - byteBufferOf(0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0xFFu, 0xFFu, 0xFFu, 0xFFu), - ::MapMatcher + byteBufferOf( + // length + 0x00u, 0x00u, 0x00u, 0x01u, + // length of key + 0xFFu, 0xFFu, 0xFFu, 0xFFu, + // type of value + 0x00u, 0x00u, 0x00u, 0x0Au, + // isNull of value + 0x00u, + // length of value + 0xFFu, 0xFFu, 0xFFu, 0xFFu + ), + ::MapMatcher, + serializeFeatureSet = null ) } diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/QVariantSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/QVariantSerializerTest.kt index 06e4907bb..483a8782e 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/QVariantSerializerTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/QVariantSerializerTest.kt @@ -19,12 +19,24 @@ package de.kuschku.libquassel.protocol.serializers.primitive import de.kuschku.libquassel.protocol.serializers.NoSerializerForTypeException +import de.kuschku.libquassel.protocol.serializers.QtSerializers import de.kuschku.libquassel.protocol.testutil.byteBufferOf import de.kuschku.libquassel.protocol.testutil.deserialize +import de.kuschku.libquassel.protocol.variant.QVariant_ +import de.kuschku.libquassel.protocol.variant.QtType +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertThrows class QVariantSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + QVariantSerializer, + QtSerializers.find<QVariant_>(QtType.QVariant), + ) + } + @Test fun testUnregisteredQtType() { assertThrows<NoSerializerForTypeException> { diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/ShortSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/ShortSerializerTest.kt index 644a03b47..cd0832003 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/ShortSerializerTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/ShortSerializerTest.kt @@ -18,12 +18,24 @@ */ package de.kuschku.libquassel.protocol.serializers.primitive +import de.kuschku.libquassel.protocol.serializers.QtSerializers import de.kuschku.libquassel.protocol.testutil.byteBufferOf import de.kuschku.libquassel.protocol.testutil.qtSerializerTest +import de.kuschku.libquassel.protocol.variant.QtType +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test import kotlin.experimental.inv class ShortSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + ShortSerializer, + QtSerializers.find<Short>(QtType.Short), + ) + } + @Test fun testZero() = qtSerializerTest( ShortSerializer, diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/StringSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/StringSerializerTest.kt index 01c8ace78..98484c464 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/StringSerializerTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/StringSerializerTest.kt @@ -18,17 +18,27 @@ */ package de.kuschku.libquassel.protocol.serializers.primitive +import de.kuschku.libquassel.protocol.serializers.QtSerializers import de.kuschku.libquassel.protocol.testutil.byteBufferOf import de.kuschku.libquassel.protocol.testutil.deserialize import de.kuschku.libquassel.protocol.testutil.matchers.BomMatcherString import de.kuschku.libquassel.protocol.testutil.matchers.ByteBufferMatcher import de.kuschku.libquassel.protocol.testutil.testQtSerializerDirect import de.kuschku.libquassel.protocol.testutil.testQtSerializerVariant +import de.kuschku.libquassel.protocol.variant.QtType import org.hamcrest.MatcherAssert.assertThat import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test class StringSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + StringSerializerUtf16, + QtSerializers.find<String>(QtType.QString), + ) + } + @Test fun testBigListOfNaughtyStrings() { this::class.java.getResourceAsStream("/blns.txt")!!.bufferedReader(Charsets.UTF_8).forEachLine { diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/UByteSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/UByteSerializerTest.kt index 79766902b..df63eeca9 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/UByteSerializerTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/UByteSerializerTest.kt @@ -18,11 +18,23 @@ */ package de.kuschku.libquassel.protocol.serializers.primitive +import de.kuschku.libquassel.protocol.serializers.QtSerializers import de.kuschku.libquassel.protocol.testutil.byteBufferOf import de.kuschku.libquassel.protocol.testutil.qtSerializerTest +import de.kuschku.libquassel.protocol.variant.QtType +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test class UByteSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + UByteSerializer, + QtSerializers.find<UByte>(QtType.UChar), + ) + } + @Test fun testZero() = qtSerializerTest( UByteSerializer, diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/UIntSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/UIntSerializerTest.kt index 8b4d49858..5cdd0b78e 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/UIntSerializerTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/UIntSerializerTest.kt @@ -18,11 +18,23 @@ */ package de.kuschku.libquassel.protocol.serializers.primitive +import de.kuschku.libquassel.protocol.serializers.QtSerializers import de.kuschku.libquassel.protocol.testutil.byteBufferOf import de.kuschku.libquassel.protocol.testutil.qtSerializerTest +import de.kuschku.libquassel.protocol.variant.QtType +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test class UIntSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + UIntSerializer, + QtSerializers.find<UInt>(QtType.UInt), + ) + } + @Test fun testZero() = qtSerializerTest( UIntSerializer, diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/ULongSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/ULongSerializerTest.kt index 3a68c7c63..53db1a21d 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/ULongSerializerTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/ULongSerializerTest.kt @@ -18,11 +18,23 @@ */ package de.kuschku.libquassel.protocol.serializers.primitive +import de.kuschku.libquassel.protocol.serializers.QtSerializers import de.kuschku.libquassel.protocol.testutil.byteBufferOf import de.kuschku.libquassel.protocol.testutil.qtSerializerTest +import de.kuschku.libquassel.protocol.variant.QtType +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test class ULongSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + ULongSerializer, + QtSerializers.find<ULong>(QtType.ULong), + ) + } + @Test fun testZero() = qtSerializerTest( ULongSerializer, diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/UShortSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/UShortSerializerTest.kt index 57192fb64..9d7cfeb27 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/UShortSerializerTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/UShortSerializerTest.kt @@ -18,11 +18,23 @@ */ package de.kuschku.libquassel.protocol.serializers.primitive +import de.kuschku.libquassel.protocol.serializers.QtSerializers import de.kuschku.libquassel.protocol.testutil.byteBufferOf import de.kuschku.libquassel.protocol.testutil.qtSerializerTest +import de.kuschku.libquassel.protocol.variant.QtType +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test class UShortSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + UShortSerializer, + QtSerializers.find<UShort>(QtType.UShort), + ) + } + @Test fun testZero() = qtSerializerTest( UShortSerializer, diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/VoidSerializerTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/VoidSerializerTest.kt new file mode 100644 index 000000000..76db87989 --- /dev/null +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/serializers/primitive/VoidSerializerTest.kt @@ -0,0 +1,43 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2020 Janne Mareike Koschinski + * Copyright (c) 2020 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.kuschku.libquassel.protocol.serializers.primitive + +import de.kuschku.libquassel.protocol.serializers.QtSerializers +import de.kuschku.libquassel.protocol.testutil.byteBufferOf +import de.kuschku.libquassel.protocol.testutil.qtSerializerTest +import de.kuschku.libquassel.protocol.variant.QtType +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + +class VoidSerializerTest { + @Test + fun testIsRegistered() { + assertEquals( + VoidSerializer, + QtSerializers.find<Unit>(QtType.Void), + ) + } + + @Test + fun test() = qtSerializerTest( + VoidSerializer, + Unit, + byteBufferOf() + ) +} diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/testutil/byteBufferOf.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/testutil/byteBufferOf.kt index 65f2eb75c..61e196dd7 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/testutil/byteBufferOf.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/testutil/byteBufferOf.kt @@ -20,5 +20,16 @@ package de.kuschku.libquassel.protocol.testutil import java.nio.ByteBuffer -inline fun byteBufferOf(vararg elements: Byte) = ByteBuffer.wrap(byteArrayOf(*elements)) -inline fun byteBufferOf(vararg elements: UByte) = ByteBuffer.wrap(ubyteArrayOf(*elements).toByteArray()) +@Suppress("NOTHING_TO_INLINE") +inline fun byteBufferOf( + vararg elements: Byte +): ByteBuffer = ByteBuffer.wrap(byteArrayOf(*elements)) + +@Suppress("NOTHING_TO_INLINE") +inline fun byteBufferOf( + vararg elements: UByte +): ByteBuffer = ByteBuffer.wrap(ubyteArrayOf(*elements).toByteArray()) + +@Suppress("NOTHING_TO_INLINE") +inline fun byteBufferOf(): ByteBuffer = + ByteBuffer.allocateDirect(0) diff --git a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/variant/QVariantTest.kt b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/variant/QVariantTest.kt index df0d34f82..b55e43f4b 100644 --- a/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/variant/QVariantTest.kt +++ b/protocol/src/test/kotlin/de/kuschku/libquassel/protocol/variant/QVariantTest.kt @@ -20,6 +20,7 @@ package de.kuschku.libquassel.protocol.variant import de.kuschku.libquassel.protocol.testutil.byteBufferOf +import de.kuschku.libquassel.protocol.types.BufferId import de.kuschku.libquassel.protocol.variant.QtType import de.kuschku.libquassel.protocol.variant.qVariant import org.junit.jupiter.api.Assertions.* @@ -42,5 +43,12 @@ class QVariantTest { QtType.QString ).toString() ) + assertEquals( + "QVariant(BufferIdSerializer, BufferId(-1))", + qVariant( + BufferId(-1), + QuasselType.BufferId + ).toString() + ) } } -- GitLab