diff --git a/src/main/java/edu/hm/hafner/coverage/CoverageParser.java b/src/main/java/edu/hm/hafner/coverage/CoverageParser.java index d39ffc9b..db2122a1 100644 --- a/src/main/java/edu/hm/hafner/coverage/CoverageParser.java +++ b/src/main/java/edu/hm/hafner/coverage/CoverageParser.java @@ -18,9 +18,47 @@ * @author Ullrich Hafner */ public abstract class CoverageParser implements Serializable { + /** + * Defines how to handle fatal errors during parsing. + */ + public enum ProcessingMode { + /** All fatal errors will be ignored and logged. */ + IGNORE_ERRORS, + /** An exception will be thrown if a fatal error is detected. */ + FAIL_FAST + } + private static final long serialVersionUID = 3941742254762282096L; private transient TreeStringBuilder treeStringBuilder = new TreeStringBuilder(); + private final ProcessingMode processingMode; // since 0.26.0 + + /** + * Creates a new instance of {@link CoverageParser}. + * + * @param processingMode + * determines whether to ignore errors + */ + protected CoverageParser(final ProcessingMode processingMode) { + this.processingMode = processingMode; + } + + /** + * Creates a new instance of {@link CoverageParser} that will fail on all errors. + */ + protected CoverageParser() { + this(ProcessingMode.FAIL_FAST); + } + + /** + * Returns whether to ignore errors or to fail fast. + * + * @return true if errors should be ignored, false if an exception should be thrown on errors + */ + protected boolean ignoreErrors() { + return processingMode == ProcessingMode.IGNORE_ERRORS; + } + /** * Parses a report provided by the given reader. * diff --git a/src/main/java/edu/hm/hafner/coverage/parser/CoberturaParser.java b/src/main/java/edu/hm/hafner/coverage/parser/CoberturaParser.java index efb6752f..d2452d81 100644 --- a/src/main/java/edu/hm/hafner/coverage/parser/CoberturaParser.java +++ b/src/main/java/edu/hm/hafner/coverage/parser/CoberturaParser.java @@ -63,25 +63,21 @@ public class CoberturaParser extends CoverageParser { private static final QName BRANCH = new QName("branch"); private static final QName CONDITION_COVERAGE = new QName("condition-coverage"); - private final boolean ignoreErrors; // since 0.26.0 - /** * Creates a new instance of {@link CoberturaParser}. */ public CoberturaParser() { - this(false); + this(ProcessingMode.FAIL_FAST); } /** * Creates a new instance of {@link CoberturaParser}. * - * @param ignoreErrors + * @param processingMode * determines whether to ignore errors */ - public CoberturaParser(final boolean ignoreErrors) { - super(); - - this.ignoreErrors = ignoreErrors; + public CoberturaParser(final ProcessingMode processingMode) { + super(processingMode); } @Override @@ -182,7 +178,7 @@ private Node readClassOrMethod(final XMLEventReader reader, final FileNode fileN } else if (METHOD.equals(nextElement.getName())) { Node methodNode = readClassOrMethod(reader, fileNode, nextElement, log); - if (node.hasChild(methodNode.getName()) && ignoreErrors) { + if (node.hasChild(methodNode.getName()) && ignoreErrors()) { log.logError("Skipping duplicate method '%s' for class '%s'", node.getName(), methodNode.getName()); } else { diff --git a/src/test/java/edu/hm/hafner/coverage/parser/CoberturaParserTest.java b/src/test/java/edu/hm/hafner/coverage/parser/CoberturaParserTest.java index 70b31056..26ac1a08 100644 --- a/src/test/java/edu/hm/hafner/coverage/parser/CoberturaParserTest.java +++ b/src/test/java/edu/hm/hafner/coverage/parser/CoberturaParserTest.java @@ -7,6 +7,7 @@ import edu.hm.hafner.coverage.Coverage; import edu.hm.hafner.coverage.Coverage.CoverageBuilder; +import edu.hm.hafner.coverage.CoverageParser.ProcessingMode; import edu.hm.hafner.coverage.CyclomaticComplexity; import edu.hm.hafner.coverage.FileNode; import edu.hm.hafner.coverage.FractionValue; @@ -46,7 +47,8 @@ private void verifyBranchCoverageOfLine61(final Node duplicateMethods) { @Test void shouldIgnoreDuplicateMethods() { - Node duplicateMethods = readReport("cobertura-duplicate-methods.xml", new CoberturaParser(true)); + Node duplicateMethods = readReport("cobertura-duplicate-methods.xml", + new CoberturaParser(ProcessingMode.IGNORE_ERRORS)); verifySmallTree(duplicateMethods); assertThat(getLog().hasErrors()).isTrue();