Skip to content
Snippets Groups Projects
Verified Commit 781fad77 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Further cleanup and tests

parent 075c4c06
No related branches found
No related tags found
1 merge request!2Draft: Jetpack compose rewrite
Pipeline #578 failed
Showing
with 44 additions and 35 deletions
......@@ -28,6 +28,7 @@ import java.nio.ByteBuffer
object QVariantMapSerializer : QtSerializer<QVariantMap> {
override val qtType = QtType.QVariantMap
@Suppress("UNCHECKED_CAST")
override val javaType: Class<out QVariantMap> = Map::class.java as Class<QVariantMap>
......
......@@ -22,6 +22,8 @@ package de.kuschku.libquassel.protocol.serializers.primitive
import de.kuschku.libquassel.protocol.features.FeatureSet
import de.kuschku.libquassel.protocol.io.ChainedByteBuffer
import de.kuschku.libquassel.protocol.serializers.NoSerializerForTypeException
import de.kuschku.libquassel.protocol.serializers.QtSerializers
import de.kuschku.libquassel.protocol.serializers.QuasselSerializers
import de.kuschku.libquassel.protocol.variant.QVariant
import de.kuschku.libquassel.protocol.variant.QVariant_
import de.kuschku.libquassel.protocol.variant.QtType
......@@ -44,14 +46,14 @@ object QVariantSerializer : QtSerializer<QVariant_> {
override fun deserialize(buffer: ByteBuffer, featureSet: FeatureSet): QVariant_ {
val rawType = IntSerializer.deserialize(buffer, featureSet)
val qtType = QtType.of(rawType)
?: throw NoSerializerForTypeException(rawType, null)
?: throw NoSerializerForTypeException.Qt(rawType, null)
// isNull, but we ignore it as it has no meaning
BoolSerializer.deserialize(buffer, featureSet)
return if (qtType == QtType.UserType) {
val name = StringSerializerAscii.deserialize(buffer, featureSet)
val quasselType = QuasselType.of(name)
?: throw NoSerializerForTypeException(qtType.id, name)
?: throw NoSerializerForTypeException.Quassel(qtType.id, name)
deserialize(quasselType, buffer, featureSet)
} else {
deserialize(qtType, buffer, featureSet)
......@@ -60,16 +62,16 @@ object QVariantSerializer : QtSerializer<QVariant_> {
@Suppress("UNCHECKED_CAST")
private fun deserialize(type: QtType, buffer: ByteBuffer, featureSet: FeatureSet): QVariant_ {
val serializer = Serializers[type]
?: throw NoSerializerForTypeException(type)
val serializer = QtSerializers.find(type)
?: throw NoSerializerForTypeException.Qt(type)
val value = serializer.deserialize(buffer, featureSet)
return QVariant.of(value, serializer as QtSerializer<Any?>)
}
@Suppress("UNCHECKED_CAST")
private fun deserialize(type: QuasselType, buffer: ByteBuffer, featureSet: FeatureSet): QVariant_ {
val serializer = Serializers[type]
?: throw NoSerializerForTypeException(type)
val serializer = QuasselSerializers.find(type)
?: throw NoSerializerForTypeException.Quassel(type)
val value = serializer.deserialize(buffer, featureSet)
return QVariant.of(value, serializer as QuasselSerializer<Any?>)
}
......
......@@ -22,7 +22,6 @@ package de.kuschku.libquassel.protocol.serializers.primitive
import de.kuschku.libquassel.protocol.features.FeatureSet
import de.kuschku.libquassel.protocol.io.ChainedByteBuffer
import de.kuschku.libquassel.protocol.io.StringEncoder
import de.kuschku.libquassel.protocol.io.print
import de.kuschku.libquassel.protocol.variant.QtType
import java.nio.ByteBuffer
import java.nio.charset.Charset
......
......@@ -19,11 +19,5 @@
package de.kuschku.libquassel.protocol.serializers.primitive
import de.kuschku.libquassel.protocol.features.FeatureSet
import de.kuschku.libquassel.protocol.io.ChainedByteBuffer
import de.kuschku.libquassel.protocol.io.stringEncoderAscii
import de.kuschku.libquassel.protocol.variant.QtType
import java.nio.ByteBuffer
object StringSerializerAscii : StringSerializer(Charsets.ISO_8859_1, true)
......@@ -22,7 +22,6 @@ package de.kuschku.libquassel.protocol.types
import de.kuschku.bitflags.Flag
import de.kuschku.bitflags.Flags
import de.kuschku.bitflags.toEnumSet
import de.kuschku.libquassel.protocol.features.LegacyFeature
enum class BufferActivity(
override val value: UInt,
......
......@@ -22,9 +22,10 @@ package de.kuschku.libquassel.protocol.variant
import de.kuschku.libquassel.protocol.features.FeatureSet
import de.kuschku.libquassel.protocol.io.ChainedByteBuffer
import de.kuschku.libquassel.protocol.io.contentToString
import de.kuschku.libquassel.protocol.serializers.QtSerializers
import de.kuschku.libquassel.protocol.serializers.QuasselSerializers
import de.kuschku.libquassel.protocol.serializers.primitive.QtSerializer
import de.kuschku.libquassel.protocol.serializers.primitive.QuasselSerializer
import de.kuschku.libquassel.protocol.serializers.primitive.serializerFor
import java.nio.ByteBuffer
import java.util.*
......@@ -59,6 +60,11 @@ sealed class QVariant<T> constructor(
"QVariant(${serializer::class.java.simpleName}, $data)"
}
@Suppress("UNCHECKED_CAST")
inline fun <reified T> withType(): QVariant<T>? =
if (serializer.javaType == T::class.java && this.value() is T) this as QVariant<T>
else null
companion object {
fun <T> of(data: T, serializer: QtSerializer<T>) = Typed(data, serializer)
fun <T> of(data: T, serializer: QuasselSerializer<T>) = Custom(data, serializer)
......@@ -66,15 +72,10 @@ sealed class QVariant<T> constructor(
}
inline fun <reified T> qVariant(data: T, type: QtType): QVariant<T> =
QVariant.of(data, serializerFor(type))
QVariant.of(data, QtSerializers[type])
inline fun <reified T> qVariant(data: T, type: QuasselType): QVariant<T> =
QVariant.of(data, serializerFor(type))
@Suppress("UNCHECKED_CAST")
inline fun <reified T> QVariant_.withType(): QVariant<T>? =
if (this.serializer.javaType == T::class.java && this.value() is T) this as QVariant<T>
else null
QVariant.of(data, QuasselSerializers[type])
inline fun <reified T> QVariant_?.into(): T? =
this?.withType<T>()?.value()
......
......@@ -21,11 +21,8 @@ package de.kuschku.libquassel.protocol.serializers.primitive
import de.kuschku.libquassel.protocol.serializers.NoSerializerForTypeException
import de.kuschku.libquassel.protocol.testutil.byteBufferOf
import de.kuschku.libquassel.protocol.testutil.deserialize
import de.kuschku.libquassel.protocol.testutil.qtSerializerTest
import de.kuschku.libquassel.protocol.variant.QtType
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
import kotlin.experimental.inv
class QVariantSerializerTest {
@Test
......
......@@ -18,9 +18,12 @@
*/
package de.kuschku.libquassel.protocol.serializers.primitive
import de.kuschku.libquassel.protocol.testutil.*
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 org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
......
......@@ -21,7 +21,6 @@ package de.kuschku.libquassel.protocol.serializers.primitive
import de.kuschku.libquassel.protocol.testutil.byteBufferOf
import de.kuschku.libquassel.protocol.testutil.qtSerializerTest
import org.junit.jupiter.api.Test
import kotlin.experimental.inv
class UByteSerializerTest {
@Test
......
......@@ -21,7 +21,6 @@ package de.kuschku.libquassel.protocol.serializers.primitive
import de.kuschku.libquassel.protocol.testutil.byteBufferOf
import de.kuschku.libquassel.protocol.testutil.qtSerializerTest
import org.junit.jupiter.api.Test
import kotlin.experimental.inv
class UIntSerializerTest {
@Test
......
......@@ -21,7 +21,6 @@ package de.kuschku.libquassel.protocol.serializers.primitive
import de.kuschku.libquassel.protocol.testutil.byteBufferOf
import de.kuschku.libquassel.protocol.testutil.qtSerializerTest
import org.junit.jupiter.api.Test
import kotlin.experimental.inv
class UShortSerializerTest {
@Test
......
......@@ -17,6 +17,8 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
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())
......@@ -17,14 +17,16 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.kuschku.libquassel.protocol.testutil
import de.kuschku.libquassel.protocol.features.FeatureSet
import de.kuschku.libquassel.protocol.serializers.handshake.HandshakeMapSerializer
import de.kuschku.libquassel.protocol.serializers.handshake.HandshakeSerializer
import de.kuschku.libquassel.protocol.serializers.primitive.HandshakeMapSerializer
import de.kuschku.libquassel.protocol.serializers.primitive.QtSerializer
import org.hamcrest.Matcher
import org.hamcrest.MatcherAssert.assertThat
import org.junit.jupiter.api.Assertions.assertEquals
import java.nio.ByteBuffer
fun <T> deserialize(
serializer: QtSerializer<T>,
buffer: ByteBuffer,
......@@ -34,6 +36,7 @@ fun <T> deserialize(
assertEquals(0, buffer.remaining())
return result
}
fun <T> testDeserialize(
serializer: QtSerializer<T>,
matcher: Matcher<in T>,
......@@ -43,6 +46,7 @@ fun <T> testDeserialize(
val after = deserialize(serializer, buffer, featureSet)
assertThat(after, matcher)
}
fun <T> testDeserialize(
serializer: QtSerializer<T>,
data: T,
......@@ -52,6 +56,7 @@ fun <T> testDeserialize(
val after = deserialize(serializer, buffer, featureSet)
assertEquals(data, after)
}
fun <T> testDeserialize(
serializer: HandshakeSerializer<T>,
matcher: Matcher<in T>,
......@@ -62,6 +67,7 @@ fun <T> testDeserialize(
val after = serializer.deserialize(map)
assertThat(after, matcher)
}
fun <T> testDeserialize(
serializer: HandshakeSerializer<T>,
data: T,
......
......@@ -17,15 +17,19 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.kuschku.libquassel.protocol.testutil.matchers
import org.hamcrest.BaseMatcher
import org.hamcrest.Description
class BomMatcherString(private val expected: String?) : BaseMatcher<String?>() {
private val malformed = charArrayOf(
'￾', ''
)
override fun describeTo(description: Description?) {
description?.appendText(expected)
}
override fun matches(item: Any?) =
(item as? String)?.endsWith(expected?.trimStart(*malformed) ?: "") == true
}
......@@ -17,6 +17,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.kuschku.libquassel.protocol.testutil.matchers
import de.kuschku.libquassel.protocol.io.contentToString
import org.hamcrest.BaseMatcher
import org.hamcrest.Description
......
......@@ -17,11 +17,12 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.kuschku.libquassel.protocol.testutil
import de.kuschku.libquassel.protocol.features.FeatureSet
import de.kuschku.libquassel.protocol.serializers.primitive.QtSerializer
import de.kuschku.libquassel.protocol.serializers.primitive.QuasselSerializer
import org.hamcrest.Matcher
import java.nio.ByteBuffer
fun <T> qtSerializerTest(
serializer: QtSerializer<T>,
value: T,
......
......@@ -17,11 +17,12 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.kuschku.libquassel.protocol.testutil
import de.kuschku.libquassel.protocol.features.FeatureSet
import de.kuschku.libquassel.protocol.io.ChainedByteBuffer
import de.kuschku.libquassel.protocol.io.print
import de.kuschku.libquassel.protocol.serializers.handshake.HandshakeMapSerializer
import de.kuschku.libquassel.protocol.serializers.handshake.HandshakeSerializer
import de.kuschku.libquassel.protocol.serializers.primitive.HandshakeMapSerializer
import org.hamcrest.Matcher
import org.hamcrest.MatcherAssert.assertThat
import org.junit.jupiter.api.Assertions.assertEquals
......
......@@ -17,6 +17,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.kuschku.libquassel.protocol.testutil
import de.kuschku.libquassel.protocol.features.FeatureSet
import de.kuschku.libquassel.protocol.io.ChainedByteBuffer
import de.kuschku.libquassel.protocol.io.print
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment