diff --git a/common/src/test/java/net/neoforged/gradle/common/util/ConfigurationUtilsTest.java b/common/src/test/java/net/neoforged/gradle/common/util/ConfigurationUtilsTest.java new file mode 100644 index 000000000..5f49c5f80 --- /dev/null +++ b/common/src/test/java/net/neoforged/gradle/common/util/ConfigurationUtilsTest.java @@ -0,0 +1,137 @@ +package net.neoforged.gradle.common.util; + +import net.neoforged.gradle.dsl.common.util.ConfigurationUtils; +import org.gradle.api.Project; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.artifacts.ConfigurationContainer; +import org.gradle.api.plugins.ExtensionContainer; +import org.gradle.api.tasks.SourceSet; +import org.gradle.api.tasks.SourceSetContainer; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentMatchers; + +import java.util.*; +import java.util.function.Consumer; + +import static org.mockito.Mockito.*; + +public class ConfigurationUtilsTest { + + @Test + public void findCompileClasspathSourceSetHandlesImplementationAndCompileClasspath() { + final Configuration compileClasspath = mock(Configuration.class); + final Configuration implementation = mock(Configuration.class); + + final ConfigurationContainer configurations = mock(ConfigurationContainer.class); + final Project project = mock(Project.class); + final ExtensionContainer extensions = mock(ExtensionContainer.class); + + final SourceSetContainer sourceSets = mock(SourceSetContainer.class); + final SourceSet mainSourceSet = mock(SourceSet.class); + + when(configurations.findByName("compileClasspath")).thenReturn(compileClasspath); + when(configurations.findByName("implementation")).thenReturn(implementation); + + when(project.getConfigurations()).thenReturn(configurations); + + when(project.getExtensions()).thenReturn(extensions); + when(extensions.getByType(SourceSetContainer.class)).thenReturn(sourceSets); + + when(sourceSets.getByName("main")).thenReturn(mainSourceSet); + when(mainSourceSet.getCompileClasspathConfigurationName()).thenReturn("compileClasspath"); + when(mainSourceSet.getImplementationConfigurationName()).thenReturn("implementation"); + doAnswer(invocationOnMock -> { + final Consumer argument = invocationOnMock.getArgument(0); + argument.accept(mainSourceSet); + return null; + }).when(sourceSets).forEach(ArgumentMatchers.any()); + + when(compileClasspath.getName()).thenReturn("compileClasspath"); + when(implementation.getName()).thenReturn("implementation"); + + when(compileClasspath.getExtendsFrom()).thenReturn(buildConfigurationSet(implementation)); + + final List result = ConfigurationUtils.findCompileClasspathSourceSet(project, implementation); + + Assertions.assertEquals(buildConfigurationList(compileClasspath), result); + } + + @Test + public void findRuntimeClasspathSourceSetHandlesImplementationAndRuntimeClasspath() { + final Configuration runtimeClasspath = mock(Configuration.class); + final Configuration implementation = mock(Configuration.class); + + final ConfigurationContainer configurations = mock(ConfigurationContainer.class); + final Project project = mock(Project.class); + final ExtensionContainer extensions = mock(ExtensionContainer.class); + + final SourceSetContainer sourceSets = mock(SourceSetContainer.class); + final SourceSet mainSourceSet = mock(SourceSet.class); + + when(configurations.findByName("runtimeClasspath")).thenReturn(runtimeClasspath); + when(configurations.findByName("implementation")).thenReturn(implementation); + + when(project.getConfigurations()).thenReturn(configurations); + + when(project.getExtensions()).thenReturn(extensions); + when(extensions.getByType(SourceSetContainer.class)).thenReturn(sourceSets); + + when(sourceSets.getByName("main")).thenReturn(mainSourceSet); + when(mainSourceSet.getRuntimeClasspathConfigurationName()).thenReturn("runtimeClasspath"); + when(mainSourceSet.getImplementationConfigurationName()).thenReturn("implementation"); + doAnswer(invocationOnMock -> { + final Consumer argument = invocationOnMock.getArgument(0); + argument.accept(mainSourceSet); + return null; + }).when(sourceSets).forEach(ArgumentMatchers.any()); + + when(runtimeClasspath.getName()).thenReturn("runtimeClasspath"); + when(implementation.getName()).thenReturn("implementation"); + + when(runtimeClasspath.getExtendsFrom()).thenReturn(buildConfigurationSet(implementation)); + + final List result = ConfigurationUtils.findRuntimeClasspathSourceSet(project, implementation); + + Assertions.assertEquals(buildConfigurationList(runtimeClasspath), result); + } + + @Test + public void getAllExtendingConfigurationOneDeepOnSuperLookup() { + final Configuration source = mock(Configuration.class); + final Configuration target = mock(Configuration.class); + + when(source.getExtendsFrom()).thenReturn(buildConfigurationSet(target)); + + final Set configurations = ConfigurationUtils.getAllSuperConfigurations(source); + + Assertions.assertEquals(buildConfigurationSet(target), configurations); + } + + @Test + public void getAllExtendingConfigurationRecursiveOnSuperLookup() { + final Configuration source = mock(Configuration.class); + final Configuration levelOne = mock(Configuration.class); + final Configuration levelTwo = mock(Configuration.class); + + when(source.getExtendsFrom()).thenReturn(buildConfigurationSet(levelOne)); + when(levelOne.getExtendsFrom()).thenReturn(buildConfigurationSet(levelTwo)); + + final Set configurations = ConfigurationUtils.getAllSuperConfigurations(source); + + Assertions.assertEquals(buildConfigurationSet(levelOne, levelTwo), configurations); + } + + private Set buildConfigurationSet(Configuration... configurations) { + final Set configurationSet = new HashSet<>(); + Collections.addAll(configurationSet, configurations); + return configurationSet; + } + + private List buildConfigurationList(Configuration... configurations) { + final List configurationSet = new ArrayList<>(); + Collections.addAll(configurationSet, configurations); + return configurationSet; + } + +} diff --git a/common/src/test/java/net/neoforged/gradle/common/util/MappingUtilsTest.java b/common/src/test/java/net/neoforged/gradle/common/util/MappingUtilsTest.java index 9e2dfa68b..1cfcb6aee 100644 --- a/common/src/test/java/net/neoforged/gradle/common/util/MappingUtilsTest.java +++ b/common/src/test/java/net/neoforged/gradle/common/util/MappingUtilsTest.java @@ -1,7 +1,7 @@ package net.neoforged.gradle.common.util; import net.neoforged.gradle.dsl.common.util.NamingConstants; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.util.HashMap; import java.util.Map; @@ -10,6 +10,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; public class MappingUtilsTest { + @Test public void mappingVersionIsFoundInMappingVersionData() { final Map mappingVersionData = new HashMap<>(); diff --git a/dsl/common/build.gradle b/dsl/common/build.gradle index 432bad978..dc2b00c4b 100644 --- a/dsl/common/build.gradle +++ b/dsl/common/build.gradle @@ -3,7 +3,9 @@ plugins { } dependencies { - api "org.codehaus.groovy:groovy-all:${project.groovy_version}" + api ("org.codehaus.groovy:groovy-all:${project.groovy_version}", { + exclude group: 'junit' + }) api "commons-io:commons-io:${project.commons_io_version}" api "org.apache.maven:maven-artifact:${project.maven_artifact_version}" api "com.google.guava:guava:${project.guava_version}" diff --git a/dsl/mixin/build.gradle b/dsl/mixin/build.gradle index 37c9f979d..2e90463b9 100644 --- a/dsl/mixin/build.gradle +++ b/dsl/mixin/build.gradle @@ -3,7 +3,9 @@ plugins { } dependencies { - api "org.codehaus.groovy:groovy-all:${project.groovy_version}" + api("org.codehaus.groovy:groovy-all:${project.groovy_version}", { + exclude group: 'junit' + }) api "com.google.code.gson:gson:${project.gson_version}" api "net.neoforged:groovydslimprover:${project.groovy_dsl_improver_version}" } \ No newline at end of file diff --git a/dsl/neoform/build.gradle b/dsl/neoform/build.gradle index 92192d107..63a78ad57 100644 --- a/dsl/neoform/build.gradle +++ b/dsl/neoform/build.gradle @@ -6,7 +6,9 @@ dependencies { api project(':dsl-common') api project(':utils') - api "org.codehaus.groovy:groovy-all:${project.groovy_version}" + api("org.codehaus.groovy:groovy-all:${project.groovy_version}", { + exclude group: 'junit' + }) api "com.google.code.gson:gson:${project.gson_version}" api "net.neoforged:groovydslimprover:${project.groovy_dsl_improver_version}" } \ No newline at end of file diff --git a/dsl/platform/build.gradle b/dsl/platform/build.gradle index 150dfb246..86a3e027f 100644 --- a/dsl/platform/build.gradle +++ b/dsl/platform/build.gradle @@ -3,7 +3,9 @@ plugins { } dependencies { - api "org.codehaus.groovy:groovy-all:${project.groovy_version}" + api("org.codehaus.groovy:groovy-all:${project.groovy_version}", { + exclude group: 'junit' + }) api "com.google.code.gson:gson:${project.gson_version}" api "net.neoforged:groovydslimprover:${project.groovy_dsl_improver_version}" diff --git a/dsl/userdev/build.gradle b/dsl/userdev/build.gradle index bd926dc1f..b183ed7ab 100644 --- a/dsl/userdev/build.gradle +++ b/dsl/userdev/build.gradle @@ -3,7 +3,9 @@ plugins { } dependencies { - api "org.codehaus.groovy:groovy-all:${project.groovy_version}" + api("org.codehaus.groovy:groovy-all:${project.groovy_version}", { + exclude group: 'junit' + }) api "com.google.code.gson:gson:${project.gson_version}" api "net.neoforged:groovydslimprover:${project.groovy_dsl_improver_version}" diff --git a/dsl/vanilla/build.gradle b/dsl/vanilla/build.gradle index e212cfffd..1358fd036 100644 --- a/dsl/vanilla/build.gradle +++ b/dsl/vanilla/build.gradle @@ -3,7 +3,9 @@ plugins { } dependencies { - api "org.codehaus.groovy:groovy-all:${project.groovy_version}" + api("org.codehaus.groovy:groovy-all:${project.groovy_version}", { + exclude group: 'junit' + }) api "com.google.code.gson:gson:${project.gson_version}" api "net.neoforged:groovydslimprover:${project.groovy_dsl_improver_version}" diff --git a/gradle.properties b/gradle.properties index c693e1993..25255cd1c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -37,3 +37,5 @@ spock_groovy_version=3.0 mockito_version=4.11.0 jimfs_version=1.2 trainingwheels_version=1.0.42 + +githubCiTesting=true