From 933dc72a48f545fcced54673ae010d338ede16d4 Mon Sep 17 00:00:00 2001 From: Ceikry Date: Mon, 25 Apr 2022 12:15:56 +0000 Subject: [PATCH] Added unit tests for regions (now requires cache at Server/src/resources/cache) Reverted some really old changes (2019) to house loading code (Might fix construction? Probably not.) --- .../skill/construction/HouseManager.java | 11 +- Server/src/test/kotlin/RegionTests.kt | 117 ++++++++++++++++++ 2 files changed, 122 insertions(+), 6 deletions(-) create mode 100644 Server/src/test/kotlin/RegionTests.kt diff --git a/Server/src/main/java/core/game/node/entity/skill/construction/HouseManager.java b/Server/src/main/java/core/game/node/entity/skill/construction/HouseManager.java index 17c5e358e..c2a912fbb 100644 --- a/Server/src/main/java/core/game/node/entity/skill/construction/HouseManager.java +++ b/Server/src/main/java/core/game/node/entity/skill/construction/HouseManager.java @@ -378,12 +378,11 @@ public final class HouseManager { Region.load(from, true); RegionChunk defaultChunk = from.getPlanes()[style.getPlane()].getRegionChunk(1, 0); RegionChunk defaultSkyChunk = from.getPlanes()[1].getRegionChunk(0,0); - ZoneBorders borders; - //DynamicRegion[] regions = DynamicRegion.create(borders); - region = DynamicRegion.create(style.getRegionId()); -/* region.setBorders(borders); + ZoneBorders borders = DynamicRegion.reserveArea(8,8); + region = new DynamicRegion(-1, borders.getSouthWestX() >> 6, borders.getSouthWestY() >> 6); + region.setBorders(borders); region.setUpdateAllPlanes(true); - RegionManager.addRegion(region.getId(), region);*/ + RegionManager.addRegion(region.getId(), region); configureRoofs(); for (int z = 0; z < 4; z++) { for (int x = 0; x < 8; x++) { @@ -401,7 +400,7 @@ public final class HouseManager { region.replaceChunk(z, x, y, copy, from); room.loadDecorations(z, copy, this); } else { - region.replaceChunk(z, x, y, z != 0 ? defaultSkyChunk.copy(region.getPlanes()[z]) : defaultChunk.copy(region.getPlanes()[0]), from); + region.replaceChunk(z, x, y, z != 0 ? null : defaultChunk.copy(region.getPlanes()[0]), from); } } } diff --git a/Server/src/test/kotlin/RegionTests.kt b/Server/src/test/kotlin/RegionTests.kt new file mode 100644 index 000000000..60beed27a --- /dev/null +++ b/Server/src/test/kotlin/RegionTests.kt @@ -0,0 +1,117 @@ +import core.cache.Cache +import core.game.world.map.Region +import core.game.world.map.RegionChunk +import core.game.world.map.RegionManager +import core.game.world.map.build.DynamicRegion +import core.game.world.map.build.LandscapeParser +import org.junit.Assert +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Test +import rs09.game.system.config.ServerConfigParser +import rs09.game.system.config.XteaParser + +class RegionTests { + companion object { + init { + ServerConfigParser.parse("worldprops/default.conf") + XteaParser().load() + Cache.init(this::class.java.getResource("cache")?.path.toString()) + } + } + + @Test fun testRegionLoad() { + val region = RegionManager.forId(12850) + Region.load(region) + Assertions.assertNotEquals(0, region.objectCount, "Region has no objects! (Failed to parse?)") + } + + @Test fun shouldHaveDifferentIdForDynamicCopy() { + val region = RegionManager.forId(12850) + val dynamic = DynamicRegion.create(12850) + Assertions.assertNotEquals(region.regionId, (dynamic.x shl 8) or dynamic.y) + } + + @Test fun dynamicRegionCreationShouldNotReplaceOriginal() { + val region = RegionManager.forId(12850) + val dynamic = DynamicRegion.create(12850) + Assertions.assertEquals(false, RegionManager.forId(12850) is DynamicRegion) + } + + @Test fun testDynamicRegionHasSameObjects() { + val base = RegionManager.forId(12850) + Region.load(base) + val dynamic = DynamicRegion.create(12850) + Region.load(dynamic) + + Assertions.assertEquals(base.objectCount, dynamic.objectCount, "Dynamic and standard have differing object counts!") + } + + @Test fun testObjectExistsInStandardRegion() { + val base = RegionManager.forId(12850) + Region.load(base) + + val targetLoc = base.baseLocation.transform(23, 17, 0) //location of a bush + Assertions.assertEquals(36782, RegionManager.getObject(targetLoc)?.id ?: -1, "Object does not exist at expected location!") + } + + @Test fun testObjectExistsInDynamicRegion() { + val base = RegionManager.forId(12850) + val dynamic = DynamicRegion.create(12850) + Region.load(base) + Region.load(dynamic) + + val targetLoc = dynamic.baseLocation.transform(23, 17, 0) + Assertions.assertEquals(36782, RegionManager.getObject(targetLoc)?.id ?: -1, "Object does not exist at expected location!") + } + + @Test fun testObjectExistsInCopiedChunk() { + val base = RegionManager.forId(12850) + val dynamic = DynamicRegion.create(12851) + Region.load(base) + Region.load(dynamic) + val targetLoc = dynamic.baseLocation.transform(23, 17, 0) + Assertions.assertEquals(null, RegionManager.getObject(targetLoc), "Object exists pre-copy?") + val replacement = base.planes[0].getRegionChunk(2, 2) + dynamic.replaceChunk(0, 2, 2, replacement.copy(dynamic.planes[0]), base) + Assertions.assertEquals(36782, RegionManager.getObject(targetLoc)?.id ?: -1, "Object does not exist at expected location!") + } + + @Test fun testObjectExistsInCopiedChunkUsingBuildFlag() { + val base = RegionManager.forId(12850) + val dynamic = DynamicRegion.create(12851) + Region.load(base, true) + Region.load(dynamic, true) + val targetLoc = dynamic.baseLocation.transform(23, 17, 0) + Assertions.assertEquals(null, RegionManager.getObject(targetLoc), "Object exists pre-copy?") + val replacement = base.planes[0].getRegionChunk(2, 2) + dynamic.replaceChunk(0, 2, 2, replacement.copy(dynamic.planes[0]), base) + Assertions.assertEquals(36782, RegionManager.getObject(targetLoc)?.id ?: -1, "Object does not exist at expected location!") + } + + @Test fun testObjectExistsInCopiedChunkCopiedIntoBlankRegion() { + val base = RegionManager.forId(12850) + val borders = DynamicRegion.reserveArea(8,8) + val dynamic = DynamicRegion(-1, borders.southWestX shr 6, borders.southWestY shr 6) + dynamic.borders = borders + dynamic.isUpdateAllPlanes = true + RegionManager.addRegion(dynamic.id, dynamic) + val targetLoc = dynamic.baseLocation.transform(23, 17, 0) + val replacement = base.planes[0].getRegionChunk(2,2) + dynamic.replaceChunk(0, 2, 2, replacement.copy(dynamic.planes[0]), base) + Assertions.assertEquals(36782, RegionManager.getObject(targetLoc)?.id ?: -1, "Object does not exist at expected location!") + } + + @Test fun testObjectExistsInCopiedChunkInLinkedRegion() { + val base = DynamicRegion.create(12850) + val borders = DynamicRegion.reserveArea(8,8) + val dynamic = DynamicRegion(-1, borders.southWestX shr 6, borders.southWestY shr 6) + dynamic.borders = borders + dynamic.isUpdateAllPlanes = true + RegionManager.addRegion(dynamic.id, dynamic) + val targetLoc = dynamic.baseLocation.transform(23, 17, 0) + val replacement = base.planes[0].getRegionChunk(2,2) + dynamic.replaceChunk(0, 2, 2, replacement.copy(dynamic.planes[0]), base) + base.link(dynamic) + Assertions.assertEquals(36782, RegionManager.getObject(targetLoc)?.id ?: -1, "Object does not exist at expected location!") + } +} \ No newline at end of file