11package  tests 
22
3- import  java .nio .file .Files 
4- import  java .nio .file .StandardOpenOption 
3+ import  tests .GradleBuildToolSuite ._ 
54
6- import  munit .TestOptions 
7- 
8- class  GradleBuildToolSuite  extends  BaseBuildToolSuite  {
5+ class  Gradle_8_BuildToolSuite  extends  GradleBuildToolSuite (List (Gradle8 ))
6+ class  Gradle_7_BuildToolSuite  extends  GradleBuildToolSuite (List (Gradle7 ))
7+ class  Gradle_6_BuildToolSuite  extends  GradleBuildToolSuite (List (Gradle67 ))
8+ class  Gradle_5_BuildToolSuite  extends  GradleBuildToolSuite (List (Gradle5 ))
99
10+ object  GradleBuildToolSuite  {
1011  val  Gradle8  =  " 8.1.1" 
1112  val  Gradle7  =  " 7.6.1" 
1213  val  Gradle67  =  " 6.7"   //  Introduced toolchains
1314  val  Gradle5  =  " 5.6.4" 
15+ }
1416
15-   val  allGradle  =  List (Gradle8 , Gradle7 , Gradle67 )
17+ abstract  class  GradleBuildToolSuite (allGradle : List [String ])
18+     extends  GradleBuildToolSuiteBase (allGradle) {
1619  val  allJava  =  List (" 8"  , " 11"  , " 17"  )
1720
18-   def  gradleVersion (version : String ):  List [String ] =  {
19-     createEmptyBuildScript()
20-     List (" gradle"  , " wrapper"  , " --gradle-version"  , version)
21-   }
22- 
23-   def  createEmptyBuildScript ():  Unit  =  {
24-     val  script  =  workingDirectory.resolve(" build.gradle"  )
25-     Files .createDirectories(script.getParent)
26-     Files .write(
27-       script,
28-       Array .emptyByteArray,
29-       StandardOpenOption .TRUNCATE_EXISTING ,
30-       StandardOpenOption .CREATE 
31-     )
32-   }
33- 
34-   def  checkGradleBuild (
35-       title : TestOptions ,
36-       setup : String ,
37-       gradleVersions : List [String ] =  allGradle,
38-       expectedSemanticdbFiles : Int  =  0 ,
39-       expectedPackages : String  =  " "  ,
40-       extraArguments : List [String ] =  Nil 
41-   ) =  {
42-     gradleVersions.foreach { gradleV => 
43-       {
44-         val  testName  =  title.withName(title.name +  s " -gradle $gradleV" )
45-         checkBuild(
46-           if  (gradleV.startsWith(" 6."  ) ||  gradleV.startsWith(" 5."  ))
47-             testName.tag(Java8Only )
48-           else 
49-             testName,
50-           setup,
51-           expectedSemanticdbFiles =  expectedSemanticdbFiles,
52-           expectedPackages =  expectedPackages,
53-           initCommand =  gradleVersion(gradleV),
54-           extraArguments =  extraArguments
55-         )
56-       }
57-     }
58-   }
21+   checkGradleBuild(
22+     " annotation-path"  ,
23+     """ |/build.gradle
24+        |plugins { 
25+        |    id 'java' 
26+        |} 
27+        |repositories { 
28+        |    // Use Maven Central for resolving dependencies. 
29+        |    mavenCentral() 
30+        |} 
31+        |dependencies { 
32+        |  compileOnly 'org.immutables:value:2.9.2' 
33+        |  annotationProcessor 'org.immutables:value:2.9.2' 
34+        |} 
35+        |/src/main/java/WorkflowOptions.java 
36+        |package test; 
37+        |import org.immutables.value.Value; 
38+        |import java.util.Optional; 
39+        |@Value.Immutable 
40+        |public abstract class WorkflowOptions { 
41+        |    public abstract Optional<String> getWorkflowIdReusePolicy(); 
42+        |} 
43+     """  .stripMargin,
44+     /* 
45+     An immutable version will be generated along with the original class: 
46+     - build/generated/sources/annotationProcessor/java/main/test/ImmutableWorkflowOptions.java.semanticdb 
47+     - /META-INF/semanticdb/src/main/java/WorkflowOptions.java.semanticdb 
48+      */  
49+     expectedSemanticdbFiles =  2 ,
50+     gradleVersions =  List (Gradle8 , Gradle7 , Gradle67 )
51+   )
5952
6053  //  This is the most basic test for Java/Scala support
6154  //  We run it for an extended list of Gradle versions
@@ -110,25 +103,10 @@ class GradleBuildToolSuite extends BaseBuildToolSuite {
110103       |case class Howdy(a: Int) 
111104       |"""  .stripMargin,
112105    expectedSemanticdbFiles =  3 ,
113-     gradleVersions =  allGradle :+  Gradle5 
106+     //  Only add this test on Gradle 5 in the gradle 6 suite
107+     gradleVersions =  List (Gradle8 , Gradle7 , Gradle67 , Gradle5 )
114108  )
115109
116-   List (" 3.3"  , " 2.2.1"  ).foreach { version => 
117-     checkBuild(
118-       s " legacy- $version" .tag(Java8Only ),
119-       s """ |/build.gradle 
120-           |apply plugin: 'java' 
121-           |/src/main/java/Example.java 
122-           |public class Example {} 
123-           |/src/test/java/ExampleSuite.java 
124-           |public class ExampleSuite {} 
125-           | """ .stripMargin,
126-       expectedSemanticdbFiles =  2 ,
127-       initCommand =  gradleVersion(version)
128-       //  NOTE(olafur): no packages because we use more modern APIs.
129-     )
130-   }
131- 
132110  allJava.foreach { java => 
133111    checkGradleBuild(
134112      if  (java ==  " 8"  )
@@ -145,7 +123,8 @@ class GradleBuildToolSuite extends BaseBuildToolSuite {
145123          |/src/main/java/Example.java 
146124          |public class Example {} 
147125          | """ .stripMargin,
148-       expectedSemanticdbFiles =  1 
126+       expectedSemanticdbFiles =  1 ,
127+       gradleVersions =  List (Gradle8 , Gradle7 , Gradle67 )
149128    )
150129  }
151130
@@ -161,7 +140,8 @@ class GradleBuildToolSuite extends BaseBuildToolSuite {
161140       |<hello/> 
162141       |"""  .stripMargin,
163142    expectedSemanticdbFiles =  2 ,
164-     extraArguments =  List (" --build-tool"  , " gradle"  )
143+     extraArguments =  List (" --build-tool"  , " gradle"  ),
144+     gradleVersions =  List (Gradle8 , Gradle7 , Gradle67 )
165145  )
166146
167147  checkGradleBuild(
@@ -174,10 +154,11 @@ class GradleBuildToolSuite extends BaseBuildToolSuite {
174154       |public class ExampleSuite {} 
175155       |"""  .stripMargin,
176156    expectedSemanticdbFiles =  1 ,
177-     extraArguments =  List (" --"  , " compileJava"  )
157+     extraArguments =  List (" --"  , " compileJava"  ),
158+     gradleVersions =  List (Gradle8 , Gradle7 , Gradle67 )
178159  )
179160
180-   checkBuild (
161+   checkGradleBuild (
181162    " playframework"  .tag(Java8Only ),
182163    """ |/build.gradle
183164       |plugins { 
@@ -226,10 +207,10 @@ class GradleBuildToolSuite extends BaseBuildToolSuite {
226207       |"""  .stripMargin,
227208    expectedSemanticdbFiles = 
228209      2 , //  Two files because `conf/routes` generates a Java file.
229-     initCommand  =  gradleVersion( " 6.8 "  )
210+     gradleVersions  =  List ( Gradle67 )
230211  )
231212
232-   checkBuild (
213+   checkGradleBuild (
233214    " checkerframework"  .tag(Java8Only ),
234215    """ |/build.gradle
235216       |plugins { 
@@ -251,8 +232,8 @@ class GradleBuildToolSuite extends BaseBuildToolSuite {
251232       |package foo; 
252233       |public class ExampleSuite {} 
253234       |"""  .stripMargin,
254-     2 ,
255-     initCommand  =  gradleVersion( " 6.8.3 "  )
235+     expectedSemanticdbFiles  =   2 ,
236+     gradleVersions  =  List ( Gradle67 )
256237  )
257238
258239  checkGradleBuild(
@@ -280,9 +261,9 @@ class GradleBuildToolSuite extends BaseBuildToolSuite {
280261       |package foo 
281262       |class ExampleSuite {} 
282263       |"""  .stripMargin,
283-     expectedSemanticdbFiles =  4 
264+     expectedSemanticdbFiles =  4 ,
265+     gradleVersions =  List (Gradle8 , Gradle7 , Gradle67 )
284266  )
285- 
286267  checkGradleBuild(
287268    " kotlin"  ,
288269    """ |/build.gradle
@@ -351,7 +332,8 @@ class GradleBuildToolSuite extends BaseBuildToolSuite {
351332         |maven:org.jetbrains.kotlin:kotlin-stdlib:1.6.20 
352333         |maven:org.jetbrains:annotations:13.0 
353334         |maven:org.slf4j:slf4j-api:1.7.36 
354-          |"""  .stripMargin
335+          |"""  .stripMargin,
336+     gradleVersions =  List (Gradle8 , Gradle7 , Gradle67 )
355337  )
356338
357339  List (" 8"  , " 11"  ).foreach { java => 
0 commit comments