test: 完善序列化器的单元测试.

目前经测试, 已完善到 100% 覆盖率.
This commit is contained in:
LamGC 2022-05-19 23:54:27 +08:00
parent 746221a085
commit b5c85e213b
Signed by: LamGC
GPG Key ID: 6C5AE2A913941E1D
2 changed files with 113 additions and 7 deletions

View File

@ -18,13 +18,21 @@ internal class ArtifactSerializerTest {
} }
@Test @Test
fun serialize() { fun `Basic format serialization`() {
val gav = "org.example.software:test:1.0.0-SNAPSHOT" val gav = "org.example.software:test:1.0.0-SNAPSHOT"
val expectArtifact = DefaultArtifact(gav) val expectArtifact = DefaultArtifact(gav)
val actualArtifact = DefaultArtifact(ArtifactSerializer.serialize(expectArtifact, null, null).asString) val actualArtifact = DefaultArtifact(ArtifactSerializer.serialize(expectArtifact, null, null).asString)
assertEquals(expectArtifact, actualArtifact) assertEquals(expectArtifact, actualArtifact)
} }
@Test
fun `Full format serialization`() {
val gav = "org.example.software:test:war:javadoc:1.0.0-SNAPSHOT"
val expectArtifact = DefaultArtifact(gav)
val actualArtifact = DefaultArtifact(ArtifactSerializer.serialize(expectArtifact, null, null).asString)
assertEquals(expectArtifact, actualArtifact)
}
@Test @Test
fun deserialize() { fun deserialize() {
val gav = "org.example.software:test:1.0.0-SNAPSHOT" val gav = "org.example.software:test:1.0.0-SNAPSHOT"

View File

@ -3,19 +3,68 @@ package util
import com.google.gson.* import com.google.gson.*
import io.mockk.every import io.mockk.every
import io.mockk.mockk import io.mockk.mockk
import io.mockk.verify
import net.lamgc.scalabot.MavenRepositoryConfig import net.lamgc.scalabot.MavenRepositoryConfig
import net.lamgc.scalabot.util.AuthenticationSerializer import net.lamgc.scalabot.util.AuthenticationSerializer
import net.lamgc.scalabot.util.MavenRepositoryConfigSerializer import net.lamgc.scalabot.util.MavenRepositoryConfigSerializer
import net.lamgc.scalabot.util.ProxyTypeSerializer import net.lamgc.scalabot.util.ProxyTypeSerializer
import org.eclipse.aether.repository.Authentication import org.eclipse.aether.repository.Authentication
import org.eclipse.aether.repository.AuthenticationContext
import org.eclipse.aether.repository.Proxy import org.eclipse.aether.repository.Proxy
import org.intellij.lang.annotations.Language import org.intellij.lang.annotations.Language
import org.junit.jupiter.api.Assertions.assertThrows import org.junit.jupiter.api.Assertions.assertThrows
import org.telegram.telegrambots.bots.DefaultBotOptions import org.telegram.telegrambots.bots.DefaultBotOptions
import java.lang.reflect.InvocationTargetException
import java.lang.reflect.Method
import java.lang.reflect.Type import java.lang.reflect.Type
import java.net.URL import java.net.URL
import kotlin.test.* import kotlin.test.*
internal class SerializersKtTest {
private val instance: Any
private val method: Method
init {
val clazz = Class.forName("net.lamgc.scalabot.util.SerializerUtils")
method = clazz.getDeclaredMethod("checkJsonKey", JsonObject::class.java, String::class.java)
method.isAccessible = true
instance = clazz.getDeclaredField("INSTANCE").apply {
isAccessible = true
}.get(null)
}
private fun invoke(json: JsonObject, key: String): String {
try {
return method.invoke(instance, json, key) as String
} catch (e: InvocationTargetException) {
throw e.targetException
}
}
@Test
fun `Json key checker test`() {
assertThrows(JsonParseException::class.java) {
invoke(JsonObject(), "NOT_EXIST_KEY")
}
assertThrows(JsonParseException::class.java) {
invoke(JsonObject().apply { add("NULL_KEY", JsonNull.INSTANCE) }, "NULL_KEY")
}
assertThrows(JsonParseException::class.java) {
invoke(JsonObject().apply { add("ARRAY_KEY", JsonArray()) }, "ARRAY_KEY")
}
assertThrows(JsonParseException::class.java) {
invoke(JsonObject().apply { add("OBJECT_KEY", JsonObject()) }, "OBJECT_KEY")
}
val expectKey = "TEST"
val expectString = "testString"
val json = JsonObject().apply { addProperty(expectKey, expectString) }
assertEquals(expectString, invoke(json, expectKey))
}
}
internal class ProxyTypeSerializerTest { internal class ProxyTypeSerializerTest {
@Test @Test
@ -213,14 +262,63 @@ internal class MavenRepositoryConfigSerializerTest {
assertNotNull(config.authentication) assertNotNull(config.authentication)
} }
private object TestJsonDeserializationContext : JsonDeserializationContext { }
private val gson = GsonBuilder() private object TestJsonDeserializationContext : JsonDeserializationContext {
.registerTypeAdapter(Authentication::class.java, AuthenticationSerializer)
.create()
override fun <T : Any?> deserialize(json: JsonElement, typeOfT: Type): T { private val gson = GsonBuilder()
return gson.fromJson(json, typeOfT) .registerTypeAdapter(Authentication::class.java, AuthenticationSerializer)
.create()
override fun <T : Any?> deserialize(json: JsonElement, typeOfT: Type): T {
return gson.fromJson(json, typeOfT)
}
}
internal class AuthenticationSerializerTest {
@Test
fun `deserialize test`() {
assertThrows(JsonParseException::class.java) {
AuthenticationSerializer.deserialize(
JsonNull.INSTANCE,
Authentication::class.java, TestJsonDeserializationContext
)
}
assertThrows(JsonParseException::class.java) {
AuthenticationSerializer.deserialize(
JsonArray(),
Authentication::class.java, TestJsonDeserializationContext
)
}
assertThrows(JsonParseException::class.java) {
AuthenticationSerializer.deserialize(
JsonPrimitive("A STRING"),
Authentication::class.java, TestJsonDeserializationContext
)
}
val expectJsonObject = JsonObject().apply {
addProperty("username", "testUsername")
addProperty("password", "testPassword")
}
val mockContext = mockk<AuthenticationContext> {
every { put(any(), any()) }.answers { }
}
val result = AuthenticationSerializer.deserialize(
expectJsonObject,
Authentication::class.java, TestJsonDeserializationContext
)
assertNotNull(result)
result.fill(mockContext, "username", null)
result.fill(mockContext, "password", null)
verify {
mockContext.put("username", "testUsername")
mockContext.put("password", "testPassword".toCharArray())
} }
} }