Skip to content

Commit af83c50

Browse files
committed
refactor: use a Suite to run the tests against the Groovy and the Kotlin DSLs
1 parent 2b166ca commit af83c50

20 files changed

+242
-524
lines changed

spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/docs/AbstractDocumentationTests.java

Lines changed: 0 additions & 57 deletions
This file was deleted.
Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,36 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
17-
package org.springframework.boot.gradle.docs.groovy;
18-
19-
import org.springframework.boot.gradle.docs.AbstractManagingDependenciesDocumentationTests;
16+
package org.springframework.boot.gradle.docs;
2017

2118
/**
22-
* Tests for the managing dependencies documentation.
23-
*
24-
* @author Jean-Baptiste Nizet
19+
* The DSLs supported by Gradle and demonstrated in the documentation samples
2520
*/
26-
public class ManagingDependenciesDocumentationTests
27-
extends AbstractManagingDependenciesDocumentationTests {
21+
public enum DSL {
22+
23+
GROOVY("Groovy", ".gradle"), KOTLIN("Kotlin", ".gradle.kts");
24+
25+
private final String name;
26+
27+
private final String extension;
28+
29+
DSL(String name, String extension) {
30+
this.name = name;
31+
this.extension = extension;
32+
}
33+
34+
/**
35+
* Gets the user-friendly name of the DSL
36+
*/
37+
public String getName() {
38+
return this.name;
39+
}
2840

29-
public ManagingDependenciesDocumentationTests() {
30-
super(DSL.GROOVY);
41+
/**
42+
* Gets the file extension of build scripts (starting with a dot)
43+
*/
44+
public String getExtension() {
45+
return this.extension;
3146
}
3247

3348
}
Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,29 +16,33 @@
1616

1717
package org.springframework.boot.gradle.docs;
1818

19+
import org.junit.Rule;
1920
import org.junit.Test;
21+
import org.junit.runner.RunWith;
22+
23+
import org.springframework.boot.gradle.testkit.GradleBuild;
2024

2125
/**
2226
* Tests for the getting started documentation.
2327
*
2428
* @author Andy Wilkinson
2529
* @author Jean-Baptiste Nizet
2630
*/
27-
public abstract class AbstractGettingStartedDocumentationTests
28-
extends AbstractDocumentationTests {
31+
@RunWith(GradleMultiDslSuite.class)
32+
public class GettingStartedDocumentationTests {
2933

30-
protected AbstractGettingStartedDocumentationTests(DSL dsl) {
31-
super(dsl);
32-
}
34+
@Rule
35+
public GradleBuild gradleBuild;
36+
37+
public DSL dsl;
3338

3439
// NOTE: We can't run any `apply-plugin` tests because during a release the
3540
// jar won't be there
3641

3742
@Test
3843
public void typicalPluginsAppliesExceptedPlugins() {
39-
this.gradleBuild.script(
40-
"src/main/gradle/getting-started/typical-plugins" + this.extension)
41-
.build("verify");
44+
this.gradleBuild.script("src/main/gradle/getting-started/typical-plugins"
45+
+ this.dsl.getExtension()).build("verify");
4246
}
4347

4448
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
/*
2+
* Copyright 2012-2018 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.boot.gradle.docs;
18+
19+
import java.util.ArrayList;
20+
import java.util.List;
21+
22+
import org.gradle.api.Rule;
23+
import org.junit.runner.Runner;
24+
import org.junit.runners.BlockJUnit4ClassRunner;
25+
import org.junit.runners.Suite;
26+
import org.junit.runners.model.FrameworkMethod;
27+
import org.junit.runners.model.InitializationError;
28+
29+
import org.springframework.boot.gradle.testkit.GradleBuild;
30+
31+
/**
32+
* Custom {@link Suite} that runs tests against the Groovy and the Kotlin DSLs. Test
33+
* classes using the suite must have a public {@link DSL} field named {@code dsl} and a
34+
* public {@link GradleBuild} field named {@code gradleBuild} and annotated with
35+
* {@link Rule}
36+
*
37+
* @author Jean-Baptiste Nizet
38+
*/
39+
public final class GradleMultiDslSuite extends Suite {
40+
41+
public GradleMultiDslSuite(Class<?> clazz) throws InitializationError {
42+
super(clazz, createRunners(clazz));
43+
}
44+
45+
private static List<Runner> createRunners(Class<?> clazz) throws InitializationError {
46+
List<Runner> runners = new ArrayList<>();
47+
runners.add(new GradleDslClassRunner(clazz, new GradleBuild(), DSL.GROOVY));
48+
runners.add(new GradleDslClassRunner(clazz,
49+
new GradleBuild().withMinimalGradleVersionForKotlinDSL(), DSL.KOTLIN));
50+
return runners;
51+
}
52+
53+
private static final class GradleDslClassRunner extends BlockJUnit4ClassRunner {
54+
55+
private final GradleBuild gradleBuild;
56+
57+
private final DSL dsl;
58+
59+
private GradleDslClassRunner(Class<?> klass, GradleBuild gradleBuild, DSL dsl)
60+
throws InitializationError {
61+
super(klass);
62+
this.gradleBuild = gradleBuild;
63+
this.dsl = dsl;
64+
}
65+
66+
@Override
67+
protected Object createTest() throws Exception {
68+
Object test = super.createTest();
69+
configureTest(test);
70+
return test;
71+
}
72+
73+
private void configureTest(Object test) throws Exception {
74+
test.getClass().getField("gradleBuild").set(test, this.gradleBuild);
75+
test.getClass().getField("dsl").set(test, this.dsl);
76+
}
77+
78+
@Override
79+
protected String getName() {
80+
return this.dsl.getName() + " DSL";
81+
}
82+
83+
@Override
84+
protected String testName(FrameworkMethod method) {
85+
return method.getName() + " [" + getName() + "]";
86+
}
87+
88+
}
89+
90+
}
Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@
2121
import java.io.IOException;
2222
import java.util.Properties;
2323

24+
import org.junit.Rule;
2425
import org.junit.Test;
26+
import org.junit.runner.RunWith;
27+
28+
import org.springframework.boot.gradle.testkit.GradleBuild;
2529

2630
import static org.assertj.core.api.Assertions.assertThat;
2731

@@ -31,17 +35,19 @@
3135
* @author Andy Wilkinson
3236
* @author Jean-Baptiste Nizet
3337
*/
34-
public abstract class AbstractIntegratingWithActuatorDocumentationTests
35-
extends AbstractDocumentationTests {
38+
@RunWith(GradleMultiDslSuite.class)
39+
public class IntegratingWithActuatorDocumentationTests {
3640

37-
protected AbstractIntegratingWithActuatorDocumentationTests(DSL dsl) {
38-
super(dsl);
39-
}
41+
@Rule
42+
public GradleBuild gradleBuild;
43+
44+
public DSL dsl;
4045

4146
@Test
4247
public void basicBuildInfo() throws IOException {
43-
this.gradleBuild.script(
44-
"src/main/gradle/integrating-with-actuator/build-info-basic" + extension)
48+
this.gradleBuild
49+
.script("src/main/gradle/integrating-with-actuator/build-info-basic"
50+
+ this.dsl.getExtension())
4551
.build("bootBuildInfo");
4652
assertThat(new File(this.gradleBuild.getProjectDir(),
4753
"build/resources/main/META-INF/build-info.properties")).isFile();
@@ -51,7 +57,7 @@ public void basicBuildInfo() throws IOException {
5157
public void buildInfoCustomValues() throws IOException {
5258
this.gradleBuild.script(
5359
"src/main/gradle/integrating-with-actuator/build-info-custom-values"
54-
+ extension)
60+
+ this.dsl.getExtension())
5561
.build("bootBuildInfo");
5662
File file = new File(this.gradleBuild.getProjectDir(),
5763
"build/resources/main/META-INF/build-info.properties");
@@ -67,7 +73,7 @@ public void buildInfoCustomValues() throws IOException {
6773
public void buildInfoAdditional() throws IOException {
6874
this.gradleBuild
6975
.script("src/main/gradle/integrating-with-actuator/build-info-additional"
70-
+ extension)
76+
+ this.dsl.getExtension())
7177
.build("bootBuildInfo");
7278
File file = new File(this.gradleBuild.getProjectDir(),
7379
"build/resources/main/META-INF/build-info.properties");
Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@
1616

1717
package org.springframework.boot.gradle.docs;
1818

19+
import org.junit.Rule;
1920
import org.junit.Test;
21+
import org.junit.runner.RunWith;
22+
23+
import org.springframework.boot.gradle.testkit.GradleBuild;
2024

2125
import static org.assertj.core.api.Assertions.assertThat;
2226

@@ -26,33 +30,47 @@
2630
* @author Andy Wilkinson
2731
* @author Jean-Baptiste Nizet
2832
*/
29-
public abstract class AbstractManagingDependenciesDocumentationTests
30-
extends AbstractDocumentationTests {
33+
@RunWith(GradleMultiDslSuite.class)
34+
public class ManagingDependenciesDocumentationTests {
3135

32-
protected AbstractManagingDependenciesDocumentationTests(DSL dsl) {
33-
super(dsl);
34-
}
36+
@Rule
37+
public GradleBuild gradleBuild;
38+
39+
public DSL dsl;
3540

3641
@Test
3742
public void dependenciesExampleEvaluatesSuccessfully() {
38-
this.gradleBuild
39-
.script("src/main/gradle/managing-dependencies/dependencies" + extension)
40-
.build();
43+
this.gradleBuild.script("src/main/gradle/managing-dependencies/dependencies"
44+
+ this.dsl.getExtension()).build();
4145
}
4246

4347
@Test
4448
public void customManagedVersions() {
45-
assertThat(this.gradleBuild.script(
46-
"src/main/gradle/managing-dependencies/custom-version" + extension)
47-
.build("slf4jVersion").getOutput()).contains("1.7.20");
49+
assertThat(
50+
this.gradleBuild
51+
.script("src/main/gradle/managing-dependencies/custom-version"
52+
+ this.dsl.getExtension())
53+
.build("slf4jVersion").getOutput()).contains("1.7.20");
4854
}
4955

5056
@Test
5157
public void dependencyManagementInIsolation() {
5258
assertThat(this.gradleBuild
53-
.script("src/main/gradle/managing-dependencies/configure-bom" + extension)
59+
.script("src/main/gradle/managing-dependencies/configure-bom"
60+
+ this.dsl.getExtension())
5461
.build("dependencyManagement").getOutput())
5562
.contains("org.springframework.boot:spring-boot-starter ");
5663
}
5764

65+
@Test
66+
public void dependencyManagementInIsolationWithPluginsBlock() {
67+
if (this.dsl == DSL.KOTLIN) {
68+
assertThat(this.gradleBuild.script(
69+
"src/main/gradle/managing-dependencies/configure-bom-with-plugins"
70+
+ this.dsl.getExtension())
71+
.build("dependencyManagement").getOutput())
72+
.contains("org.springframework.boot:spring-boot-starter ");
73+
}
74+
}
75+
5876
}

0 commit comments

Comments
 (0)