Skip to content

Commit

Permalink
Merge pull request #83 from jenkinsci/filename
Browse files Browse the repository at this point in the history
Add `fileName` as a parameter.
  • Loading branch information
uhafner authored Mar 6, 2024
2 parents a15d172 + ad6c7b1 commit c662a43
Show file tree
Hide file tree
Showing 15 changed files with 135 additions and 145 deletions.
43 changes: 27 additions & 16 deletions src/main/java/edu/hm/hafner/coverage/CoverageParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@
public abstract class CoverageParser implements Serializable {
private static final long serialVersionUID = 3941742254762282096L;

/** Error message when there are no results. */
public static final String EMPTY_MESSAGE = "No data found in the specified file.";
/** Toplevel module name. */
protected static final String EMPTY = "-";

Expand Down Expand Up @@ -70,23 +68,27 @@ protected boolean ignoreErrors() {
*
* @param reader
* the reader with the coverage information
* @param fileName
* the file name of the report
* @param log
* the logger to write messages to
*
* @return the root of the created tree
* @throws ParsingException
* if the XML content cannot be read
*/
public ModuleNode parse(final Reader reader, final FilteredLog log) {
var moduleNode = parseReport(reader, log);
public ModuleNode parse(final Reader reader, final String fileName, final FilteredLog log) {
var moduleNode = parseReport(reader, fileName, log);
getTreeStringBuilder().dedup();

Check warning on line 82 in src/main/java/edu/hm/hafner/coverage/CoverageParser.java

View workflow job for this annotation

GitHub Actions / Quality Monitor

Mutation survived

One mutation survived in line 82 (VoidMethodCallMutator)
Raw output
Survived mutations:
- removed call to edu/hm/hafner/util/TreeStringBuilder::dedup (org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator)
return moduleNode;
}

/**
* Returns the name of the specified element.
*
* @param event the event
* @param event
* the event
*
* @return the name
*/
protected QName getElementName(final XMLEvent event) {
Expand All @@ -103,31 +105,38 @@ protected QName getElementName(final XMLEvent event) {
/**
* Handles processing of empty results.
*
* @param log
* the log
* @param fileName
* the file name of the report
* @param isEmpty
* determines whether the results are empty
* @throws NoSuchElementException if the results are empty and errors should not be ignored
* @param log
* the log
*
* @throws NoSuchElementException
* if the results are empty and errors should not be ignored
*/
protected void handleEmptyResults(final FilteredLog log, final boolean isEmpty) {
protected void handleEmptyResults(final String fileName, final boolean isEmpty, final FilteredLog log) {
if (isEmpty) {
var emptyMessage = String.format("[%s] The processed file '%s' does not contain data.", getClass().getSimpleName(), fileName);
if (ignoreErrors()) {
log.logError(EMPTY_MESSAGE);
log.logError(emptyMessage);
}
else {
throw new NoSuchElementException(EMPTY_MESSAGE);
throw new NoSuchElementException(emptyMessage);
}
}
}

/**
* Handles processing of empty results.
*
* @param fileName
* the file name of the report
* @param log
* the log
*/
protected void handleEmptyResults(final FilteredLog log) {
handleEmptyResults(log, true);
protected void handleEmptyResults(final String fileName, final FilteredLog log) {
handleEmptyResults(fileName, true, log);
}

/**
Expand All @@ -151,14 +160,16 @@ public final TreeStringBuilder getTreeStringBuilder() {
*
* @param reader
* the reader with the coverage information
* @param fileName
* the file name of the report
* @param log
* the logger to write messages to
*
* @return the root of the created tree
* @throws ParsingException
* if the XML content cannot be read
*/
protected abstract ModuleNode parseReport(Reader reader, FilteredLog log);
protected abstract ModuleNode parseReport(Reader reader, String fileName, FilteredLog log);

protected static Optional<String> getOptionalValueOf(final StartElement element, final QName attribute) {
Attribute value = element.getAttributeByName(attribute);
Expand Down Expand Up @@ -193,7 +204,7 @@ protected static int parseInteger(final String value) {
}
}

protected static ParsingException createEofException() {
return new ParsingException("Unexpected end of file");
protected static ParsingException createEofException(final String fileName) {
return new ParsingException("Unexpected end of file '%s'", fileName);

Check warning on line 208 in src/main/java/edu/hm/hafner/coverage/CoverageParser.java

View workflow job for this annotation

GitHub Actions / Quality Monitor

Not covered line

Line 208 is not covered by tests
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,12 @@ QName getTestSuite() {
}

@Override
protected ModuleNode parseReport(final Reader reader, final FilteredLog log) {
protected ModuleNode parseReport(final Reader reader, final String fileName, final FilteredLog log) {
try {
var eventReader = new SecureXmlParserFactory().createXmlEventReader(reader);
var root = new ModuleNode(EMPTY);
var tests = readTestCases(eventReader, root);
handleEmptyResults(log, tests.isEmpty());
var root = new ModuleNode(fileName);
var tests = readTestCases(eventReader, root, fileName);
handleEmptyResults(fileName, tests.isEmpty(), log);
return root;
}
catch (XMLStreamException exception) {
Expand All @@ -62,7 +62,7 @@ protected ModuleNode parseReport(final Reader reader, final FilteredLog log) {
}

private List<TestCase> readTestCases(final XMLEventReader eventReader,
final ModuleNode root) throws XMLStreamException {
final ModuleNode root, final String fileName) throws XMLStreamException {
String suiteName = EMPTY;
var tests = new ArrayList<TestCase>();
while (eventReader.hasNext()) {
Expand All @@ -72,14 +72,14 @@ private List<TestCase> readTestCases(final XMLEventReader eventReader,
suiteName = getOptionalValueOf(event.asStartElement(), NAME).orElse(EMPTY);
}
else if (event.isStartElement() && getTestCase().equals(event.asStartElement().getName())) {
tests.add(readTestCase(eventReader, event.asStartElement(), suiteName, root));
tests.add(readTestCase(eventReader, event.asStartElement(), suiteName, root, fileName));
}
}
return tests;
}

abstract TestCase readTestCase(XMLEventReader reader, StartElement testCaseElement,
String suiteName, ModuleNode root) throws XMLStreamException;
String suiteName, ModuleNode root, String fileName) throws XMLStreamException;

protected String createId() {
return UUID.randomUUID().toString();

Check warning on line 85 in src/main/java/edu/hm/hafner/coverage/parser/AbstractTestParser.java

View workflow job for this annotation

GitHub Actions / Quality Monitor

Mutation survived

One mutation survived in line 85 (EmptyObjectReturnValsMutator)
Raw output
Survived mutations:
- replaced return value with "" for edu/hm/hafner/coverage/parser/AbstractTestParser::createId (org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator)
Expand Down
24 changes: 12 additions & 12 deletions src/main/java/edu/hm/hafner/coverage/parser/CoberturaParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -82,21 +82,21 @@ public CoberturaParser(final ProcessingMode processingMode) {
}

@Override
protected ModuleNode parseReport(final Reader reader, final FilteredLog log) {
protected ModuleNode parseReport(final Reader reader, final String fileName, final FilteredLog log) {
try {
var eventReader = new SecureXmlParserFactory().createXmlEventReader(reader);

var root = new ModuleNode(EMPTY); // Cobertura has no support for module names
handleEmptyResults(log, readModule(log, eventReader, root));
handleEmptyResults(fileName, readModule(eventReader, root, fileName, log), log);
return root;
}
catch (XMLStreamException exception) {
throw new ParsingException(exception);
}
}

private boolean readModule(final FilteredLog log, final XMLEventReader eventReader, final ModuleNode root)
throws XMLStreamException {
private boolean readModule(final XMLEventReader eventReader, final ModuleNode root,
final String fileName, final FilteredLog log) throws XMLStreamException {
boolean isEmpty = true;

while (eventReader.hasNext()) {
Expand All @@ -109,7 +109,7 @@ private boolean readModule(final FilteredLog log, final XMLEventReader eventRead
readSource(eventReader, root);
}
else if (PACKAGE.equals(tagName)) {
readPackage(eventReader, root, readName(startElement), log);
readPackage(eventReader, root, readName(startElement), fileName, log);
isEmpty = false;
}
}
Expand All @@ -119,7 +119,7 @@ else if (PACKAGE.equals(tagName)) {
}

private void readPackage(final XMLEventReader reader, final ModuleNode root,
final String packageName, final FilteredLog log) throws XMLStreamException {
final String packageName, final String fileName, final FilteredLog log) throws XMLStreamException {
var packageNode = root.findOrCreatePackageNode(packageName);

while (reader.hasNext()) {

Check warning on line 125 in src/main/java/edu/hm/hafner/coverage/parser/CoberturaParser.java

View workflow job for this annotation

GitHub Actions / Quality Monitor

Partially covered line

Line 125 is only partially covered, one branch is missing
Expand All @@ -130,7 +130,7 @@ private void readPackage(final XMLEventReader reader, final ModuleNode root,
if (CLASS.equals(element.getName())) {
var fileNode = createFileNode(element, packageNode);

readClassOrMethod(reader, fileNode, fileNode, element, log);
readClassOrMethod(reader, fileNode, fileNode, element, fileName, log);
}
}
else if (event.isEndElement()) {
Expand All @@ -155,9 +155,9 @@ private String getFileName(final String relativePath) {
}

@SuppressWarnings({"PMD.CyclomaticComplexity", "PMD.CognitiveComplexity"})
private void readClassOrMethod(final XMLEventReader reader,
final FileNode fileNode, final Node parentNode,
final StartElement element, final FilteredLog log) throws XMLStreamException {
private void readClassOrMethod(final XMLEventReader reader, final FileNode fileNode,
final Node parentNode, final StartElement element, final String fileName, final FilteredLog log)
throws XMLStreamException {
var lineCoverage = Coverage.nullObject(Metric.LINE);
var branchCoverage = Coverage.nullObject(Metric.BRANCH);

Expand Down Expand Up @@ -192,7 +192,7 @@ private void readClassOrMethod(final XMLEventReader reader,
}
}
else if (METHOD.equals(nextElement.getName())) {
readClassOrMethod(reader, fileNode, node, nextElement, log); // recursive call
readClassOrMethod(reader, fileNode, node, nextElement, fileName, log); // recursive call
}
}
else if (event.isEndElement()) {
Expand All @@ -206,7 +206,7 @@ else if (event.isEndElement()) {
}
}
}
throw createEofException();
throw createEofException(fileName);

Check warning on line 209 in src/main/java/edu/hm/hafner/coverage/parser/CoberturaParser.java

View workflow job for this annotation

GitHub Actions / Quality Monitor

Not covered line

Line 209 is not covered by tests
}

private Coverage computeLineCoverage(final int coverage) {
Expand Down
Loading

0 comments on commit c662a43

Please sign in to comment.