misra.py: Update output according c97dc79 (#1917)

This commit is contained in:
Georgy Komarov 2019-06-25 01:42:13 +03:00 committed by Daniel Marjamäki
parent 709061ba54
commit 5d58b14db8
2 changed files with 29 additions and 2 deletions

View File

@ -2083,13 +2083,12 @@ class MisraChecker:
errmsg = self.ruleTexts[ruleNum].text errmsg = self.ruleTexts[ruleNum].text
if self.ruleTexts[ruleNum].misra_severity: if self.ruleTexts[ruleNum].misra_severity:
misra_severity = self.ruleTexts[ruleNum].misra_severity misra_severity = self.ruleTexts[ruleNum].misra_severity
errmsg += ''.join((' (', self.ruleTexts[ruleNum].misra_severity, ')'))
cppcheck_severity = self.ruleTexts[ruleNum].cppcheck_severity cppcheck_severity = self.ruleTexts[ruleNum].cppcheck_severity
elif len(self.ruleTexts) == 0: elif len(self.ruleTexts) == 0:
errmsg = 'misra violation (use --rule-texts=<file> to get proper output)' errmsg = 'misra violation (use --rule-texts=<file> to get proper output)'
else: else:
return return
cppcheckdata.reportError(location, cppcheck_severity, errmsg, 'misra', errorId) cppcheckdata.reportError(location, cppcheck_severity, errmsg, 'misra', errorId, misra_severity)
if not misra_severity in self.violations: if not misra_severity in self.violations:
self.violations[misra_severity] = [] self.violations[misra_severity] = []

View File

@ -1,4 +1,5 @@
# python -m pytest addons/test/test-misra.py # python -m pytest addons/test/test-misra.py
import json
import pytest import pytest
import sys import sys
try: try:
@ -101,6 +102,33 @@ def test_rules_misra_severity(checker):
assert(checker.ruleTexts[2104].misra_severity == '') assert(checker.ruleTexts[2104].misra_severity == '')
def test_extra_output_from_misra_py(checker):
# Extra data generated by misra.py addon are available only through --cli option.
checker.loadRuleTexts("./addons/test/assets/misra_rules_dummy.txt")
with CapturingStderr() as output:
checker.parseDump("./addons/test/misra-test.c.dump")
captured = ''.join(output.captured)
assert("Mandatory" in captured)
assert("Required" in captured)
assert("Advisory" in captured)
sys.argv.append("--cli")
checker.loadRuleTexts("./addons/test/assets/misra_rules_dummy.txt")
with CapturingStdout() as output:
checker.parseDump("./addons/test/misra-test.c.dump")
sys.argv.remove("--cli")
json_output = {}
for line in output.captured:
try:
json_line = json.loads(line)
json_output[json_line['errorId']] = json_line
except ValueError:
pass
assert("Mandatory" in json_output['c2012-10.4']['extra'])
assert("Required" in json_output['c2012-21.3']['extra'])
assert("Advisory" in json_output['c2012-20.1']['extra'])
def test_rules_cppcheck_severity(checker): def test_rules_cppcheck_severity(checker):
checker.loadRuleTexts("./addons/test/assets/misra_rules_dummy.txt") checker.loadRuleTexts("./addons/test/assets/misra_rules_dummy.txt")
with CapturingStderr() as output: with CapturingStderr() as output: