Polish "Add support for removing build plugins"

See gh-978
This commit is contained in:
Stephane Nicoll
2019-08-13 20:22:35 +02:00
parent 083213c904
commit a3826cfaed
22 changed files with 270 additions and 148 deletions

View File

@@ -53,8 +53,7 @@ class DefaultMavenBuildCustomizerTests {
void customizeRegisterSpringBootPlugin() {
InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults().build();
MavenBuild build = customizeBuild(metadata);
assertThat(build.plugins().values()).hasSize(1);
build.plugins().values().findFirst().ifPresent((mavenPlugin) -> {
assertThat(build.plugins().values()).hasOnlyOneElementSatisfying((mavenPlugin) -> {
assertThat(mavenPlugin.getGroupId()).isEqualTo("org.springframework.boot");
assertThat(mavenPlugin.getArtifactId()).isEqualTo("spring-boot-maven-plugin");
assertThat(mavenPlugin.getVersion()).isNull();

View File

@@ -32,8 +32,8 @@ class GroovyGradleBuildCustomizerTests {
void groovyPluginIsConfigured() {
GradleBuild build = new GradleBuild();
new GroovyGradleBuildCustomizer().customize(build);
assertThat(build.plugins().values()).hasSize(1);
build.plugins().values().findFirst().ifPresent((plugin) -> assertThat(plugin.getId()).isEqualTo("groovy"));
assertThat(build.plugins().values())
.hasOnlyOneElementSatisfying((plugin) -> assertThat(plugin.getId()).isEqualTo("groovy"));
}
}

View File

@@ -34,8 +34,7 @@ class GroovyMavenBuildCustomizerTests {
void groovyMavenPluginIsConfigured() {
MavenBuild build = new MavenBuild();
new GroovyMavenBuildCustomizer().customize(build);
assertThat(build.plugins().values()).hasSize(1);
build.plugins().values().findFirst().ifPresent((groovyPlugin) -> {
assertThat(build.plugins().values()).hasOnlyOneElementSatisfying((groovyPlugin) -> {
assertThat(groovyPlugin.getGroupId()).isEqualTo("org.codehaus.gmavenplus");
assertThat(groovyPlugin.getArtifactId()).isEqualTo("gmavenplus-plugin");
assertThat(groovyPlugin.getVersion()).isEqualTo("1.6.3");

View File

@@ -19,6 +19,7 @@ package io.spring.initializr.generator.spring.code.kotlin;
import java.util.Collections;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
import io.spring.initializr.generator.buildsystem.gradle.GradlePlugin;
import io.spring.initializr.generator.buildsystem.gradle.StandardGradlePlugin;
import io.spring.initializr.generator.spring.test.InitializrMetadataTestBuilder;
import io.spring.initializr.generator.version.Version;
@@ -41,9 +42,8 @@ class KotlinJpaGradleBuildCustomizerTests {
Dependency dependency = Dependency.withId("foo");
dependency.setFacets(Collections.singletonList("jpa"));
GradleBuild build = getCustomizedBuild(dependency);
assertThat(build.plugins().values().filter((plugin) -> plugin.isApply())).isEmpty();
assertThat(build.plugins().values()).hasSize(1);
build.plugins().values().findFirst().ifPresent((plugin) -> {
assertThat(build.plugins().values().filter(GradlePlugin::isApply)).isEmpty();
assertThat(build.plugins().values()).hasOnlyOneElementSatisfying((plugin) -> {
assertThat(plugin.getId()).isEqualTo("org.jetbrains.kotlin.plugin.jpa");
assertThat(((StandardGradlePlugin) plugin).getVersion()).isEqualTo("1.2.70");
});
@@ -53,7 +53,7 @@ class KotlinJpaGradleBuildCustomizerTests {
void customizeWhenJpaFacetAbsentShouldNotAddKotlinJpaPlugin() {
Dependency dependency = Dependency.withId("foo");
GradleBuild build = getCustomizedBuild(dependency);
assertThat(build.plugins().values().filter((plugin) -> plugin.isApply())).isEmpty();
assertThat(build.plugins().values().filter(GradlePlugin::isApply)).isEmpty();
assertThat(build.plugins().values()).isEmpty();
}

View File

@@ -42,8 +42,7 @@ class KotlinJpaMavenBuildCustomizerTests {
Dependency dependency = Dependency.withId("foo");
dependency.setFacets(Collections.singletonList("jpa"));
MavenBuild build = getCustomizedBuild(dependency);
assertThat(build.plugins().values()).hasSize(1);
build.plugins().values().findFirst().ifPresent((plugin) -> {
assertThat(build.plugins().values()).hasOnlyOneElementSatisfying((plugin) -> {
assertThat(plugin.getGroupId()).isEqualTo("org.jetbrains.kotlin");
assertThat(plugin.getArtifactId()).isEqualTo("kotlin-maven-plugin");
MavenPlugin.Setting settings = plugin.getConfiguration().getSettings().get(0);
@@ -61,7 +60,7 @@ class KotlinJpaMavenBuildCustomizerTests {
void customizeWhenJpaFacetAbsentShouldNotAddKotlinJpaPlugin() {
Dependency dependency = Dependency.withId("foo");
MavenBuild build = getCustomizedBuild(dependency);
assertThat(build.plugins().values()).hasSize(0);
assertThat(build.plugins().isEmpty()).isTrue();
}
private MavenBuild getCustomizedBuild(Dependency dependency) {

View File

@@ -54,8 +54,7 @@ class KotlinMavenBuildCustomizerTests {
void kotlinMavenPluginIsConfigured() {
MavenBuild build = new MavenBuild();
new KotlinMavenBuildCustomizer(new SimpleKotlinProjectSettings("1.2.70")).customize(build);
assertThat(build.plugins().values()).hasSize(1);
build.plugins().values().findFirst().ifPresent((kotlinPlugin) -> {
assertThat(build.plugins().values()).hasOnlyOneElementSatisfying((kotlinPlugin) -> {
assertThat(kotlinPlugin.getGroupId()).isEqualTo("org.jetbrains.kotlin");
assertThat(kotlinPlugin.getArtifactId()).isEqualTo("kotlin-maven-plugin");
assertThat(kotlinPlugin.getVersion()).isNull();
@@ -85,8 +84,7 @@ class KotlinMavenBuildCustomizerTests {
void kotlinMavenPluginWithSeveralArgs() {
MavenBuild build = new MavenBuild();
new KotlinMavenBuildCustomizer(new TestKotlinProjectSettings()).customize(build);
assertThat(build.plugins().values()).hasSize(1);
build.plugins().values().findFirst().ifPresent((kotlinPlugin) -> {
assertThat(build.plugins().values()).hasOnlyOneElementSatisfying((kotlinPlugin) -> {
Configuration configuration = kotlinPlugin.getConfiguration();
Setting args = configuration.getSettings().get(0);
assertThat(args.getName()).isEqualTo("args");

View File

@@ -52,8 +52,7 @@ class KotlinMavenFullBuildCustomizerTests {
void kotlinMavenPluginIsConfigured() {
MavenBuild build = new MavenBuild();
new KotlinMavenFullBuildCustomizer(new SimpleKotlinProjectSettings("1.2.70")).customize(build);
assertThat(build.plugins().values()).hasSize(1);
build.plugins().values().findFirst().ifPresent((kotlinPlugin) -> {
assertThat(build.plugins().values()).hasOnlyOneElementSatisfying((kotlinPlugin) -> {
assertThat(kotlinPlugin.getGroupId()).isEqualTo("org.jetbrains.kotlin");
assertThat(kotlinPlugin.getArtifactId()).isEqualTo("kotlin-maven-plugin");
assertThat(kotlinPlugin.getVersion()).isEqualTo("${kotlin.version}");

View File

@@ -46,6 +46,8 @@ public class GradleBuild extends Build {
private final Map<String, String> ext = new TreeMap<>();
private final GradlePluginContainer plugins = new GradlePluginContainer();
private final List<String> configurations = new ArrayList<>();
private final Map<String, ConfigurationCustomization> configurationCustomizations = new LinkedHashMap<>();
@@ -58,8 +60,6 @@ public class GradleBuild extends Build {
private final Buildscript buildscript = new Buildscript();
private final GradlePluginContainer plugins = new GradlePluginContainer();
public GradleBuild(BuildItemResolver buildItemResolver) {
super(buildItemResolver);
}

View File

@@ -82,6 +82,11 @@ public abstract class GradleBuildWriter {
protected abstract void writePlugins(IndentingWriter writer, GradleBuild build);
protected List<StandardGradlePlugin> extractStandardPlugin(GradleBuild build) {
return build.plugins().values().filter(StandardGradlePlugin.class::isInstance)
.map(StandardGradlePlugin.class::cast).collect(Collectors.toList());
}
protected abstract void writeJavaSourceCompatibility(IndentingWriter writer, GradleBuild build);
protected abstract void writeConfigurations(IndentingWriter writer, GradleBuild build);
@@ -168,11 +173,6 @@ public abstract class GradleBuildWriter {
}
}
protected List<StandardGradlePlugin> extractStandardPlugin(GradleBuild build) {
return (List<StandardGradlePlugin>) (List<? extends GradlePlugin>) build.plugins().values()
.filter((plugin) -> plugin instanceof StandardGradlePlugin).collect(Collectors.toList());
}
private void writeBoms(IndentingWriter writer, GradleBuild build) {
if (build.boms().isEmpty()) {
return;

View File

@@ -25,7 +25,7 @@ public class GradlePlugin {
private final String id;
private boolean apply;
private final boolean apply;
public GradlePlugin(String id, boolean apply) {
this.id = id;

View File

@@ -29,11 +29,7 @@ import java.util.stream.Stream;
*/
public class GradlePluginContainer {
private final Map<String, GradlePlugin> plugins;
public GradlePluginContainer() {
this.plugins = new LinkedHashMap<>();
}
private final Map<String, GradlePlugin> plugins = new LinkedHashMap<>();
/**
* Specify if this container is empty.
@@ -44,16 +40,16 @@ public class GradlePluginContainer {
}
/**
* Specify if this container has a GradlePlugin with the specified id.
* @param id id associated with the {@link GradlePlugin}
* @return {@code true} if an object with the specified id is added
* Specify if this container has a plugin with the specified id.
* @param id the identifier of a gradle plugin
* @return {@code true} if a plugin with the specified {@code id} exists
*/
public boolean has(String id) {
return this.plugins.containsKey(id);
}
/**
* Returns a {@link Stream} of added {@link GradlePlugin}s.
* Returns a {@link Stream} of registered {@link GradlePlugin}s.
* @return a stream of {@link GradlePlugin}s
*/
public Stream<GradlePlugin> values() {
@@ -61,41 +57,49 @@ public class GradlePluginContainer {
}
/**
* Add a {@link GradlePlugin} to the Gradle's legacy apply block by specifying the id.
* @param id id associated with the {@link GradlePlugin}
*/
public void apply(String id) {
addPlugin(id, (pluginId) -> new GradlePlugin(pluginId, true));
}
/**
* Add a {@link GradlePlugin} to the Gradle's standard plugins DSL block by specifying
* the id.
* @param id id associated with the {@link GradlePlugin}
* Add a {@link GradlePlugin} to the standard {@code plugins} block with the specified
* id. Does nothing if the plugin has already been added.
* @param id the id of the plugin
* @see #add(String, Consumer)
*/
public void add(String id) {
addPlugin(id, (pluginId) -> new StandardGradlePlugin(pluginId));
addPlugin(id, StandardGradlePlugin::new);
}
/**
* Add a {@link GradlePlugin} to the Gradle's standard plugins DSL block by specifying
* the id, along with a {@link Consumer} to customize the object.
* @param id id associated with the {@link GradlePlugin}
* @param plugin consumer to customize the {@link GradlePlugin}
* Add a {@link GradlePlugin} to the standard {@code plugins} block with the specified
* id and {@link Consumer} to customize the object. If the plugin has already been
* added, the consumer can be used to further tune the existing plugin configuration.
* @param id the id of the plugin
* @param plugin a {@link Consumer} to customize the {@link GradlePlugin}
*/
public void add(String id, Consumer<StandardGradlePlugin> plugin) {
GradlePlugin gradlePlugin = addPlugin(id, (pluginId) -> new StandardGradlePlugin(pluginId));
GradlePlugin gradlePlugin = addPlugin(id, StandardGradlePlugin::new);
if (gradlePlugin instanceof StandardGradlePlugin) {
plugin.accept((StandardGradlePlugin) gradlePlugin);
}
}
public boolean remove(String id) {
return this.plugins.remove(id) != null;
/**
* Apply a {@link GradlePlugin} with the specified id. Does nothing if the plugin has
* already been applied.
* @param id the id of the plugin
*/
public void apply(String id) {
addPlugin(id, (pluginId) -> new GradlePlugin(pluginId, true));
}
private GradlePlugin addPlugin(String id, Function<String, GradlePlugin> pluginId) {
return this.plugins.computeIfAbsent(id, pluginId);
}
/**
* Remove the plugin with the specified {@code id}.
* @param id the id of the plugin to remove
* @return {@code true} if such a plugin was registered, {@code false} otherwise
*/
public boolean remove(String id) {
return this.plugins.remove(id) != null;
}
}

View File

@@ -76,7 +76,7 @@ public class GroovyDslGradleBuildWriter extends GradleBuildWriter {
}
private List<GradlePlugin> extractApplyPlugins(GradleBuild build) {
return build.plugins().values().filter((plugin) -> plugin.isApply()).collect(Collectors.toList());
return build.plugins().values().filter(GradlePlugin::isApply).collect(Collectors.toList());
}
private String pluginAsString(StandardGradlePlugin plugin) {

View File

@@ -67,16 +67,12 @@ public class KotlinDslGradleBuildWriter extends GradleBuildWriter {
protected void writePlugins(IndentingWriter writer, GradleBuild build) {
writeNestedCollection(writer, "plugins", extractStandardPlugin(build), this::pluginAsString, null);
writer.println();
if (checkForApplyPlugins(build)) {
if (build.plugins().values().anyMatch(GradlePlugin::isApply)) {
throw new IllegalStateException(
"build.gradle.kts scripts shouldn't apply plugins. They should use the plugins block instead.");
}
}
private boolean checkForApplyPlugins(GradleBuild build) {
return build.plugins().values().anyMatch((gradlePlugin) -> gradlePlugin.isApply());
}
private String pluginAsString(StandardGradlePlugin plugin) {
String result = shortPluginNotation(plugin.getId());
if (result == null) {

View File

@@ -16,6 +16,11 @@
package io.spring.initializr.generator.buildsystem.gradle;
/**
* A standard {@link GradlePlugin} used in the {@code plugins} block.
*
* @author HaiTao Zhang
*/
public class StandardGradlePlugin extends GradlePlugin {
private String version;

View File

@@ -28,11 +28,7 @@ import java.util.stream.Stream;
*/
public class MavenPluginContainer {
private final Map<String, MavenPlugin> plugins;
public MavenPluginContainer() {
this.plugins = new LinkedHashMap<>();
}
private final Map<String, MavenPlugin> plugins = new LinkedHashMap<>();
/**
* Specify if this container is empty.
@@ -43,19 +39,19 @@ public class MavenPluginContainer {
}
/**
* Specify if this container has a MavenPlugin with the specified groupId and
* artifactId.
* @param groupId groupId associated with the {@link MavenPlugin}
* @param artifactId artifactId associated with the {@link MavenPlugin}
* Specify if this container has a plugin with the specified {@code groupId} and
* {@code artifactId}.
* @param groupId the groupId of the plugin
* @param artifactId the artifactId of the plugin
* @return {@code true} if an item with the specified {@code groupId} and
* {@code artifactId} is added
* {@code artifactId} exists
*/
public boolean has(String groupId, String artifactId) {
return this.plugins.containsKey(pluginKey(groupId, artifactId));
}
/**
* Returns a {@link Stream} of added {@link MavenPlugin}s.
* Returns a {@link Stream} of registered {@link MavenPlugin}s.
* @return a stream of {@link MavenPlugin}s
*/
public Stream<MavenPlugin> values() {
@@ -63,31 +59,39 @@ public class MavenPluginContainer {
}
/**
* Add a {@link MavenPlugin} by specifying the groupId and artifactId.
* @param groupId groupId associated with the {@link MavenPlugin}
* @param artifactId artifactId associated with the {@link MavenPlugin}
* Add a {@link MavenPlugin} with the specified {@code groupId} and
* {@code artifactId}. Does nothing if the plugin has already been added.
* @param groupId the groupId of the plugin
* @param artifactId the artifactId of the plugin
* @see #add(String, String, Consumer)
*/
public void add(String groupId, String artifactId) {
addPlugin(groupId, artifactId);
}
/**
* Add a {@link MavenPlugin} by specifying the groupId and artifactId, along with a
* {@link Consumer} to customize the object.
* @param groupId groupId associated with the {@link MavenPlugin}
* @param artifactId artifactId associated with the {@link MavenPlugin}
* @param plugin {@link Consumer} to customize the object
* Add a {@link MavenPlugin}with the specified {@code groupId} and {@code artifactId}
* and {@link Consumer} to customize the object. If the plugin has already been *
* added, the consumer can be used to further tune the existing plugin configuration.
* @param groupId the groupId of the plugin
* @param artifactId the artifactId of the plugin
* @param plugin a {@link Consumer} to customize the {@link MavenPlugin}
*/
public void add(String groupId, String artifactId, Consumer<MavenPlugin> plugin) {
MavenPlugin mavenPlugin = addPlugin(groupId, artifactId);
plugin.accept(mavenPlugin);
}
private MavenPlugin addPlugin(String groupId, String artifactId) {
return this.plugins.computeIfAbsent(pluginKey(groupId, artifactId),
(pluginId) -> new MavenPlugin(groupId, artifactId));
}
/**
* Remove a {@link MavenPlugin} by specifying the groupId and artifactId.
* @param groupId groupId associated with the {@link MavenPlugin}
* @param artifactId artifactId associated with the {@link MavenPlugin}
* @return {@code true} if an object was removed
* Remove the plugin with the specified {@code groupId} and {@code artifactId}.
* @param groupId the groupId of the plugin to remove
* @param artifactId the artifactId of the plugin to remove
* @return {@code true} if such a plugin was registered, {@code false} otherwise
*/
public boolean remove(String groupId, String artifactId) {
return this.plugins.remove(pluginKey(groupId, artifactId)) != null;
@@ -97,9 +101,4 @@ public class MavenPluginContainer {
return String.format("%s:%s", groupId, artifactId);
}
private MavenPlugin addPlugin(String groupId, String artifactId) {
return this.plugins.computeIfAbsent(pluginKey(groupId, artifactId),
(pluginId) -> new MavenPlugin(groupId, artifactId));
}
}

View File

@@ -24,40 +24,67 @@ import static org.assertj.core.api.Assertions.assertThat;
* Tests for {@link GradlePluginContainer}.
*
* @author HaITao Zhang
* @author Stephane Nicoll
*/
public class GradlePluginContainerTests {
class GradlePluginContainerTests {
@Test
void addGradlePluginWithOnlyId() {
void addPluginWithId() {
GradlePluginContainer pluginContainer = new GradlePluginContainer();
pluginContainer.add("com.example");
assertThat(pluginContainer.values()).hasSize(1);
pluginContainer.values().findFirst().ifPresent((plugin) -> {
assertThat(pluginContainer.values()).hasOnlyOneElementSatisfying((plugin) -> {
assertThat(plugin.getId()).isEqualTo("com.example");
assertThat(plugin.isApply()).isFalse();
});
}
@Test
void addGradlePluginWithConsumer() {
void addPluginWithConsumer() {
GradlePluginContainer pluginContainer = new GradlePluginContainer();
pluginContainer.add("com.example", (plugin) -> plugin.setVersion("1.0"));
assertThat(pluginContainer.values()).hasSize(1);
pluginContainer.values().findFirst().ifPresent((plugin) -> {
assertThat(pluginContainer.values()).hasOnlyOneElementSatisfying((plugin) -> {
assertThat(plugin.getId()).isEqualTo("com.example");
assertThat(plugin).isInstanceOf(StandardGradlePlugin.class);
assertThat(((StandardGradlePlugin) plugin).getVersion()).isEqualTo("1.0");
assertThat(plugin.isApply()).isFalse();
});
}
@Test
void addPluginSeveralTimeReuseConfiguration() {
GradlePluginContainer pluginContainer = new GradlePluginContainer();
pluginContainer.add("com.example", (plugin) -> {
assertThat(plugin.getVersion()).isNull();
plugin.setVersion("1.0");
});
pluginContainer.add("com.example", (plugin) -> {
assertThat(plugin.getVersion()).isEqualTo("1.0");
plugin.setVersion("2.0");
});
assertThat(pluginContainer.values()).hasOnlyOneElementSatisfying((plugin) -> {
assertThat(plugin.getId()).isEqualTo("com.example");
assertThat(plugin).isInstanceOf(StandardGradlePlugin.class);
assertThat(((StandardGradlePlugin) plugin).getVersion()).isEqualTo("2.0");
assertThat(plugin.isApply()).isFalse();
});
}
@Test
void applyGradlePlugin() {
GradlePluginContainer pluginContainer = new GradlePluginContainer();
pluginContainer.apply("com.example");
assertThat(pluginContainer.values()).hasSize(1);
pluginContainer.values().findFirst().ifPresent((plugin) -> {
assertThat(pluginContainer.values()).hasOnlyOneElementSatisfying((plugin) -> {
assertThat(plugin.getId()).isEqualTo("com.example");
assertThat(plugin.isApply()).isTrue();
});
}
@Test
void applyGradlePluginSeveralTimesApplyOnlyOnce() {
GradlePluginContainer pluginContainer = new GradlePluginContainer();
pluginContainer.apply("com.example");
pluginContainer.apply("com.example");
assertThat(pluginContainer.values()).hasOnlyOneElementSatisfying((plugin) -> {
assertThat(plugin.getId()).isEqualTo("com.example");
assertThat(plugin.isApply()).isTrue();
});
@@ -68,8 +95,7 @@ public class GradlePluginContainerTests {
GradlePluginContainer pluginContainer = new GradlePluginContainer();
pluginContainer.add("com.example");
pluginContainer.apply("com.example");
assertThat(pluginContainer.values()).hasSize(1);
pluginContainer.values().findFirst().ifPresent((plugin) -> {
assertThat(pluginContainer.values()).hasOnlyOneElementSatisfying((plugin) -> {
assertThat(plugin.getId()).isEqualTo("com.example");
assertThat(plugin.isApply()).isFalse();
});
@@ -80,11 +106,68 @@ public class GradlePluginContainerTests {
GradlePluginContainer pluginContainer = new GradlePluginContainer();
pluginContainer.apply("com.example");
pluginContainer.add("com.example");
assertThat(pluginContainer.values()).hasSize(1);
pluginContainer.values().findFirst().ifPresent((plugin) -> {
assertThat(pluginContainer.values()).hasOnlyOneElementSatisfying((plugin) -> {
assertThat(plugin.getId()).isEqualTo("com.example");
assertThat(plugin.isApply()).isTrue();
});
}
@Test
void isEmptyWithEmptyContainer() {
GradlePluginContainer pluginContainer = new GradlePluginContainer();
assertThat(pluginContainer.isEmpty()).isTrue();
}
@Test
void isEmptyWithRegisteredPlugin() {
GradlePluginContainer pluginContainer = new GradlePluginContainer();
pluginContainer.add("com.example");
assertThat(pluginContainer.isEmpty()).isFalse();
}
@Test
void hasPluginWithMatchingStandardPlugin() {
GradlePluginContainer pluginContainer = new GradlePluginContainer();
pluginContainer.add("com.example");
assertThat(pluginContainer.has("com.example")).isTrue();
}
@Test
void hasPluginWithMatchingAppliedPlugin() {
GradlePluginContainer pluginContainer = new GradlePluginContainer();
pluginContainer.apply("com.example");
assertThat(pluginContainer.has("com.example")).isTrue();
}
@Test
void hasPluginWithNonMatchingPlugin() {
GradlePluginContainer pluginContainer = new GradlePluginContainer();
pluginContainer.apply("com.example");
assertThat(pluginContainer.has("com.example.another")).isFalse();
}
@Test
void removeWithMatchingStandardPlugin() {
GradlePluginContainer pluginContainer = new GradlePluginContainer();
pluginContainer.add("com.example");
assertThat(pluginContainer.remove("com.example")).isTrue();
assertThat(pluginContainer.isEmpty()).isTrue();
}
@Test
void removeWithMatchingAppliedPlugin() {
GradlePluginContainer pluginContainer = new GradlePluginContainer();
pluginContainer.apply("com.example");
assertThat(pluginContainer.remove("com.example")).isTrue();
assertThat(pluginContainer.isEmpty()).isTrue();
}
@Test
void removeWithNonMatchingPlugin() {
GradlePluginContainer pluginContainer = new GradlePluginContainer();
pluginContainer.apply("com.example");
assertThat(pluginContainer.remove("com.example.another")).isFalse();
assertThat(pluginContainer.isEmpty()).isFalse();
}
}

View File

@@ -89,8 +89,7 @@ class GroovyDslGradleBuildWriterTests {
@Test
void gradleBuildWithPluginAndVersion() throws IOException {
GradleBuild build = new GradleBuild();
build.plugins().add("org.springframework.boot",
(StandardGradlePlugin standardGradlePlugin) -> standardGradlePlugin.setVersion("2.1.0.RELEASE"));
build.plugins().add("org.springframework.boot", (plugin) -> plugin.setVersion("2.1.0.RELEASE"));
List<String> lines = generateBuild(build);
assertThat(lines).containsSequence("plugins {", " id 'org.springframework.boot' version '2.1.0.RELEASE'",
"}");

View File

@@ -91,10 +91,8 @@ class KotlinDslGradleBuildWriterTests {
@Test
void gradleBuildWithKotlinPluginAndVersion() throws IOException {
GradleBuild build = new GradleBuild();
build.plugins().add("org.jetbrains.kotlin.jvm",
(StandardGradlePlugin standardGradlePlugin) -> standardGradlePlugin.setVersion("1.3.21"));
build.plugins().add("org.jetbrains.kotlin.plugin.spring",
(StandardGradlePlugin standardGradlePlugin) -> standardGradlePlugin.setVersion("1.3.21"));
build.plugins().add("org.jetbrains.kotlin.jvm", (plugin) -> plugin.setVersion("1.3.21"));
build.plugins().add("org.jetbrains.kotlin.plugin.spring", (plugin) -> plugin.setVersion("1.3.21"));
List<String> lines = generateBuild(build);
assertThat(lines).containsSequence("plugins {", " kotlin(\"jvm\") version \"1.3.21\"",
" kotlin(\"plugin.spring\") version \"1.3.21\"", "}");
@@ -103,8 +101,7 @@ class KotlinDslGradleBuildWriterTests {
@Test
void gradleBuildWithPluginAndVersion() throws IOException {
GradleBuild build = new GradleBuild();
build.plugins().add("org.springframework.boot",
(StandardGradlePlugin standardGradlePlugin) -> standardGradlePlugin.setVersion("2.1.0.RELEASE"));
build.plugins().add("org.springframework.boot", (plugin) -> plugin.setVersion("2.1.0.RELEASE"));
List<String> lines = generateBuild(build);
assertThat(lines).containsSequence("plugins {",
" id(\"org.springframework.boot\") version \"2.1.0.RELEASE\"", "}");

View File

@@ -33,8 +33,7 @@ class MavenBuildTests {
MavenBuild build = new MavenBuild();
build.plugins().add("com.example", "test-plugin",
(plugin) -> plugin.execution("first", (first) -> first.goal("run-this")));
assertThat(build.plugins().values()).hasSize(1);
build.plugins().values().findFirst().ifPresent((testPlugin) -> {
assertThat(build.plugins().values()).hasOnlyOneElementSatisfying((testPlugin) -> {
assertThat(testPlugin.getGroupId()).isEqualTo("com.example");
assertThat(testPlugin.getArtifactId()).isEqualTo("test-plugin");
assertThat(testPlugin.getVersion()).isNull();
@@ -49,8 +48,7 @@ class MavenBuildTests {
MavenBuild build = new MavenBuild();
build.plugins().add("com.example", "test-plugin");
build.plugins().add("com.example", "test-plugin", (plugin) -> plugin.setVersion("1.0.0"));
assertThat(build.plugins().values()).hasSize(1);
build.plugins().values().findFirst().ifPresent((testPlugin) -> {
assertThat(build.plugins().values()).hasOnlyOneElementSatisfying((testPlugin) -> {
assertThat(testPlugin.getGroupId()).isEqualTo("com.example");
assertThat(testPlugin.getArtifactId()).isEqualTo("test-plugin");
assertThat(testPlugin.getVersion()).isEqualTo("1.0.0");
@@ -63,8 +61,7 @@ class MavenBuildTests {
MavenBuild build = new MavenBuild();
build.plugins().add("com.example", "test-plugin", (plugin) -> plugin.setVersion("1.0.0"));
build.plugins().add("com.example", "test-plugin", (plugin) -> plugin.setVersion(null));
assertThat(build.plugins().values()).hasSize(1);
build.plugins().values().findFirst().ifPresent((testPlugin) -> {
assertThat(build.plugins().values()).hasOnlyOneElementSatisfying((testPlugin) -> {
assertThat(testPlugin.getGroupId()).isEqualTo("com.example");
assertThat(testPlugin.getArtifactId()).isEqualTo("test-plugin");
assertThat(testPlugin.getVersion()).isNull();
@@ -76,22 +73,13 @@ class MavenBuildTests {
MavenBuild build = new MavenBuild();
build.plugins().add("com.example", "test-plugin", (plugin) -> plugin.setVersion("1.0.0"));
build.plugins().add("com.example", "test-plugin");
assertThat(build.plugins().values()).hasSize(1);
build.plugins().values().findFirst().ifPresent((testPlugin) -> {
assertThat(build.plugins().values()).hasOnlyOneElementSatisfying((testPlugin) -> {
assertThat(testPlugin.getGroupId()).isEqualTo("com.example");
assertThat(testPlugin.getArtifactId()).isEqualTo("test-plugin");
assertThat(testPlugin.getVersion()).isEqualTo("1.0.0");
});
}
@Test
void mavenPluginCanBeRemoved() {
MavenBuild build = new MavenBuild();
build.plugins().add("com.example", "test-plugin");
build.plugins().remove("com.example", "test-plugin");
assertThat(build.plugins().values()).hasSize(0);
}
@Test
void mavenPluginExecutionCanBeAmended() {
MavenBuild build = new MavenBuild();
@@ -99,8 +87,7 @@ class MavenBuildTests {
(plugin) -> plugin.execution("first", (first) -> first.goal("run-this")));
build.plugins().add("com.example", "test-plugin",
(plugin) -> plugin.execution("first", (first) -> first.goal("run-that")));
assertThat(build.plugins().values()).hasSize(1);
build.plugins().values().findFirst().ifPresent((testPlugin) -> {
assertThat(build.plugins().values()).hasOnlyOneElementSatisfying((testPlugin) -> {
assertThat(testPlugin.getExecutions()).hasSize(1);
assertThat(testPlugin.getExecutions().get(0).getId()).isEqualTo("first");
assertThat(testPlugin.getExecutions().get(0).getGoals()).containsExactly("run-this", "run-that");
@@ -111,16 +98,16 @@ class MavenBuildTests {
void mavenPluginExtensionsNotLoadedByDefault() {
MavenBuild build = new MavenBuild();
build.plugins().add("com.example", "test-plugin");
assertThat(build.plugins().values()).hasSize(1);
build.plugins().values().findFirst().ifPresent((testPlugin) -> assertThat(testPlugin.isExtensions()).isFalse());
assertThat(build.plugins().values())
.hasOnlyOneElementSatisfying((testPlugin) -> assertThat(testPlugin.isExtensions()).isFalse());
}
@Test
void mavenPluginExtensionsCanBeLoaded() {
MavenBuild build = new MavenBuild();
build.plugins().add("com.example", "test-plugin", (plugin) -> plugin.extensions());
assertThat(build.plugins().values()).hasSize(1);
build.plugins().values().findFirst().ifPresent((testPlugin) -> assertThat(testPlugin.isExtensions()).isTrue());
build.plugins().add("com.example", "test-plugin", MavenPlugin::extensions);
assertThat(build.plugins().values())
.hasOnlyOneElementSatisfying((testPlugin) -> assertThat(testPlugin.isExtensions()).isTrue());
}
}

View File

@@ -436,7 +436,7 @@ class MavenBuildWriterTests {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.plugins().add("com.example.demo", "demo-plugin", (plugin) -> plugin.extensions());
build.plugins().add("com.example.demo", "demo-plugin", MavenPlugin::extensions);
generatePom(build, (pom) -> {
NodeAssert plugin = pom.nodeAtPath("/project/build/plugins/plugin");
assertThat(plugin).textAtPath("groupId").isEqualTo("com.example.demo");

View File

@@ -24,15 +24,15 @@ import static org.assertj.core.api.Assertions.assertThat;
* Tests for {@link MavenPluginContainer}.
*
* @author HaiTao Zhang
* @author Stephane Nicoll
*/
public class MavenPluginContainerTests {
@Test
void addMavenPlugin() {
void addPlugin() {
MavenPluginContainer pluginContainer = new MavenPluginContainer();
pluginContainer.add("com.example", "test-plugin");
assertThat(pluginContainer.values()).hasSize(1);
pluginContainer.values().findFirst().ifPresent((plugin) -> {
assertThat(pluginContainer.values()).hasOnlyOneElementSatisfying((plugin) -> {
assertThat(plugin.getGroupId()).isEqualTo("com.example");
assertThat(plugin.getArtifactId()).isEqualTo("test-plugin");
assertThat(plugin.getVersion()).isNull();
@@ -40,14 +40,13 @@ public class MavenPluginContainerTests {
}
@Test
void addMavenPluginWithConsumer() {
void addPluginWithConsumer() {
MavenPluginContainer pluginContainer = new MavenPluginContainer();
pluginContainer.add("com.example", "test-plugin", (plugin) -> {
plugin.setVersion("1.0");
plugin.execution("first", (first) -> first.goal("run-this"));
});
assertThat(pluginContainer.values()).hasSize(1);
pluginContainer.values().findFirst().ifPresent((plugin) -> {
assertThat(pluginContainer.values()).hasOnlyOneElementSatisfying((plugin) -> {
assertThat(plugin.getGroupId()).isEqualTo("com.example");
assertThat(plugin.getArtifactId()).isEqualTo("test-plugin");
assertThat(plugin.getVersion()).isEqualTo("1.0");
@@ -57,4 +56,65 @@ public class MavenPluginContainerTests {
});
}
@Test
void addPluginSeveralTimeReuseConfiguration() {
MavenPluginContainer pluginContainer = new MavenPluginContainer();
pluginContainer.add("com.example", "test-plugin", (plugin) -> {
assertThat(plugin.getVersion()).isNull();
plugin.setVersion("1.0");
});
pluginContainer.add("com.example", "test-plugin", (plugin) -> {
assertThat(plugin.getVersion()).isEqualTo("1.0");
plugin.setVersion("2.0");
});
assertThat(pluginContainer.values()).hasOnlyOneElementSatisfying((plugin) -> {
assertThat(plugin.getGroupId()).isEqualTo("com.example");
assertThat(plugin.getArtifactId()).isEqualTo("test-plugin");
assertThat(plugin.getVersion()).isEqualTo("2.0");
});
}
@Test
void isEmptyWithEmptyContainer() {
MavenPluginContainer pluginContainer = new MavenPluginContainer();
assertThat(pluginContainer.isEmpty()).isTrue();
}
@Test
void isEmptyWithRegisteredPlugin() {
MavenPluginContainer pluginContainer = new MavenPluginContainer();
pluginContainer.add("com.example", "test-plugin");
assertThat(pluginContainer.isEmpty()).isFalse();
}
@Test
void hasPluginWithMatchingPlugin() {
MavenPluginContainer pluginContainer = new MavenPluginContainer();
pluginContainer.add("com.example", "test-plugin");
assertThat(pluginContainer.has("com.example", "test-plugin")).isTrue();
}
@Test
void hasPluginWithNonMatchingPlugin() {
MavenPluginContainer pluginContainer = new MavenPluginContainer();
pluginContainer.add("com.example", "test-plugin");
assertThat(pluginContainer.has("com.example", "another-plugin")).isFalse();
}
@Test
void removeWithMatchingPlugin() {
MavenPluginContainer pluginContainer = new MavenPluginContainer();
pluginContainer.add("com.example", "test-plugin");
assertThat(pluginContainer.remove("com.example", "test-plugin")).isTrue();
assertThat(pluginContainer.isEmpty()).isTrue();
}
@Test
void removeWithNonMatchingPlugin() {
MavenPluginContainer pluginContainer = new MavenPluginContainer();
pluginContainer.add("com.example", "test-plugin");
assertThat(pluginContainer.remove("com.example", "another-plugin")).isFalse();
assertThat(pluginContainer.isEmpty()).isFalse();
}
}

View File

@@ -57,13 +57,11 @@ class MavenPluginTests {
@SuppressWarnings("unchecked")
void configurationParameterWithNestedValuesCanBeCustomized() {
MavenPlugin plugin = new MavenPlugin("com.example", "test-plugin");
plugin.configuration(
(configuration) -> configuration.configure("plugins", (items) -> items.add("item", "one")));
plugin.configuration(
(configuration) -> configuration.configure("plugins", (items) -> items.add("item", "two")));
plugin.configuration((configuration) -> configuration.configure("items", (items) -> items.add("item", "one")));
plugin.configuration((configuration) -> configuration.configure("items", (items) -> items.add("item", "two")));
assertThat(plugin.getConfiguration().getSettings()).hasSize(1);
Setting setting = plugin.getConfiguration().getSettings().get(0);
assertThat(setting.getName()).isEqualTo("plugins");
assertThat(setting.getName()).isEqualTo("items");
assertThat(setting.getValue()).isInstanceOf(List.class);
List<Setting> values = (List<Setting>) setting.getValue();
assertThat(values.stream().map(Setting::getName)).containsExactly("item", "item");
@@ -74,13 +72,13 @@ class MavenPluginTests {
@SuppressWarnings("unchecked")
void configurationParameterWithSeveralLevelOfNestedValuesCanBeCustomized() {
MavenPlugin plugin = new MavenPlugin("com.example", "test-plugin");
plugin.configuration((configuration) -> configuration.configure("plugins",
plugin.configuration((configuration) -> configuration.configure("items",
(items) -> items.configure("item", (subItems) -> subItems.add("subItem", "one"))));
plugin.configuration((configuration) -> configuration.configure("plugins", (items) -> items.configure("item",
plugin.configuration((configuration) -> configuration.configure("items", (items) -> items.configure("item",
(subItems) -> subItems.add("subItem", "two").add("subItem", "three"))));
assertThat(plugin.getConfiguration().getSettings()).hasSize(1);
Setting setting = plugin.getConfiguration().getSettings().get(0);
assertThat(setting.getName()).isEqualTo("plugins");
assertThat(setting.getName()).isEqualTo("items");
assertThat(setting.getValue()).isInstanceOf(List.class);
List<Setting> items = (List<Setting>) setting.getValue();
assertThat(items).hasSize(1);