From c35c2c97c873750502ced3037bf5e6f3863fa44c Mon Sep 17 00:00:00 2001 From: Him188 Date: Sat, 24 Apr 2021 14:50:52 +0800 Subject: [PATCH] CombinedStorageTest --- ...=> AbstractMutableComponentStorageTest.kt} | 42 ++----------- .../network/component/CombinedStorageTest.kt | 59 +++++++++++++++++++ .../ConcurrentComponentStorageTest.kt | 49 +++++++++++++++ 3 files changed, 114 insertions(+), 36 deletions(-) rename mirai-core/src/commonTest/kotlin/network/component/{ComponentStorageTest.kt => AbstractMutableComponentStorageTest.kt} (54%) create mode 100644 mirai-core/src/commonTest/kotlin/network/component/CombinedStorageTest.kt create mode 100644 mirai-core/src/commonTest/kotlin/network/component/ConcurrentComponentStorageTest.kt diff --git a/mirai-core/src/commonTest/kotlin/network/component/ComponentStorageTest.kt b/mirai-core/src/commonTest/kotlin/network/component/AbstractMutableComponentStorageTest.kt similarity index 54% rename from mirai-core/src/commonTest/kotlin/network/component/ComponentStorageTest.kt rename to mirai-core/src/commonTest/kotlin/network/component/AbstractMutableComponentStorageTest.kt index 53db1d61c..4b829e94c 100644 --- a/mirai-core/src/commonTest/kotlin/network/component/ComponentStorageTest.kt +++ b/mirai-core/src/commonTest/kotlin/network/component/AbstractMutableComponentStorageTest.kt @@ -13,22 +13,12 @@ import net.mamoe.mirai.internal.test.AbstractTest import org.junit.jupiter.api.Test import kotlin.test.assertEquals -private data class TestComponent2( - val value: Int -) { - companion object : ComponentKey -} +internal abstract class AbstractMutableComponentStorageTest : AbstractTest() { + protected abstract fun createStorage(): MutableComponentStorage -private data class TestComponent3( - val value: Int -) { - companion object : ComponentKey -} - -internal class ComponentStorageTest : AbstractTest() { @Test fun `can put component`() { - val storage = ConcurrentComponentStorage().apply { + val storage = createStorage().apply { set(TestComponent2, TestComponent2(1)) } assertEquals(1, storage.size) @@ -36,7 +26,7 @@ internal class ComponentStorageTest : AbstractTest() { @Test fun `can put multiple components with different key`() { - val storage = ConcurrentComponentStorage().apply { + val storage = createStorage().apply { set(TestComponent2, TestComponent2(1)) set(TestComponent3, TestComponent3(1)) } @@ -45,7 +35,7 @@ internal class ComponentStorageTest : AbstractTest() { @Test fun `can get component`() { - val storage = ConcurrentComponentStorage().apply { + val storage = createStorage().apply { set(TestComponent2, TestComponent2(1)) } assertEquals(1, storage.size) @@ -54,31 +44,11 @@ internal class ComponentStorageTest : AbstractTest() { @Test fun `can override component with same key`() { - val storage = ConcurrentComponentStorage().apply { + val storage = createStorage().apply { set(TestComponent2, TestComponent2(1)) set(TestComponent2, TestComponent2(2)) } assertEquals(1, storage.size) assertEquals(TestComponent2(2), storage[TestComponent2]) } - - @Test - fun `test toString non debug`() { - val storage = ConcurrentComponentStorage(showAllComponents = false).apply { - set(TestComponent2, TestComponent2(1)) - } - assertEquals("ConcurrentComponentStorage(size=1)", storage.toString()) - } - - @Test - fun `test toString debugging`() { - val storage = ConcurrentComponentStorage(showAllComponents = true).apply { - set(TestComponent2, TestComponent2(1)) - } - assertEquals( - """ConcurrentComponentStorage(size=1) { - | TestComponent2: TestComponent2(value=1) - |}""".trimMargin(), storage.toString() - ) - } } \ No newline at end of file diff --git a/mirai-core/src/commonTest/kotlin/network/component/CombinedStorageTest.kt b/mirai-core/src/commonTest/kotlin/network/component/CombinedStorageTest.kt new file mode 100644 index 000000000..727e78fa6 --- /dev/null +++ b/mirai-core/src/commonTest/kotlin/network/component/CombinedStorageTest.kt @@ -0,0 +1,59 @@ +/* + * Copyright 2019-2021 Mamoe Technologies and contributors. + * + * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. + * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link. + * + * https://github.com/mamoe/mirai/blob/master/LICENSE + */ + +package net.mamoe.mirai.internal.network.component + +import net.mamoe.mirai.internal.test.AbstractTest +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals + +internal class CombinedStorageTest : AbstractTest() { + + @Test + fun `can get from main`() { + val storage = ConcurrentComponentStorage().apply { + set(TestComponent2, TestComponent2(1)) + } + ConcurrentComponentStorage() + assertEquals(TestComponent2(1), storage[TestComponent2]) + } + + @Test + fun `can get from fallback`() { + val storage = ConcurrentComponentStorage() + ConcurrentComponentStorage().apply { + set(TestComponent2, TestComponent2(1)) + } + assertEquals(TestComponent2(1), storage[TestComponent2]) + } + + @Test + fun `size is sum of sizes of two storages`() { + val storage = ConcurrentComponentStorage().apply { + set(TestComponent3, TestComponent3(1)) + } + ConcurrentComponentStorage().apply { + set(TestComponent2, TestComponent2(1)) + } + assertEquals(2, storage.size) + } + + @Test + fun `size can be zero`() { + val storage = ConcurrentComponentStorage() + ConcurrentComponentStorage() + assertEquals(0, storage.size) + } + + @Test + fun `main prevails than fallback`() { + val storage = ConcurrentComponentStorage().apply { + set(TestComponent2, TestComponent2(1)) + } + ConcurrentComponentStorage().apply { + set(TestComponent2, TestComponent2(2)) + } + assertEquals(TestComponent2(1), storage[TestComponent2]) + } +} \ No newline at end of file diff --git a/mirai-core/src/commonTest/kotlin/network/component/ConcurrentComponentStorageTest.kt b/mirai-core/src/commonTest/kotlin/network/component/ConcurrentComponentStorageTest.kt new file mode 100644 index 000000000..76a2db95b --- /dev/null +++ b/mirai-core/src/commonTest/kotlin/network/component/ConcurrentComponentStorageTest.kt @@ -0,0 +1,49 @@ +/* + * Copyright 2019-2021 Mamoe Technologies and contributors. + * + * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. + * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link. + * + * https://github.com/mamoe/mirai/blob/master/LICENSE + */ + +package net.mamoe.mirai.internal.network.component + +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals + +internal data class TestComponent2( + val value: Int +) { + companion object : ComponentKey +} + +internal data class TestComponent3( + val value: Int +) { + companion object : ComponentKey +} + +internal class ConcurrentComponentStorageTest : AbstractMutableComponentStorageTest() { + override fun createStorage(): MutableComponentStorage = ConcurrentComponentStorage(showAllComponents = true) + + @Test + fun `test toString non debug`() { + val storage = ConcurrentComponentStorage(showAllComponents = false).apply { + set(TestComponent2, TestComponent2(1)) + } + assertEquals("ConcurrentComponentStorage(size=1)", storage.toString()) + } + + @Test + fun `test toString debugging`() { + val storage = ConcurrentComponentStorage(showAllComponents = true).apply { + set(TestComponent2, TestComponent2(1)) + } + assertEquals( + """ConcurrentComponentStorage(size=1) { + | TestComponent2: TestComponent2(value=1) + |}""".trimMargin(), storage.toString() + ) + } +} \ No newline at end of file