summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Reinhart <brian.r.reinhart@gmail.com>2015-03-24 12:42:01 -0700
committerJohn Szakmeister <john@szakmeister.net>2015-11-28 07:54:53 -0500
commit570a011469e83a8ecde857c07c5cb9c3fc317eee (patch)
tree07f4a58e4fbce50c929fd81aab4e8d30d3694583
parentfb4a919f171a80c3381a6408ac16508d91d94a26 (diff)
downloadnose-570a011469e83a8ecde857c07c5cb9c3fc317eee.tar.gz
Adds an option to specify the location of the coverage config file.
-rw-r--r--README.txt4
-rw-r--r--nose/plugins/cover.py15
-rw-r--r--unit_tests/test_cover_plugin.py86
3 files changed, 91 insertions, 14 deletions
diff --git a/README.txt b/README.txt
index e8650e0..59c8278 100644
--- a/README.txt
+++ b/README.txt
@@ -389,6 +389,10 @@ Options
Produce XML coverage information in file
+--cover-config-file=DEFAULT
+
+ Location of coverage config file [NOSE_COVER_CONFIG_FILE]
+
--pdb
Drop into debugger on failures or errors
diff --git a/nose/plugins/cover.py b/nose/plugins/cover.py
index fbe2e30..0276f2d 100644
--- a/nose/plugins/cover.py
+++ b/nose/plugins/cover.py
@@ -89,6 +89,11 @@ class Coverage(Plugin):
dest="cover_xml_file",
metavar="FILE",
help="Produce XML coverage information in file")
+ parser.add_option("--cover-config-file", action="store",
+ default=env.get('NOSE_COVER_CONFIG_FILE'),
+ dest="cover_config_file",
+ help="Location of coverage config file "
+ "[NOSE_COVER_CONFIG_FILE]")
def configure(self, options, conf):
"""
@@ -110,8 +115,8 @@ class Coverage(Plugin):
self.enabled = False
return
self.conf = conf
- self.coverErase = options.cover_erase
- self.coverTests = options.cover_tests
+ self.coverErase = bool(options.cover_erase)
+ self.coverTests = bool(options.cover_tests)
self.coverPackages = []
if options.cover_packages:
if isinstance(options.cover_packages, (list, tuple)):
@@ -135,11 +140,15 @@ class Coverage(Plugin):
if options.cover_xml:
self.coverXmlFile = options.cover_xml_file
log.debug('Will put XML coverage report in %s', self.coverXmlFile)
+ # Coverage uses True to mean default
+ self.coverConfigFile = True
+ if options.cover_config_file:
+ self.coverConfigFile = options.cover_config_file
if self.enabled:
self.status['active'] = True
self.coverInstance = coverage.coverage(auto_data=False,
branch=self.coverBranches, data_suffix=conf.worker,
- source=self.coverPackages)
+ source=self.coverPackages, config_file=self.coverConfigFile)
self.coverInstance._warn_no_data = False
self.coverInstance.is_worker = conf.worker
self.coverInstance.exclude('#pragma[: ]+[nN][oO] [cC][oO][vV][eE][rR]')
diff --git a/unit_tests/test_cover_plugin.py b/unit_tests/test_cover_plugin.py
index 62052f2..bc5d38b 100644
--- a/unit_tests/test_cover_plugin.py
+++ b/unit_tests/test_cover_plugin.py
@@ -5,21 +5,85 @@ from nose.plugins.cover import Coverage
from nose.tools import eq_
import unittest
+
class TestCoveragePlugin(object):
- def test_cover_packages_option(self):
- parser = OptionParser()
- c = Coverage()
- c.addOptions(parser)
- options, args = parser.parse_args(['test_can_be_disabled',
- '--cover-package=pkg1,pkg2,pkg3'])
- c.configure(options, Config())
- eq_(['pkg1', 'pkg2', 'pkg3'], c.coverPackages)
+ def test_cover_options_packages(self):
+ _test_options_helper('--cover-package', 'coverPackages',
+ ['pkg1', 'pkg2', 'pkg3'], [],
+ 'pkg1,pkg2,pkg3', 'NOSE_COVER_PACKAGE')
+
+ def test_cover_options_erase(self):
+ _test_options_helper('--cover-erase', 'coverErase',
+ True, False,
+ env_key='NOSE_COVER_ERASE')
+
+ def test_cover_options_tests(self):
+ _test_options_helper('--cover-tests', 'coverTests',
+ True, False,
+ env_key='NOSE_COVER_TESTS')
+
+ def test_cover_options_config_file(self):
+ c1, c2 = _test_options_helper('--cover-config-file', 'coverConfigFile',
+ 'not_default_config_file', True,
+ arg_value='not_default_config_file',
+ env_key='NOSE_COVER_CONFIG_FILE')
+
+ cov_info = c1.coverInstance.sysinfo()
+ for key, value in cov_info:
+ if key == 'config_files':
+ eq_(value, ['.coveragerc'])
+ break
+ else:
+ assert False, "coverage did not load default config file"
+
+ cov_info = c2.coverInstance.sysinfo()
+ for key, value in cov_info:
+ if key == 'config_files':
+ eq_(value, ['not_default_config_file'])
+ break
+ else:
+ assert False, "coverage did not load expected config file"
- env = {'NOSE_COVER_PACKAGE': 'pkg1,pkg2,pkg3'}
+
+def _test_options_helper(arg_option, cover_option,
+ expected_set, expected_not_set,
+ arg_value=None, env_key=None):
+ prefix_args = ['test_can_be_disabled', '--with-coverage']
+
+ # Assert that the default works as expected
+ parser = OptionParser()
+ c_arg_not_set = Coverage()
+ c_arg_not_set.addOptions(parser)
+ options, _ = parser.parse_args(prefix_args)
+ c_arg_not_set.configure(options, Config())
+ eq_(expected_not_set, getattr(c_arg_not_set, cover_option))
+
+ # Assert that the argument parser picks up the expected value
+ parser = OptionParser()
+ c_arg_set = Coverage()
+ c_arg_set.addOptions(parser)
+
+ args = arg_option
+ if arg_value is not None:
+ args += '=' + arg_value
+
+ options, _ = parser.parse_args(prefix_args + [args])
+ c_arg_set.configure(options, Config())
+ eq_(expected_set, getattr(c_arg_set, cover_option))
+
+ # If the option supports environment variables, check that too
+ if env_key is not None:
+ args = 'true'
+ if arg_value is not None:
+ args = arg_value
+
+ env = {env_key: args}
c = Coverage()
parser = OptionParser()
c.addOptions(parser, env)
- options, args = parser.parse_args(['test_can_be_disabled'])
+ options, _ = parser.parse_args(prefix_args)
c.configure(options, Config())
- eq_(['pkg1', 'pkg2', 'pkg3'], c.coverPackages)
+ eq_(expected_set, getattr(c, cover_option))
+
+ return c_arg_not_set, c_arg_set