diff --git a/src/functionalTest/java/org.scoverage/DetectScalaLibraryTest.java b/src/functionalTest/java/org.scoverage/DetectScalaLibraryTest.java new file mode 100644 index 0000000..9b2d163 --- /dev/null +++ b/src/functionalTest/java/org.scoverage/DetectScalaLibraryTest.java @@ -0,0 +1,47 @@ +package org.scoverage; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.util.Arrays; +import java.util.Collection; + +@RunWith(Parameterized.class) +public class DetectScalaLibraryTest extends ScoverageFunctionalTest { + + private static final String SCALA_VERSION = "2.12"; + private static final String SCALA_LIBRARY_PARAMETER = "-PdetectedScalaLibraryVersion="; + + private static final String EXPECTED_OUTPUT_A = "Detected scala library in compilation classpath"; + private static final String EXPECTED_OUTPUT_B = "Using scoverage scalac plugin version '" + SCALA_VERSION; + + @Parameterized.Parameter(0) + public String projectDir; + + @Parameterized.Parameters(name = "{index}: Project {0} ") + public static Collection data() { + Object[][] data = new Object[][]{{"/compile"}, {"/compileOnly"}, {"/implementation"}, {"/dependency-management"}}; + return Arrays.asList(data); + } + + public DetectScalaLibraryTest() { + super(null); + } + + @Test + public void test() { + setProjectName("detect-scala-library" + projectDir); + testWithParameter(SCALA_LIBRARY_PARAMETER + SCALA_VERSION + ".0"); + testWithParameter(SCALA_LIBRARY_PARAMETER + SCALA_VERSION + ".+"); + } + + private void testWithParameter(String parameter) { + AssertableBuildResult result = dryRun("clean", parameter, "--info"); + String output = result.getResult().getOutput(); + Assert.assertTrue(output.contains(EXPECTED_OUTPUT_A)); + Assert.assertTrue(output.contains(EXPECTED_OUTPUT_B)); + } + +} \ No newline at end of file diff --git a/src/functionalTest/java/org.scoverage/ScalaSingleModuleTest.java b/src/functionalTest/java/org.scoverage/ScalaSingleModuleTest.java index d53881b..f93e184 100644 --- a/src/functionalTest/java/org.scoverage/ScalaSingleModuleTest.java +++ b/src/functionalTest/java/org.scoverage/ScalaSingleModuleTest.java @@ -133,15 +133,6 @@ public void reportScoverageWithoutNormalCompilationAndWithExcludedClasses() thro Assert.assertFalse(resolve(buildDir(), "classes/scala/scoverage/org/hello/World.class").exists()); } - @Test - public void reportScoverageUnder2_11() throws Exception { - run("clean", ScoveragePlugin.getREPORT_NAME(), - "-PscalaVersionMinor=11", - "-PscalaVersionBuild=8", - "-Pscoverage.scoverageScalaVersion=2_11"); - assertReportFilesExist(); - } - private void assertReportFilesExist() { Assert.assertTrue(resolve(reportDir(), "index.html").exists()); diff --git a/src/functionalTest/java/org.scoverage/ScoverageFunctionalTest.java b/src/functionalTest/java/org.scoverage/ScoverageFunctionalTest.java index af14ce5..c60f8d2 100644 --- a/src/functionalTest/java/org.scoverage/ScoverageFunctionalTest.java +++ b/src/functionalTest/java/org.scoverage/ScoverageFunctionalTest.java @@ -23,18 +23,12 @@ public abstract class ScoverageFunctionalTest { - private final String projectName; - private final GradleRunner runner; + private String projectName; + private GradleRunner runner; private final XmlParser parser; protected ScoverageFunctionalTest(String projectName) { - - this.projectName = projectName; - this.runner = GradleRunner.create() - .withProjectDir(projectDir()) - .withPluginClasspath() - .forwardOutput(); - + setProjectName(projectName); try { this.parser = new XmlParser(); parser.setFeature("http://apache.org/xml/features/disallow-doctype-decl", false); @@ -44,6 +38,16 @@ protected ScoverageFunctionalTest(String projectName) { } } + protected void setProjectName(String projectName) { + if (projectName != null) { + this.projectName = projectName; + this.runner = GradleRunner.create() + .withProjectDir(projectDir()) + .withPluginClasspath() + .forwardOutput(); + } + } + protected File projectDir() { return new File("src/functionalTest/resources/projects/" + projectName); diff --git a/src/functionalTest/resources/projects/detect-scala-library/compile/build.gradle b/src/functionalTest/resources/projects/detect-scala-library/compile/build.gradle new file mode 100644 index 0000000..8201e48 --- /dev/null +++ b/src/functionalTest/resources/projects/detect-scala-library/compile/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'org.scoverage' +} + +repositories { + jcenter() +} + +description = 'defines scala library using the "compile" configuration' + +dependencies { + compile group: 'org.scala-lang', name: 'scala-library', version: "${detectedScalaLibraryVersion}" +} \ No newline at end of file diff --git a/src/functionalTest/resources/projects/detect-scala-library/compile/settings.gradle b/src/functionalTest/resources/projects/detect-scala-library/compile/settings.gradle new file mode 100644 index 0000000..e69de29 diff --git a/src/functionalTest/resources/projects/detect-scala-library/compileOnly/build.gradle b/src/functionalTest/resources/projects/detect-scala-library/compileOnly/build.gradle new file mode 100644 index 0000000..4dd36e8 --- /dev/null +++ b/src/functionalTest/resources/projects/detect-scala-library/compileOnly/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'org.scoverage' +} + +repositories { + jcenter() +} + +description = 'defines scala library using the "compileOnly" configuration' + +dependencies { + compileOnly group: 'org.scala-lang', name: 'scala-library', version: "${detectedScalaLibraryVersion}" +} \ No newline at end of file diff --git a/src/functionalTest/resources/projects/detect-scala-library/compileOnly/settings.gradle b/src/functionalTest/resources/projects/detect-scala-library/compileOnly/settings.gradle new file mode 100644 index 0000000..e69de29 diff --git a/src/functionalTest/resources/projects/detect-scala-library/dependency-management/build.gradle b/src/functionalTest/resources/projects/detect-scala-library/dependency-management/build.gradle new file mode 100644 index 0000000..c4de0c2 --- /dev/null +++ b/src/functionalTest/resources/projects/detect-scala-library/dependency-management/build.gradle @@ -0,0 +1,20 @@ +plugins { + id 'io.spring.dependency-management' version "1.0.4.RELEASE" + id 'org.scoverage' +} + +repositories { + jcenter() +} + +description = 'defines scala library using the "implementation" configuration and the dependency-management plugin' + +dependencyManagement { + dependencies { + dependency group: 'org.scala-lang', name: 'scala-library', version: "${detectedScalaLibraryVersion}" + } +} + +dependencies { + implementation group: 'org.scala-lang', name: 'scala-library' +} \ No newline at end of file diff --git a/src/functionalTest/resources/projects/detect-scala-library/dependency-management/settings.gradle b/src/functionalTest/resources/projects/detect-scala-library/dependency-management/settings.gradle new file mode 100644 index 0000000..e69de29 diff --git a/src/functionalTest/resources/projects/detect-scala-library/implementation/build.gradle b/src/functionalTest/resources/projects/detect-scala-library/implementation/build.gradle new file mode 100644 index 0000000..be9936b --- /dev/null +++ b/src/functionalTest/resources/projects/detect-scala-library/implementation/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'org.scoverage' +} + +repositories { + jcenter() +} + +description = 'defines scala library using the "implementation" configuration' + +dependencies { + implementation group: 'org.scala-lang', name: 'scala-library', version: "${detectedScalaLibraryVersion}" +} \ No newline at end of file diff --git a/src/functionalTest/resources/projects/detect-scala-library/implementation/settings.gradle b/src/functionalTest/resources/projects/detect-scala-library/implementation/settings.gradle new file mode 100644 index 0000000..e69de29 diff --git a/src/main/groovy/org/scoverage/ScoveragePlugin.groovy b/src/main/groovy/org/scoverage/ScoveragePlugin.groovy index af6dc80..5c0e20c 100644 --- a/src/main/groovy/org/scoverage/ScoveragePlugin.groovy +++ b/src/main/groovy/org/scoverage/ScoveragePlugin.groovy @@ -63,27 +63,8 @@ class ScoveragePlugin implements Plugin { } project.afterEvaluate { + def scalaVersion = resolveScalaVersion(project) def scoverageVersion = project.extensions.scoverage.scoverageVersion.get() - def scalaVersion = null - - def scalaLibrary = project.configurations.compile.dependencies.find { - it.group == "org.scala-lang" && it.name == "scala-library" - } - - if (scalaLibrary != null) { - scalaVersion = scalaLibrary.version - } - - if (scalaVersion == null && project.pluginManager.hasPlugin("io.spring.dependency-management")) { - scalaVersion = project.dependencyManagement.compile.managedVersions["org.scala-lang:scala-library"] - } - - if (scalaVersion == null) { - scalaVersion = project.extensions.scoverage.scoverageScalaVersion.get() - } else { - scalaVersion = scalaVersion.substring(0, scalaVersion.lastIndexOf(".")) - } - def fullScoverageVersion = "$scalaVersion:$scoverageVersion" project.logger.info("Using scoverage scalac plugin version '$fullScoverageVersion'") @@ -319,6 +300,24 @@ class ScoveragePlugin implements Plugin { } } + private String resolveScalaVersion(Project project) { + + def resolvedDependencies = project.configurations.compileClasspath.resolvedConfiguration.firstLevelModuleDependencies + + def scalaLibrary = resolvedDependencies.find { + it.moduleGroup == "org.scala-lang" && it.moduleName == "scala-library" + } + + if (scalaLibrary == null) { + project.logger.info("No scala library detected. Using property 'scoverageScalaVersion'") + return project.extensions.scoverage.scoverageScalaVersion.get() + } else { + project.logger.info("Detected scala library in compilation classpath") + def fullScalaVersion = scalaLibrary.moduleVersion + return fullScalaVersion.substring(0, fullScalaVersion.lastIndexOf(".")) + } + } + private Set recursiveDependenciesOf(Task task) { if (!taskDependencies.containsKey(task)) { def directDependencies = task.getTaskDependencies().getDependencies(task)