def report(self, cov, conf, morfs=None): """ Generate a part of json report for coveralls. `morfs` is a list of modules or filenames. `outfile` is a file object to write the json to. """ # pylint: disable=too-many-branches try: from coverage.report import Reporter # pylint: disable=import-outside-toplevel self.reporter = Reporter(cov, conf) except ImportError: # coverage >= 5.0 return self.report5(cov) for cu in self.reporter.find_file_reporters(morfs): try: _fn = self.reporter.coverage._analyze # pylint: disable=W0212 analyzed = _fn(cu) self.parse_file(cu, analyzed) except NoSource: if not self.reporter.config.ignore_errors: log.warning('No source for %s', cu.filename) except NotPython: # Only report errors for .py files, and only if we didn't # explicitly suppress those errors. if (cu.should_be_python() and not self.reporter.config.ignore_errors): log.warning('Source file is not python %s', cu.filename) return self.coverage
def dump_statistics(self, cov): """ Dump test run statistics :param cov: :return: """ from coverage.results import Numbers from coverage.report import Reporter from noc.tests.conftest import _stats as stats self.print("---[ Test session statistics ]------") cov.get_data() reporter = Reporter(cov, cov.config) totals = Numbers() for fr in reporter.find_file_reporters(None): analysis = cov._analyze(fr) totals += analysis.numbers n_passed = len(stats.get("passed", [])) n_skipped = len(stats.get("skipped", [])) n_error = len(stats.get("error", [])) n_failed = len(stats.get("failed", [])) if n_error or n_failed: status = "Failed" else: status = "Passed" self.print("Status : %s" % status) self.print("Tests Passed: : %s" % n_passed) self.print("Tests Skipped: : %s" % n_skipped) self.print("Tests Failed: : %s" % n_failed) self.print("Tests Error: : %s" % n_error) self.print("Coverage : %d%%" % totals.pc_covered) self.print("Coverage Statements : %s" % totals.n_statements) self.print("Coverage Missing : %s" % totals.n_missing) self.print("Coverage Excluded : %s" % totals.n_excluded)
def test_reporter_file_reporters(self): rep = Reporter(None, None) with warnings.catch_warnings(record=True) as warns: warnings.simplefilter("always") # Accessing this attribute will raise a DeprecationWarning. rep.file_reporters # pylint: disable=pointless-statement self.assertEqual(len(warns), 1) self.assertTrue(issubclass(warns[0].category, DeprecationWarning))
def report(self, cov, conf, morfs=None): """ Generate a part of json report for coveralls `morfs` is a list of modules or filenames. `outfile` is a file object to write the json to. """ # pylint: disable=too-many-branches try: from coverage.report import Reporter self.reporter = Reporter(cov, conf) except ImportError: # coverage >= 5.0 return self.report5(cov) units = None if hasattr(self.reporter, 'find_code_units'): self.reporter.find_code_units(morfs) else: units = self.reporter.find_file_reporters(morfs) if units is None: if hasattr(self.reporter, 'code_units'): units = self.reporter.code_units else: units = self.reporter.file_reporters for cu in units: try: _fn = self.reporter.coverage._analyze # pylint: disable=W0212 analyzed = _fn(cu) self.parse_file(cu, analyzed) except NoSource: if not self.reporter.config.ignore_errors: log.warning('No source for %s', cu.filename) except NotPython: # Only report errors for .py files, and only if we didn't # explicitly suppress those errors. if (cu.should_be_python() and not self.reporter.config.ignore_errors): log.warning('Source file is not python %s', cu.filename) except KeyError: version = [int(x) for x in __version__.split('.')] cov3x = version[0] < 4 cov40 = version[0] == 4 and version[1] < 1 if cov3x or cov40: raise CoverallsException( 'Old (<4.1) versions of coverage.py do not work ' 'consistently on new versions of Python. Please ' 'upgrade your coverage.py.' ) raise return self.coverage
def __init__(self, coverage, config): try: from coverage.report import Reporter except ImportError: # Support for coverage >= 5.0.1. from coverage.report import get_analysis_to_report class Reporter(object): def __init__(self, coverage, config): self.coverage = coverage self.config = config self._file_reporters = [] def find_file_reporters(self, morfs): return [fr for fr, _ in get_analysis_to_report(self.coverage, morfs)] self._reporter = Reporter(coverage, config)