Skip to content

Commit

Permalink
#82 Started to add new parameter verifyFailOn
Browse files Browse the repository at this point in the history
  • Loading branch information
Björn Ekryd committed Jan 2, 2021
1 parent 0c3181a commit 1c14976
Show file tree
Hide file tree
Showing 10 changed files with 164 additions and 9 deletions.
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<sortpom>
<file filename="@POM_PATH@">
<violation>The xml element &lt;modelVersion&gt; should be placed before &lt;name&gt;</violation>
</file>
</sortpom>
1 change: 1 addition & 0 deletions maven-plugin/src/it/verify-fail-on/invoker.properties
@@ -0,0 +1 @@
invoker.goals=-e clean verify
36 changes: 36 additions & 0 deletions maven-plugin/src/it/verify-fail-on/pom.xml
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.ekryd.sortpom.its</groupId>
<artifactId>default-configuration</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>SortPom Plugin :: ITs :: Default configuration</name>
<description>Test default parameters of the plugin</description>
<url>no-url</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<build>
<plugins>
<plugin>
<groupId>com.github.ekryd.sortpom</groupId>
<artifactId>sortpom-maven-plugin</artifactId>
<version>@pom.version@</version>
<executions>
<execution>
<goals>
<goal>verify</goal>
</goals>
<configuration>
<violationFilename>target/sortpom_reports/violation.xml</violationFilename>
<verifyFail>warn</verifyFail>
<verifyFailOn>lines</verifyFailOn>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
14 changes: 14 additions & 0 deletions 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 <modelVersion> should be placed before <name>')
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
8 changes: 7 additions & 1 deletion maven-plugin/src/main/java/sortpom/VerifyMojo.java
Expand Up @@ -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'.
*/
Expand All @@ -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);
Expand Down
11 changes: 8 additions & 3 deletions sorter/src/main/java/sortpom/parameter/PluginParameters.java
Expand Up @@ -23,14 +23,15 @@ 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;

private PluginParameters(File pomFile, boolean createBackupFile, String backupFileExtension, String violationFilename, String encoding,
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;
Expand All @@ -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;
}
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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;
}

Expand All @@ -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);
}
}

Expand Down
19 changes: 19 additions & 0 deletions 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));
}
}
62 changes: 62 additions & 0 deletions 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)));
}


}
Expand Up @@ -18,7 +18,7 @@ class VerifyFailParameterTest {
@Test
void stopIgnoreCaseValueIsOk() {
PluginParameters pluginParameters = PluginParameters.builder()
.setVerifyFail("sToP")
.setVerifyFail("sToP", "strict")
.build();

assertEquals(VerifyFailType.STOP, pluginParameters.verifyFailType);
Expand All @@ -27,7 +27,7 @@ void stopIgnoreCaseValueIsOk() {
@Test
void warnIgnoreCaseValueIsOk() {
PluginParameters pluginParameters = PluginParameters.builder()
.setVerifyFail("wArN")
.setVerifyFail("wArN", "strict")
.build();

assertEquals(VerifyFailType.WARN, pluginParameters.verifyFailType);
Expand All @@ -36,7 +36,7 @@ void warnIgnoreCaseValueIsOk() {
@Test
void sortIgnoreCaseValueIsOk() {
PluginParameters pluginParameters = PluginParameters.builder()
.setVerifyFail("sOrT")
.setVerifyFail("sOrT", "strict")
.build();

assertEquals(VerifyFailType.SORT, pluginParameters.verifyFailType);
Expand All @@ -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);
Expand Down
8 changes: 7 additions & 1 deletion sorter/src/test/java/sortpom/util/SortPomImplUtil.java
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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();
}
Expand Down

0 comments on commit 1c14976

Please sign in to comment.