Skip to content

Commit

Permalink
[MENFORCER-440] Allow 8 as JDK version for requireJavaVersion
Browse files Browse the repository at this point in the history
  • Loading branch information
slawekjaranowski committed Dec 19, 2022
1 parent 607622c commit 8e64c8e
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 7 deletions.
5 changes: 5 additions & 0 deletions enforcer-rules/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,11 @@
<version>2.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ public final String getVersion() {
*
* @param theVersion the required version to set
*/
public final void setVersion(String theVersion) {
public void setVersion(String theVersion) {
this.version = theVersion;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.SystemUtils;
import org.apache.maven.artifact.versioning.ArtifactVersion;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
Expand All @@ -35,6 +37,28 @@
* @author <a href="mailto:[email protected]">Brian Fox</a>
*/
public class RequireJavaVersion extends AbstractVersionEnforcer {

private static final Pattern JDK8_VERSION_PATTERN = Pattern.compile("([\\[(,]?)(1\\.8|8)([]),]?)");

@Override
public void setVersion(String theVersion) {

if ("8".equals(theVersion)) {
super.setVersion("1.8");
return;
}

Matcher matcher = JDK8_VERSION_PATTERN.matcher(theVersion);

StringBuffer result = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(result, "$11.8$3");
}
matcher.appendTail(result);

super.setVersion(result.toString());
}

@Override
public void execute(EnforcerRuleHelper helper) throws EnforcerRuleException {
String javaVersion = SystemUtils.JAVA_VERSION;
Expand Down
2 changes: 2 additions & 0 deletions enforcer-rules/src/site/apt/requireJavaVersion.apt.vm
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ Require Java Version
* message - an optional message to the user if the rule fails.

* {{{../apidocs/org/apache/maven/plugins/enforcer/AbstractVersionEnforcer.html#version}version}} - {{{./versionRanges.html}range}} of allowed JDKs.

For JDK 1.8 you can also use simple <<<8>>> as <version> - it will be internally changed to <<<1.8>>>

[]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,24 +21,28 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;

import java.util.stream.Stream;
import org.apache.commons.lang3.SystemUtils;
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

/**
* The Class TestRequireJavaVersion.
*
* @author <a href="mailto:[email protected]">Brian Fox</a>
*/
public class TestRequireJavaVersion {
class TestRequireJavaVersion {

/**
* Test fix jdk version.
*/
@Test
public void testFixJDKVersion() {
void testFixJDKVersion() {
// test that we only take the first 3 versions for
// comparison
assertThat(RequireJavaVersion.normalizeJDKVersion("1.5.0_11")).isEqualTo("1.5.0-11");
Expand Down Expand Up @@ -69,7 +73,7 @@ public void testFixJDKVersion() {
* @throws EnforcerRuleException the enforcer rule exception
*/
@Test
public void settingsTheJavaVersionAsNormalizedVersionShouldNotFail() throws EnforcerRuleException {
void settingsTheJavaVersionAsNormalizedVersionShouldNotFail() throws EnforcerRuleException {
String normalizedJDKVersion = RequireJavaVersion.normalizeJDKVersion(SystemUtils.JAVA_VERSION);

RequireJavaVersion rule = new RequireJavaVersion();
Expand All @@ -83,7 +87,7 @@ public void settingsTheJavaVersionAsNormalizedVersionShouldNotFail() throws Enfo
}

@Test
public void excludingTheCurrentJavaVersionViaRangeThisShouldFailWithException() {
void excludingTheCurrentJavaVersionViaRangeThisShouldFailWithException() {
assertThrows(EnforcerRuleException.class, () -> {
String thisVersion = RequireJavaVersion.normalizeJDKVersion(SystemUtils.JAVA_VERSION);

Expand All @@ -101,7 +105,7 @@ public void excludingTheCurrentJavaVersionViaRangeThisShouldFailWithException()
@Test
@Disabled
// TODO: Think about the intention of this test? What should it prove?
public void thisShouldNotCrash() throws EnforcerRuleException {
void thisShouldNotCrash() throws EnforcerRuleException {
RequireJavaVersion rule = new RequireJavaVersion();
rule.setVersion(SystemUtils.JAVA_VERSION);

Expand All @@ -114,8 +118,30 @@ public void thisShouldNotCrash() throws EnforcerRuleException {
* Test id.
*/
@Test
public void testId() {
void testId() {
RequireJavaVersion rule = new RequireJavaVersion();
assertThat(rule.getCacheId()).isEqualTo("0");
}

static Stream<Arguments> fixJava8ShortVersion() {
return Stream.of(
Arguments.of("1.8", "1.8"),
Arguments.of("8", "1.8"),
Arguments.of("8,)", "1.8,)"),
Arguments.of("[8,)", "[1.8,)"),
Arguments.of("(1.7,8]", "(1.7,1.8]"),
Arguments.of("[1.8,)", "[1.8,)"),
Arguments.of("(1.8,8]", "(1.8,1.8]"),
Arguments.of("(8,)", "(1.8,)"),
Arguments.of("[8]", "[1.8]"),
Arguments.of("(9,11],[8]", "(9,11],[1.8]"));
}

@ParameterizedTest
@MethodSource
void fixJava8ShortVersion(String input, String expected) {
RequireJavaVersion requireJavaVersion = new RequireJavaVersion();
requireJavaVersion.setVersion(input);
assertThat(requireJavaVersion.getVersion()).isEqualTo(expected);
}
}

0 comments on commit 8e64c8e

Please sign in to comment.