%PDF- %PDF-
| Direktori : /proc/self/root/lib/python3/dist-packages/nose2/tests/functional/ |
| Current File : //proc/self/root/lib/python3/dist-packages/nose2/tests/functional/test_coverage.py |
import os
import os.path
import unittest
from nose2.tests._common import FunctionalTestCase, support_file
class TestCoverage(FunctionalTestCase):
def assertProcOutputPattern(self, proc, libname, stats,
total_stats=None, assert_exit_status=0):
"""
- proc: a popen proc to check output on
- libname: the name of the covered library, to build the output pattern
- stats: the output format for stats info
- total_stats: optional, distinct stats format for the TOTAL line
defaults to be the same as stats
"""
if total_stats is None:
total_stats = stats
expected = os.path.join(libname, 'mod1(.py)?')
expected = expected.replace('\\', r'\\')
expected = expected + stats
stdout, stderr = proc.communicate()
if assert_exit_status is not None:
self.assertEqual(assert_exit_status, proc.poll())
self.assertTestRunOutputMatches(
proc,
stderr=expected)
self.assertTestRunOutputMatches(
proc,
stderr='TOTAL\s+' + total_stats)
def test_run(self):
# ensure there is no .coverage file at the start of test
reportfile = support_file('scenario/test_with_module/.coverage')
try:
os.remove(reportfile)
except OSError:
pass
proc = self.runIn(
'scenario/test_with_module',
'-v',
'--with-coverage',
'--coverage=lib/'
)
self.assertProcOutputPattern(proc, 'lib', '\s+8\s+5\s+38%')
self.assertTrue(os.path.exists(reportfile))
def test_run_coverage_configs(self):
STATS = '\s+8\s+5\s+38%\s+1, 7-10'
TOTAL_STATS = '\s+8\s+5\s+38%\s'
proc = self.runIn(
'scenario/test_coverage_config/coveragerc',
'-v',
'--with-coverage',
'--coverage=covered_lib_coveragerc/'
)
self.assertProcOutputPattern(proc, 'covered_lib_coveragerc', STATS,
total_stats=TOTAL_STATS)
proc = self.runIn(
'scenario/test_coverage_config/nose2cfg',
'-v',
)
self.assertProcOutputPattern(proc, 'covered_lib_nose2cfg', STATS,
total_stats=TOTAL_STATS)
def test_run_with_mp(self):
# this test needs to be done with nose2 config because (as of 2019-12)
# multiprocessing does not allow each test process to pick up on
# command line arguments
# run with 4 processes -- this will fail if `coverage` isn't running in
# a "parallel" mode (with a "data suffix" set and combining results for
# reporting)
proc = self.runIn(
'scenario/test_coverage_config/nose2cfg',
'-v',
'--plugin=nose2.plugins.mp',
'-N', '4',
)
self.assertProcOutputPattern(
proc, 'covered_lib_nose2cfg',
r'\s+8\s+5\s+38%\s+1, 7-10', total_stats=r'\s+8\s+5\s+38%'
)
# FIXME: figure out why this fails and remove @skip
@unittest.skip('fails in testsuite but passes in real-world conditions')
def test_measures_imports(self):
proc = self.runIn(
'scenario/coverage_of_imports',
'-v',
'--with-coverage',
'--coverage=lib20171102/'
)
self.assertProcOutputPattern(proc, 'lib20171102',
stats='\s+3\s+0\s+100%')
def test_run_coverage_fail_under(self):
STATS = '\s+8\s+5\s+38%\s+1, 7-10'
TOTAL_STATS = '\s+8\s+5\s+38%\s'
proc = self.runIn(
'scenario/coverage_config_fail_under',
'-v',
'--with-coverage',
'--coverage=covered_lib/'
)
self.assertProcOutputPattern(proc, 'covered_lib', STATS,
total_stats=TOTAL_STATS,
assert_exit_status=1)
def test_run_coverage_fail_under2(self):
"""Check with coverage settings in config, not CLI"""
STATS = '\s+8\s+5\s+38%\s+1, 7-10'
TOTAL_STATS = '\s+8\s+5\s+38%\s'
proc = self.runIn(
'scenario/coverage_config_fail_under2',
'-v'
)
self.assertProcOutputPattern(proc, 'part_covered_lib', STATS,
total_stats=TOTAL_STATS,
assert_exit_status=1)