From 19a838bea4627efa3cf673e8efe4e8c8f7774f7d Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Sun, 15 Oct 2023 19:10:51 +0200 Subject: [PATCH] optimize test performance --- .../minosoft/data/physics/PhysicsTestUtil.kt | 14 +++-- .../models/baked/BakedModelTestUtil.kt | 12 +++-- .../connection/play/ConnectionTestUtil.kt | 53 +++++++++++++------ 3 files changed, 54 insertions(+), 25 deletions(-) diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/data/physics/PhysicsTestUtil.kt b/src/integration-test/kotlin/de/bixilon/minosoft/data/physics/PhysicsTestUtil.kt index 67b425e6a..232c32441 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/data/physics/PhysicsTestUtil.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/data/physics/PhysicsTestUtil.kt @@ -36,19 +36,23 @@ import de.bixilon.minosoft.util.KUtil.matches import de.bixilon.minosoft.util.KUtil.startInit import org.testng.Assert import java.util.* +import kotlin.reflect.jvm.javaField object PhysicsTestUtil { const val MATCH_EXACTLY = true val VALUE_MARGIN = if (MATCH_EXACTLY) 0.0 else DoubleUtil.DEFAULT_MARGIN + private val PLAYER_ATTRIBUTES = LocalPlayerEntity::attributes.javaField!! + private val CONNECTION_PLAYER = PlayConnection::player.javaField!! + private val CONNECTION_CAMERA = PlayConnection::camera.javaField!! - fun createPlayer(connection: PlayConnection = createConnection()): LocalPlayerEntity { - connection.world.dimension::skyLight.forceSet(false) + + fun createPlayer(connection: PlayConnection = createConnection(light = false)): LocalPlayerEntity { val player = LocalPlayerEntity(connection.account, connection, SignatureKeyManagement(connection, connection.account)) - player::attributes.forceSet(EntityAttributes(player.type.attributes)) + PLAYER_ATTRIBUTES.forceSet(player, EntityAttributes(player.type.attributes)) player.startInit() - connection::player.forceSet(player) - connection::camera.forceSet(ConnectionCamera(connection)) + CONNECTION_PLAYER.forceSet(connection, player) + CONNECTION_CAMERA.forceSet(connection, ConnectionCamera(connection)) connection.camera.init() connection.world.entities.remove(0) connection.world.entities.add(0, null, player) diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/models/baked/BakedModelTestUtil.kt b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/models/baked/BakedModelTestUtil.kt index 872a329ae..2987109d7 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/models/baked/BakedModelTestUtil.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/models/baked/BakedModelTestUtil.kt @@ -25,23 +25,27 @@ import de.bixilon.minosoft.gui.rendering.models.block.state.baked.BakedModel import de.bixilon.minosoft.gui.rendering.system.base.texture.TextureManager import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.memory.MemoryTexture import de.bixilon.minosoft.gui.rendering.textures.TextureUtil.texture -import de.bixilon.minosoft.protocol.network.connection.play.ConnectionTestUtil +import de.bixilon.minosoft.protocol.network.connection.play.ConnectionTestUtil.createConnection import de.bixilon.minosoft.util.KUtil.toResourceLocation import org.testng.Assert import kotlin.math.abs object BakedModelTestUtil { private val texture = Minosoft::class.java.getResourceAsStream("/assets/minosoft/textures/debug.png")!!.readAllBytes() + private val connection by lazy { createConnection() } + private val rendering by lazy { + val rendering = Rendering(connection) + rendering.context.textures::debugTexture.forceSet(MemoryTexture(Vec2i(0, 0))) + return@lazy rendering + } + fun createTextureManager(vararg names: String): TextureManager { - val connection = ConnectionTestUtil.createConnection() val assets = MemoryAssetsManager() for (name in names) { assets.push(name.toResourceLocation().texture(), texture) } connection::assetsManager.forceSet(assets.box()) - val rendering = Rendering(connection) - rendering.context.textures::debugTexture.forceSet(MemoryTexture(Vec2i(0, 0))) return rendering.context.textures } diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/protocol/network/connection/play/ConnectionTestUtil.kt b/src/integration-test/kotlin/de/bixilon/minosoft/protocol/network/connection/play/ConnectionTestUtil.kt index c87c678af..cbfca15df 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/protocol/network/connection/play/ConnectionTestUtil.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/protocol/network/connection/play/ConnectionTestUtil.kt @@ -35,10 +35,12 @@ import de.bixilon.minosoft.protocol.versions.Versions import de.bixilon.minosoft.tags.TagManager import de.bixilon.minosoft.test.IT import de.bixilon.minosoft.test.IT.FALLBACK_TAGS +import de.bixilon.minosoft.test.IT.OBJENESIS import de.bixilon.minosoft.test.IT.reference import de.bixilon.minosoft.test.ITUtil import de.bixilon.minosoft.util.KUtil.startInit import java.util.concurrent.atomic.AtomicInteger +import kotlin.reflect.jvm.javaField object ConnectionTestUtil { @@ -48,28 +50,47 @@ object ConnectionTestUtil { reference() } + private val LANGUAGE = PlayConnection::language.javaField!! + private val SEQUENCE = PlayConnection::sequence.javaField!! + private val ACCOUNT = PlayConnection::account.javaField!! + private val VERSION = PlayConnection::version.javaField!! + private val REGISTRIES = PlayConnection::registries.javaField!! + private val WORLD = PlayConnection::world.javaField!! + private val PLAYER = PlayConnection::player.javaField!! + private val NETWORK = PlayConnection::network.javaField!! + private val EVENTS = PlayConnection::events.javaField!! + private val PROFILES = PlayConnection::profiles.javaField!! + private val ASSETS_MANAGER = PlayConnection::assetsManager.javaField!! + private val STATE = PlayConnection::state.javaField!! + private val TAGS = PlayConnection::tags.javaField!! + private val LEGACY_TAGS = PlayConnection::legacyTags.javaField!! + private val CAMERA = PlayConnection::camera.javaField!! + + private val language = LanguageList(mutableListOf()) + private val signature = OBJENESIS.newInstance(SignatureKeyManagement::class.java) + fun createConnection(worldSize: Int = 0, light: Boolean = false, version: String? = null): PlayConnection { - val connection = IT.OBJENESIS.newInstance(PlayConnection::class.java) - connection::language.forceSet(LanguageList(mutableListOf())) + val connection = OBJENESIS.newInstance(PlayConnection::class.java) + LANGUAGE.forceSet(connection, language) val version = if (version == null) IT.VERSION else Versions[version] ?: throw IllegalArgumentException("Can not find version: $version") - connection::sequence.forceSet(AtomicInteger(1)) - connection::account.forceSet(TestAccount) - connection::version.forceSet(version) - connection::registries.forceSet(Registries()) + SEQUENCE.forceSet(connection, AtomicInteger(1)) + ACCOUNT.forceSet(connection, TestAccount) + VERSION.forceSet(connection, version) + REGISTRIES.forceSet(connection, Registries()) connection.registries.updateFlattened(version.flattened) connection.registries.parent = if (version == IT.VERSION) IT.REGISTRIES else ITUtil.loadRegistries(version) - connection::world.forceSet(createWorld(connection, light, (worldSize * 2 + 1).pow(2))) - connection::player.forceSet(LocalPlayerEntity(connection.account, connection, SignatureKeyManagement(connection, TestAccount))) + WORLD.forceSet(connection, createWorld(connection, light, (worldSize * 2 + 1).pow(2))) + PLAYER.forceSet(connection, LocalPlayerEntity(connection.account, connection, signature)) connection.player.startInit() - connection::network.forceSet(TestNetwork()) - connection::events.forceSet(EventMaster()) - connection::profiles.forceSet(profiles) - connection::assetsManager.forceSet(ConnectionAssetsManager(AssetsManagerProperties(PackProperties(version.packFormat)))) - connection::state.forceSet(DataObserver(PlayConnectionStates.PLAYING)) - connection::tags.forceSet(TagManager()) - connection::legacyTags.forceSet(FALLBACK_TAGS) - connection::camera.forceSet(ConnectionCamera(connection)) + NETWORK.forceSet(connection, TestNetwork()) + EVENTS.forceSet(connection, EventMaster()) + PROFILES.forceSet(connection, profiles) + ASSETS_MANAGER.forceSet(connection, ConnectionAssetsManager(AssetsManagerProperties(PackProperties(version.packFormat)))) + STATE.forceSet(connection, DataObserver(PlayConnectionStates.PLAYING)) + TAGS.forceSet(connection, TagManager()) + LEGACY_TAGS.forceSet(connection, FALLBACK_TAGS) + CAMERA.forceSet(connection, ConnectionCamera(connection)) connection.camera.init() if (worldSize > 0) { connection.world.initialize(worldSize)