From 48ca986b14ab3d4e7a69bbf41155e1e93a76d3f9 Mon Sep 17 00:00:00 2001 From: Slawomir Jaranowski Date: Mon, 9 Jan 2023 23:28:40 +0100 Subject: [PATCH] [MENFORCER-458] Move RequireFiles* to new API --- .../rules/AbstractStandardEnforcerRule.java | 2 +- .../rules/files}/AbstractRequireFiles.java | 74 +++++---------- .../rules/files}/RequireFilesDontExist.java | 7 +- .../rules/files}/RequireFilesExist.java | 7 +- .../rules/files}/RequireFilesSize.java | 60 +++++------- .../src/site/apt/requireFilesDontExist.apt.vm | 8 +- .../src/site/apt/requireFilesExist.apt.vm | 8 +- .../src/site/apt/requireFilesSize.apt.vm | 12 +-- .../files}/TestRequireFilesDontExist.java | 61 ++++++------ .../rules/files}/TestRequireFilesExist.java | 66 +++++++------ .../rules/files}/TestRequireFilesSize.java | 95 ++++++++++++------- .../require-files-dont-exist/verify.groovy | 22 +++++ .../require-files-exist/verify.groovy | 22 +++++ .../projects/require-files-size/verify.groovy | 22 +++++ 14 files changed, 264 insertions(+), 202 deletions(-) rename enforcer-rules/src/main/java/org/apache/maven/{plugins/enforcer => enforcer/rules/files}/AbstractRequireFiles.java (64%) rename enforcer-rules/src/main/java/org/apache/maven/{plugins/enforcer => enforcer/rules/files}/RequireFilesDontExist.java (86%) rename enforcer-rules/src/main/java/org/apache/maven/{plugins/enforcer => enforcer/rules/files}/RequireFilesExist.java (92%) rename enforcer-rules/src/main/java/org/apache/maven/{plugins/enforcer => enforcer/rules/files}/RequireFilesSize.java (68%) rename enforcer-rules/src/test/java/org/apache/maven/{plugins/enforcer => enforcer/rules/files}/TestRequireFilesDontExist.java (64%) rename enforcer-rules/src/test/java/org/apache/maven/{plugins/enforcer => enforcer/rules/files}/TestRequireFilesExist.java (53%) rename enforcer-rules/src/test/java/org/apache/maven/{plugins/enforcer => enforcer/rules/files}/TestRequireFilesSize.java (59%) create mode 100644 maven-enforcer-plugin/src/it/projects/require-files-dont-exist/verify.groovy create mode 100644 maven-enforcer-plugin/src/it/projects/require-files-exist/verify.groovy create mode 100644 maven-enforcer-plugin/src/it/projects/require-files-size/verify.groovy diff --git a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/AbstractStandardEnforcerRule.java b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/AbstractStandardEnforcerRule.java index 8a2ae955..b426f6e6 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/AbstractStandardEnforcerRule.java +++ b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/AbstractStandardEnforcerRule.java @@ -26,7 +26,7 @@ * @author Slawomir Jaranowski * @since 3.2.0 */ -abstract class AbstractStandardEnforcerRule extends AbstractEnforcerRule { +public abstract class AbstractStandardEnforcerRule extends AbstractEnforcerRule { private String message; diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractRequireFiles.java b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/files/AbstractRequireFiles.java similarity index 64% rename from enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractRequireFiles.java rename to enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/files/AbstractRequireFiles.java index 2bf704db..34988b44 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractRequireFiles.java +++ b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/files/AbstractRequireFiles.java @@ -16,25 +16,26 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.maven.plugins.enforcer; +package org.apache.maven.enforcer.rules.files; import java.io.File; import java.util.ArrayList; +import java.util.Collections; import java.util.List; -import org.apache.maven.enforcer.rule.api.EnforcerRule; +import org.apache.maven.enforcer.rule.api.EnforcerRuleError; import org.apache.maven.enforcer.rule.api.EnforcerRuleException; -import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; +import org.apache.maven.enforcer.rules.AbstractStandardEnforcerRule; /** * Contains the common code to compare an array of files against a requirement. * * @author Brian Fox */ -public abstract class AbstractRequireFiles extends AbstractStandardEnforcerRule { +abstract class AbstractRequireFiles extends AbstractStandardEnforcerRule { - /** Array of files to check. */ - private File[] files; + /** List of files to check. */ + private List files = Collections.emptyList(); /** if null file handles should be allowed. If they are allowed, it means treat it as a success. */ private boolean allowNulls = false; @@ -60,10 +61,10 @@ public abstract class AbstractRequireFiles extends AbstractStandardEnforcerRule abstract String getErrorMsg(); @Override - public void execute(EnforcerRuleHelper helper) throws EnforcerRuleException { + public void execute() throws EnforcerRuleException { - if (!allowNulls && files.length == 0) { - throw new EnforcerRuleException("The file list is empty and Null files are disabled."); + if (!allowNulls && files.isEmpty()) { + throw new EnforcerRuleError("The file list is empty and Null files are disabled."); } List failures = new ArrayList<>(); @@ -76,7 +77,7 @@ public void execute(EnforcerRuleHelper helper) throws EnforcerRuleException { } if (satisfyAny) { - int passed = files.length - failures.size(); + int passed = files.size() - failures.size(); if (passed == 0) { fail(failures); } @@ -109,58 +110,31 @@ private void fail(List failures) throws EnforcerRuleException { @Override public String getCacheId() { - return Integer.toString(hashCode(files)); + return Integer.toString(files.hashCode()); } - /** - * Calculates a hash code for the specified array as Arrays.hashCode() would do. Unfortunately, the - * mentioned method is only available for Java 1.5 and later. - * - * @param items The array for which to compute the hash code, may be null. - * @return The hash code for the array. - */ - private static int hashCode(Object[] items) { - int hash = 0; - if (items != null) { - hash = 1; - for (Object item : items) { - hash = 31 * hash + (item == null ? 0 : item.hashCode()); - } - } - return hash; + void setFilesList(List files) { + this.files = files; } - @Override - public boolean isCacheable() { - return true; - } + // method using for testing purpose ... - @Override - public boolean isResultValid(EnforcerRule cachedRule) { - return true; - } - - public File[] getFiles() { + List getFiles() { return files; } - public void setFiles(File[] files) { - this.files = files; - } - - public boolean isAllowNulls() { - return allowNulls; - } - - public void setAllowNulls(boolean allowNulls) { + void setAllowNulls(boolean allowNulls) { this.allowNulls = allowNulls; } - public boolean isSatisfyAny() { - return satisfyAny; + void setSatisfyAny(boolean satisfyAny) { + this.satisfyAny = satisfyAny; } - public void setSatisfyAny(boolean satisfyAny) { - this.satisfyAny = satisfyAny; + @Override + public String toString() { + return String.format( + "%s[message=%s, files=%s, allowNulls=%b, satisfyAny=%b, level=%s]", + getClass().getSimpleName(), getMessage(), files, allowNulls, satisfyAny, getLevel()); } } diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireFilesDontExist.java b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/files/RequireFilesDontExist.java similarity index 86% rename from enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireFilesDontExist.java rename to enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/files/RequireFilesDontExist.java index 4868fd27..116dd049 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireFilesDontExist.java +++ b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/files/RequireFilesDontExist.java @@ -16,14 +16,17 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.maven.plugins.enforcer; +package org.apache.maven.enforcer.rules.files; + +import javax.inject.Named; import java.io.File; /** * The Class RequireFilesDontExist. */ -public class RequireFilesDontExist extends AbstractRequireFiles { +@Named("requireFilesDontExist") +public final class RequireFilesDontExist extends AbstractRequireFiles { @Override boolean checkFile(File file) { // if we get here and the handle is null, treat it as a success diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireFilesExist.java b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/files/RequireFilesExist.java similarity index 92% rename from enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireFilesExist.java rename to enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/files/RequireFilesExist.java index c794d9b4..9318dbca 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireFilesExist.java +++ b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/files/RequireFilesExist.java @@ -16,7 +16,9 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.maven.plugins.enforcer; +package org.apache.maven.enforcer.rules.files; + +import javax.inject.Named; import java.io.File; import java.io.IOException; @@ -24,7 +26,8 @@ /** * The Class RequireFilesExist. */ -public class RequireFilesExist extends AbstractRequireFiles { +@Named("requireFilesExist") +public final class RequireFilesExist extends AbstractRequireFiles { @Override boolean checkFile(File file) { // if we get here and the handle is null, treat it as a success diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireFilesSize.java b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/files/RequireFilesSize.java similarity index 68% rename from enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireFilesSize.java rename to enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/files/RequireFilesSize.java index 72679c15..d032c0d3 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireFilesSize.java +++ b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/files/RequireFilesSize.java @@ -16,16 +16,17 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.maven.plugins.enforcer; +package org.apache.maven.enforcer.rules.files; + +import javax.inject.Inject; +import javax.inject.Named; import java.io.File; +import java.util.Collections; +import java.util.Objects; -import org.apache.maven.enforcer.rule.api.EnforcerRule; import org.apache.maven.enforcer.rule.api.EnforcerRuleException; -import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; -import org.apache.maven.plugin.logging.Log; import org.apache.maven.project.MavenProject; -import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; /** * Rule to validate the main artifact is within certain size constraints. @@ -33,7 +34,8 @@ * @author brianf * @author Roman Stumm */ -public class RequireFilesSize extends AbstractRequireFiles { +@Named("requireFilesSize") +public final class RequireFilesSize extends AbstractRequireFiles { private static final long MAXSIZE = 10000; @@ -46,37 +48,29 @@ public class RequireFilesSize extends AbstractRequireFiles { /** The error msg. */ private String errorMsg; - /** The log. */ - private Log log; + private final MavenProject project; + + @Inject + public RequireFilesSize(MavenProject project) { + this.project = Objects.requireNonNull(project); + } @Override - public void execute(EnforcerRuleHelper helper) throws EnforcerRuleException { - this.log = helper.getLog(); + public void execute() throws EnforcerRuleException { // if the file is already defined, use that. Otherwise get the main artifact. - if (getFiles().length == 0) { - try { - MavenProject project = (MavenProject) helper.evaluate("${project}"); - setFiles(new File[1]); - getFiles()[0] = project.getArtifact().getFile(); - - super.execute(helper); - } catch (ExpressionEvaluationException e) { - throw new EnforcerRuleException("Unable to retrieve the project.", e); - } + if (getFiles().isEmpty()) { + setFilesList(Collections.singletonList(project.getArtifact().getFile())); + super.execute(); } else { - super.execute(helper); + super.execute(); } } @Override - public boolean isCacheable() { - return false; - } - - @Override - public boolean isResultValid(EnforcerRule cachedRule) { - return false; + public String getCacheId() { + // non cached rule - return null + return null; } @Override @@ -97,7 +91,7 @@ boolean checkFile(File file) { return false; } else { - this.log.debug(file + getLog().debug(() -> file + " size (" + length + ") is OK (" @@ -119,18 +113,10 @@ String getErrorMsg() { return this.errorMsg; } - public long getMaxsize() { - return maxsize; - } - public void setMaxsize(long maxsize) { this.maxsize = maxsize; } - public long getMinsize() { - return minsize; - } - public void setMinsize(long minsize) { this.minsize = minsize; } diff --git a/enforcer-rules/src/site/apt/requireFilesDontExist.apt.vm b/enforcer-rules/src/site/apt/requireFilesDontExist.apt.vm index 89a197aa..6d8b21d8 100644 --- a/enforcer-rules/src/site/apt/requireFilesDontExist.apt.vm +++ b/enforcer-rules/src/site/apt/requireFilesDontExist.apt.vm @@ -30,13 +30,13 @@ Require Files Don't Exist The following parameters are supported by this rule: - * message - an optional message to the user if the rule fails. + * <> - an optional message to the user if the rule fails. - * files - A list of files to check. + * <> - A list of files to check. - * allowNulls - If null files should be allowed. If allowed, they will be treated as if they do not exist. Default is false. + * <> - If null files should be allowed. If allowed, they will be treated as if they do not exist. Default is false. - * satisfyAny - Allows that one of files can make the rule pass, instead of all the files. Default is false. + * <> - Allows that one of files can make the rule pass, instead of all the files. Default is false. [] diff --git a/enforcer-rules/src/site/apt/requireFilesExist.apt.vm b/enforcer-rules/src/site/apt/requireFilesExist.apt.vm index c7b71321..e314b07f 100644 --- a/enforcer-rules/src/site/apt/requireFilesExist.apt.vm +++ b/enforcer-rules/src/site/apt/requireFilesExist.apt.vm @@ -30,13 +30,13 @@ Require Files Exist The following parameters are supported by this rule: - * message - an optional message to the user if the rule fails. + * <> - an optional message to the user if the rule fails. - * files - A list of files to check. + * <> - A list of files to check. - * allowNulls - If null files should be allowed. If allowed, they will be treated as if they do exist. Default is false. + * <> - If null files should be allowed. If allowed, they will be treated as if they do exist. Default is false. - * satisfyAny - Allows that one of files can make the rule pass, instead of all the files. Default is false. + * <> - Allows that one of files can make the rule pass, instead of all the files. Default is false. [] diff --git a/enforcer-rules/src/site/apt/requireFilesSize.apt.vm b/enforcer-rules/src/site/apt/requireFilesSize.apt.vm index 301765ed..7e7d7f0f 100644 --- a/enforcer-rules/src/site/apt/requireFilesSize.apt.vm +++ b/enforcer-rules/src/site/apt/requireFilesSize.apt.vm @@ -30,17 +30,17 @@ Require File Size The following parameters are supported by this rule: - * message - an optional message to the user if the rule fails. + * <> - an optional message to the user if the rule fails. - * files - A list of files to check. If this list is empty, the main project artifact will be checked. + * <> - A list of files to check. If this list is empty, the main project artifact will be checked. - * maxsize - maximum size in bytes for this file. + * <> - maximum size in bytes for this file. - * minsize - minimum size in bytes for this file. + * <> - minimum size in bytes for this file. - * allowNulls - If null files should be allowed. If allowed, they will be treated as if they do exist. Default is false. + * <> - If null files should be allowed. If allowed, they will be treated as if they do exist. Default is false. - * satisfyAny - Allows that one of files can make the rule pass, instead of all the files. Default is false. + * <> - Allows that one of files can make the rule pass, instead of all the files. Default is false. [] diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesDontExist.java b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/files/TestRequireFilesDontExist.java similarity index 64% rename from enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesDontExist.java rename to enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/files/TestRequireFilesDontExist.java index 33839edd..93a1a0e3 100644 --- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesDontExist.java +++ b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/files/TestRequireFilesDontExist.java @@ -16,36 +16,41 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.maven.plugins.enforcer; +package org.apache.maven.enforcer.rules.files; import java.io.File; import java.io.IOException; +import java.util.Arrays; +import java.util.Collections; import org.apache.maven.enforcer.rule.api.EnforcerRuleException; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; /** * Test the "require files don't exist" rule. * * @author Brian Fox */ -public class TestRequireFilesDontExist { +class TestRequireFilesDontExist { @TempDir public File temporaryFolder; private final RequireFilesDontExist rule = new RequireFilesDontExist(); @Test - public void testFileExists() throws IOException { + void testFileExists() throws IOException { File f = File.createTempFile("junit", null, temporaryFolder); - rule.setFiles(new File[] {f}); + rule.setFilesList(Collections.singletonList(f)); try { - rule.execute(EnforcerTestUtils.getHelper()); + rule.execute(); fail("Expected an Exception."); } catch (EnforcerRuleException e) { assertNotNull(e.getMessage()); @@ -54,10 +59,10 @@ public void testFileExists() throws IOException { } @Test - public void testEmptyFile() { - rule.setFiles(new File[] {null}); + void testEmptyFile() { + rule.setFilesList(Collections.singletonList(null)); try { - rule.execute(EnforcerTestUtils.getHelper()); + rule.execute(); fail("Should get exception"); } catch (EnforcerRuleException e) { assertNotNull(e.getMessage()); @@ -65,22 +70,22 @@ public void testEmptyFile() { } @Test - public void testEmptyFileAllowNull() { - rule.setFiles(new File[] {null}); + void testEmptyFileAllowNull() { + rule.setFilesList(Collections.singletonList(null)); rule.setAllowNulls(true); try { - rule.execute(EnforcerTestUtils.getHelper()); + rule.execute(); } catch (EnforcerRuleException e) { fail("Unexpected Exception:" + e.getLocalizedMessage()); } } @Test - public void testEmptyFileList() { - rule.setFiles(new File[] {}); - assertEquals(0, rule.getFiles().length); + void testEmptyFileList() { + rule.setFilesList(Collections.emptyList()); + assertTrue(rule.getFiles().isEmpty()); try { - rule.execute(EnforcerTestUtils.getHelper()); + rule.execute(); fail("Should get exception"); } catch (EnforcerRuleException e) { assertNotNull(e.getMessage()); @@ -88,31 +93,31 @@ public void testEmptyFileList() { } @Test - public void testEmptyFileListAllowNull() { - rule.setFiles(new File[] {}); - assertEquals(0, rule.getFiles().length); + void testEmptyFileListAllowNull() { + rule.setFilesList(Collections.emptyList()); + assertTrue(rule.getFiles().isEmpty()); rule.setAllowNulls(true); try { - rule.execute(EnforcerTestUtils.getHelper()); + rule.execute(); } catch (EnforcerRuleException e) { fail("Unexpected Exception:" + e.getLocalizedMessage()); } } @Test - public void testFileDoesNotExist() throws EnforcerRuleException, IOException { + void testFileDoesNotExist() throws EnforcerRuleException, IOException { File f = File.createTempFile("junit", null, temporaryFolder); f.delete(); assertFalse(f.exists()); - rule.setFiles(new File[] {f}); + rule.setFilesList(Collections.singletonList(f)); - rule.execute(EnforcerTestUtils.getHelper()); + rule.execute(); } @Test - public void testFileDoesNotExistSatisfyAny() throws EnforcerRuleException, IOException { + void testFileDoesNotExistSatisfyAny() throws EnforcerRuleException, IOException { File f = File.createTempFile("junit", null, temporaryFolder); f.delete(); @@ -122,17 +127,17 @@ public void testFileDoesNotExistSatisfyAny() throws EnforcerRuleException, IOExc assertTrue(g.exists()); - rule.setFiles(new File[] {f, g.getCanonicalFile()}); + rule.setFilesList(Arrays.asList(f, g.getCanonicalFile())); rule.setSatisfyAny(true); - rule.execute(EnforcerTestUtils.getHelper()); + rule.execute(); } /** * Test id. */ @Test - public void testId() { - rule.getCacheId(); + void testId() { + assertNotNull(rule.getCacheId()); } } diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesExist.java b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/files/TestRequireFilesExist.java similarity index 53% rename from enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesExist.java rename to enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/files/TestRequireFilesExist.java index 34cc1bb0..33c72615 100644 --- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesExist.java +++ b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/files/TestRequireFilesExist.java @@ -16,10 +16,12 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.maven.plugins.enforcer; +package org.apache.maven.enforcer.rules.files; import java.io.File; import java.io.IOException; +import java.util.Arrays; +import java.util.Collections; import org.apache.maven.enforcer.rule.api.EnforcerRuleException; import org.junit.jupiter.api.Test; @@ -32,83 +34,79 @@ * * @author Brett Porter */ -public class TestRequireFilesExist { +class TestRequireFilesExist { @TempDir public File temporaryFolder; private final RequireFilesExist rule = new RequireFilesExist(); @Test - public void testFileExists() throws Exception { + void testFileExists() throws Exception { File f = File.createTempFile("junit", null, temporaryFolder); - rule.setFiles(new File[] {f.getCanonicalFile()}); + rule.setFilesList(Collections.singletonList(f.getCanonicalFile())); - rule.execute(EnforcerTestUtils.getHelper()); + rule.execute(); } @Test - public void testFileOsIndependentExists() { - rule.setFiles(new File[] {new File("POM.xml")}); + void testFileOsIndependentExists() { + rule.setFilesList(Collections.singletonList(new File("POM.xml"))); - EnforcerRuleException e = - assertThrows(EnforcerRuleException.class, () -> rule.execute(EnforcerTestUtils.getHelper())); + EnforcerRuleException e = assertThrows(EnforcerRuleException.class, () -> rule.execute()); assertNotNull(e.getMessage()); } @Test - public void testEmptyFile() { - rule.setFiles(new File[] {null}); + void testEmptyFile() { + rule.setFilesList(Collections.singletonList(null)); - EnforcerRuleException e = - assertThrows(EnforcerRuleException.class, () -> rule.execute(EnforcerTestUtils.getHelper())); + EnforcerRuleException e = assertThrows(EnforcerRuleException.class, () -> rule.execute()); assertNotNull(e.getMessage()); } @Test - public void testEmptyFileAllowNull() throws Exception { - rule.setFiles(new File[] {null}); + void testEmptyFileAllowNull() throws Exception { + rule.setFilesList(Collections.singletonList(null)); rule.setAllowNulls(true); - rule.execute(EnforcerTestUtils.getHelper()); + rule.execute(); } @Test - public void testEmptyFileList() { - rule.setFiles(new File[] {}); - assertEquals(0, rule.getFiles().length); + void testEmptyFileList() { + rule.setFilesList(Collections.emptyList()); + assertTrue(rule.getFiles().isEmpty()); - EnforcerRuleException e = - assertThrows(EnforcerRuleException.class, () -> rule.execute(EnforcerTestUtils.getHelper())); + EnforcerRuleException e = assertThrows(EnforcerRuleException.class, () -> rule.execute()); assertNotNull(e.getMessage()); } @Test - public void testEmptyFileListAllowNull() throws Exception { - rule.setFiles(new File[] {}); - assertEquals(0, rule.getFiles().length); + void testEmptyFileListAllowNull() throws Exception { + rule.setFilesList(Collections.emptyList()); + assertTrue(rule.getFiles().isEmpty()); rule.setAllowNulls(true); - rule.execute(EnforcerTestUtils.getHelper()); + rule.execute(); } @Test - public void testFileDoesNotExist() throws Exception { + void testFileDoesNotExist() throws Exception { File f = File.createTempFile("junit", null, temporaryFolder); f.delete(); assertFalse(f.exists()); - rule.setFiles(new File[] {f}); + rule.setFilesList(Collections.singletonList(f)); - EnforcerRuleException e = - assertThrows(EnforcerRuleException.class, () -> rule.execute(EnforcerTestUtils.getHelper())); + EnforcerRuleException e = assertThrows(EnforcerRuleException.class, () -> rule.execute()); assertNotNull(e.getMessage()); } @Test - public void testFileExistsSatisfyAny() throws EnforcerRuleException, IOException { + void testFileExistsSatisfyAny() throws EnforcerRuleException, IOException { File f = File.createTempFile("junit", null, temporaryFolder); f.delete(); @@ -118,17 +116,17 @@ public void testFileExistsSatisfyAny() throws EnforcerRuleException, IOException assertTrue(g.exists()); - rule.setFiles(new File[] {f, g.getCanonicalFile()}); + rule.setFilesList(Arrays.asList(f, g.getCanonicalFile())); rule.setSatisfyAny(true); - rule.execute(EnforcerTestUtils.getHelper()); + rule.execute(); } /** * Test id. */ @Test - public void testId() { - rule.getCacheId(); + void testId() { + assertNotNull(rule.getCacheId()); } } diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesSize.java b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/files/TestRequireFilesSize.java similarity index 59% rename from enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesSize.java rename to enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/files/TestRequireFilesSize.java index 8dbbd3eb..f0a7a042 100644 --- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesSize.java +++ b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/files/TestRequireFilesSize.java @@ -16,46 +16,74 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.maven.plugins.enforcer; +package org.apache.maven.enforcer.rules.files; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.util.Arrays; +import java.util.Collections; import org.apache.maven.artifact.Artifact; +import org.apache.maven.enforcer.rule.api.EnforcerLogger; import org.apache.maven.enforcer.rule.api.EnforcerRuleException; import org.apache.maven.plugin.testing.ArtifactStubFactory; +import org.apache.maven.project.MavenProject; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.io.TempDir; - -import static org.junit.jupiter.api.Assertions.*; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; +import static org.mockito.Mockito.when; /** * Test the "require files exist" rule. * * @author Brian Fox */ -public class TestRequireFilesSize { +@ExtendWith(MockitoExtension.class) +class TestRequireFilesSize { @TempDir public File temporaryFolder; - private final RequireFilesSize rule = new RequireFilesSize(); + @Mock + private MavenProject project; + + @Mock + private EnforcerLogger log; + + @InjectMocks + private RequireFilesSize rule; + + @BeforeEach + void setup() { + rule.setLog(log); + } @Test - public void testFileExists() throws EnforcerRuleException, IOException { + void testFileExists() throws EnforcerRuleException, IOException { File f = File.createTempFile("junit", null, temporaryFolder); - rule.setFiles(new File[] {f}); + rule.setFilesList(Collections.singletonList(f)); - rule.execute(EnforcerTestUtils.getHelper()); + rule.execute(); } @Test - public void testEmptyFile() { - rule.setFiles(new File[] {null}); + void testEmptyFile() { + rule.setFilesList(Collections.singletonList(null)); try { - rule.execute(EnforcerTestUtils.getHelper()); + rule.execute(); fail("Should get exception"); } catch (EnforcerRuleException e) { assertNotNull(e.getMessage()); @@ -63,42 +91,41 @@ public void testEmptyFile() { } @Test - public void testEmptyFileAllowNull() throws EnforcerRuleException { - rule.setFiles(new File[] {null}); + void testEmptyFileAllowNull() throws EnforcerRuleException { + rule.setFilesList(Collections.singletonList(null)); rule.setAllowNulls(true); - rule.execute(EnforcerTestUtils.getHelper()); + rule.execute(); } @Test - public void testEmptyFileList() throws EnforcerRuleException, IOException { - rule.setFiles(new File[] {}); + void testEmptyFileList() throws EnforcerRuleException, IOException { + rule.setFilesList(Collections.emptyList()); - assertEquals(0, rule.getFiles().length); + assertTrue(rule.getFiles().isEmpty()); - MockProject project = new MockProject(); File f = File.createTempFile("junit", null, temporaryFolder); ArtifactStubFactory factory = new ArtifactStubFactory(); Artifact a = factory.getReleaseArtifact(); a.setFile(f); - project.setArtifact(a); + when(project.getArtifact()).thenReturn(a); // sanity check the mockProject assertSame(f, project.getArtifact().getFile()); - rule.execute(EnforcerTestUtils.getHelper(project)); + rule.execute(); } @Test - public void testFileDoesNotExist() throws IOException { + void testFileDoesNotExist() throws IOException { File f = File.createTempFile("junit", null, temporaryFolder); f.delete(); assertFalse(f.exists()); - rule.setFiles(new File[] {f}); + rule.setFilesList(Collections.singletonList(f)); try { - rule.execute(EnforcerTestUtils.getHelper()); + rule.execute(); fail("Should get exception"); } catch (EnforcerRuleException e) { assertNotNull(e.getMessage()); @@ -106,12 +133,12 @@ public void testFileDoesNotExist() throws IOException { } @Test - public void testFileTooSmall() throws IOException { + void testFileTooSmall() throws IOException { File f = File.createTempFile("junit", null, temporaryFolder); - rule.setFiles(new File[] {f}); + rule.setFilesList(Collections.singletonList(f)); rule.setMinsize(10); try { - rule.execute(EnforcerTestUtils.getHelper()); + rule.execute(); fail("Should get exception"); } catch (EnforcerRuleException e) { assertNotNull(e.getMessage()); @@ -119,17 +146,17 @@ public void testFileTooSmall() throws IOException { } @Test - public void testFileTooBig() throws IOException { + void testFileTooBig() throws IOException { File f = File.createTempFile("junit", null, temporaryFolder); try (BufferedWriter out = new BufferedWriter(new FileWriter(f))) { out.write("123456789101112131415"); } - rule.setFiles(new File[] {f}); + rule.setFilesList(Collections.singletonList(f)); rule.setMaxsize(10); assertTrue(f.length() > 10); try { - rule.execute(EnforcerTestUtils.getHelper()); + rule.execute(); fail("Should get exception"); } catch (EnforcerRuleException e) { assertNotNull(e.getMessage()); @@ -137,7 +164,7 @@ public void testFileTooBig() throws IOException { } @Test - public void testRequireFilesSizeSatisfyAny() throws EnforcerRuleException, IOException { + void testRequireFilesSizeSatisfyAny() throws EnforcerRuleException, IOException { File f = File.createTempFile("junit", null, temporaryFolder); try (BufferedWriter out = new BufferedWriter(new FileWriter(f))) { out.write("123456789101112131415"); @@ -146,18 +173,18 @@ public void testRequireFilesSizeSatisfyAny() throws EnforcerRuleException, IOExc File g = File.createTempFile("junit", null, temporaryFolder); - rule.setFiles(new File[] {f, g}); + rule.setFilesList(Arrays.asList(f, g)); rule.setMaxsize(10); rule.setSatisfyAny(true); - rule.execute(EnforcerTestUtils.getHelper()); + rule.execute(); } /** * Test id. */ @Test - public void testId() { - rule.getCacheId(); + void testId() { + assertNull(rule.getCacheId()); } } diff --git a/maven-enforcer-plugin/src/it/projects/require-files-dont-exist/verify.groovy b/maven-enforcer-plugin/src/it/projects/require-files-dont-exist/verify.groovy new file mode 100644 index 00000000..0a223672 --- /dev/null +++ b/maven-enforcer-plugin/src/it/projects/require-files-dont-exist/verify.groovy @@ -0,0 +1,22 @@ +/* + * 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. + */ +def buildLog = new File(basedir, 'build.log').text + +// rule executed +assert buildLog.contains('[INFO] Rule 0: org.apache.maven.enforcer.rules.files.RequireFilesDontExist executed') diff --git a/maven-enforcer-plugin/src/it/projects/require-files-exist/verify.groovy b/maven-enforcer-plugin/src/it/projects/require-files-exist/verify.groovy new file mode 100644 index 00000000..b0b02f1d --- /dev/null +++ b/maven-enforcer-plugin/src/it/projects/require-files-exist/verify.groovy @@ -0,0 +1,22 @@ +/* + * 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. + */ +def buildLog = new File(basedir, 'build.log').text + +// rule executed +assert buildLog.contains('[INFO] Rule 0: org.apache.maven.enforcer.rules.files.RequireFilesExist executed') diff --git a/maven-enforcer-plugin/src/it/projects/require-files-size/verify.groovy b/maven-enforcer-plugin/src/it/projects/require-files-size/verify.groovy new file mode 100644 index 00000000..e710b4b0 --- /dev/null +++ b/maven-enforcer-plugin/src/it/projects/require-files-size/verify.groovy @@ -0,0 +1,22 @@ +/* + * 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. + */ +def buildLog = new File(basedir, 'build.log').text + +// rule executed +assert buildLog.contains('[INFO] Rule 0: org.apache.maven.enforcer.rules.files.RequireFilesSize executed')