mirror of
https://github.com/FabricMC/fabric.git
synced 2025-04-20 19:04:44 -04:00
Fix title screen screenshot in automated client test (#4177)
* Fix title screen screenshot * Use accessor to detect when background fade is done
This commit is contained in:
parent
7d94de05ff
commit
2127dc72fe
4 changed files with 51 additions and 3 deletions
fabric-api-base/src/testmodClient
java/net/fabricmc/fabric/test/base/client
resources
|
@ -27,6 +27,7 @@ import static net.fabricmc.fabric.test.base.client.FabricClientTestHelper.submit
|
|||
import static net.fabricmc.fabric.test.base.client.FabricClientTestHelper.takeScreenshot;
|
||||
import static net.fabricmc.fabric.test.base.client.FabricClientTestHelper.waitForLoadingComplete;
|
||||
import static net.fabricmc.fabric.test.base.client.FabricClientTestHelper.waitForScreen;
|
||||
import static net.fabricmc.fabric.test.base.client.FabricClientTestHelper.waitForTitleScreenFade;
|
||||
import static net.fabricmc.fabric.test.base.client.FabricClientTestHelper.waitForWorldTicks;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -34,6 +35,7 @@ import java.io.UncheckedIOException;
|
|||
import java.nio.file.DirectoryStream;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.time.Duration;
|
||||
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import org.spongepowered.asm.mixin.MixinEnvironment;
|
||||
|
@ -83,7 +85,8 @@ public class FabricApiAutoTestClient implements ClientModInitializer {
|
|||
|
||||
{
|
||||
waitForScreen(TitleScreen.class);
|
||||
takeScreenshot("title_screen");
|
||||
waitForTitleScreenFade();
|
||||
takeScreenshot("title_screen", Duration.ZERO);
|
||||
clickScreenButton("menu.singleplayer");
|
||||
}
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ import net.minecraft.client.MinecraftClient;
|
|||
import net.minecraft.client.gui.Drawable;
|
||||
import net.minecraft.client.gui.screen.GameMenuScreen;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
import net.minecraft.client.gui.screen.TitleScreen;
|
||||
import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen;
|
||||
import net.minecraft.client.gui.screen.ingame.InventoryScreen;
|
||||
import net.minecraft.client.gui.screen.multiplayer.ConnectScreen;
|
||||
|
@ -44,6 +45,7 @@ import net.minecraft.text.Text;
|
|||
|
||||
import net.fabricmc.fabric.test.base.client.mixin.CyclingButtonWidgetAccessor;
|
||||
import net.fabricmc.fabric.test.base.client.mixin.ScreenAccessor;
|
||||
import net.fabricmc.fabric.test.base.client.mixin.TitleScreenAccessor;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
|
||||
// Provides thread safe utils for interacting with a running game.
|
||||
|
@ -80,8 +82,12 @@ public final class FabricClientTestHelper {
|
|||
}
|
||||
|
||||
public static void takeScreenshot(String name) {
|
||||
takeScreenshot(name, Duration.ofSeconds(1));
|
||||
}
|
||||
|
||||
public static void takeScreenshot(String name, Duration delay) {
|
||||
// Allow time for any screens to open
|
||||
waitFor(Duration.ofSeconds(1));
|
||||
waitFor(delay);
|
||||
|
||||
submitAndWait(client -> {
|
||||
ScreenshotRecorder.saveScreenshot(FabricLoader.getInstance().getGameDir().toFile(), name + ".png", client.getFramebuffer(), (message) -> {
|
||||
|
@ -166,6 +172,16 @@ public final class FabricClientTestHelper {
|
|||
});
|
||||
}
|
||||
|
||||
public static void waitForTitleScreenFade() {
|
||||
waitFor("Title screen fade", client -> {
|
||||
if (!(client.currentScreen instanceof TitleScreen titleScreen)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return !((TitleScreenAccessor) titleScreen).getDoBackgroundFade();
|
||||
});
|
||||
}
|
||||
|
||||
private static void waitFor(String what, Predicate<MinecraftClient> predicate) {
|
||||
waitFor(what, predicate, Duration.ofSeconds(10));
|
||||
}
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* Copyright (c) 2016, 2017, 2018, 2019 FabricMC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package net.fabricmc.fabric.test.base.client.mixin;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
import net.minecraft.client.gui.screen.TitleScreen;
|
||||
|
||||
@Mixin(TitleScreen.class)
|
||||
public interface TitleScreenAccessor {
|
||||
@Accessor
|
||||
boolean getDoBackgroundFade();
|
||||
}
|
|
@ -5,7 +5,8 @@
|
|||
"client": [
|
||||
"CyclingButtonWidgetAccessor",
|
||||
"MinecraftDedicatedServerMixin",
|
||||
"ScreenAccessor"
|
||||
"ScreenAccessor",
|
||||
"TitleScreenAccessor"
|
||||
],
|
||||
"injectors": {
|
||||
"defaultRequire": 1
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue