Changed the storage format for code coverage in *coverage.json, in order to be able to calculate code coverage percentages for a subset of tested files.

- Legacy-Id: 9953
This commit is contained in:
Henrik Levkowetz 2015-08-01 15:07:21 +00:00
parent 7a059c908a
commit a23846c8be
2 changed files with 32 additions and 14 deletions

View file

@ -7,6 +7,8 @@ from django.conf import settings
from django.core.management.base import BaseCommand, CommandError
from django.utils.six import string_types
import debug # pyflakes:ignore
class Command(BaseCommand):
help = "Compare coverage between the latest release and the latest test run."
option_list = BaseCommand.option_list + (
@ -49,7 +51,9 @@ class Command(BaseCommand):
self.stdout.write("\nShowing coverage differeces between %s and %s:\n" % (mversion, lversion))
for section in sections:
mcoverage = master_coverage[section]["covered"]
mformat = master_coverage[section].get("format", 1)
lcoverage = latest_coverage[section]["covered"]
lformat = latest_coverage[section].get("format", 1)
#
mkeys = mcoverage.keys()
lkeys = lcoverage.keys()
@ -57,16 +61,31 @@ class Command(BaseCommand):
keys = list(lkeys)
keys.sort()
header_written = False
for key in keys:
if not key in mcoverage:
mcoverage[key] = None
if type(mcoverage[key]) is float or type(lcoverage[key]) is float:
mval = ("%5.1f" % (100*mcoverage[key])) if mcoverage[key] else "-"
lval = ("%5.1f %%" % (100*lcoverage[key])) if lcoverage[key] else "- "
mlines, mcov = None, None
else:
mval = mcoverage[key]
lval = lcoverage[key]
if mcoverage[key] != lcoverage[key]:
if mformat == 1:
mlines, mcov = None, mcoverage[key]
elif mformat == 2:
mlines, mcov = mcoverage[key]
else:
raise CommandError("The release coverage data has an unknown format ('%s'), quitting." % mformat)
if lformat == 1:
llines, lcov = None, lcoverage[key]
elif lformat == 2:
llines, lcov = lcoverage[key]
else:
raise CommandError("The latest coverage data has an unknown format ('%s'), quitting." % lformat)
if type(mcov) is float or type(lcov) is float:
mval = ("%5.1f" % (100*mcov)) if mcov else "-"
lval = ("%5.1f %%" % (100*lcov)) if lcov else "- "
else:
mval = mcov
lval = lcov
if mcov != lcov:
if not header_written:
self.stdout.write(self.diff_line_format %
("\n%s"%section.capitalize(), mversion[:7], lversion[:7]))

View file

@ -178,12 +178,12 @@ class CoverageReporter(Reporter):
self.find_code_units(None)
total = Numbers()
result = {"coverage": 0.0, "covered": {}}
result = {"coverage": 0.0, "covered": {}, "format": 2, }
for cu in self.code_units:
try:
analysis = self.coverage._analyze(cu)
nums = analysis.numbers
result["covered"][cu.name] = nums.pc_covered/100.0
result["covered"][cu.name] = (nums.n_statements, nums.pc_covered/100.0)
total += nums
except KeyboardInterrupt: # pragma: not covered
raise
@ -221,7 +221,7 @@ class CoverageTest(TestCase):
if self.runner.run_full_test_suite:
# Permit 0.02% variation in results -- otherwise small code changes become a pain
fudge_factor = 0.0002 # 0.02% -- a small change in the last digit we show
self.assertGreaterEqual(test_coverage, master_coverage-fudge_factor,
self.assertGreaterEqual(test_coverage, master_coverage - fudge_factor,
msg = "The %s coverage percentage is now lower (%.2f%%) than for version %s (%.2f%%)" %
( test, test_coverage*100, latest_coverage_version, master_coverage*100, ))
self.assertLessEqual(len(test_missing), len(master_missing),
@ -331,14 +331,17 @@ class IetfTestRunner(DiscoverRunner):
"template": {
"coverage": 0.0,
"covered": {},
"format": 1, # default format, coverage data in 'covered' are just fractions
},
"url": {
"coverage": 0.0,
"covered": {},
"format": 1,
},
"code": {
"coverage": 0.0,
"covered": {},
"format": 1,
},
}
@ -355,10 +358,6 @@ class IetfTestRunner(DiscoverRunner):
print " Changing TEMPLATE_STRING_IF_INVALID to '' during testing."
settings.TEMPLATE_STRING_IF_INVALID = ''
if settings.SERVE_CDN_FILES_LOCALLY_IN_DEV_MODE != True:
print " Changing SERVE_CDN_FILES_LOCALLY_IN_DEV_MODE to 'True' during testing."
settings.SERVE_CDN_FILES_LOCALLY_IN_DEV_MODE = True
assert not settings.IDTRACKER_BASE_URL.endswith('/')
# Try to set up an SMTP test server. In case other test runs are