Skip to content

Commit 3f9a7f2

Browse files
committed
test(P11): preserve reload-sensitive runtime suppliers
1 parent 1aeb5b5 commit 3f9a7f2

1 file changed

Lines changed: 63 additions & 0 deletions

File tree

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package top.ellan.mahjong.table.core
2+
3+
import org.bukkit.configuration.file.YamlConfiguration
4+
import org.bukkit.plugin.Plugin
5+
import org.mockito.Mockito.mock
6+
import top.ellan.mahjong.compat.CraftEngineService
7+
import top.ellan.mahjong.config.PluginSettings
8+
import top.ellan.mahjong.db.DatabaseService
9+
import top.ellan.mahjong.debug.DebugService
10+
import top.ellan.mahjong.i18n.MessageService
11+
import top.ellan.mahjong.metrics.MetricsCollector
12+
import top.ellan.mahjong.runtime.AsyncService
13+
import top.ellan.mahjong.runtime.ServerScheduler
14+
import java.util.concurrent.atomic.AtomicReference
15+
import kotlin.test.Test
16+
import kotlin.test.assertNull
17+
import kotlin.test.assertSame
18+
19+
class DefaultTableRuntimeServicesTest {
20+
@Test
21+
fun `reload-sensitive services are read from current suppliers`() {
22+
val firstSettings = PluginSettings.from(YamlConfiguration())
23+
val secondSettings = PluginSettings.from(YamlConfiguration().apply {
24+
set("debug.enabled", true)
25+
})
26+
val settings = AtomicReference(firstSettings)
27+
val firstCraftEngine = mock(CraftEngineService::class.java)
28+
val secondCraftEngine = mock(CraftEngineService::class.java)
29+
val craftEngine = AtomicReference(firstCraftEngine)
30+
val firstDatabase = mock(DatabaseService::class.java)
31+
val database = AtomicReference<DatabaseService?>(firstDatabase)
32+
val firstTableManager = mock(MahjongTableManager::class.java)
33+
val secondTableManager = mock(MahjongTableManager::class.java)
34+
val tableManager = AtomicReference(firstTableManager)
35+
val services = DefaultTableRuntimeServices(
36+
mock(Plugin::class.java),
37+
mock(MessageService::class.java),
38+
mock(DebugService::class.java),
39+
mock(ServerScheduler::class.java),
40+
mock(AsyncService::class.java),
41+
{ settings.get() },
42+
{ craftEngine.get() },
43+
{ database.get() },
44+
mock(MetricsCollector::class.java),
45+
{ tableManager.get() }
46+
)
47+
48+
assertSame(firstSettings, services.settings())
49+
assertSame(firstCraftEngine, services.craftEngine())
50+
assertSame(firstDatabase, services.database())
51+
assertSame(firstTableManager, services.tableManager())
52+
53+
settings.set(secondSettings)
54+
craftEngine.set(secondCraftEngine)
55+
database.set(null)
56+
tableManager.set(secondTableManager)
57+
58+
assertSame(secondSettings, services.settings())
59+
assertSame(secondCraftEngine, services.craftEngine())
60+
assertNull(services.database())
61+
assertSame(secondTableManager, services.tableManager())
62+
}
63+
}

0 commit comments

Comments
 (0)