diff --git a/maven-plugin/src/it/verify-fail-on/expected_violation_file.xml b/maven-plugin/src/it/verify-fail-on/expected_violation_file.xml
new file mode 100644
index 00000000..cde014d3
--- /dev/null
+++ b/maven-plugin/src/it/verify-fail-on/expected_violation_file.xml
@@ -0,0 +1,6 @@
+
+
+
+ The xml element <modelVersion> should be placed before <name>
+
+
\ No newline at end of file
diff --git a/maven-plugin/src/it/verify-fail-on/invoker.properties b/maven-plugin/src/it/verify-fail-on/invoker.properties
new file mode 100644
index 00000000..8d0f0f22
--- /dev/null
+++ b/maven-plugin/src/it/verify-fail-on/invoker.properties
@@ -0,0 +1 @@
+invoker.goals=-e clean verify
\ No newline at end of file
diff --git a/maven-plugin/src/it/verify-fail-on/pom.xml b/maven-plugin/src/it/verify-fail-on/pom.xml
new file mode 100644
index 00000000..c31addc3
--- /dev/null
+++ b/maven-plugin/src/it/verify-fail-on/pom.xml
@@ -0,0 +1,36 @@
+
+
+ 4.0.0
+ com.github.ekryd.sortpom.its
+ default-configuration
+ 0.0.1-SNAPSHOT
+ pom
+ SortPom Plugin :: ITs :: Default configuration
+ Test default parameters of the plugin
+ no-url
+
+ UTF-8
+
+
+
+
+
+ com.github.ekryd.sortpom
+ sortpom-maven-plugin
+ @pom.version@
+
+
+
+ verify
+
+
+ target/sortpom_reports/violation.xml
+ warn
+ lines
+
+
+
+
+
+
+
diff --git a/maven-plugin/src/it/verify-fail-on/postbuild.groovy b/maven-plugin/src/it/verify-fail-on/postbuild.groovy
new file mode 100644
index 00000000..a3841879
--- /dev/null
+++ b/maven-plugin/src/it/verify-fail-on/postbuild.groovy
@@ -0,0 +1,14 @@
+log = new File(basedir, 'build.log')
+sorted = new File(basedir, 'pom.xml')
+violationFile = new File(basedir, 'target/sortpom_reports/violation.xml')
+expected_violationFile = new File(basedir, 'expected_violation_file.xml')
+
+assert log.exists()
+assert log.text.contains('[INFO] Verifying file ' + sorted.absolutePath)
+assert log.text.contains('[WARNING] The xml element should be placed before ')
+assert log.text.contains('[INFO] Saving violation report to ' + violationFile.absolutePath)
+assert log.text.contains('[WARNING] The file ' + sorted.absolutePath + ' is not sorted')
+
+assert expected_violationFile.text.replaceAll('@POM_PATH@', sorted.absolutePath).tokenize('\n').equals(violationFile.text.replaceAll('\r','').replaceAll('\\\\','').tokenize('\n'))
+
+return true
diff --git a/maven-plugin/src/main/java/sortpom/VerifyMojo.java b/maven-plugin/src/main/java/sortpom/VerifyMojo.java
index 7154b300..4051fd2c 100644
--- a/maven-plugin/src/main/java/sortpom/VerifyMojo.java
+++ b/maven-plugin/src/main/java/sortpom/VerifyMojo.java
@@ -23,6 +23,12 @@ public class VerifyMojo extends AbstractParentMojo {
@Parameter(property = "sort.verifyFail", defaultValue = "sort")
private String verifyFail;
+ /**
+ * What kind of differences should trigger verify failure. Can be either 'xmlElements', 'lines' or 'strict'
+ */
+ @Parameter(property = "sort.verifyFailOn", defaultValue = "xmlElements")
+ private String verifyFailOn;
+
/**
* Saves the verification failure to an external xml file, recommended filename is 'target/sortpom_reports/violation.xml'.
*/
@@ -40,7 +46,7 @@ public void setup() throws MojoFailureException {
.setIndent(nrOfIndentSpace, indentBlankLines)
.setSortOrder(sortOrderFile, predefinedSortOrder)
.setSortEntities(sortDependencies, sortPlugins, sortProperties, sortModules, sortExecutions)
- .setVerifyFail(verifyFail)
+ .setVerifyFail(verifyFail, verifyFailOn)
.build();
sortPomImpl.setup(new MavenLogger(getLog()), pluginParameters);
diff --git a/sorter/src/main/java/sortpom/parameter/PluginParameters.java b/sorter/src/main/java/sortpom/parameter/PluginParameters.java
index d0198796..55fabd56 100644
--- a/sorter/src/main/java/sortpom/parameter/PluginParameters.java
+++ b/sorter/src/main/java/sortpom/parameter/PluginParameters.java
@@ -23,6 +23,7 @@ public class PluginParameters {
public final boolean keepBlankLines;
public final boolean indentBlankLines;
public final VerifyFailType verifyFailType;
+ public final VerifyFailOnType verifyFailOn;
public final boolean ignoreLineSeparators;
public final boolean keepTimestamp;
@@ -30,7 +31,7 @@ private PluginParameters(File pomFile, boolean createBackupFile, String backupFi
LineSeparatorUtil lineSeparatorUtil, boolean expandEmptyElements, boolean spaceBeforeCloseEmptyElement, boolean keepBlankLines,
String indentCharacters, boolean indentBlankLines, String predefinedSortOrder, String customSortOrderFile,
DependencySortOrder sortDependencies, DependencySortOrder sortPlugins, boolean sortProperties, boolean sortModules,
- boolean sortExecutions, VerifyFailType verifyFailType, boolean ignoreLineSeparators, boolean keepTimestamp) {
+ boolean sortExecutions, VerifyFailType verifyFailType, VerifyFailOnType verifyFailOn, boolean ignoreLineSeparators, boolean keepTimestamp) {
this.pomFile = pomFile;
this.createBackupFile = createBackupFile;
this.backupFileExtension = backupFileExtension;
@@ -50,6 +51,7 @@ private PluginParameters(File pomFile, boolean createBackupFile, String backupFi
this.keepBlankLines = keepBlankLines;
this.indentBlankLines = indentBlankLines;
this.verifyFailType = verifyFailType;
+ this.verifyFailOn = verifyFailOn;
this.ignoreLineSeparators = ignoreLineSeparators;
this.keepTimestamp = keepTimestamp;
}
@@ -80,6 +82,7 @@ public static class Builder {
private boolean sortExecutions;
private boolean keepBlankLines;
private VerifyFailType verifyFailType;
+ private VerifyFailOnType verifyFailOn;
private boolean ignoreLineSeparators;
private boolean keepTimestamp;
@@ -145,8 +148,9 @@ public Builder setSortEntities(final String sortDependencies, final String sortP
}
/** Sets the verify operation behaviour */
- public Builder setVerifyFail(String verifyFail) {
+ public Builder setVerifyFail(String verifyFail, String verifyFailOn) {
this.verifyFailType = VerifyFailType.fromString(verifyFail);
+ this.verifyFailOn = VerifyFailOnType.fromString(verifyFailOn);
return this;
}
@@ -162,7 +166,8 @@ public PluginParameters build() {
encoding, lineSeparatorUtil, expandEmptyElements, spaceBeforeCloseEmptyElement, keepBlankLines, indentCharacters, indentBlankLines,
predefinedSortOrder, customSortOrderFile,
sortDependencies, sortPlugins, sortProperties, sortModules, sortExecutions,
- verifyFailType, ignoreLineSeparators, keepTimestamp);
+ verifyFailType, verifyFailOn,
+ ignoreLineSeparators, keepTimestamp);
}
}
diff --git a/sorter/src/main/java/sortpom/parameter/VerifyFailOnType.java b/sorter/src/main/java/sortpom/parameter/VerifyFailOnType.java
new file mode 100644
index 00000000..d67e8a84
--- /dev/null
+++ b/sorter/src/main/java/sortpom/parameter/VerifyFailOnType.java
@@ -0,0 +1,19 @@
+package sortpom.parameter;
+
+import sortpom.exception.FailureException;
+
+import java.util.Arrays;
+
+public enum VerifyFailOnType {
+ XMLELEMENTS, LINES, STRICT;
+
+ static VerifyFailOnType fromString(String verifyFailOn) {
+ if (verifyFailOn == null) {
+ throw new FailureException("verifyFailOn must be either xmlElements, lines or strict. Was: null");
+ }
+ return Arrays.stream(VerifyFailOnType.values())
+ .filter(e -> e.toString().equalsIgnoreCase(verifyFailOn))
+ .findAny()
+ .orElseThrow(() -> new FailureException("verifyFailOn must be either xmlElements, lines or strict. Was: " + verifyFailOn));
+ }
+}
diff --git a/sorter/src/test/java/sortpom/parameter/VerifyFailOnTypeTest.java b/sorter/src/test/java/sortpom/parameter/VerifyFailOnTypeTest.java
new file mode 100644
index 00000000..88510321
--- /dev/null
+++ b/sorter/src/test/java/sortpom/parameter/VerifyFailOnTypeTest.java
@@ -0,0 +1,62 @@
+package sortpom.parameter;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.function.Executable;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.NullAndEmptySource;
+import org.junit.jupiter.params.provider.ValueSource;
+import sortpom.exception.FailureException;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+/**
+ *
+ */
+class VerifyFailOnTypeTest {
+ @Test
+ void xmlElementsIgnoreCaseValueIsOk() {
+ PluginParameters pluginParameters = PluginParameters.builder()
+ .setVerifyFail("STOP", "XMLElements")
+ .build();
+
+ assertEquals(VerifyFailOnType.XMLELEMENTS, pluginParameters.verifyFailOn);
+ }
+
+ @Test
+ void linesIgnoreCaseValueIsOk() {
+ PluginParameters pluginParameters = PluginParameters.builder()
+ .setVerifyFail("STOP", "liNES")
+ .build();
+
+ assertEquals(VerifyFailOnType.LINES, pluginParameters.verifyFailOn);
+ }
+
+ @Test
+ void strictIgnoreCaseValueIsOk() {
+ PluginParameters pluginParameters = PluginParameters.builder()
+ .setVerifyFail("STOP", "stRIct")
+ .build();
+
+ assertEquals(VerifyFailOnType.STRICT, pluginParameters.verifyFailOn);
+ }
+
+ @ParameterizedTest
+ @NullAndEmptySource
+ @ValueSource(strings = "gurka")
+ void verifyFailFaultyValues(String value) {
+
+ final Executable testMethod = () -> PluginParameters.builder()
+ .setVerifyFail("STOP", value)
+ .build();
+
+ final FailureException thrown = assertThrows(FailureException.class, testMethod);
+
+ assertThat(thrown.getMessage(), is(equalTo("verifyFailOn must be either xmlElements, lines or strict. Was: " + value)));
+ }
+
+
+}
diff --git a/sorter/src/test/java/sortpom/parameter/VerifyFailParameterTest.java b/sorter/src/test/java/sortpom/parameter/VerifyFailParameterTest.java
index edd2a3c0..38472d5f 100644
--- a/sorter/src/test/java/sortpom/parameter/VerifyFailParameterTest.java
+++ b/sorter/src/test/java/sortpom/parameter/VerifyFailParameterTest.java
@@ -18,7 +18,7 @@ class VerifyFailParameterTest {
@Test
void stopIgnoreCaseValueIsOk() {
PluginParameters pluginParameters = PluginParameters.builder()
- .setVerifyFail("sToP")
+ .setVerifyFail("sToP", "strict")
.build();
assertEquals(VerifyFailType.STOP, pluginParameters.verifyFailType);
@@ -27,7 +27,7 @@ void stopIgnoreCaseValueIsOk() {
@Test
void warnIgnoreCaseValueIsOk() {
PluginParameters pluginParameters = PluginParameters.builder()
- .setVerifyFail("wArN")
+ .setVerifyFail("wArN", "strict")
.build();
assertEquals(VerifyFailType.WARN, pluginParameters.verifyFailType);
@@ -36,7 +36,7 @@ void warnIgnoreCaseValueIsOk() {
@Test
void sortIgnoreCaseValueIsOk() {
PluginParameters pluginParameters = PluginParameters.builder()
- .setVerifyFail("sOrT")
+ .setVerifyFail("sOrT", "strict")
.build();
assertEquals(VerifyFailType.SORT, pluginParameters.verifyFailType);
@@ -48,7 +48,7 @@ void sortIgnoreCaseValueIsOk() {
void verifyFailFaultyValues(String value) {
final Executable testMethod = () -> PluginParameters.builder()
- .setVerifyFail(value)
+ .setVerifyFail(value, "strict")
.build();
final FailureException thrown = assertThrows(FailureException.class, testMethod);
diff --git a/sorter/src/test/java/sortpom/util/SortPomImplUtil.java b/sorter/src/test/java/sortpom/util/SortPomImplUtil.java
index ee5c50ba..1a8f072f 100644
--- a/sorter/src/test/java/sortpom/util/SortPomImplUtil.java
+++ b/sorter/src/test/java/sortpom/util/SortPomImplUtil.java
@@ -35,6 +35,7 @@ public class SortPomImplUtil {
private boolean indentBLankLines = false;
private boolean keepTimestamp = false;
private String verifyFail = "SORT";
+ private String verifyFailOn = "xmlElements";
private String encoding = "UTF-8";
private File testpom;
private String violationFile;
@@ -210,6 +211,11 @@ public SortPomImplUtil verifyFail(String verifyFail) {
return this;
}
+ public SortPomImplUtil verifyFailOn(String verifyFailOn) {
+ this.verifyFailOn = verifyFailOn;
+ return this;
+ }
+
public SortPomImplUtil backupFileExtension(String backupFileExtension) {
this.testPomBackupExtension = backupFileExtension;
return this;
@@ -244,7 +250,7 @@ private PluginParameters getPluginParameters() {
.setIndent(nrOfIndentSpace, indentBLankLines)
.setSortEntities(sortDependencies, sortPlugins, sortProperties, sortModules, sortExecutions)
.setSortOrder(defaultOrderFileName, predefinedSortOrder)
- .setVerifyFail(verifyFail)
+ .setVerifyFail(verifyFail, verifyFailOn)
.setTriggers(ignoreLineSeparators)
.build();
}