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:
parent
7a059c908a
commit
a23846c8be
|
@ -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]))
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue