|
22 | 22 | import org.gradle.api.artifacts.ConfigurationContainer; |
23 | 23 | import org.gradle.api.artifacts.dsl.DependencyHandler; |
24 | 24 | import org.gradle.api.file.FileCollection; |
| 25 | +import org.gradle.api.file.RegularFile; |
25 | 26 | import org.gradle.api.plugins.jvm.JvmTestSuite; |
26 | 27 | import org.gradle.api.provider.Provider; |
27 | 28 | import org.gradle.api.tasks.SourceSet; |
|
35 | 36 | import org.gradle.testing.base.TestSuite; |
36 | 37 | import org.gradle.testing.base.TestingExtension; |
37 | 38 | import org.gradlex.javamodule.testing.internal.ModuleInfoParser; |
| 39 | +import org.gradlex.javamodule.testing.internal.ModuleInfoRequiresParser; |
38 | 40 | import org.gradlex.javamodule.testing.internal.bridges.JavaModuleDependenciesBridge; |
39 | 41 | import org.gradlex.javamodule.testing.internal.provider.WhiteboxTestCompileArgumentProvider; |
40 | 42 | import org.gradlex.javamodule.testing.internal.provider.WhiteboxTestRuntimeArgumentProvider; |
41 | 43 |
|
42 | 44 | import javax.inject.Inject; |
43 | 45 | import java.io.File; |
| 46 | +import java.util.Collections; |
| 47 | +import java.util.List; |
| 48 | +import java.util.stream.Collectors; |
44 | 49 |
|
45 | 50 | @SuppressWarnings("UnstableApiUsage") |
46 | 51 | public abstract class JavaModuleTestingExtension { |
@@ -114,11 +119,31 @@ public void whitebox(TestSuite jvmTestSuite, Action<WhiteboxJvmTestSuite> conf) |
114 | 119 | if (jvmTestSuite instanceof JvmTestSuite) { |
115 | 120 | WhiteboxJvmTestSuite whiteboxJvmTestSuite = project.getObjects().newInstance(WhiteboxJvmTestSuite.class); |
116 | 121 | whiteboxJvmTestSuite.getSourcesUnderTest().convention(project.getExtensions().getByType(SourceSetContainer.class).getByName(SourceSet.MAIN_SOURCE_SET_NAME)); |
| 122 | + whiteboxJvmTestSuite.getRequires().addAll(requiresFromModuleInfo((JvmTestSuite) jvmTestSuite, whiteboxJvmTestSuite.getSourcesUnderTest())); |
117 | 123 | conf.execute(whiteboxJvmTestSuite); |
118 | 124 | configureJvmTestSuiteForWhitebox((JvmTestSuite) jvmTestSuite, whiteboxJvmTestSuite); |
119 | 125 | } |
120 | 126 | } |
121 | 127 |
|
| 128 | + private Provider<List<String>> requiresFromModuleInfo(JvmTestSuite jvmTestSuite, Provider<SourceSet> sourcesUnderTest) { |
| 129 | + RegularFile moduleInfoFile = project.getLayout().getProjectDirectory().file(whiteboxModuleInfo(jvmTestSuite).getAbsolutePath()); |
| 130 | + Provider<String> moduleInfoContent = project.getProviders().fileContents(moduleInfoFile).getAsText(); |
| 131 | + return moduleInfoContent.map(c -> { |
| 132 | + ModuleInfoParser moduleInfoParser = new ModuleInfoParser(project.getLayout(), project.getProviders()); |
| 133 | + String mainModuleName = moduleInfoParser.moduleName(sourcesUnderTest.get().getAllJava().getSrcDirs()); |
| 134 | + List<String> requires = ModuleInfoRequiresParser.parse(moduleInfoContent.get()); |
| 135 | + if (requires.stream().anyMatch(r -> r.equals(mainModuleName))) { |
| 136 | + return requires.stream().filter(r -> !r.equals(mainModuleName)).collect(Collectors.toList()); |
| 137 | + } |
| 138 | + return Collections.<String>emptyList(); |
| 139 | + }).orElse(Collections.emptyList()); |
| 140 | + } |
| 141 | + |
| 142 | + private File whiteboxModuleInfo(JvmTestSuite jvmTestSuite) { |
| 143 | + File sourceSetDir = jvmTestSuite.getSources().getJava().getSrcDirs().iterator().next().getParentFile(); |
| 144 | + return new File(sourceSetDir, "java9/module-info.java"); |
| 145 | + } |
| 146 | + |
122 | 147 | private void configureJvmTestSuiteForBlackbox(JvmTestSuite jvmTestSuite) { |
123 | 148 | ConfigurationContainer configurations = project.getConfigurations(); |
124 | 149 | TaskContainer tasks = project.getTasks(); |
|
0 commit comments