diff options
-rw-r--r-- | CHANGES.txt | 7 | ||||
-rw-r--r-- | coverage/__init__.py | 2 | ||||
-rw-r--r-- | coverage/version.py | 43 | ||||
-rw-r--r-- | doc/changes.rst | 9 | ||||
-rw-r--r-- | tests/test_misc.py | 38 |
5 files changed, 70 insertions, 29 deletions
diff --git a/CHANGES.txt b/CHANGES.txt index 4f7c0fc8..cfb9a999 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -30,12 +30,13 @@ Latest will convert v3.x pickle data files to v4.x JSON data files. Thanks, Alexander Todorov. Closes `issue 395`_. -- A new version identifier is available, `coverage.hexversion`, with semantics - identical to sys.hexversion. +- A new version identifier is available, `coverage.version_info`, a plain tuple + of values similar to `sys.version_info`_. .. _issue 392: https://bitbucket.org/ned/coveragepy/issues/392/run-append-doesnt-create-coverage-file .. _issue 395: https://bitbucket.org/ned/coveragepy/issues/395/rfe-read-pickled-files-as-well-for .. _issue 399: https://bitbucket.org/ned/coveragepy/issues/399/coverageexception-cant-combine-line-data +.. _sys.version_info: https://docs.python.org/3/library/sys.html#sys.version_info Version 4.0b1 --- 2 August 2015 @@ -352,7 +353,7 @@ Version 4.0a1 --- 27 September 2014 preventing paradoxical results, fixing `issue 284`_. - The XML report will now create the output directory if need be, fixing - `issue 285`_. Thanks Chris Rose. + `issue 285`_. Thanks, Chris Rose. - HTML reports no longer raise UnicodeDecodeError if a Python file has undecodable characters, fixing `issue 303`_ and `issue 331`_. diff --git a/coverage/__init__.py b/coverage/__init__.py index cc4b350e..d132e4a7 100644 --- a/coverage/__init__.py +++ b/coverage/__init__.py @@ -8,7 +8,7 @@ http://nedbatchelder.com/code/coverage """ -from coverage.version import hexversion, __version__, __url__ +from coverage.version import __version__, __url__, version_info from coverage.control import Coverage, process_startup from coverage.data import CoverageData diff --git a/coverage/version.py b/coverage/version.py index 523405d6..1b60626a 100644 --- a/coverage/version.py +++ b/coverage/version.py @@ -4,21 +4,28 @@ """The version and URL for coverage.py""" # This file is exec'ed in setup.py, don't import anything! -_maj = 4 -_min = 0 -_mic = 0 -_rel = 0xb -_ser = 2 - -hexversion = (_maj << 24) + (_min << 16) + (_mic << 8) + (_rel << 4) + _ser - -__version__ = "%d.%d" % (_maj, _min) -if _mic: - __version__ += ".%d" % (_mic,) -if _rel != 0xf: - __version__ += "%x%d" % (_rel, _ser) - -__url__ = "https://coverage.readthedocs.org" -if _rel != 0xf: - # For pre-releases, use a version-specific URL. - __url__ += "/en/coverage-" + __version__ +# Same semantics as sys.version_info. +version_info = (4, 0, 0, 'beta', 2) + + +def _make_version(major, minor, micro, releaselevel, serial): + """Create a readable version string from version_info tuple components.""" + assert releaselevel in ['alpha', 'beta', 'candidate', 'final'] + version = "%d.%d" % (major, minor) + if micro: + version += ".%d" % (micro,) + if releaselevel != 'final': + version += "%s%d" % (releaselevel[0], serial) + return version + + +def _make_url(major, minor, micro, releaselevel, serial): + url = "https://coverage.readthedocs.org" + if releaselevel != 'final': + # For pre-releases, use a version-specific URL. + url += "/en/coverage-" + _make_version(major, minor, micro, releaselevel, serial) + return url + + +__version__ = _make_version(*version_info) +__url__ = _make_url(*version_info) diff --git a/doc/changes.rst b/doc/changes.rst index 7ef96fbd..4feb12b2 100644 --- a/doc/changes.rst +++ b/doc/changes.rst @@ -141,8 +141,8 @@ New features: - The COVERAGE_DEBUG environment variable can be used to set the ``[run] debug`` configuration option to control what internal operations are logged. -- A new version identifier is available, `coverage.hexversion`, with semantics - identical to sys.hexversion. +- A new version identifier is available, `coverage.version_info`, a plain tuple + of values similar to `sys.version_info`_. Improvements: @@ -210,7 +210,7 @@ Bug fixes: preventing paradoxical results, fixing `issue 284`_. - Branch coverage couldn't properly handle certain extremely long files. This - is now fixed. (`issue 359`_). + is now fixed, closing `issue 359`_. - Branch coverage didn't understand yield statements properly. Mickie Betz persisted in pursuing this despite Ned's pessimism. Fixes `issue 308`_ and @@ -222,7 +222,7 @@ Bug fixes: - Empty files are now reported as 100% covered in the XML report, not 0% covered. -- The XML report will now create the output directory if need be. Thanks Chris +- The XML report will now create the output directory if need be. Thanks, Chris Rose. - HTML reports no longer raise UnicodeDecodeError if a Python file has @@ -238,6 +238,7 @@ Bug fixes: .. _issue 324: https://bitbucket.org/ned/coveragepy/issue/324/yield-in-loop-confuses-branch-coverage .. _issue 342: https://bitbucket.org/ned/coveragepy/issue/342/console-and-html-coverage-reports-differ .. _issue 359: https://bitbucket.org/ned/coveragepy/issue/359/xml-report-chunk-error +.. _sys.version_info: https://docs.python.org/3/library/sys.html#sys.version_info .. _changes_371: diff --git a/tests/test_misc.py b/tests/test_misc.py index 76194ef6..b5957b24 100644 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -5,8 +5,10 @@ import sys +import coverage +from coverage.version import _make_url, _make_version from coverage.misc import Hasher, file_be_gone -from coverage import __version__, __url__ + from tests.coveragetest import CoverageTest @@ -60,6 +62,36 @@ class RemoveFileTest(CoverageTest): file_be_gone(".") +class VersionTest(CoverageTest): + """Tests of version.py""" + + run_in_temp_dir = False + + def test_version_info(self): + # Make sure we didn't screw up the version_info tuple. + self.assertIsInstance(coverage.version_info, tuple) + self.assertEqual([type(d) for d in coverage.version_info], [int, int, int, str, int]) + self.assertIn(coverage.version_info[3], ['alpha', 'beta', 'candidate', 'final']) + + def test_make_version(self): + self.assertEqual(_make_version(4, 0, 0, 'alpha', 0), "4.0a0") + self.assertEqual(_make_version(4, 0, 0, 'alpha', 1), "4.0a1") + self.assertEqual(_make_version(4, 0, 0, 'final', 0), "4.0") + self.assertEqual(_make_version(4, 1, 2, 'beta', 3), "4.1.2b3") + self.assertEqual(_make_version(4, 1, 2, 'final', 0), "4.1.2") + self.assertEqual(_make_version(5, 10, 2, 'candidate', 7), "5.10.2c7") + + def test_make_url(self): + self.assertEqual( + _make_url(4, 0, 0, 'final', 0), + "https://coverage.readthedocs.org" + ) + self.assertEqual( + _make_url(4, 1, 2, 'beta', 3), + "https://coverage.readthedocs.org/en/coverage-4.1.2b3" + ) + + class SetupPyTest(CoverageTest): """Tests of setup.py""" @@ -72,8 +104,8 @@ class SetupPyTest(CoverageTest): self.assertEqual(status, 0) out = output.splitlines() self.assertIn("measurement", out[0]) - self.assertEqual(out[1], __version__) - self.assertEqual(out[2], __url__) + self.assertEqual(out[1], coverage.__version__) + self.assertEqual(out[2], coverage.__url__) self.assertIn("Ned Batchelder", out[3]) def test_more_metadata(self): |