From 911a4f2ceb37c2e0187fc854b904afdde1d5e33a Mon Sep 17 00:00:00 2001 From: "Andreas Penski (init)" Date: Wed, 19 Aug 2020 14:03:58 +0200 Subject: [PATCH] (fix) return code 0 on assertion check --- CHANGELOG.md | 1 + .../validationtool/cmd/InternalCheck.java | 25 ++++++++++++++++--- .../kosit/validationtool/cmd/Validator.java | 8 +++--- .../validationtool/impl/DefaultCheck.java | 6 +++++ 4 files changed, 32 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c61706c..cc30047 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - read saxon XdmNode with InputFactory - [CLI] custom output without the various log messages - [CLI] options to set the log level (`-X` = full debug output, `-l ` set a specific level) +- [CLI] return code ist <> 0 on rejected results ### Changed - InputFactory has methods to read any java.xml.transform.Source as Input not only StreamSources diff --git a/src/main/java/de/kosit/validationtool/cmd/InternalCheck.java b/src/main/java/de/kosit/validationtool/cmd/InternalCheck.java index ec6f0c6..93ddd4b 100644 --- a/src/main/java/de/kosit/validationtool/cmd/InternalCheck.java +++ b/src/main/java/de/kosit/validationtool/cmd/InternalCheck.java @@ -21,6 +21,7 @@ package de.kosit.validationtool.cmd; import java.io.PrintWriter; import java.nio.file.Path; +import java.text.MessageFormat; import java.util.Comparator; import java.util.Map; import java.util.stream.Collectors; @@ -40,7 +41,6 @@ import de.kosit.validationtool.cmd.report.Line; import de.kosit.validationtool.impl.DefaultCheck; import de.kosit.validationtool.impl.tasks.CheckAction; - /** * Simple Erweiterung der Klasse {@link DefaultCheck} um das Ergebnis der Assertion-Prüfung auszwerten und auszugeben. * Diese Klasse stellt keine fachlicher Erweiterung des eigentlichen Prüfvorganges dar! @@ -80,19 +80,36 @@ class InternalCheck extends DefaultCheck { return result; } - boolean printAndEvaluate(final Map results) { + void printResults(final Map results) { final PrintWriter writer = new PrintWriter(System.out);// NOSONAR + writer.write("Results:\n"); writer.write(createResultGrid(results).render()); writer.write(createStatusLine(results)); + writer.write(createAssertionStatus()); writer.flush(); + } + + private String createAssertionStatus() { + final Line line = new Line(); if (this.failedAssertions > 0) { log.error("Assertion check failed.\n\nAssertions run: {}, Assertions failed: {}\n", this.checkAssertions, this.failedAssertions); + line.add(MessageFormat.format("Assertions run: {0}, Assertions failed: ", this.checkAssertions)); + line.add(this.failedAssertions, Code.RED); } else if (this.checkAssertions > 0) { log.info("Assertion check successful.\n\nAssertions run: {}, Assertions failed: {}\n", this.checkAssertions, this.failedAssertions); + line.add(MessageFormat.format("Assertions run: {0}, Assertions failed: {1}", this.checkAssertions, this.failedAssertions)); } - return this.failedAssertions == 0 && results.entrySet().stream().allMatch(e -> e.getValue().isAcceptable()); + return line.render(true, false); + } + + @Override + public boolean isSuccessful(final Map results) { + if (this.checkAssertions > 0) { + return this.failedAssertions == 0; + } + return super.isSuccessful(results); } private static String createStatusLine(final Map results) { @@ -105,7 +122,7 @@ class InternalCheck extends DefaultCheck { if (errors > 0) { line.add(" Processing errors: ").add(errors, Code.RED); } - return line.render(); + return line.render(true, false); } private static Grid createResultGrid(final Map results) { diff --git a/src/main/java/de/kosit/validationtool/cmd/Validator.java b/src/main/java/de/kosit/validationtool/cmd/Validator.java index b67329f..2303f6e 100644 --- a/src/main/java/de/kosit/validationtool/cmd/Validator.java +++ b/src/main/java/de/kosit/validationtool/cmd/Validator.java @@ -190,10 +190,10 @@ public class Validator { } final long processingTime = System.currentTimeMillis() - start; Printer.writeOut("Processing of {0} objects completed in {1}ms", targets.size(), processingTime); - Printer.writeOut("Results:"); - final boolean result = check.printAndEvaluate(results); + + check.printResults(results); log.info("Processing {} object(s) completed in {}ms", targets.size(), processingTime); - return result ? 0 : 1; + return check.isSuccessful(results) ? 0 : 1; } catch (final Exception e) { e.printStackTrace();// NOSONAR @@ -219,7 +219,7 @@ public class Validator { } private static void printScenarios(final Configuration configuration) { - Printer.writeOut("Loaded \"{0} {1}\" by {2} from {3} ", configuration.getName(), "1", configuration.getAuthor(), + Printer.writeOut("Loaded \"{0}\" by {1} from {2} ", configuration.getName(), configuration.getAuthor(), configuration.getDate()); Printer.writeOut("\nThe following scenarios are available:"); configuration.getScenarios().forEach(e -> { diff --git a/src/main/java/de/kosit/validationtool/impl/DefaultCheck.java b/src/main/java/de/kosit/validationtool/impl/DefaultCheck.java index 81baa2c..551ba91 100644 --- a/src/main/java/de/kosit/validationtool/impl/DefaultCheck.java +++ b/src/main/java/de/kosit/validationtool/impl/DefaultCheck.java @@ -21,9 +21,11 @@ package de.kosit.validationtool.impl; import static de.kosit.validationtool.impl.DateFactory.createTimestamp; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import lombok.Getter; @@ -101,6 +103,10 @@ public class DefaultCheck implements Check { return type; } + protected boolean isSuccessful(final Map results) { + return results.entrySet().stream().allMatch(e -> e.getValue().isAcceptable()); + } + @Override public Result checkInput(final Input input) { final CheckAction.Bag t = new CheckAction.Bag(input, createReport());