Skip to content

Commit

Permalink
Fix tests
Browse files Browse the repository at this point in the history
And push new tests for ConfigurationUtils
  • Loading branch information
marchermans committed May 3, 2024
1 parent 2d1add3 commit e565ea7
Show file tree
Hide file tree
Showing 9 changed files with 159 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -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() {

This comment has been minimized.

Copy link
@Technici4n

Technici4n May 3, 2024

Member

@marchermans IMO this sort of unit test is not useful. It requires way too much glue for what it actually tests, and will just get in the way of any future refactor. It's also quite likely that the glue is incorrect or does not match Gradle behavior.

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<SourceSet> 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<Configuration> 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<SourceSet> 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<Configuration> 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<Configuration> 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<Configuration> configurations = ConfigurationUtils.getAllSuperConfigurations(source);

Assertions.assertEquals(buildConfigurationSet(levelOne, levelTwo), configurations);
}

private Set<Configuration> buildConfigurationSet(Configuration... configurations) {
final Set<Configuration> configurationSet = new HashSet<>();
Collections.addAll(configurationSet, configurations);
return configurationSet;
}

private List<Configuration> buildConfigurationList(Configuration... configurations) {
final List<Configuration> configurationSet = new ArrayList<>();
Collections.addAll(configurationSet, configurations);
return configurationSet;
}

}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -10,6 +10,7 @@
import static org.junit.jupiter.api.Assertions.assertThrows;

public class MappingUtilsTest {

@Test
public void mappingVersionIsFoundInMappingVersionData() {
final Map<String, String> mappingVersionData = new HashMap<>();
Expand Down
4 changes: 3 additions & 1 deletion dsl/common/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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}"
Expand Down
4 changes: 3 additions & 1 deletion dsl/mixin/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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}"
}
4 changes: 3 additions & 1 deletion dsl/neoform/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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}"
}
4 changes: 3 additions & 1 deletion dsl/platform/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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}"

Expand Down
4 changes: 3 additions & 1 deletion dsl/userdev/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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}"

Expand Down
4 changes: 3 additions & 1 deletion dsl/vanilla/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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}"

Expand Down
2 changes: 2 additions & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit e565ea7

Please sign in to comment.