Skip to content

Commit 8ba29eb

Browse files
John Burnswakingrufus
authored andcommitted
support built-in gradle plugins in testkit DSL
1 parent e9951b2 commit 8ba29eb

File tree

5 files changed

+143
-45
lines changed

5 files changed

+143
-45
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package nebula.test.dsl;
2+
3+
import org.jspecify.annotations.Nullable;
4+
5+
public class Plugin {
6+
@Nullable
7+
private String builtIn;
8+
@Nullable
9+
private String builtInParam;
10+
private final String id;
11+
@Nullable
12+
private String version;
13+
14+
Plugin(String id) {
15+
this.id = id;
16+
}
17+
18+
/**
19+
* Set the version of the plugin.
20+
* This only needs to be called for plugins not already on the classpath
21+
*
22+
* @param version the version of the plugin
23+
*/
24+
@NebulaTestKitDsl
25+
public void version(String version) {
26+
this.version = version;
27+
}
28+
29+
public Plugin builtIn(String builtInName) {
30+
builtIn = builtInName;
31+
return this;
32+
}
33+
34+
public Plugin builtInParam(String builtInParamName) {
35+
builtInParam = builtInParamName;
36+
return this;
37+
}
38+
39+
public String render(BuildscriptLanguage language) {
40+
final StringBuilder stringBuilder = new StringBuilder();
41+
42+
if (language == BuildscriptLanguage.GROOVY) {
43+
stringBuilder.append("id '").append(id).append("'");
44+
} else if (language == BuildscriptLanguage.KOTLIN) {
45+
if (builtIn != null) {
46+
if (builtInParam == null) {
47+
if (builtIn.contains("-")) {
48+
stringBuilder.append("`").append(builtIn).append("`");
49+
} else {
50+
stringBuilder.append(builtIn);
51+
}
52+
} else {
53+
stringBuilder.append(builtIn).append("(\"").append(builtInParam).append("\")");
54+
}
55+
} else {
56+
stringBuilder.append("id(\"").append(id).append("\")");
57+
}
58+
}
59+
60+
if (version != null) {
61+
if (language == BuildscriptLanguage.GROOVY) {
62+
stringBuilder.append(" version '").append(version).append("'");
63+
} else if (language == BuildscriptLanguage.KOTLIN) {
64+
stringBuilder.append(" version (\"").append(version).append("\")");
65+
}
66+
}
67+
return stringBuilder.toString();
68+
}
69+
}
Lines changed: 17 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package nebula.test.dsl;
22

33
import org.jspecify.annotations.NullMarked;
4-
import org.jspecify.annotations.Nullable;
54

65
import java.util.ArrayList;
76
import java.util.List;
@@ -30,7 +29,23 @@ public Plugin id(String id) {
3029
*/
3130
@NebulaTestKitDsl
3231
public void java() {
33-
plugins.add(new Plugin("java"));
32+
id("java").builtIn("java");
33+
}
34+
35+
/**
36+
* Adds a kotlin plugin
37+
*/
38+
@NebulaTestKitDsl
39+
public Plugin kotlin(String platform) {
40+
return id("org.jetbrains.kotlin." + platform).builtIn("kotlin").builtInParam(platform);
41+
}
42+
43+
/**
44+
* Adds kotlin-dsl plugin
45+
*/
46+
@NebulaTestKitDsl
47+
public Plugin kotlinDsl() {
48+
return id("org.gradle.kotlin.kotlin-dsl").builtIn("kotlin-dsl");
3449
}
3550

3651
boolean hasContent() {
@@ -48,44 +63,4 @@ String build(BuildscriptLanguage language, int indentation) {
4863
}
4964
return stringBuilder.toString();
5065
}
51-
52-
// TODO support "built-in" plugins like java similar to the repository builtins like mavenCentral()
53-
public static class Plugin {
54-
private final String id;
55-
@Nullable
56-
private String version;
57-
58-
Plugin(String id) {
59-
this.id = id;
60-
}
61-
62-
/**
63-
* Set the version of the plugin.
64-
* This only needs to be called for plugins not already on the classpath
65-
*
66-
* @param version the version of the plugin
67-
*/
68-
@NebulaTestKitDsl
69-
public void version(String version) {
70-
this.version = version;
71-
}
72-
73-
String render(BuildscriptLanguage language) {
74-
final StringBuilder stringBuilder = new StringBuilder();
75-
if (language == BuildscriptLanguage.GROOVY) {
76-
stringBuilder.append("id '").append(id).append("'");
77-
} else if (language == BuildscriptLanguage.KOTLIN) {
78-
stringBuilder.append("id(\"").append(id).append("\")");
79-
}
80-
81-
if (version != null) {
82-
if (language == BuildscriptLanguage.GROOVY) {
83-
stringBuilder.append(" version '").append(version).append("'");
84-
} else if (language == BuildscriptLanguage.KOTLIN) {
85-
stringBuilder.append(" version (\"").append(version).append("\")");
86-
}
87-
}
88-
return stringBuilder.toString();
89-
}
90-
}
9166
}

src/main/kotlin/nebula/test/dsl/KotlinDsl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ fun ProjectBuilder.repositories(config: RepositoriesBuilder.() -> Unit) {
5454
}
5555

5656
@NebulaTestKitDsl
57-
infix fun PluginsBuilder.Plugin.version(version: String) {
57+
infix fun Plugin.version(version: String) {
5858
version(version)
5959
}
6060

src/test/java/nebula/test/dsl/PluginsBuilderTest.java

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public void testKotlinJava(){
5555
//language=groovy
5656
assertThat(actual).isEqualTo("""
5757
plugins {
58-
id("java")
58+
java
5959
}
6060
""");
6161
}
@@ -72,4 +72,58 @@ public void testKotlinIdWithVersion(){
7272
}
7373
""");
7474
}
75+
76+
@Test
77+
public void testKotlinJvm_kotlin(){
78+
final var builder = new PluginsBuilder();
79+
builder.kotlin("jvm").version("0.0.0");
80+
final var actual = builder.build(BuildscriptLanguage.KOTLIN,0);
81+
//language=kotlin
82+
assertThat(actual).isEqualTo("""
83+
plugins {
84+
kotlin("jvm") version ("0.0.0")
85+
}
86+
""");
87+
}
88+
89+
90+
@Test
91+
public void testKotlinJvm_groovy(){
92+
final var builder = new PluginsBuilder();
93+
builder.kotlin("jvm").version("0.0.0");
94+
final var actual = builder.build(BuildscriptLanguage.GROOVY,0);
95+
//language=groovy
96+
assertThat(actual).isEqualTo("""
97+
plugins {
98+
id 'org.jetbrains.kotlin.jvm' version '0.0.0'
99+
}
100+
""");
101+
}
102+
103+
@Test
104+
public void testKotlinDsl_kotlin(){
105+
final var builder = new PluginsBuilder();
106+
builder.kotlinDsl();
107+
final var actual = builder.build(BuildscriptLanguage.KOTLIN,0);
108+
//language=kotlin
109+
assertThat(actual).isEqualTo("""
110+
plugins {
111+
`kotlin-dsl`
112+
}
113+
""");
114+
}
115+
116+
@Test
117+
public void testKotlinDsl_groovy(){
118+
final var builder = new PluginsBuilder();
119+
builder.kotlinDsl().version("0.0.0");
120+
final var actual = builder.build(BuildscriptLanguage.GROOVY,0);
121+
//language=groovy
122+
assertThat(actual).isEqualTo("""
123+
plugins {
124+
id 'org.gradle.kotlin.kotlin-dsl' version '0.0.0'
125+
}
126+
""");
127+
}
128+
75129
}

src/test/java/nebula/test/dsl/ProjectBuilderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public void testJavaPlugin(@TempDir File testProjectDir) {
1717
assertThat(testProjectDir.toPath().resolve("build.gradle.kts")).content()
1818
.contains("""
1919
plugins {
20-
id("java")
20+
java
2121
}""");
2222
}
2323

0 commit comments

Comments
 (0)