From 3a637226b012a15bfa95c176f27ca073d683fa3b Mon Sep 17 00:00:00 2001 From: Jeff Glatz Date: Sun, 3 Apr 2022 18:31:52 -0500 Subject: [PATCH] Extract CiVersionSource interface --- .../maven/ci/CiMojoConfigurator.java | 18 ++ .../tools/bestquality/maven/ci/CiVersion.java | 52 +++++- .../bestquality/maven/ci/CiVersionSource.java | 48 +----- .../maven/ci/CiVersionSourceConverter.java | 21 +++ .../maven/ci/CiVersionSources.java | 56 ++++++ .../bestquality/maven/ci/ExpandPomMojo.java | 45 ++++- .../maven/ci/ExportVersionMojo.java | 10 +- .../maven/ci/IncrementPomMojo.java | 9 +- .../maven/ci/ReleaseVersionMojo.java | 1 + .../versioning/IncrementorConverter.java | 21 +++ ...dardIncrementor.java => Incrementors.java} | 6 +- .../bestquality/maven/versioning/Version.java | 4 +- .../java/tools/bestquality/util/Strings.java | 18 ++ .../maven/ci/CiMojoConfiguratorTest.groovy | 23 +++ .../ci/CiVersionSourceConverterTest.groovy | 50 ++++++ .../maven/ci/CiVersionSourceTest.groovy | 18 +- .../bestquality/maven/ci/CiVersionTest.groovy | 161 ++++++++++++------ .../maven/ci/ExpandPomMojoTest.groovy | 32 ++-- .../maven/ci/ExportVersionMojoTest.groovy | 3 +- .../maven/ci/IncrementPomMojoTest.groovy | 20 ++- .../maven/ci/ReleaseVersionMojoTest.groovy | 4 +- .../IncrementorConverterTest.groovy | 49 ++++++ ...torTest.groovy => IncrementorsTest.groovy} | 16 +- .../tools/bestquality/util/StringsTest.groovy | 57 +++++++ .../bestquality/maven/ci/ExpandPomMojoIT.java | 70 +++++--- 25 files changed, 626 insertions(+), 186 deletions(-) create mode 100644 src/main/java/tools/bestquality/maven/ci/CiMojoConfigurator.java create mode 100644 src/main/java/tools/bestquality/maven/ci/CiVersionSourceConverter.java create mode 100644 src/main/java/tools/bestquality/maven/ci/CiVersionSources.java create mode 100644 src/main/java/tools/bestquality/maven/versioning/IncrementorConverter.java rename src/main/java/tools/bestquality/maven/versioning/{StandardIncrementor.java => Incrementors.java} (88%) create mode 100644 src/main/java/tools/bestquality/util/Strings.java create mode 100644 src/test/groovy/tools/bestquality/maven/ci/CiMojoConfiguratorTest.groovy create mode 100644 src/test/groovy/tools/bestquality/maven/ci/CiVersionSourceConverterTest.groovy create mode 100644 src/test/groovy/tools/bestquality/maven/versioning/IncrementorConverterTest.groovy rename src/test/groovy/tools/bestquality/maven/versioning/{StandardIncrementorTest.groovy => IncrementorsTest.groovy} (83%) create mode 100644 src/test/groovy/tools/bestquality/util/StringsTest.groovy diff --git a/src/main/java/tools/bestquality/maven/ci/CiMojoConfigurator.java b/src/main/java/tools/bestquality/maven/ci/CiMojoConfigurator.java new file mode 100644 index 0000000..fe37d97 --- /dev/null +++ b/src/main/java/tools/bestquality/maven/ci/CiMojoConfigurator.java @@ -0,0 +1,18 @@ +package tools.bestquality.maven.ci; + +import org.codehaus.plexus.component.configurator.BasicComponentConfigurator; +import tools.bestquality.maven.versioning.IncrementorConverter; + +import javax.annotation.PostConstruct; +import javax.inject.Named; + +@Named("ci-mojo-configurator") +public class CiMojoConfigurator + extends BasicComponentConfigurator { + + @PostConstruct + public void initialize() { + converterLookup.registerConverter(new IncrementorConverter()); + converterLookup.registerConverter(new CiVersionSourceConverter()); + } +} diff --git a/src/main/java/tools/bestquality/maven/ci/CiVersion.java b/src/main/java/tools/bestquality/maven/ci/CiVersion.java index acfe7db..317fd93 100644 --- a/src/main/java/tools/bestquality/maven/ci/CiVersion.java +++ b/src/main/java/tools/bestquality/maven/ci/CiVersion.java @@ -2,17 +2,19 @@ import org.apache.maven.model.Model; import org.apache.maven.plugin.MojoFailureException; -import org.codehaus.plexus.util.StringUtils; import tools.bestquality.maven.versioning.Incrementor; +import tools.bestquality.util.Strings; import java.util.Objects; import java.util.Optional; import java.util.Properties; +import static java.lang.Boolean.parseBoolean; import static java.lang.String.format; import static java.util.Optional.empty; import static java.util.Optional.ofNullable; import static tools.bestquality.maven.versioning.Version.parseVersion; +import static tools.bestquality.util.Strings.trim; public class CiVersion { private Optional revision; @@ -98,21 +100,21 @@ public String expand(String template) { */ public String replace(String pom) { if (revision.isPresent()) { - String element = revision.filter(StringUtils::isNotEmpty) + String element = revision.filter(Strings::isNotBlank) .map(r -> format("%s", r)) .orElse(""); pom = pom.replaceAll("(?s)(.*|(.*properties>)", format("$1%s$2", element)); } if (sha1.isPresent()) { - String element = sha1.filter(StringUtils::isNotEmpty) + String element = sha1.filter(Strings::isNotBlank) .map(s -> format("%s", s)) .orElse(""); pom = pom.replaceAll("(?s)(.*|(.*properties>)", format("$1%s$2", element)); } if (changelist.isPresent()) { - String element = changelist.filter(StringUtils::isNotEmpty) + String element = changelist.filter(Strings::isNotBlank) .map(c -> format("%s", c)) .orElse(""); pom = pom.replaceAll("(?s)(.*|(.*properties>)", @@ -121,15 +123,28 @@ public String replace(String pom) { return pom; } - public CiVersion withMissingFrom(Properties properties) { + public CiVersion withMissingFrom(Properties properties) + throws MojoFailureException { if (!revision.isPresent() && properties.containsKey("revision")) { - withRevision(properties.getProperty("revision")); + String revision = trim(properties.getProperty("revision")); + if (parseBoolean(revision)) { + throw new MojoFailureException("The revision property must be specified as a string value"); + } + withRevision(revision); } if (!sha1.isPresent() && properties.containsKey("sha1")) { - withSha1(properties.getProperty("sha1")); + String sha1 = trim(properties.getProperty("sha1")); + if (parseBoolean(sha1)) { + throw new MojoFailureException("The sha1 property must be specified as a string value"); + } + withSha1(sha1); } if (!changelist.isPresent() && properties.containsKey("changelist")) { - withChangelist(properties.getProperty("changelist")); + String changelist = trim(properties.getProperty("changelist")); + if (parseBoolean(changelist)) { + throw new MojoFailureException("The changelist property must be specified as a string value"); + } + withChangelist(changelist); } return this; } @@ -160,6 +175,24 @@ public String toExternalForm() { return builder.toString(); } + public String toComponentForm() { + StringBuilder builder = new StringBuilder(); + revision.ifPresent(value -> builder + .append("revision:") + .append(value) + .append(" ")); + sha1.ifPresent(value -> builder + .append("sha1:") + .append(value) + .append(" ")); + changelist.ifPresent(value -> builder + .append("changelist:") + .append(value) + .append(" ")); + return builder.toString() + .trim(); + } + public void applyTo(Model model) { model.setVersion(toExternalForm()); Properties properties = model.getProperties(); @@ -200,7 +233,8 @@ private String nextRevision(Incrementor incrementor) } } - public static CiVersion versionFrom(Properties properties) { + public static CiVersion versionFrom(Properties properties) + throws MojoFailureException { return new CiVersion().withMissingFrom(properties); } } diff --git a/src/main/java/tools/bestquality/maven/ci/CiVersionSource.java b/src/main/java/tools/bestquality/maven/ci/CiVersionSource.java index f6e6a1e..1b26a6f 100644 --- a/src/main/java/tools/bestquality/maven/ci/CiVersionSource.java +++ b/src/main/java/tools/bestquality/maven/ci/CiVersionSource.java @@ -1,49 +1,11 @@ package tools.bestquality.maven.ci; import org.apache.maven.execution.MavenSession; +import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.project.MavenProject; -import static java.lang.String.format; -import static java.util.Arrays.stream; -import static tools.bestquality.maven.ci.CiVersion.versionFrom; - -enum CiVersionSource { - PROJECT() { - @Override - public CiVersion from(MavenProject project, MavenSession session) { - return versionFrom(project.getProperties()); - } - }, - SYSTEM() { - @Override - public CiVersion from(MavenProject project, MavenSession session) { - return versionFrom(session.getSystemProperties()); - } - }, - MERGE_SYSTEM_FIRST() { - @Override - public CiVersion from(MavenProject project, MavenSession session) { - return versionFrom(session.getSystemProperties()) - .withMissingFrom(project.getProperties()); - } - }, - MERGE_PROJECT_FIRST() { - @Override - public CiVersion from(MavenProject project, MavenSession session) { - return versionFrom(project.getProperties()) - .withMissingFrom(session.getSystemProperties()); - } - }; - - public abstract CiVersion from(MavenProject project, MavenSession session); - - public static CiVersionSource source(String name) { - return stream(values()) - .filter(item -> item.name() - .equalsIgnoreCase(name.replace("-", "_"))) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException( - format("No enum constant in %s matching %s", - CiVersionSource.class.getCanonicalName(), name))); - } +@FunctionalInterface +public interface CiVersionSource { + CiVersion from(MavenProject project, MavenSession session) + throws MojoFailureException; } diff --git a/src/main/java/tools/bestquality/maven/ci/CiVersionSourceConverter.java b/src/main/java/tools/bestquality/maven/ci/CiVersionSourceConverter.java new file mode 100644 index 0000000..2dd75b2 --- /dev/null +++ b/src/main/java/tools/bestquality/maven/ci/CiVersionSourceConverter.java @@ -0,0 +1,21 @@ +package tools.bestquality.maven.ci; + +import org.codehaus.plexus.component.configurator.ComponentConfigurationException; +import org.codehaus.plexus.component.configurator.converters.basic.AbstractBasicConverter; + +import static tools.bestquality.maven.ci.CiVersionSources.source; + +public class CiVersionSourceConverter + extends AbstractBasicConverter { + + @Override + public boolean canConvert(Class type) { + return CiVersionSource.class.equals(type); + } + + @Override + protected Object fromString(String value) + throws ComponentConfigurationException { + return source(value); + } +} diff --git a/src/main/java/tools/bestquality/maven/ci/CiVersionSources.java b/src/main/java/tools/bestquality/maven/ci/CiVersionSources.java new file mode 100644 index 0000000..54c6331 --- /dev/null +++ b/src/main/java/tools/bestquality/maven/ci/CiVersionSources.java @@ -0,0 +1,56 @@ +package tools.bestquality.maven.ci; + +import org.apache.maven.execution.MavenSession; +import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.project.MavenProject; + +import static java.lang.String.format; +import static java.util.Arrays.stream; +import static tools.bestquality.maven.ci.CiVersion.versionFrom; + +enum CiVersionSources + implements CiVersionSource { + PROJECT() { + @Override + public CiVersion from(MavenProject project, MavenSession session) + throws MojoFailureException { + return versionFrom(project.getProperties()); + } + }, + SYSTEM() { + @Override + public CiVersion from(MavenProject project, MavenSession session) + throws MojoFailureException { + return versionFrom(session.getSystemProperties()); + } + }, + MERGE_SYSTEM_FIRST() { + @Override + public CiVersion from(MavenProject project, MavenSession session) + throws MojoFailureException { + return versionFrom(session.getSystemProperties()) + .withMissingFrom(project.getProperties()); + } + }, + MERGE_PROJECT_FIRST() { + @Override + public CiVersion from(MavenProject project, MavenSession session) + throws MojoFailureException { + return versionFrom(project.getProperties()) + .withMissingFrom(session.getSystemProperties()); + } + }; + + public abstract CiVersion from(MavenProject project, MavenSession session) + throws MojoFailureException; + + public static CiVersionSource source(String name) { + return stream(values()) + .filter(item -> item.name() + .equalsIgnoreCase(name.replace("-", "_"))) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException( + format("No enum constant in %s matching %s", + CiVersionSources.class.getCanonicalName(), name))); + } +} diff --git a/src/main/java/tools/bestquality/maven/ci/ExpandPomMojo.java b/src/main/java/tools/bestquality/maven/ci/ExpandPomMojo.java index fde2619..815a675 100644 --- a/src/main/java/tools/bestquality/maven/ci/ExpandPomMojo.java +++ b/src/main/java/tools/bestquality/maven/ci/ExpandPomMojo.java @@ -2,6 +2,7 @@ import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; @@ -13,10 +14,9 @@ import static java.lang.String.format; import static java.nio.file.Files.createDirectories; import static org.apache.maven.plugins.annotations.LifecyclePhase.VALIDATE; -import static tools.bestquality.maven.ci.CiVersionSource.MERGE_SYSTEM_FIRST; - @Mojo(name = "expand-pom", + configurator = "ci-mojo-configurator", threadSafe = true, defaultPhase = VALIDATE) public class ExpandPomMojo @@ -29,6 +29,28 @@ public class ExpandPomMojo @Parameter(defaultValue = "${session}", readonly = true, required = true) private MavenSession session; + /** + * The source of the properties used to compute the CI Version. There are 2 + * primary sources of properties from which the CI version is built: + *

+ *

    + *
  • The maven project's properties
  • + *
  • The maven session's system properties
  • + *
+ *

+ * This parameter determines which set of properties is used, there are options + * for merging the properties as well. The possible values are: + *

+ *

    + *
  • project
  • + *
  • system
  • + *
  • merge-system-first
  • + *
  • merge-project-first
  • + *
+ */ + @Parameter(alias = "source", property = "source", defaultValue = "merge-system-first") + private CiVersionSource source; + public ExpandPomMojo() { this(new Content()); } @@ -47,8 +69,13 @@ public ExpandPomMojo withSession(MavenSession session) { return this; } + public ExpandPomMojo withSource(CiVersionSource source) { + this.source = source; + return this; + } + public void execute() - throws MojoExecutionException { + throws MojoExecutionException, MojoFailureException { String projectPom = readProjectPom(); String expandedPom = expandProjectPom(projectPom); if (projectPom.equals(expandedPom)) { @@ -73,12 +100,18 @@ private String readProjectPom() } } + private CiVersion current() + throws MojoFailureException { + return source.from(project, session); + } + private String expandProjectPom(String projectPom) - throws MojoExecutionException { + throws MojoExecutionException, MojoFailureException { info("Expanding contents of project POM file"); + CiVersion version = current(); try { - CiVersionSource source = MERGE_SYSTEM_FIRST; - CiVersion version = source.from(project, session); + info(format("Expanding POM file with %s [%s]", + version.toExternalForm(), version.toComponentForm())); return version.replace(version.expand(projectPom)); } catch (Exception e) { error("Failure expanding template POM file", e); diff --git a/src/main/java/tools/bestquality/maven/ci/ExportVersionMojo.java b/src/main/java/tools/bestquality/maven/ci/ExportVersionMojo.java index 7875b06..8999ca4 100644 --- a/src/main/java/tools/bestquality/maven/ci/ExportVersionMojo.java +++ b/src/main/java/tools/bestquality/maven/ci/ExportVersionMojo.java @@ -2,6 +2,7 @@ import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; import tools.bestquality.io.Content; @@ -13,7 +14,6 @@ import static java.lang.System.out; import static java.nio.charset.StandardCharsets.US_ASCII; import static java.nio.file.Files.createDirectories; -import static tools.bestquality.maven.ci.CiVersionSource.source; public abstract class ExportVersionMojo> extends CiMojo { @@ -42,7 +42,7 @@ public abstract class ExportVersionMojo> * */ @Parameter(alias = "source", property = "source", defaultValue = "merge-system-first") - protected String source; + protected CiVersionSource source; /** * The directory containing exported version information @@ -77,7 +77,7 @@ public M withSession(MavenSession session) { } @SuppressWarnings("unchecked") - public M withSource(String source) { + public M withSource(CiVersionSource source) { this.source = source; return (M) this; } @@ -94,8 +94,8 @@ public M withScriptable(boolean scriptable) { return (M) this; } - protected CiVersion current() { - CiVersionSource source = source(this.source); + protected CiVersion current() + throws MojoFailureException { return source.from(project, session); } diff --git a/src/main/java/tools/bestquality/maven/ci/IncrementPomMojo.java b/src/main/java/tools/bestquality/maven/ci/IncrementPomMojo.java index 3c6ab1e..1558c22 100644 --- a/src/main/java/tools/bestquality/maven/ci/IncrementPomMojo.java +++ b/src/main/java/tools/bestquality/maven/ci/IncrementPomMojo.java @@ -5,15 +5,16 @@ import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import tools.bestquality.io.Content; +import tools.bestquality.maven.versioning.Incrementor; import java.io.File; import java.nio.file.Path; import static java.lang.String.format; import static org.apache.maven.plugins.annotations.LifecyclePhase.VALIDATE; -import static tools.bestquality.maven.versioning.StandardIncrementor.incrementor; @Mojo(name = "increment-pom", + configurator = "ci-mojo-configurator", aggregator = true, threadSafe = true, defaultPhase = VALIDATE) @@ -36,7 +37,7 @@ public class IncrementPomMojo * major */ @Parameter(alias = "incrementor", property = "incrementor", defaultValue = "auto") - private String incrementor; + private Incrementor incrementor; /** * The filename in the output directory which will contain the exported release version. @@ -56,7 +57,7 @@ public IncrementPomMojo() { this(new Content()); } - public IncrementPomMojo withIncrementor(String incrementor) { + public IncrementPomMojo withIncrementor(Incrementor incrementor) { this.incrementor = incrementor; return this; } @@ -77,7 +78,7 @@ public void execute() CiVersion next() throws MojoFailureException { CiVersion current = current(); - CiVersion next = current.next(incrementor(incrementor)); + CiVersion next = current.next(incrementor); info(format("Next ci version is: %s", next.toExternalForm())); return next; } diff --git a/src/main/java/tools/bestquality/maven/ci/ReleaseVersionMojo.java b/src/main/java/tools/bestquality/maven/ci/ReleaseVersionMojo.java index b7aa473..6ddc368 100644 --- a/src/main/java/tools/bestquality/maven/ci/ReleaseVersionMojo.java +++ b/src/main/java/tools/bestquality/maven/ci/ReleaseVersionMojo.java @@ -9,6 +9,7 @@ import static org.apache.maven.plugins.annotations.LifecyclePhase.VALIDATE; @Mojo(name = "release-version", + configurator = "ci-mojo-configurator", aggregator = true, threadSafe = true, defaultPhase = VALIDATE) diff --git a/src/main/java/tools/bestquality/maven/versioning/IncrementorConverter.java b/src/main/java/tools/bestquality/maven/versioning/IncrementorConverter.java new file mode 100644 index 0000000..3a8230c --- /dev/null +++ b/src/main/java/tools/bestquality/maven/versioning/IncrementorConverter.java @@ -0,0 +1,21 @@ +package tools.bestquality.maven.versioning; + +import org.codehaus.plexus.component.configurator.ComponentConfigurationException; +import org.codehaus.plexus.component.configurator.converters.basic.AbstractBasicConverter; + +import static tools.bestquality.maven.versioning.Incrementors.incrementor; + +public class IncrementorConverter + extends AbstractBasicConverter { + + @Override + public boolean canConvert(Class type) { + return Incrementor.class.equals(type); + } + + @Override + protected Object fromString(String value) + throws ComponentConfigurationException { + return incrementor(value); + } +} diff --git a/src/main/java/tools/bestquality/maven/versioning/StandardIncrementor.java b/src/main/java/tools/bestquality/maven/versioning/Incrementors.java similarity index 88% rename from src/main/java/tools/bestquality/maven/versioning/StandardIncrementor.java rename to src/main/java/tools/bestquality/maven/versioning/Incrementors.java index 565ce1b..5f07483 100644 --- a/src/main/java/tools/bestquality/maven/versioning/StandardIncrementor.java +++ b/src/main/java/tools/bestquality/maven/versioning/Incrementors.java @@ -3,7 +3,7 @@ import static java.lang.String.format; import static java.util.Arrays.stream; -public enum StandardIncrementor +public enum Incrementors implements Incrementor { MAJOR() { @Override @@ -47,12 +47,12 @@ public Version next(Version current) { public abstract Version next(Version current); - public static StandardIncrementor incrementor(String name) { + public static Incrementor incrementor(String name) { return stream(values()) .filter(item -> item.name().equalsIgnoreCase(name)) .findFirst() .orElseThrow(() -> new IllegalArgumentException( format("No enum constant in %s matching %s", - StandardIncrementor.class.getCanonicalName(), name))); + Incrementors.class.getCanonicalName(), name))); } } diff --git a/src/main/java/tools/bestquality/maven/versioning/Version.java b/src/main/java/tools/bestquality/maven/versioning/Version.java index 2e7be17..73fff87 100644 --- a/src/main/java/tools/bestquality/maven/versioning/Version.java +++ b/src/main/java/tools/bestquality/maven/versioning/Version.java @@ -10,7 +10,7 @@ import static java.util.Optional.of; import static java.util.Optional.ofNullable; import static java.util.regex.Pattern.compile; -import static org.codehaus.plexus.util.StringUtils.isNotEmpty; +import static tools.bestquality.util.Strings.isNotBlank; /** * A version class that parses versions according to the Maven Build Helper Plugin but @@ -205,7 +205,7 @@ private void parseBuildAndQualifier(String buildNumberPart) { qualifierString = matcher.group(9); } if (qualifierString != null) { - if (isNotEmpty(qualifierString)) { + if (isNotBlank(qualifierString)) { qualifier = of(qualifierString); if (!qualifierString.startsWith(".") && !qualifierString.startsWith("-")) { diff --git a/src/main/java/tools/bestquality/util/Strings.java b/src/main/java/tools/bestquality/util/Strings.java new file mode 100644 index 0000000..95d0938 --- /dev/null +++ b/src/main/java/tools/bestquality/util/Strings.java @@ -0,0 +1,18 @@ +package tools.bestquality.util; + +public class Strings { + + public static boolean isBlank(String value) { + return value == null || + value.trim().length() == 0; + } + + public static boolean isNotBlank(String value) { + return value != null && + value.trim().length() > 0; + } + + public static String trim(String value) { + return value != null ? value.trim() : null; + } +} diff --git a/src/test/groovy/tools/bestquality/maven/ci/CiMojoConfiguratorTest.groovy b/src/test/groovy/tools/bestquality/maven/ci/CiMojoConfiguratorTest.groovy new file mode 100644 index 0000000..691bfde --- /dev/null +++ b/src/test/groovy/tools/bestquality/maven/ci/CiMojoConfiguratorTest.groovy @@ -0,0 +1,23 @@ +package tools.bestquality.maven.ci + +import spock.lang.Specification +import tools.bestquality.maven.versioning.Incrementor +import tools.bestquality.maven.versioning.IncrementorConverter + +class CiMojoConfiguratorTest + extends Specification { + CiMojoConfigurator configurator + + def setup() { + configurator = new CiMojoConfigurator() + } + + def "should register converters"() { + when: + configurator.initialize() + + then: + configurator.converterLookup.lookupConverterForType(Incrementor.class) instanceof IncrementorConverter; + configurator.converterLookup.lookupConverterForType(CiVersionSource.class) instanceof CiVersionSourceConverter; + } +} diff --git a/src/test/groovy/tools/bestquality/maven/ci/CiVersionSourceConverterTest.groovy b/src/test/groovy/tools/bestquality/maven/ci/CiVersionSourceConverterTest.groovy new file mode 100644 index 0000000..74b11e1 --- /dev/null +++ b/src/test/groovy/tools/bestquality/maven/ci/CiVersionSourceConverterTest.groovy @@ -0,0 +1,50 @@ +package tools.bestquality.maven.ci + +import spock.lang.Specification +import spock.lang.Unroll + +import static tools.bestquality.maven.ci.CiVersionSources.MERGE_PROJECT_FIRST +import static tools.bestquality.maven.ci.CiVersionSources.MERGE_SYSTEM_FIRST +import static tools.bestquality.maven.ci.CiVersionSources.PROJECT +import static tools.bestquality.maven.ci.CiVersionSources.SYSTEM + +class CiVersionSourceConverterTest + extends Specification { + CiVersionSourceConverter converter + + def setup() { + converter = new CiVersionSourceConverter() + } + + @Unroll + def "can convert #type is #expected"() { + expect: + converter.canConvert(type) == expected + + where: + type | expected + CiVersionSource.class | true + String.class | false + } + + @Unroll + def "should convert #value to #expected"() { + expect: + converter.fromString(value) == expected + + where: + value | expected + "project" | PROJECT + "PROJECT" | PROJECT + "system" | SYSTEM + "SYSTEM" | SYSTEM + "MERGE_PROJECT_FIRST" | MERGE_PROJECT_FIRST + "MERGE-PROJECT-FIRST" | MERGE_PROJECT_FIRST + "merge_project_first" | MERGE_PROJECT_FIRST + "merge-project-first" | MERGE_PROJECT_FIRST + "MERGE_SYSTEM_FIRST" | MERGE_SYSTEM_FIRST + "MERGE-SYSTEM-FIRST" | MERGE_SYSTEM_FIRST + "merge_system_first" | MERGE_SYSTEM_FIRST + "merge-system-first" | MERGE_SYSTEM_FIRST + } +} diff --git a/src/test/groovy/tools/bestquality/maven/ci/CiVersionSourceTest.groovy b/src/test/groovy/tools/bestquality/maven/ci/CiVersionSourceTest.groovy index f5e518f..75d7e0c 100644 --- a/src/test/groovy/tools/bestquality/maven/ci/CiVersionSourceTest.groovy +++ b/src/test/groovy/tools/bestquality/maven/ci/CiVersionSourceTest.groovy @@ -5,11 +5,11 @@ import org.apache.maven.project.MavenProject import spock.lang.Specification import spock.lang.Unroll -import static tools.bestquality.maven.ci.CiVersionSource.MERGE_PROJECT_FIRST -import static tools.bestquality.maven.ci.CiVersionSource.MERGE_SYSTEM_FIRST -import static tools.bestquality.maven.ci.CiVersionSource.PROJECT -import static tools.bestquality.maven.ci.CiVersionSource.SYSTEM -import static tools.bestquality.maven.ci.CiVersionSource.source +import static tools.bestquality.maven.ci.CiVersionSources.MERGE_PROJECT_FIRST +import static tools.bestquality.maven.ci.CiVersionSources.MERGE_SYSTEM_FIRST +import static tools.bestquality.maven.ci.CiVersionSources.PROJECT +import static tools.bestquality.maven.ci.CiVersionSources.SYSTEM +import static tools.bestquality.maven.ci.CiVersionSources.source class CiVersionSourceTest extends Specification { @@ -41,7 +41,7 @@ class CiVersionSourceTest then: def thrown = thrown(IllegalArgumentException) - thrown.message == "No enum constant in tools.bestquality.maven.ci.CiVersionSource matching unknown" + thrown.message == "No enum constant in tools.bestquality.maven.ci.CiVersionSources matching unknown" } @Unroll @@ -62,7 +62,7 @@ class CiVersionSourceTest def properties = new Properties() properties.setProperty("revision", "2.22.2") properties.setProperty("sha1", "22") - properties.setProperty("changelist", ".RELEASE") + properties.setProperty("changelist", "-RELEASE") return properties } } @@ -76,8 +76,8 @@ class CiVersionSourceTest where: source | expected PROJECT | new CiVersion("1.11.1", null, "-SNAPSHOT") - SYSTEM | new CiVersion("2.22.2", "22", ".RELEASE") - MERGE_SYSTEM_FIRST | new CiVersion("2.22.2", "22", ".RELEASE") + SYSTEM | new CiVersion("2.22.2", "22", "-RELEASE") + MERGE_SYSTEM_FIRST | new CiVersion("2.22.2", "22", "-RELEASE") MERGE_PROJECT_FIRST | new CiVersion("1.11.1", "22", "-SNAPSHOT") } } diff --git a/src/test/groovy/tools/bestquality/maven/ci/CiVersionTest.groovy b/src/test/groovy/tools/bestquality/maven/ci/CiVersionTest.groovy index c18c185..1a49ede 100644 --- a/src/test/groovy/tools/bestquality/maven/ci/CiVersionTest.groovy +++ b/src/test/groovy/tools/bestquality/maven/ci/CiVersionTest.groovy @@ -7,11 +7,11 @@ import spock.lang.Unroll import tools.bestquality.maven.versioning.Incrementor import tools.bestquality.maven.versioning.Version -import static tools.bestquality.maven.versioning.StandardIncrementor.AUTO -import static tools.bestquality.maven.versioning.StandardIncrementor.BUILD -import static tools.bestquality.maven.versioning.StandardIncrementor.MAJOR -import static tools.bestquality.maven.versioning.StandardIncrementor.MINOR -import static tools.bestquality.maven.versioning.StandardIncrementor.PATCH +import static tools.bestquality.maven.versioning.Incrementors.AUTO +import static tools.bestquality.maven.versioning.Incrementors.BUILD +import static tools.bestquality.maven.versioning.Incrementors.MAJOR +import static tools.bestquality.maven.versioning.Incrementors.MINOR +import static tools.bestquality.maven.versioning.Incrementors.PATCH class CiVersionTest extends Specification { @@ -72,17 +72,38 @@ class CiVersionTest null | null | null | 29791 } + @Unroll + def "should raise exception when property is specified as boolean"() { + given: + def properties = new Properties() + properties.setProperty("revision", revision) + properties.setProperty("sha1", sha1) + properties.setProperty("changelist", changelist) + + when: + ciVersion.withMissingFrom(properties) + + then: + thrown(MojoFailureException) + + where: + revision | sha1 | changelist + "true" | "5" | "6" + "4" | "true" | "6" + "4" | "5" | "true" + } + @Unroll def "should supply missing component from properties"() { given: def properties = new Properties() - if (revision) { + if (revision != null) { properties.setProperty("revision", revision) } - if (sha1) { + if (sha1 != null) { properties.setProperty("sha1", sha1) } - if (changelist) { + if (changelist != null) { properties.setProperty("changelist", changelist) } @@ -101,6 +122,9 @@ class CiVersionTest new CiVersion("1", "2", null) | "4" | "5" | "6" | new CiVersion("1", "2", "6") new CiVersion(null, null, null) | "4" | "5" | "6" | new CiVersion("4", "5", "6") new CiVersion(null, null, null) | null | null | null | new CiVersion(null, null, null) + new CiVersion(null, null, null) | "" | "" | "" | new CiVersion("", "", "") + new CiVersion(null, null, null) | " " | " " | " " | new CiVersion("", "", "") + new CiVersion(null, null, null) | "\t" | "\t" | "\t" | new CiVersion("", "", "") } @Unroll @@ -117,13 +141,13 @@ class CiVersionTest actual == expected where: - template | revision | sha1 | changelist | expected - "\${revision}" | "2.2.2" | "2222" | "-SNAPSHOT" | "2.2.2" - "\${revision}" | "2.2.2" | null | null | "2.2.2" - "\${revision}" | "2.2.2" | "" | "" | "2.2.2" - "\${revision}" | null | null | null | "\${revision}" - "\${revision}.\${sha1}\${changelist}" | "2.2.2" | "2222" | "-SNAPSHOT" | "2.2.2.2222-SNAPSHOT" - "\${revision}.\${sha1}\${changelist}" | null | null | null | "\${revision}.\${sha1}\${changelist}" + template | revision | sha1 | changelist | expected + "\${revision}" | "2.2.2" | "-2222" | "-SNAPSHOT" | "2.2.2" + "\${revision}" | "2.2.2" | null | null | "2.2.2" + "\${revision}" | "2.2.2" | "" | "" | "2.2.2" + "\${revision}" | null | null | null | "\${revision}" + "\${revision}\${sha1}\${changelist}" | "2.2.2" | "-2222" | "-SNAPSHOT" | "2.2.2-2222-SNAPSHOT" + "\${revision}\${sha1}\${changelist}" | null | null | null | "\${revision}\${sha1}\${changelist}" } @Unroll @@ -146,47 +170,71 @@ class CiVersionTest actual == expected where: - content | revision | sha1 | changelist | expected - "123" | "2.2.2" | "2222" | "-SNAPSHOT" | "2.2.2" - "123" | "2.2.2" | "2222" | "-SNAPSHOT" | "2.2.2" - "" | "2.2.2" | "2222" | "-SNAPSHOT" | "2.2.2" - "" | "2.2.2" | "2222" | "-SNAPSHOT" | "2.2.2" - "123" | "2.2.2" | "2222" | "-SNAPSHOT" | "2222" - "123" | "2.2.2" | "2222" | "-SNAPSHOT" | "2222" - "" | "2.2.2" | "2222" | "-SNAPSHOT" | "2222" - "" | "2.2.2" | "2222" | "-SNAPSHOT" | "2222" - ".RELEASE" | "2.2.2" | "2222" | "-SNAPSHOT" | "-SNAPSHOT" - ".RELEASE" | "2.2.2" | "2222" | "-SNAPSHOT" | "-SNAPSHOT" - "" | "2.2.2" | "2222" | "-SNAPSHOT" | "-SNAPSHOT" - "" | "2.2.2" | "2222" | "-SNAPSHOT" | "-SNAPSHOT" - "" | null | "2222" | "-SNAPSHOT" | "" - "" | "" | "2222" | "-SNAPSHOT" | "" - "" | "2.2.2" | null | "-SNAPSHOT" | "" - "" | "2.2.2" | "" | "-SNAPSHOT" | "" - "" | "2.2.2" | "2222" | null | "" - "" | "2.2.2" | "2222" | "" | "" - "" | "2.2.2" | "2222" | "-SNAPSHOT" | "2222" + content | revision | sha1 | changelist | expected + "123" | "2.2.2" | "-2222" | "-SNAPSHOT" | "2.2.2" + "123" | "2.2.2" | "-2222" | "-SNAPSHOT" | "2.2.2" + "" | "2.2.2" | "-2222" | "-SNAPSHOT" | "2.2.2" + "" | "2.2.2" | "-2222" | "-SNAPSHOT" | "2.2.2" + "-123" | "2.2.2" | "-2222" | "-SNAPSHOT" | "-2222" + "-123" | "2.2.2" | "-2222" | "-SNAPSHOT" | "-2222" + "" | "2.2.2" | "-2222" | "-SNAPSHOT" | "-2222" + "" | "2.2.2" | "-2222" | "-SNAPSHOT" | "-2222" + "-RELEASE" | "2.2.2" | "-2222" | "-SNAPSHOT" | "-SNAPSHOT" + "-RELEASE" | "2.2.2" | "-2222" | "-SNAPSHOT" | "-SNAPSHOT" + "" | "2.2.2" | "-2222" | "-SNAPSHOT" | "-SNAPSHOT" + "" | "2.2.2" | "-2222" | "-SNAPSHOT" | "-SNAPSHOT" + "" | null | "-2222" | "-SNAPSHOT" | "" + "" | "" | "-2222" | "-SNAPSHOT" | "" + "" | "2.2.2" | null | "-SNAPSHOT" | "" + "" | "2.2.2" | "" | "-SNAPSHOT" | "" + "" | "2.2.2" | "-2222" | null | "" + "" | "2.2.2" | "-2222" | "" | "" + "" | "2.2.2" | "-2222" | "-SNAPSHOT" | "-2222" } @Unroll - def "should provide string representation when r: #revision and s: #sha1 and c: #changelist"() { + def "should provide externalized representation when r: #revision and s: #sha1 and c: #changelist"() { given: ciVersion.withRevision(revision as String) .withSha1(sha1 as String) .withChangelist(changelist as String) when: - def actual = ciVersion.toString() + def actual = ciVersion.toExternalForm() then: actual == expected where: revision | sha1 | changelist | expected - "2.2.2" | ".2222" | "-SNAPSHOT" | "2.2.2.2222-SNAPSHOT" - null | ".2222" | "-SNAPSHOT" | ".2222-SNAPSHOT" + "2.2.2" | "-2222" | "-SNAPSHOT" | "2.2.2-2222-SNAPSHOT" + null | "-2222" | "-SNAPSHOT" | "-2222-SNAPSHOT" "2.2.2" | null | "-SNAPSHOT" | "2.2.2-SNAPSHOT" - "2.2.2" | ".2222" | null | "2.2.2.2222" + "2.2.2" | "-2222" | null | "2.2.2-2222" + } + + @Unroll + def "should provide component representation when r: #revision and s: #sha1 and c: #changelist"() { + given: + ciVersion.withRevision(revision as String) + .withSha1(sha1 as String) + .withChangelist(changelist as String) + + when: + def actual = ciVersion.toComponentForm() + + then: + actual == expected + + where: + revision | sha1 | changelist | expected + "2.2.2" | "-2222" | "-SNAPSHOT" | "revision:2.2.2 sha1:-2222 changelist:-SNAPSHOT" + null | "-2222" | "-SNAPSHOT" | "sha1:-2222 changelist:-SNAPSHOT" + "" | "-2222" | "-SNAPSHOT" | "revision: sha1:-2222 changelist:-SNAPSHOT" + "2.2.2" | null | "-SNAPSHOT" | "revision:2.2.2 changelist:-SNAPSHOT" + "2.2.2" | "" | "-SNAPSHOT" | "revision:2.2.2 sha1: changelist:-SNAPSHOT" + "2.2.2" | "-2222" | null | "revision:2.2.2 sha1:-2222" + "2.2.2" | "-2222" | "" | "revision:2.2.2 sha1:-2222 changelist:" } def "should raise exception on error incrementing revision"() { @@ -229,14 +277,14 @@ class CiVersionTest where: incrementor | revision | sha1 | changelist | expected - MAJOR | "1.2.2" | ".2222" | "-SNAPSHOT" | "2.2.2.2222-SNAPSHOT" - MINOR | "2.1.2" | ".2222" | "-SNAPSHOT" | "2.2.2.2222-SNAPSHOT" - PATCH | "2.2.1" | ".2222" | "-SNAPSHOT" | "2.2.2.2222-SNAPSHOT" - BUILD | "2.2.2-1" | ".2222" | "-SNAPSHOT" | "2.2.2-2.2222-SNAPSHOT" - AUTO | "1" | ".2222" | "-SNAPSHOT" | "2.2222-SNAPSHOT" - AUTO | "2.1" | ".2222" | "-SNAPSHOT" | "2.2.2222-SNAPSHOT" - AUTO | "2.2.1" | ".2222" | "-SNAPSHOT" | "2.2.2.2222-SNAPSHOT" - AUTO | "2.2.2-1" | ".2222" | "-SNAPSHOT" | "2.2.2-2.2222-SNAPSHOT" + MAJOR | "1.2.2" | "-2222" | "-SNAPSHOT" | "2.2.2-2222-SNAPSHOT" + MINOR | "2.1.2" | "-2222" | "-SNAPSHOT" | "2.2.2-2222-SNAPSHOT" + PATCH | "2.2.1" | "-2222" | "-SNAPSHOT" | "2.2.2-2222-SNAPSHOT" + BUILD | "2.2.2-1" | "-2222" | "-SNAPSHOT" | "2.2.2-2-2222-SNAPSHOT" + AUTO | "1" | "-2222" | "-SNAPSHOT" | "2-2222-SNAPSHOT" + AUTO | "2.1" | "-2222" | "-SNAPSHOT" | "2.2-2222-SNAPSHOT" + AUTO | "2.2.1" | "-2222" | "-SNAPSHOT" | "2.2.2-2222-SNAPSHOT" + AUTO | "2.2.2-1" | "-2222" | "-SNAPSHOT" | "2.2.2-2-2222-SNAPSHOT" } @Unroll @@ -248,12 +296,17 @@ class CiVersionTest actual == expected where: - current | expected - new CiVersion("2.2.2", "22", "-SNAPSHOT") | new CiVersion("2.2.2", "22", null) - new CiVersion("2.2.2", "22", null) | new CiVersion("2.2.2", "22", null) - new CiVersion("2.2.2", "22", "") | new CiVersion("2.2.2", "22", "") - new CiVersion("2.2.2-SNAPSHOT", "22", null) | new CiVersion("2.2.2", "22", null) - new CiVersion("2.2.2-SNAPSHOT", "22", "") | new CiVersion("2.2.2", "22", "") + current | expected + new CiVersion("2.2.2", "-22", "-SNAPSHOT") | new CiVersion("2.2.2", "-22", null) + new CiVersion("2.2.2", null, "-SNAPSHOT") | new CiVersion("2.2.2", null, null) + new CiVersion("2.2.2", "-22", null) | new CiVersion("2.2.2", "-22", null) + new CiVersion("2.2.2", null, null) | new CiVersion("2.2.2", null, null) + new CiVersion("2.2.2", "-22", "") | new CiVersion("2.2.2", "-22", "") + new CiVersion("2.2.2", null, "") | new CiVersion("2.2.2", null, "") + new CiVersion("2.2.2-SNAPSHOT", "-22", null) | new CiVersion("2.2.2", "-22", null) + new CiVersion("2.2.2-SNAPSHOT", null, null) | new CiVersion("2.2.2", null, null) + new CiVersion("2.2.2-SNAPSHOT", "-22", "") | new CiVersion("2.2.2", "-22", "") + new CiVersion("2.2.2-SNAPSHOT", null, "") | new CiVersion("2.2.2", null, "") } @Unroll diff --git a/src/test/groovy/tools/bestquality/maven/ci/ExpandPomMojoTest.groovy b/src/test/groovy/tools/bestquality/maven/ci/ExpandPomMojoTest.groovy index e203382..566d5b9 100644 --- a/src/test/groovy/tools/bestquality/maven/ci/ExpandPomMojoTest.groovy +++ b/src/test/groovy/tools/bestquality/maven/ci/ExpandPomMojoTest.groovy @@ -4,11 +4,10 @@ import org.apache.maven.plugin.MojoExecutionException import tools.bestquality.io.Content import tools.bestquality.maven.test.MojoSpecification -import java.nio.charset.StandardCharsets - import static java.lang.String.format import static java.nio.charset.StandardCharsets.UTF_8 import static java.nio.file.Files.list +import static tools.bestquality.maven.ci.CiVersionSources.MERGE_SYSTEM_FIRST class ExpandPomMojoTest extends MojoSpecification { @@ -20,6 +19,7 @@ class ExpandPomMojoTest mojo = new ExpandPomMojo(contentSpy) .withProject(projectMock) .withSession(sessionMock) + .withSource(MERGE_SYSTEM_FIRST) .withOutputDirectory(outputPath.toFile()) .withCiPomFilename("pom-ci.xml") mojo.setLog(logMock) @@ -46,7 +46,7 @@ class ExpandPomMojoTest and: "the ci properties are available as system properties" systemProperties.setProperty("revision", "2.2.2") systemProperties.setProperty("sha1", "22") - systemProperties.setProperty("changelist", ".RELEASE") + systemProperties.setProperty("changelist", "-RELEASE") and: "an error to be thrown while reading the pom file" def error = new IOException("nope") @@ -75,19 +75,23 @@ class ExpandPomMojoTest and: "the ci properties are available as system properties" systemProperties.setProperty("revision", "2.2.2") - systemProperties.setProperty("sha1", "22") - systemProperties.setProperty("changelist", ".RELEASE") + systemProperties.setProperty("sha1", "-22") + systemProperties.setProperty("changelist", "-RELEASE") - and: "an error to be thrown" + and: "an error to throw" def error = new RuntimeException("nope") + def versionSpy = Spy(new CiVersion(null, null, null)) + versionSpy.expand(_) >> { throw error } + mojo.withSource(Mock(CiVersionSource) { + from(_, _) >> { + return versionSpy; + } + }) when: "the mojo is executed" mojo.execute() - then: "the error is thrown when accessing the revision" - sessionMock.getSystemProperties() >> { throw error } - - and: "an error message is logged" + then: "an error message is logged" 1 * logMock.error("Failure expanding template POM file", error) _ * logMock._ @@ -108,7 +112,7 @@ class ExpandPomMojoTest and: "the ci properties are available as system properties" systemProperties.setProperty("revision", "2.2.2") systemProperties.setProperty("sha1", "22") - systemProperties.setProperty("changelist", ".RELEASE") + systemProperties.setProperty("changelist", "-RELEASE") and: "an error thrown when writing the ci pom file" def ciPomPath = mojo.ciPomPath() @@ -139,7 +143,7 @@ class ExpandPomMojoTest and: "the ci properties are available as system properties" systemProperties.setProperty("revision", "2.2.2") systemProperties.setProperty("sha1", "22") - systemProperties.setProperty("changelist", ".RELEASE") + systemProperties.setProperty("changelist", "-RELEASE") and: "the ci properties are available as project properties" projectProperties.setProperty("revision", "1.1.1") @@ -151,12 +155,12 @@ class ExpandPomMojoTest then: "a maven consumable POM is expanded with the specified version" def expanded = parser.parse(mojo.ciPomPath().toFile()) - expanded.version.text() == "2.2.2.22.RELEASE" + expanded.version.text() == "2.2.2.22-RELEASE" and: "the ci properties in the pom file are updated" expanded.properties.revision.text() == "2.2.2" expanded.properties.sha1.text() == "22" - expanded.properties.changelist.text() == ".RELEASE" + expanded.properties.changelist.text() == "-RELEASE" and: "the expanded POM is set as the project POM file" 1 * projectMock.setPomFile(mojo.ciPomPath().toFile()) diff --git a/src/test/groovy/tools/bestquality/maven/ci/ExportVersionMojoTest.groovy b/src/test/groovy/tools/bestquality/maven/ci/ExportVersionMojoTest.groovy index dc0c31c..1e7fd2f 100644 --- a/src/test/groovy/tools/bestquality/maven/ci/ExportVersionMojoTest.groovy +++ b/src/test/groovy/tools/bestquality/maven/ci/ExportVersionMojoTest.groovy @@ -9,6 +9,7 @@ import static java.nio.charset.StandardCharsets.US_ASCII import static java.nio.file.Files.exists import static java.nio.file.Files.list import static java.nio.file.Files.readAllBytes +import static tools.bestquality.maven.ci.CiVersionSources.MERGE_SYSTEM_FIRST class ExportVersionMojoTest extends MojoSpecification { @@ -25,7 +26,7 @@ class ExportVersionMojoTest mojo.setLog(logMock) mojo.withProject(projectMock) .withSession(sessionMock) - .withSource("merge-system-first") + .withSource(MERGE_SYSTEM_FIRST) .withOutputDirectory(outputPath.toFile()) } diff --git a/src/test/groovy/tools/bestquality/maven/ci/IncrementPomMojoTest.groovy b/src/test/groovy/tools/bestquality/maven/ci/IncrementPomMojoTest.groovy index 3ec8e85..3ec5550 100644 --- a/src/test/groovy/tools/bestquality/maven/ci/IncrementPomMojoTest.groovy +++ b/src/test/groovy/tools/bestquality/maven/ci/IncrementPomMojoTest.groovy @@ -10,6 +10,12 @@ import static java.lang.String.format import static java.nio.charset.StandardCharsets.UTF_8 import static java.nio.file.Files.exists import static java.nio.file.Files.readAllBytes +import static tools.bestquality.maven.ci.CiVersionSources.MERGE_SYSTEM_FIRST +import static tools.bestquality.maven.versioning.Incrementors.AUTO +import static tools.bestquality.maven.versioning.Incrementors.BUILD +import static tools.bestquality.maven.versioning.Incrementors.MAJOR +import static tools.bestquality.maven.versioning.Incrementors.MINOR +import static tools.bestquality.maven.versioning.Incrementors.PATCH class IncrementPomMojoTest extends MojoSpecification { @@ -22,8 +28,8 @@ class IncrementPomMojoTest mojo = new IncrementPomMojo(contentSpy) .withProject(projectMock) .withSession(sessionMock) - .withSource("merge-system-first") - .withIncrementor("auto") + .withSource(MERGE_SYSTEM_FIRST) + .withIncrementor(AUTO) .withOutputDirectory(outputPath.toFile()) .withFilename("next-revision.txt") mojo.setLog(logMock) @@ -50,11 +56,11 @@ class IncrementPomMojoTest where: incrementor | expected - "auto" | new CiVersion("2.2.2-3", ".22", "-SNAPSHOT") - "build" | new CiVersion("2.2.2-3", ".22", "-SNAPSHOT") - "patch" | new CiVersion("2.2.3-2", ".22", "-SNAPSHOT") - "minor" | new CiVersion("2.3.2-2", ".22", "-SNAPSHOT") - "major" | new CiVersion("3.2.2-2", ".22", "-SNAPSHOT") + AUTO | new CiVersion("2.2.2-3", ".22", "-SNAPSHOT") + BUILD | new CiVersion("2.2.2-3", ".22", "-SNAPSHOT") + PATCH | new CiVersion("2.2.3-2", ".22", "-SNAPSHOT") + MINOR | new CiVersion("2.3.2-2", ".22", "-SNAPSHOT") + MAJOR | new CiVersion("3.2.2-2", ".22", "-SNAPSHOT") } def "should raise exception on error reading project pom"() { diff --git a/src/test/groovy/tools/bestquality/maven/ci/ReleaseVersionMojoTest.groovy b/src/test/groovy/tools/bestquality/maven/ci/ReleaseVersionMojoTest.groovy index 49bb2b2..84f7106 100644 --- a/src/test/groovy/tools/bestquality/maven/ci/ReleaseVersionMojoTest.groovy +++ b/src/test/groovy/tools/bestquality/maven/ci/ReleaseVersionMojoTest.groovy @@ -2,6 +2,8 @@ package tools.bestquality.maven.ci import tools.bestquality.maven.test.MojoSpecification +import static tools.bestquality.maven.ci.CiVersionSources.MERGE_SYSTEM_FIRST + class ReleaseVersionMojoTest extends MojoSpecification { ReleaseVersionMojo mojo @@ -10,7 +12,7 @@ class ReleaseVersionMojoTest mojo = new ReleaseVersionMojo() .withProject(projectMock) .withSession(sessionMock) - .withSource("merge-system-first") + .withSource(MERGE_SYSTEM_FIRST) .withOutputDirectory(outputPath.toFile()) .withFilename("release-version.txt") mojo.setLog(logMock) diff --git a/src/test/groovy/tools/bestquality/maven/versioning/IncrementorConverterTest.groovy b/src/test/groovy/tools/bestquality/maven/versioning/IncrementorConverterTest.groovy new file mode 100644 index 0000000..020089e --- /dev/null +++ b/src/test/groovy/tools/bestquality/maven/versioning/IncrementorConverterTest.groovy @@ -0,0 +1,49 @@ +package tools.bestquality.maven.versioning + +import spock.lang.Specification +import spock.lang.Unroll + +import static tools.bestquality.maven.versioning.Incrementors.AUTO +import static tools.bestquality.maven.versioning.Incrementors.BUILD +import static tools.bestquality.maven.versioning.Incrementors.MAJOR +import static tools.bestquality.maven.versioning.Incrementors.MINOR +import static tools.bestquality.maven.versioning.Incrementors.PATCH + +class IncrementorConverterTest + extends Specification { + IncrementorConverter converter + + def setup() { + converter = new IncrementorConverter() + } + + @Unroll + def "can convert #type is #expected"() { + expect: + converter.canConvert(type) == expected + + where: + type | expected + Incrementor.class | true + String.class | false + } + + @Unroll + def "should convert #value to #expected"() { + expect: + converter.fromString(value) == expected + + where: + value | expected + "major" | MAJOR + "MAJOR" | MAJOR + "minor" | MINOR + "MINOR" | MINOR + "patch" | PATCH + "PATCH" | PATCH + "build" | BUILD + "BUILD" | BUILD + "auto" | AUTO + "AUTO" | AUTO + } +} diff --git a/src/test/groovy/tools/bestquality/maven/versioning/StandardIncrementorTest.groovy b/src/test/groovy/tools/bestquality/maven/versioning/IncrementorsTest.groovy similarity index 83% rename from src/test/groovy/tools/bestquality/maven/versioning/StandardIncrementorTest.groovy rename to src/test/groovy/tools/bestquality/maven/versioning/IncrementorsTest.groovy index d7e0d0d..6020218 100644 --- a/src/test/groovy/tools/bestquality/maven/versioning/StandardIncrementorTest.groovy +++ b/src/test/groovy/tools/bestquality/maven/versioning/IncrementorsTest.groovy @@ -4,15 +4,15 @@ package tools.bestquality.maven.versioning import spock.lang.Specification import spock.lang.Unroll -import static StandardIncrementor.AUTO -import static StandardIncrementor.BUILD -import static StandardIncrementor.MAJOR -import static StandardIncrementor.MINOR -import static StandardIncrementor.PATCH -import static StandardIncrementor.incrementor +import static Incrementors.AUTO +import static Incrementors.BUILD +import static Incrementors.MAJOR +import static Incrementors.MINOR +import static Incrementors.PATCH +import static Incrementors.incrementor import static tools.bestquality.maven.versioning.Version.parseVersion -class StandardIncrementorTest +class IncrementorsTest extends Specification { @Unroll @@ -40,7 +40,7 @@ class StandardIncrementorTest then: def thrown = thrown(IllegalArgumentException) - thrown.message == "No enum constant in tools.bestquality.maven.versioning.StandardIncrementor matching unknown" + thrown.message == "No enum constant in tools.bestquality.maven.versioning.Incrementors matching unknown" } @Unroll diff --git a/src/test/groovy/tools/bestquality/util/StringsTest.groovy b/src/test/groovy/tools/bestquality/util/StringsTest.groovy new file mode 100644 index 0000000..0b46594 --- /dev/null +++ b/src/test/groovy/tools/bestquality/util/StringsTest.groovy @@ -0,0 +1,57 @@ +package tools.bestquality.util + +import spock.lang.Specification +import spock.lang.Unroll + +import static tools.bestquality.util.Strings.isBlank +import static tools.bestquality.util.Strings.isNotBlank +import static tools.bestquality.util.Strings.trim + +class StringsTest + extends Specification { + + @Unroll + def "should indicate blank is #expected when value is #value"() { + expect: + isBlank(value) == expected + + where: + value | expected + null | true + "" | true + "\t" | true + " " | true + "bob" | false + " bob " | false + } + + @Unroll + def "should indicate not blank is #expected when value is #value"() { + expect: + isNotBlank(value) == expected + + where: + value | expected + null | false + "" | false + "\t" | false + " " | false + "bob" | true + " bob " | true + } + + @Unroll + def "should trim to #expected when value is #value"() { + expect: + trim(value) == expected + + where: + value | expected + null | null + "" | "" + "\t" | "" + " " | "" + "bob" | "bob" + " bob " | "bob" + } +} diff --git a/src/test/java/tools/bestquality/maven/ci/ExpandPomMojoIT.java b/src/test/java/tools/bestquality/maven/ci/ExpandPomMojoIT.java index 128a5fb..22fde52 100644 --- a/src/test/java/tools/bestquality/maven/ci/ExpandPomMojoIT.java +++ b/src/test/java/tools/bestquality/maven/ci/ExpandPomMojoIT.java @@ -39,16 +39,16 @@ void revision_system_property(MavenExecutionResult execution) { .artifactIsCorrectlyVersioned(); } -// @MavenTest -// @SystemProperty(value = "changelist") -// void changelist_system_property(MavenExecutionResult execution) { -// assertThat(execution) -// .projectWasGenerated("2.22.2") -// .revisionIsEqualTo("2.22.2") -// .sha1IsEmpty() -// .changelistIsEmpty() -// .artifactIsCorrectlyVersioned(); -// } + @MavenTest + @SystemProperty(value = "changelist", content = "-RELEASE") + void changelist_system_property(MavenExecutionResult execution) { + assertThat(execution) + .projectWasGenerated("2.22.2-RELEASE") + .revisionIsEqualTo("2.22.2") + .sha1IsEmpty() + .changelistIsEqualTo("-RELEASE") + .artifactIsCorrectlyVersioned(); + } } @Nested @@ -76,16 +76,16 @@ void revision_system_property(MavenExecutionResult execution) { .artifactIsCorrectlyVersioned(); } -// @MavenTest -// @SystemProperty(value = "changelist") -// void changelist_system_property(MavenExecutionResult execution) { -// assertThat(execution) -// .projectWasGenerated("2.22.2-SNAPSHOT") -// .revisionIsEqualTo("2.22.2-SNAPSHOT") -// .sha1IsNotPresent() -// .changelistIsNotPresent() -// .artifactIsCorrectlyVersioned(); -// } + @MavenTest + @SystemProperty(value = "changelist", content = "-RELEASE") + void changelist_system_property(MavenExecutionResult execution) { + assertThat(execution) + .projectWasGenerated("2.22.2-SNAPSHOT") + .revisionIsEqualTo("2.22.2-SNAPSHOT") + .sha1IsNotPresent() + .changelistIsNotPresent() + .artifactIsCorrectlyVersioned(); + } } @Nested @@ -120,6 +120,21 @@ void revision_system_property(MavenExecutionResult execution) { .changelistIsNotPresent() .artifactIsCorrectlyVersioned(); } + + @MavenTest + @SystemProperty(value = "changelist", content = "-RELEASE") + void changelist_system_property(MavenExecutionResult execution) { + assertThat(execution) + .projectWasGenerated("2.22.2-RELEASE") + .revisionIsEqualTo("2.22.2") + .sha1IsEmpty() + .changelistIsEqualTo("-RELEASE") + .moduleWasGenerated("child", "2.22.2-RELEASE") + .revisionIsNotPresent() + .sha1IsNotPresent() + .changelistIsNotPresent() + .artifactIsCorrectlyVersioned(); + } } @Nested @@ -154,5 +169,20 @@ void revision_system_property(MavenExecutionResult execution) { .changelistIsNotPresent() .artifactIsCorrectlyVersioned(); } + + @MavenTest + @SystemProperty(value = "changelist", content = "-RELEASE") + void changelist_system_property(MavenExecutionResult execution) { + assertThat(execution) + .projectWasGenerated("2.22.2-SNAPSHOT") + .revisionIsEqualTo("2.22.2-SNAPSHOT") + .sha1IsNotPresent() + .changelistIsNotPresent() + .moduleWasGenerated("child", "2.22.2-SNAPSHOT") + .revisionIsNotPresent() + .sha1IsNotPresent() + .changelistIsNotPresent() + .artifactIsCorrectlyVersioned(); + } } }