From 362fc98c47ce5b839e87148d54ef75db48abbf93 Mon Sep 17 00:00:00 2001 From: modmuss Date: Wed, 22 Jan 2025 22:05:55 +0000 Subject: [PATCH] Improvements to test and IDE runs (#1252) * Improves to test and IDE runs * Use correct sourceset --- .../loom/api/fabricapi/GameTestSettings.java | 10 ++++++++ .../fabricapi/FabricApiAbstractSourceSet.java | 14 ++++++----- .../fabricapi/FabricApiTesting.java | 23 ++++++++++++++++++- .../configuration/ide/idea/IdeaSyncTask.java | 2 ++ 4 files changed, 42 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/fabricmc/loom/api/fabricapi/GameTestSettings.java b/src/main/java/net/fabricmc/loom/api/fabricapi/GameTestSettings.java index 5675484a..1e556191 100644 --- a/src/main/java/net/fabricmc/loom/api/fabricapi/GameTestSettings.java +++ b/src/main/java/net/fabricmc/loom/api/fabricapi/GameTestSettings.java @@ -79,4 +79,14 @@ public interface GameTestSettings { *

Default: true */ Property getClearRunDirectory(); + + /** + * Contains a string property representing the username to use for the client side game tests. + * + *

This only works when {@link #getEnableClientGameTests()} is enabled. + * + *

Default: Player0 + */ + @Optional + Property getUsername(); } diff --git a/src/main/java/net/fabricmc/loom/configuration/fabricapi/FabricApiAbstractSourceSet.java b/src/main/java/net/fabricmc/loom/configuration/fabricapi/FabricApiAbstractSourceSet.java index 6ffdce0c..22bec596 100644 --- a/src/main/java/net/fabricmc/loom/configuration/fabricapi/FabricApiAbstractSourceSet.java +++ b/src/main/java/net/fabricmc/loom/configuration/fabricapi/FabricApiAbstractSourceSet.java @@ -46,7 +46,7 @@ abstract class FabricApiAbstractSourceSet { protected abstract String getSourceSetName(); - protected void configureSourceSet(Property modId, boolean isClient) { + protected SourceSet configureSourceSet(Property modId, boolean isClient) { final LoomGradleExtension extension = LoomGradleExtension.get(getProject()); final SourceSet mainSourceSet = SourceSetHelper.getMainSourceSet(getProject()); @@ -54,18 +54,18 @@ abstract class FabricApiAbstractSourceSet { SourceSetContainer sourceSets = SourceSetHelper.getSourceSets(getProject()); - // Create the new datagen sourceset, depend on the main or client sourceset. - SourceSet dataGenSourceSet = sourceSets.create(getSourceSetName(), sourceSet -> { - dependsOn(sourceSet, mainSourceSet); + // Create the new sourceset, depend on the main or client sourceset. + SourceSet sourceSet = sourceSets.create(getSourceSetName(), ss -> { + dependsOn(ss, mainSourceSet); if (isClientAndSplit) { - dependsOn(sourceSet, SourceSetHelper.getSourceSetByName(MinecraftSourceSets.Split.CLIENT_ONLY_SOURCE_SET_NAME, getProject())); + dependsOn(ss, SourceSetHelper.getSourceSetByName(MinecraftSourceSets.Split.CLIENT_ONLY_SOURCE_SET_NAME, getProject())); } }); modId.convention(getProject().provider(() -> { try { - final FabricModJson fabricModJson = FabricModJsonFactory.createFromSourceSetsNullable(getProject(), dataGenSourceSet); + final FabricModJson fabricModJson = FabricModJsonFactory.createFromSourceSetsNullable(getProject(), sourceSet); if (fabricModJson == null) { throw new RuntimeException("Could not find a fabric.mod.json file in the data source set or a value for DataGenerationSettings.getModId()"); @@ -83,6 +83,8 @@ abstract class FabricApiAbstractSourceSet { }); extension.createRemapConfigurations(sourceSets.getByName(getSourceSetName())); + + return sourceSet; } private static void extendsFrom(Project project, String name, String extendsFrom) { diff --git a/src/main/java/net/fabricmc/loom/configuration/fabricapi/FabricApiTesting.java b/src/main/java/net/fabricmc/loom/configuration/fabricapi/FabricApiTesting.java index c3585db3..23084076 100644 --- a/src/main/java/net/fabricmc/loom/configuration/fabricapi/FabricApiTesting.java +++ b/src/main/java/net/fabricmc/loom/configuration/fabricapi/FabricApiTesting.java @@ -24,6 +24,7 @@ package net.fabricmc.loom.configuration.fabricapi; +import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -36,6 +37,7 @@ import org.gradle.api.Project; import org.gradle.api.file.RegularFileProperty; import org.gradle.api.tasks.Delete; import org.gradle.api.tasks.OutputFile; +import org.gradle.api.tasks.SourceSet; import org.gradle.api.tasks.TaskAction; import org.gradle.api.tasks.TaskContainer; @@ -45,6 +47,7 @@ import net.fabricmc.loom.configuration.ide.RunConfigSettings; import net.fabricmc.loom.task.AbstractLoomTask; import net.fabricmc.loom.task.LoomTasks; import net.fabricmc.loom.util.Constants; +import net.fabricmc.loom.util.gradle.SourceSetHelper; public abstract class FabricApiTesting extends FabricApiAbstractSourceSet { @Inject @@ -69,11 +72,16 @@ public abstract class FabricApiTesting extends FabricApiAbstractSourceSet { settings.getEnableClientGameTests().convention(true); settings.getEula().convention(false); settings.getClearRunDirectory().convention(true); + settings.getUsername().convention("Player0"); action.execute(settings); + final SourceSet testSourceSet; + if (settings.getCreateSourceSet().get()) { - configureSourceSet(settings.getModId(), true); + testSourceSet = configureSourceSet(settings.getModId(), true); + } else { + testSourceSet = SourceSetHelper.getMainSourceSet(getProject()); } Consumer configureBase = run -> { @@ -94,10 +102,23 @@ public abstract class FabricApiTesting extends FabricApiAbstractSourceSet { } if (settings.getEnableClientGameTests().get()) { + // Not ideal as there may be multiple resources directories, if this isnt correct the mod will need to override this. + final File resourcesDir = testSourceSet.getResources().getFiles().stream().findAny().orElse(null); + RunConfigSettings clientGameTest = extension.getRunConfigs().create("clientGameTest", run -> { run.inherit(extension.getRunConfigs().getByName("client")); run.property("fabric.client.gametest"); + + if (resourcesDir != null) { + run.property("fabric.client.gametest.testModResourcesPath", resourcesDir.getAbsolutePath()); + } + run.runDir("build/run/clientGameTest"); + + if (settings.getUsername().isPresent()) { + run.programArgs("--username", settings.getUsername().get()); + } + configureBase.accept(run); }); diff --git a/src/main/java/net/fabricmc/loom/configuration/ide/idea/IdeaSyncTask.java b/src/main/java/net/fabricmc/loom/configuration/ide/idea/IdeaSyncTask.java index 4fae7e3b..f3a55e8a 100644 --- a/src/main/java/net/fabricmc/loom/configuration/ide/idea/IdeaSyncTask.java +++ b/src/main/java/net/fabricmc/loom/configuration/ide/idea/IdeaSyncTask.java @@ -110,6 +110,8 @@ public abstract class IdeaSyncTask extends AbstractLoomTask { irc.getExcludedLibraryPaths().set(excludedLibraryPaths); irc.getLaunchFile().set(runConfigFile); configs.add(irc); + + settings.makeRunDir(); } return configs;