commit - 4ba5f6ce4102f1025c7af6fb59093b8fab5bd87c
commit + d70a23bd7b159b2473a3a364b98a56becb81afb1
blob - 30faf0f920a3d246386bc341c4507c02db33a676
blob + 32229afe9e3b17402c5fb5fbf7ff8cdbf78aed86
--- README.md
+++ README.md
## Features:
- generate self-containing HTML report with anchor web-links
+- generate JUnit report
- generate patches for each mutant
blob - 71f14b87f91feebf8d675ca16719a501977b82b1
blob + 8af43e582c1b83a477cef6a5b4dde81880704551
--- generate.py
+++ generate.py
import datetime
import json
import os
-
+from junit_xml import TestSuite, TestCase
from jinja2 import Template
+FORMAT_TEXT = "text"
+FORMAT_HTML = "html"
+FORMAT_JUNIT = "junit"
+
STATUS_KILLED = "Killed"
STATUS_SURVIVED = "Survived"
STATUS_NO_COVERAGE = "NoCoverage"
</html>
"""
+def to_junit(json_data):
+ suites = []
+ for file_name, properties in json_data["files"].items():
+ source_code = properties.get("source", None)
+ test_cases = []
+ for mutants in properties["mutants"]:
+ # mutatorName = mutants.get("mutatorName", None)
+ mutant_id = mutants["id"]
+ replacement = mutants.get("replacement", None)
+ status = mutants.get("status", None)
+ stderr = ""
+ stdout = ""
+ if status == STATUS_SURVIVED:
+ stderr = replacement
+ stdout = replacement
+ test_case = TestCase(mutant_id, stderr, 0, stdout, stderr)
+ test_cases.append(test_case)
+ suites.append(TestSuite(file_name, test_cases))
+
+ return TestSuite.to_xml_string(suites)
+
def print_stdout(json_data):
schema_version = json_data.get("schemaVersion", None)
print("Version:", schema_version)
required=True, help="Path to a JSON data (required)")
parser.add_argument("--report", dest="report_path", default="",
help="Path to a generated report")
- parser.add_argument("--html", dest="html", action="store_true",
- help="Use HTML in a generated report")
+ parser.add_argument("--format", dest="format", default=FORMAT_TEXT,
+ help="Format of generated report")
args = parser.parse_args()
if not os.path.exists(args.data_path):
print("Version of schema ({}) used in a report is unsupported.".format(schema_version))
exit(1)
- template = DEFAULT_TEXT_TEMPLATE
- if args.html:
- template = DEFAULT_HTML_TEMPLATE
+ report_data = ""
+ if args.format == FORMAT_TEXT:
+ report_data = render_template(json_data, DEFAULT_TEXT_TEMPLATE)
+ elif args.format == FORMAT_HTML:
+ report_data = render_template(json_data, DEFAULT_HTML_TEMPLATE)
+ elif args.format == FORMAT_JUNIT:
+ report_data = to_junit(json_data)
+ else:
+ print("Unknown report format '{}'.".format(args.format))
+ exit(1)
- report_data = render_template(json_data, template)
if args.report_path:
with open(args.report_path, "w") as report:
report.write(report_data)
blob - 4f6007e1f0a673afba3c40376d5e019845c6bf03
blob + b27592b9a85fc689b78994aaedf0b40455d07775
--- requirements.txt
+++ requirements.txt
Jinja2==2.11.3
pytest==6.1.2
+junit-xml==1.9