Make cobertura parser tolerate empty arrays #88
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This will fix #82 along with some other potential errors.
Problem
the cobertura spec allows some empty tags like
<!ELEMENT packages (package*)>
, wherepackage*
means 0 or morepackage
elements.An xml like the one in the linked issue
Is an example of hoy the tag
packages
could be empty and still valid.The action does not handle this scenario, it assumes that all lists will be defined (i.e. have at least one element).
Solution
I went over the spec, and tweaked all the typescript definitions related to empty lists. An empty list in the xml will end up as an undefined key in its parent typescript interface, so making all of them conditional is the correct approach based on how the xml parser works. Also, for every list that is not part of https://github.com/clearlyip/code-coverage-report-action/blob/main/src/utils.ts#L49-L53 I also added an optional type to be either an array or a single element.