From b8892761338625f1e6c38b560b658705e8c53a9d Mon Sep 17 00:00:00 2001 From: Steveplays28 Date: Fri, 15 Mar 2024 13:59:14 +0100 Subject: [PATCH] fix: Fix vanilla `teleportTo` test --- .../mixin/test/common/MixinEntityTest.java | 7 ++++++ .../test/server/level/TestServerPlayer.java | 23 ++++++++++++++----- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/test/java/io/github/opencubicchunks/cubicchunks/mixin/test/common/MixinEntityTest.java b/src/test/java/io/github/opencubicchunks/cubicchunks/mixin/test/common/MixinEntityTest.java index c8fc14e1..90ba0285 100644 --- a/src/test/java/io/github/opencubicchunks/cubicchunks/mixin/test/common/MixinEntityTest.java +++ b/src/test/java/io/github/opencubicchunks/cubicchunks/mixin/test/common/MixinEntityTest.java @@ -6,7 +6,9 @@ import org.mockito.Mockito; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(Entity.class) public abstract class MixinEntityTest { @@ -14,4 +16,9 @@ public abstract class MixinEntityTest { private Holder cubic_chunks_3$fixNeoForgeRegistryError() { return Mockito.mock(); } + + @Inject(method = "toString", at = @At(value = "HEAD"), cancellable = true) + private void cubic_chunks_3$fixNullPointerException(CallbackInfoReturnable cir) { + cir.setReturnValue("MockedEntity"); + } } diff --git a/src/test/java/io/github/opencubicchunks/cubicchunks/test/server/level/TestServerPlayer.java b/src/test/java/io/github/opencubicchunks/cubicchunks/test/server/level/TestServerPlayer.java index b2e81322..4139723b 100644 --- a/src/test/java/io/github/opencubicchunks/cubicchunks/test/server/level/TestServerPlayer.java +++ b/src/test/java/io/github/opencubicchunks/cubicchunks/test/server/level/TestServerPlayer.java @@ -2,17 +2,20 @@ import static io.github.opencubicchunks.cubicchunks.testutils.Misc.setupServerLevel; import static io.github.opencubicchunks.cubicchunks.testutils.Setup.setupTests; -import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; import io.github.opencubicchunks.cubicchunks.testutils.CloseableReference; +import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.level.TicketType; +import net.minecraft.world.level.ChunkPos; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; +import org.mockito.Mockito; /** * This test class is for testing {@link io.github.opencubicchunks.cubicchunks.mixin.core.common.server.level.MixinServerPlayer} @@ -28,12 +31,20 @@ private ServerPlayer setupServerPlayer(ServerLevel serverLevel) { return new ServerPlayer(mock(RETURNS_DEEP_STUBS), serverLevel, mock(RETURNS_DEEP_STUBS), mock(RETURNS_DEEP_STUBS)); } - // TODO: Stub. Test fails. - @Disabled @Test public void testTeleportToVanilla() throws Exception { + @Test public void testTeleportToVanilla() throws Exception { try (CloseableReference serverLevelReference = setupServerLevel()) { ServerPlayer player = setupServerPlayer(serverLevelReference.value()); - player.teleportTo(player.serverLevel(), 0, 0, 0, mock(), 0, 0); - assertTrue(player.serverLevel().getChunkSource().hasChunk(0, 0)); + + // teleportTo takes the destination level to teleport to as a param, so we mock it + ServerLevel serverLevelReferenceSpy = spy(serverLevelReference.value()); + ServerChunkCache serverChunkCacheMock = mock(ServerChunkCache.class); + Mockito.when(serverLevelReferenceSpy.getChunkSource()).thenReturn(serverChunkCacheMock); + + player.teleportTo(serverLevelReferenceSpy, 0, 0, 0, mock(), 0, 0); + + // Verify that serverChunkCacheMock.addRegionTicket(...) is called once + Mockito.verify(serverChunkCacheMock, Mockito.times(1)) + .addRegionTicket(TicketType.POST_TELEPORT, new ChunkPos(0, 0), 1, player.getId()); } } }