This is an automated email from the ASF dual-hosted git repository. sjaranowski pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven-enforcer.git
The following commit(s) were added to refs/heads/master by this push: new 5e7c61e [MENFORCER-458] Move Require Property,Environment to new API 5e7c61e is described below commit 5e7c61eca1590ae9ab005f087ab46dbb734175c7 Author: Slawomir Jaranowski <s.jaranow...@gmail.com> AuthorDate: Thu Jan 12 20:18:12 2023 +0100 [MENFORCER-458] Move Require Property,Environment to new API --- .../property}/AbstractPropertyEnforcerRule.java | 17 +++---- .../property}/RequireEnvironmentVariable.java | 39 +++++++-------- .../rules/property}/RequireProperty.java | 42 ++++++++++------ .../src/site/apt/requireEnvironmentVariable.apt.vm | 19 +++++--- enforcer-rules/src/site/apt/requireProperty.apt.vm | 8 ++-- .../property}/TestRequireEnvironmentVariable.java | 32 ++++++------- .../rules/property}/TestRequireProperty.java | 48 +++++++++++-------- .../projects/require-environment-variable/pom.xml | 56 ++++++++++++++++++++++ .../require-environment-variable/verify.groovy | 21 ++++++++ .../src/it/projects/require-property/verify.groovy | 20 ++++++++ 10 files changed, 207 insertions(+), 95 deletions(-) diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractPropertyEnforcerRule.java b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/property/AbstractPropertyEnforcerRule.java similarity index 87% rename from enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractPropertyEnforcerRule.java rename to enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/property/AbstractPropertyEnforcerRule.java index 1072ddd..4fd10dd 100755 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractPropertyEnforcerRule.java +++ b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/property/AbstractPropertyEnforcerRule.java @@ -16,10 +16,10 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.maven.plugins.enforcer; +package org.apache.maven.enforcer.rules.property; import org.apache.maven.enforcer.rule.api.EnforcerRuleException; -import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; +import org.apache.maven.enforcer.rules.AbstractStandardEnforcerRule; /** * Abstract enforcer rule that give a foundation to validate properties from multiple sources. @@ -27,7 +27,7 @@ import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; * @author Paul Gier * @author <a href='mailto:marvin[at]marvinformatics[dot]com'>Marvin Froeder</a> */ -public abstract class AbstractPropertyEnforcerRule extends AbstractNonCacheableEnforcerRule { +abstract class AbstractPropertyEnforcerRule extends AbstractStandardEnforcerRule { /** * Match the property value to a given regular expression. Defaults to <code>null</code> (any value is ok). @@ -45,10 +45,6 @@ public abstract class AbstractPropertyEnforcerRule extends AbstractNonCacheableE */ private String regexMessage = null; - public AbstractPropertyEnforcerRule() { - super(); - } - /** * Set the property value to a given regular expression. Defaults to <code>null</code> (any value is ok). * @@ -86,8 +82,8 @@ public abstract class AbstractPropertyEnforcerRule extends AbstractNonCacheableE } @Override - public void execute(EnforcerRuleHelper helper) throws EnforcerRuleException { - Object propValue = resolveValue(helper); + public void execute() throws EnforcerRuleException { + Object propValue = resolveValue(); // Check that the property is not null or empty string if (propValue == null) { @@ -123,8 +119,7 @@ public abstract class AbstractPropertyEnforcerRule extends AbstractNonCacheableE /** * Resolves the property value * - * @param helper * @throws EnforcerRuleException */ - protected abstract Object resolveValue(EnforcerRuleHelper helper) throws EnforcerRuleException; + protected abstract Object resolveValue() throws EnforcerRuleException; } diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireEnvironmentVariable.java b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/property/RequireEnvironmentVariable.java similarity index 64% rename from enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireEnvironmentVariable.java rename to enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/property/RequireEnvironmentVariable.java index 4ad9380..14c8389 100755 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireEnvironmentVariable.java +++ b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/property/RequireEnvironmentVariable.java @@ -16,17 +16,17 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.maven.plugins.enforcer; +package org.apache.maven.enforcer.rules.property; -import org.apache.maven.enforcer.rule.api.EnforcerRule; -import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; +import javax.inject.Named; /** * This rule checks that certain environment variable is set. * * @author <a href='mailto:marvin[at]marvinformatics[dot]com'>Marvin Froeder</a> */ -public class RequireEnvironmentVariable extends AbstractPropertyEnforcerRule { +@Named("requireEnvironmentVariable") +public final class RequireEnvironmentVariable extends AbstractPropertyEnforcerRule { /** * Specify the required variable. @@ -39,36 +39,22 @@ public class RequireEnvironmentVariable extends AbstractPropertyEnforcerRule { * @see #setVariableName(String) * @see #getVariableName() */ - public final void setVariableName(String variableName) { + public void setVariableName(String variableName) { this.variableName = variableName; } - public final String getVariableName() { + public String getVariableName() { return variableName; } @Override - public String resolveValue(EnforcerRuleHelper helper) { - String envValue = System.getenv(variableName); - return envValue; - } - - @Override - public boolean isCacheable() { - // environment variables won't change while maven is on the run - return true; - } - - @Override - public boolean isResultValid(EnforcerRule cachedRule) { - // this rule shall always have the same result, since environment - // variables are set before maven is launched - return true; + public String resolveValue() { + return System.getenv(variableName); } @Override public String getCacheId() { - return variableName; + return String.valueOf(toString().hashCode()); } @Override @@ -80,4 +66,11 @@ public class RequireEnvironmentVariable extends AbstractPropertyEnforcerRule { public String getName() { return "Environment variable"; } + + @Override + public String toString() { + return String.format( + "RequireEnvironmentVariable[variableName=%s, message=%s, regex=%s, regexMessage=%s]", + variableName, getMessage(), getRegex(), getRegexMessage()); + } } diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireProperty.java b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/property/RequireProperty.java similarity index 59% rename from enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireProperty.java rename to enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/property/RequireProperty.java index e465262..cdfe411 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireProperty.java +++ b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/property/RequireProperty.java @@ -16,10 +16,15 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.maven.plugins.enforcer; +package org.apache.maven.enforcer.rules.property; + +import javax.inject.Inject; +import javax.inject.Named; + +import java.util.Objects; import org.apache.maven.enforcer.rule.api.EnforcerRuleException; -import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; +import org.apache.maven.enforcer.rules.utils.ExpressionEvaluator; import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; /** @@ -27,7 +32,8 @@ import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluatio * * @author Paul Gier */ -public class RequireProperty extends AbstractPropertyEnforcerRule { +@Named("requireProperty") +public final class RequireProperty extends AbstractPropertyEnforcerRule { /** * Specify the required property. @@ -37,23 +43,24 @@ public class RequireProperty extends AbstractPropertyEnforcerRule { */ private String property = null; - public final void setProperty(String property) { + private final ExpressionEvaluator evaluator; + + @Inject + public RequireProperty(ExpressionEvaluator evaluator) { + this.evaluator = Objects.requireNonNull(evaluator); + } + + public void setProperty(String property) { this.property = property; } @Override - public Object resolveValue(EnforcerRuleHelper helper) throws EnforcerRuleException { - Object propValue = null; + public Object resolveValue() throws EnforcerRuleException { try { - propValue = helper.evaluate("${" + property + "}"); - } catch (ExpressionEvaluationException eee) { - throw new EnforcerRuleException("Unable to evaluate property: " + property, eee); + return evaluator.evaluate("${" + property + "}"); + } catch (ExpressionEvaluationException e) { + throw new EnforcerRuleException(e); } - return propValue; - } - - protected String resolveValue() { - return null; } @Override @@ -65,4 +72,11 @@ public class RequireProperty extends AbstractPropertyEnforcerRule { public String getName() { return "Property"; } + + @Override + public String toString() { + return String.format( + "RequireProperty[property=%s, message=%s, regex=%s, regexMessage=%s]", + property, getMessage(), getRegex(), getRegexMessage()); + } } diff --git a/enforcer-rules/src/site/apt/requireEnvironmentVariable.apt.vm b/enforcer-rules/src/site/apt/requireEnvironmentVariable.apt.vm index 1ec072a..79e63b4 100644 --- a/enforcer-rules/src/site/apt/requireEnvironmentVariable.apt.vm +++ b/enforcer-rules/src/site/apt/requireEnvironmentVariable.apt.vm @@ -27,16 +27,21 @@ Require Environment Variable This rule checks that a specified environment variable is set. - - The following parameters are supported by this rule: - - * message - an optional message to the user if the rule fails. + The following parameters are supported by this rule: - * variableName - The name of the environment variable to be checked for. + * <<message>> - an optional message to the user if the rule fails. - [] + * <<variableName>> - The name of the environment variable to be checked for. + + * <<regex>> - an optional regular expression used to check the value of the property. + + * <<regexMessage>> - an optional message to the user if the regex check fails. + + [] + + The regex is applied to the entire value of the environment variable (i.e. using the regex "match" method), + and not just a substring of the environment variable value. - Sample Plugin Configuration: +---+ diff --git a/enforcer-rules/src/site/apt/requireProperty.apt.vm b/enforcer-rules/src/site/apt/requireProperty.apt.vm index 0023056..9939395 100644 --- a/enforcer-rules/src/site/apt/requireProperty.apt.vm +++ b/enforcer-rules/src/site/apt/requireProperty.apt.vm @@ -29,13 +29,13 @@ Require Property The following parameters are supported by this rule: - * property - the property to evaluate. + * <<property>> - the property to evaluate. - * message - an optional message to the user if the rule fails. Default is: "Property 'xxx' is required for this build". + * <<message>> - an optional message to the user if the rule fails. Default is: "Property 'xxx' is required for this build". - * regex - a regular expression used to check the value of the property. + * <<regex>> - an optional regular expression used to check the value of the property. - * regexMessage - an optional message to the user if the regex check fails. + * <<regexMessage>> - an optional message to the user if the regex check fails. [] diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireEnvironmentVariable.java b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/property/TestRequireEnvironmentVariable.java similarity index 74% rename from enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireEnvironmentVariable.java rename to enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/property/TestRequireEnvironmentVariable.java index a962392..9e97fd4 100755 --- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireEnvironmentVariable.java +++ b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/property/TestRequireEnvironmentVariable.java @@ -16,10 +16,10 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.maven.plugins.enforcer; +package org.apache.maven.enforcer.rules.property; import org.apache.maven.enforcer.rule.api.EnforcerRuleException; -import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.fail; @@ -29,24 +29,20 @@ import static org.junit.jupiter.api.Assertions.fail; * * @author <a href='mailto:marvin[at]marvinformatics[dot]com'>Marvin Froeder</a> */ -public class TestRequireEnvironmentVariable { +class TestRequireEnvironmentVariable { + private RequireEnvironmentVariable rule = new RequireEnvironmentVariable(); /** * Test rule. * */ @Test - public void testRule() { - MockProject project = new MockProject(); - project.setProperty("testProp", "This is a test."); - EnforcerRuleHelper helper = EnforcerTestUtils.getHelper(project); - - RequireEnvironmentVariable rule = new RequireEnvironmentVariable(); + void testRule() { // this env variable should not be set rule.setVariableName("JUNK"); try { - rule.execute(helper); + rule.execute(); fail("Expected an exception."); } catch (EnforcerRuleException e) { // expected to catch this. @@ -55,7 +51,7 @@ public class TestRequireEnvironmentVariable { // PATH shall be common to windows and linux rule.setVariableName("PATH"); try { - rule.execute(helper); + rule.execute(); } catch (EnforcerRuleException e) { fail("This should not throw an exception"); } @@ -66,17 +62,15 @@ public class TestRequireEnvironmentVariable { * */ @Test - public void testRuleWithRegex() { - EnforcerRuleHelper helper = EnforcerTestUtils.getHelper(); + void testRuleWithRegex() { - RequireEnvironmentVariable rule = new RequireEnvironmentVariable(); rule.setVariableName("PATH"); // This expression should not match the property // value rule.setRegex("[^abc]"); try { - rule.execute(helper); + rule.execute(); fail("Expected an exception."); } catch (EnforcerRuleException e) { // expected to catch this. @@ -85,9 +79,15 @@ public class TestRequireEnvironmentVariable { // can't really predict what a PATH will looks like, just enforce it ain't empty rule.setRegex(".{1,}"); try { - rule.execute(helper); + rule.execute(); } catch (EnforcerRuleException e) { fail("This should not throw an exception"); } } + + @Test + void ruleShouldBeCached() { + rule.setVariableName("TEST"); + Assertions.assertThat(rule.getCacheId()).isNotEmpty(); + } } diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireProperty.java b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/property/TestRequireProperty.java similarity index 68% rename from enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireProperty.java rename to enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/property/TestRequireProperty.java index 68aba54..cf40ab3 100644 --- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireProperty.java +++ b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/property/TestRequireProperty.java @@ -16,47 +16,58 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.maven.plugins.enforcer; +package org.apache.maven.enforcer.rules.property; import org.apache.maven.enforcer.rule.api.EnforcerRuleException; -import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; +import org.apache.maven.enforcer.rules.utils.ExpressionEvaluator; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.fail; +import static org.mockito.Mockito.when; /** * The Class TestRequireProperty. * * @author Paul Gier */ -public class TestRequireProperty { +@ExtendWith(MockitoExtension.class) +class TestRequireProperty { + + @Mock + private ExpressionEvaluator evaluator; + + @InjectMocks + private RequireProperty rule; /** * Test rule. * */ @Test - public void testRule() { - MockProject project = new MockProject(); - project.setProperty("testProp", "This is a test."); - EnforcerRuleHelper helper = EnforcerTestUtils.getHelper(project); + void testRule() throws Exception { - RequireProperty rule = new RequireProperty(); // this property should not be set rule.setProperty("testPropJunk"); try { - rule.execute(helper); + rule.execute(); fail("Expected an exception."); } catch (EnforcerRuleException e) { // expected to catch this. } + when(evaluator.evaluate("${testProp}")).thenReturn("This is a test."); + // this property should be set by the surefire // plugin rule.setProperty("testProp"); try { - rule.execute(helper); + rule.execute(); } catch (EnforcerRuleException e) { fail("This should not throw an exception"); } @@ -67,19 +78,17 @@ public class TestRequireProperty { * */ @Test - public void testRuleWithRegex() { - MockProject project = new MockProject(); - project.setProperty("testProp", "This is a test."); - EnforcerRuleHelper helper = EnforcerTestUtils.getHelper(project); + void testRuleWithRegex() throws Exception { + + when(evaluator.evaluate("${testProp}")).thenReturn("This is a test."); - RequireProperty rule = new RequireProperty(); rule.setProperty("testProp"); // This expression should not match the property // value rule.setRegex("[^abc]"); try { - rule.execute(helper); + rule.execute(); fail("Expected an exception."); } catch (EnforcerRuleException e) { // expected to catch this. @@ -88,7 +97,7 @@ public class TestRequireProperty { // this expr should match the property rule.setRegex("[This].*[.]"); try { - rule.execute(helper); + rule.execute(); } catch (EnforcerRuleException e) { fail("This should not throw an exception"); } @@ -98,8 +107,7 @@ public class TestRequireProperty { * Test id. */ @Test - public void testId() { - RequireProperty rule = new RequireProperty(); - rule.getCacheId(); + void ruleShouldNotBeCached() { + assertThat(rule.getCacheId()).isNull(); } } diff --git a/maven-enforcer-plugin/src/it/projects/require-environment-variable/pom.xml b/maven-enforcer-plugin/src/it/projects/require-environment-variable/pom.xml new file mode 100644 index 0000000..fdc6d35 --- /dev/null +++ b/maven-enforcer-plugin/src/it/projects/require-environment-variable/pom.xml @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<project> + <modelVersion>4.0.0</modelVersion> + + <groupId>org.apache.maven.its.enforcer</groupId> + <artifactId>test</artifactId> + <version>1.0</version> + + <description> + </description> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-enforcer-plugin</artifactId> + <version>@project.version@</version> + <executions> + <execution> + <id>test</id> + <goals> + <goal>enforce</goal> + </goals> + <configuration> + <rules> + <requireEnvironmentVariable> + <variableName>PATH</variableName> + </requireEnvironmentVariable> + </rules> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> diff --git a/maven-enforcer-plugin/src/it/projects/require-environment-variable/verify.groovy b/maven-enforcer-plugin/src/it/projects/require-environment-variable/verify.groovy new file mode 100644 index 0000000..008b2de --- /dev/null +++ b/maven-enforcer-plugin/src/it/projects/require-environment-variable/verify.groovy @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +File buildLog = new File(basedir, 'build.log') + +assert buildLog.text.contains('[INFO] Rule 0: org.apache.maven.enforcer.rules.property.RequireEnvironmentVariable executed') diff --git a/maven-enforcer-plugin/src/it/projects/require-property/verify.groovy b/maven-enforcer-plugin/src/it/projects/require-property/verify.groovy new file mode 100644 index 0000000..e8bcceb --- /dev/null +++ b/maven-enforcer-plugin/src/it/projects/require-property/verify.groovy @@ -0,0 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +File buildLog = new File(basedir, 'build.log') +assert buildLog.text.contains('[INFO] Rule 0: org.apache.maven.enforcer.rules.property.RequireProperty executed')