From aed0c24d046a24f23f2264f3828d4c6bd6570687 Mon Sep 17 00:00:00 2001 From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> Date: Sun, 17 Dec 2023 21:33:49 -0800 Subject: [PATCH] Cleanup and add test --- .../configuration/LoomConfigurations.java | 21 ++---------- .../test/integration/IncludedJarsTest.groovy | 33 +++++++++++++++++++ .../test/integration/MultiProjectTest.groovy | 2 +- .../projects/includedJars/build.gradle | 21 ++++++++++++ .../projects/includedJars/settings.gradle | 1 + .../src/main/resources/fabric.mod.json | 9 +++++ 6 files changed, 67 insertions(+), 20 deletions(-) create mode 100644 src/test/groovy/net/fabricmc/loom/test/integration/IncludedJarsTest.groovy create mode 100644 src/test/resources/projects/includedJars/build.gradle create mode 100644 src/test/resources/projects/includedJars/settings.gradle create mode 100644 src/test/resources/projects/includedJars/src/main/resources/fabric.mod.json diff --git a/src/main/java/net/fabricmc/loom/configuration/LoomConfigurations.java b/src/main/java/net/fabricmc/loom/configuration/LoomConfigurations.java index 2af0c61f6..16d98b73e 100644 --- a/src/main/java/net/fabricmc/loom/configuration/LoomConfigurations.java +++ b/src/main/java/net/fabricmc/loom/configuration/LoomConfigurations.java @@ -30,9 +30,7 @@ import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.ConfigurationContainer; -import org.gradle.api.artifacts.ModuleDependency; import org.gradle.api.artifacts.dsl.DependencyHandler; -import org.gradle.api.attributes.Category; import org.gradle.api.plugins.JavaPlugin; import net.fabricmc.loom.LoomGradleExtension; @@ -83,23 +81,8 @@ public void run() { registerNonTransitive(Constants.Configurations.LOADER_DEPENDENCIES, Role.RESOLVABLE); registerNonTransitive(Constants.Configurations.MINECRAFT, Role.NONE); - registerNonTransitive(Constants.Configurations.INCLUDE, Role.RESOLVABLE).configure(configuration -> { - configuration.withDependencies(dependencySet -> { - dependencySet.all(dependency -> { - if (!(dependency instanceof ModuleDependency module)) { - return; - } - - final Category category = module.getAttributes().getAttribute(Category.CATEGORY_ATTRIBUTE); - - if (category != null && (category.getName().equals(Category.REGULAR_PLATFORM) || category.getName().equals(Category.ENFORCED_PLATFORM))) { - return; - } - - module.setTransitive(false); - }); - }); - }); + // We don't need to make this non-transitive due to the way we resolve it. Also, doing so would break platform dependencies. + register(Constants.Configurations.INCLUDE, Role.RESOLVABLE); registerNonTransitive(Constants.Configurations.MAPPING_CONSTANTS, Role.RESOLVABLE); register(Constants.Configurations.NAMED_ELEMENTS, Role.CONSUMABLE).configure(configuration -> { diff --git a/src/test/groovy/net/fabricmc/loom/test/integration/IncludedJarsTest.groovy b/src/test/groovy/net/fabricmc/loom/test/integration/IncludedJarsTest.groovy new file mode 100644 index 000000000..b62d17e34 --- /dev/null +++ b/src/test/groovy/net/fabricmc/loom/test/integration/IncludedJarsTest.groovy @@ -0,0 +1,33 @@ +package net.fabricmc.loom.test.integration + +import net.fabricmc.loom.test.util.GradleProjectTestTrait +import spock.lang.Specification +import spock.lang.Unroll + +import static net.fabricmc.loom.test.LoomTestConstants.STANDARD_TEST_VERSIONS +import static org.gradle.testkit.runner.TaskOutcome.SUCCESS + +class IncludedJarsTest extends Specification implements GradleProjectTestTrait { + @Unroll + def "included jars (gradle #version)"() { + setup: + def gradle = gradleProject(project: "includedJars", version: version) + + when: + def result = gradle.run(tasks: ["remapJar"]) + + then: + result.task(":remapJar").outcome == SUCCESS + + // Assert directly declared dependencies are present + gradle.hasOutputZipEntry("includedJars.jar", "META-INF/jars/log4j-core-2.22.0.jar") + gradle.hasOutputZipEntry("includedJars.jar", "META-INF/jars/adventure-text-serializer-gson-4.14.0.jar") + + // But not transitives. + !gradle.hasOutputZipEntry("includedJars.jar", "META-INF/jars/log4j-api-2.22.0.jar") + !gradle.hasOutputZipEntry("includedJars.jar", "META-INF/jars/adventure-api-4.14.0.jar") + + where: + version << STANDARD_TEST_VERSIONS + } +} diff --git a/src/test/groovy/net/fabricmc/loom/test/integration/MultiProjectTest.groovy b/src/test/groovy/net/fabricmc/loom/test/integration/MultiProjectTest.groovy index da8662138..c5669df04 100644 --- a/src/test/groovy/net/fabricmc/loom/test/integration/MultiProjectTest.groovy +++ b/src/test/groovy/net/fabricmc/loom/test/integration/MultiProjectTest.groovy @@ -53,7 +53,7 @@ class MultiProjectTest extends Specification implements GradleProjectTestTrait { gradle.hasOutputZipEntry("multiproject-1.0.0.jar", "META-INF/jars/example-1.0.0.jar") gradle.hasOutputZipEntry("multiproject-1.0.0.jar", "META-INF/jars/core-1.0.0.jar") - gradle.hasOutputZipEntry("multiproject-1.0.0.jar", "META-INF/jars/fabric-api-base-0.2.1+9354966b7d.jar") + gradle.hasOutputZipEntry("multiproject-1.0.0.jar", "META-INF/jars/fabric-api-base-0.3.0+f74f7c7d7d.jar") where: version << STANDARD_TEST_VERSIONS diff --git a/src/test/resources/projects/includedJars/build.gradle b/src/test/resources/projects/includedJars/build.gradle new file mode 100644 index 000000000..5808e9a52 --- /dev/null +++ b/src/test/resources/projects/includedJars/build.gradle @@ -0,0 +1,21 @@ +plugins { + id 'fabric-loom' +} + +repositories { + mavenCentral() +} + +dependencies { + minecraft 'com.mojang:minecraft:1.18.2' + mappings 'net.fabricmc:yarn:1.18.2+build.1:v2' + modImplementation 'net.fabricmc:fabric-loader:0.13.3' + + include 'org.apache.logging.log4j:log4j-core:2.22.0' + + // Test bom/platform dependencies + include platform('net.kyori:adventure-bom:4.14.0') + + // bom provides version + include 'net.kyori:adventure-text-serializer-gson' +} diff --git a/src/test/resources/projects/includedJars/settings.gradle b/src/test/resources/projects/includedJars/settings.gradle new file mode 100644 index 000000000..7fdfcf73c --- /dev/null +++ b/src/test/resources/projects/includedJars/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'includedJars' diff --git a/src/test/resources/projects/includedJars/src/main/resources/fabric.mod.json b/src/test/resources/projects/includedJars/src/main/resources/fabric.mod.json new file mode 100644 index 000000000..33bad8c20 --- /dev/null +++ b/src/test/resources/projects/includedJars/src/main/resources/fabric.mod.json @@ -0,0 +1,9 @@ +{ + "schemaVersion": 1, + "id": "modid", + "version": "0.0.0", + + "name": "Example Mod", + "description": "This is an example description! Tell everyone what your mod is about!", + "environment": "*" +}