From ef1e9383f0ea5027db72175bbee347248098545e Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Mon, 27 Jan 2025 20:42:49 -0500 Subject: [PATCH] Finish client gametests --- .../test/rendering/client/HudLayerTests.java | 21 ++++++++++++++---- .../hud_layer_test_after_subtitles.png | Bin 0 -> 2413 bytes .../hud_layer_test_before_demo_timer.png | Bin 0 -> 9592 bytes 3 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 fabric-rendering-v1/src/testmodClient/resources/templates/hud_layer_test_after_subtitles.png create mode 100644 fabric-rendering-v1/src/testmodClient/resources/templates/hud_layer_test_before_demo_timer.png diff --git a/fabric-rendering-v1/src/testmodClient/java/net/fabricmc/fabric/test/rendering/client/HudLayerTests.java b/fabric-rendering-v1/src/testmodClient/java/net/fabricmc/fabric/test/rendering/client/HudLayerTests.java index 93f5c3e095..c152f1830d 100644 --- a/fabric-rendering-v1/src/testmodClient/java/net/fabricmc/fabric/test/rendering/client/HudLayerTests.java +++ b/fabric-rendering-v1/src/testmodClient/java/net/fabricmc/fabric/test/rendering/client/HudLayerTests.java @@ -20,6 +20,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.RenderTickCounter; +import net.minecraft.client.util.InputUtil; import net.minecraft.text.Text; import net.minecraft.util.Colors; import net.minecraft.util.Identifier; @@ -98,10 +99,10 @@ public void runTest(ClientGameTestContext context) { try (TestSingleplayerContext singleplayer = context.worldBuilder().create()) { // Set up the test world singleplayer.getServer().runCommand("/tp @a 0 -60 0"); - singleplayer.getServer().runOnServer(server -> { - server.getOverworld().setBlockState(new BlockPos(0, -59, 0), Blocks.POWDER_SNOW.getDefaultState()); - server.getOverworld().setBlockState(new BlockPos(0, -59, 1), Blocks.WHITE_BED.getDefaultState()); - }); + singleplayer.getServer().runCommand("/scoreboard objectives add hud_layer_test dummy"); + singleplayer.getServer().runCommand("/scoreboard objectives setdisplay list hud_layer_test"); // Hack to show player list + singleplayer.getServer().runCommand("/scoreboard objectives setdisplay sidebar hud_layer_test"); // Hack to show sidebar + singleplayer.getServer().runOnServer(server -> server.getOverworld().setBlockState(new BlockPos(0, -59, 0), Blocks.POWDER_SNOW.getDefaultState())); // Wait for stuff to load singleplayer.getClientWorld().waitForChunksRender(); @@ -112,7 +113,19 @@ public void runTest(ClientGameTestContext context) { context.assertScreenshotEquals(TestScreenshotComparisonOptions.of("hud_layer_" + BEFORE_MISC_OVERLAY).withRegion(1308, 0, 400, 60).save()); context.assertScreenshotEquals(TestScreenshotComparisonOptions.of("hud_layer_" + AFTER_MISC_OVERLAY).withRegion(668, 460, 372, 56).save()); context.assertScreenshotEquals(TestScreenshotComparisonOptions.of("hud_layer_" + AFTER_EXPERIENCE_LEVEL).withRegion(754, 860, 200, 80).save()); + + // The sleep overlay takes 100 ticks to fully appear, so we start sleeping and wait for 100 ticks + context.runOnClient(client -> client.player.setSleepingPosition(new BlockPos(0, -59, 0))); + context.waitTicks(100); + + context.assertScreenshotEquals(TestScreenshotComparisonOptions.of("hud_layer_" + BEFORE_DEMO_TIMER).withRegion(1228, 460, 480, 40).save()); context.assertScreenshotEquals(TestScreenshotComparisonOptions.of("hud_layer_" + BEFORE_CHAT).withRegion(0, 860, 600, 20).save()); + + context.runOnClient(client -> client.player.clearSleepingPosition()); + context.waitTick(); + context.getInput().holdKey(InputUtil.GLFW_KEY_TAB); // Show player list + context.waitTick(); + context.assertScreenshotEquals(TestScreenshotComparisonOptions.of("hud_layer_" + AFTER_SUBTITLES).withRegion(554, 0, 600, 30).save()); } } } diff --git a/fabric-rendering-v1/src/testmodClient/resources/templates/hud_layer_test_after_subtitles.png b/fabric-rendering-v1/src/testmodClient/resources/templates/hud_layer_test_after_subtitles.png new file mode 100644 index 0000000000000000000000000000000000000000..89cf78e07aab8ba0dd1b5a91797493a76cd2f221 GIT binary patch literal 2413 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 dLHKN6ogYpHe literal 0 HcmV?d00001