[MENFORCER-430] Allow one of many files in RequireFiles rules to pass
diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractRequireFiles.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractRequireFiles.java
index 6b1de74..0d40987 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractRequireFiles.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractRequireFiles.java
@@ -42,6 +42,9 @@
/** if null file handles should be allowed. If they are allowed, it means treat it as a success. */
private boolean allowNulls = false;
+ /** Allow that a single one of the files can make the rule to pass. */
+ private boolean satisfyAny;
+
// check the file for the specific condition
/**
* Check one file.
@@ -82,32 +85,46 @@
}
}
- // if anything was found, log it with the optional message.
- if ( !failures.isEmpty() )
+ if ( satisfyAny )
{
- String message = getMessage();
-
- StringBuilder buf = new StringBuilder();
- if ( message != null )
+ int passed = files.length - failures.size();
+ if ( passed == 0 )
{
- buf.append( message + System.lineSeparator() );
+ fail( failures );
}
- buf.append( getErrorMsg() );
-
- for ( File file : failures )
- {
- if ( file != null )
- {
- buf.append( file.getAbsolutePath() + System.lineSeparator() );
- }
- else
- {
- buf.append( "(an empty filename was given and allowNulls is false)" + System.lineSeparator() );
- }
- }
-
- throw new EnforcerRuleException( buf.toString() );
}
+ // if anything was found, log it with the optional message.
+ else if ( !failures.isEmpty() )
+ {
+ fail( failures );
+ }
+ }
+
+ private void fail( List<File> failures )
+ throws EnforcerRuleException
+ {
+ String message = getMessage();
+
+ StringBuilder buf = new StringBuilder();
+ if ( message != null )
+ {
+ buf.append( message + System.lineSeparator() );
+ }
+ buf.append( getErrorMsg() );
+
+ for ( File file : failures )
+ {
+ if ( file != null )
+ {
+ buf.append( file.getAbsolutePath() + System.lineSeparator() );
+ }
+ else
+ {
+ buf.append( "(an empty filename was given and allowNulls is false)" + System.lineSeparator() );
+ }
+ }
+
+ throw new EnforcerRuleException( buf.toString() );
}
@Override
@@ -168,4 +185,14 @@
{
this.allowNulls = allowNulls;
}
+
+ public boolean isSatisfyAny()
+ {
+ return satisfyAny;
+ }
+
+ public void setSatisfyAny( boolean satisfyAny )
+ {
+ this.satisfyAny = satisfyAny;
+ }
}
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesDontExist.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesDontExist.java
index 3ddd941..2cbe663 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesDontExist.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesDontExist.java
@@ -136,6 +136,34 @@
rule.execute( EnforcerTestUtils.getHelper() );
}
+ @Test
+ public void testFileDoesNotExistSatisfyAny()
+ throws IOException
+ {
+ File f = File.createTempFile( "junit", null, temporaryFolder );
+ f.delete();
+
+ assertFalse( f.exists() );
+
+ File g = File.createTempFile( "junit", null, temporaryFolder );
+
+ assertTrue( g.exists() );
+
+ rule.setFiles( new File[] { f, g.getCanonicalFile() } );
+ rule.setSatisfyAny(true);
+
+ try
+ {
+ rule.execute( EnforcerTestUtils.getHelper() );
+ }
+ catch ( EnforcerRuleException e )
+ {
+ fail( "Unexpected Exception:" + e.getLocalizedMessage() );
+ }
+
+ g.delete();
+ }
+
/**
* Test id.
*/
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesExist.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesExist.java
index 3a35a73..91a386b 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesExist.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesExist.java
@@ -22,6 +22,7 @@
import static org.junit.jupiter.api.Assertions.*;
import java.io.File;
+import java.io.IOException;
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
import org.junit.jupiter.api.Test;
@@ -121,6 +122,34 @@
}
+ @Test
+ public void testFileExistsSatisfyAny()
+ throws IOException
+ {
+ File f = File.createTempFile( "junit", null, temporaryFolder );
+ f.delete();
+
+ assertFalse( f.exists() );
+
+ File g = File.createTempFile( "junit", null, temporaryFolder );
+
+ assertTrue( g.exists() );
+
+ rule.setFiles( new File[] { f, g.getCanonicalFile() } );
+ rule.setSatisfyAny(true);
+
+ try
+ {
+ rule.execute( EnforcerTestUtils.getHelper() );
+ }
+ catch ( EnforcerRuleException e )
+ {
+ fail( "Unexpected Exception:" + e.getLocalizedMessage() );
+ }
+
+ g.delete();
+ }
+
/**
* Test id.
*/
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesSize.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesSize.java
index 83e9184..a19383e 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesSize.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesSize.java
@@ -165,6 +165,33 @@
}
}
+ @Test
+ public void testRequireFilesSizeSatisfyAny()
+ throws IOException
+ {
+ File f = File.createTempFile( "junit", null, temporaryFolder );
+ try ( BufferedWriter out = new BufferedWriter( new FileWriter( f ) ) )
+ {
+ out.write( "123456789101112131415" );
+ }
+ assertTrue( f.length() > 10 );
+
+ File g = File.createTempFile( "junit", null, temporaryFolder );
+
+ rule.setFiles( new File[] { f, g } );
+ rule.setMaxsize( 10 );
+ rule.setSatisfyAny(true);
+
+ try
+ {
+ rule.execute( EnforcerTestUtils.getHelper() );
+ }
+ catch ( EnforcerRuleException e )
+ {
+ fail( "Unexpected Exception:" + e.getLocalizedMessage() );
+ }
+ }
+
/**
* Test id.
*/