diff options
| author | milde <milde@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> | 2020-01-26 22:08:13 +0000 |
|---|---|---|
| committer | milde <milde@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> | 2020-01-26 22:08:13 +0000 |
| commit | a5b16480cf8ac90f5f528740eac20760974180ad (patch) | |
| tree | 6ad75e69e9fd1d944e0f6f9cfec58ccbfcb5c40f /docutils/test | |
| parent | 29f534f115790deba9b6c4afe35bceb2725704b2 (diff) | |
| download | docutils-a5b16480cf8ac90f5f528740eac20760974180ad.tar.gz | |
VersionInfo fixes
* Raise ValueError for invalid values.
* Provide default values.
* Fix comparison to ordinary tuples.
(Test for equality still fails, because __eg__() is not called
when comparing a namedtuple subclass to a tuple!)
git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk@8468 929543f6-e4f2-0310-98a6-ba3bd3dd1d04
Diffstat (limited to 'docutils/test')
| -rw-r--r-- | docutils/test/test__init__.py | 106 |
1 files changed, 88 insertions, 18 deletions
diff --git a/docutils/test/test__init__.py b/docutils/test/test__init__.py index c66f97a02..e78d167b8 100644 --- a/docutils/test/test__init__.py +++ b/docutils/test/test__init__.py @@ -14,6 +14,7 @@ import sys import DocutilsTestSupport # must be imported before docutils import docutils import docutils.utils +from docutils import VersionInfo if sys.version_info >= (3, 0): @@ -33,32 +34,41 @@ class ApplicationErrorTests(unittest.TestCase): class VersionInfoTests(unittest.TestCase): + def test_VersionInfo(self): + # arguments may use keywords + self.assertEqual(VersionInfo(0, 1, 2, 'beta', 3, False), + VersionInfo(major=0, minor=1, micro=2, + releaselevel='beta', serial=3, + release=False)) + # check defaults: + self.assertEqual(VersionInfo(), + VersionInfo(0, 0, 0, releaselevel='final', + serial=0, release=True)) + + def test_VersionInfo_value_check(self): + # releaselevel must be one of ('alpha', 'beta', 'candidate', 'final') + with self.assertRaises(ValueError): + VersionInfo(0, 1, 0, 'gamma') + # releaselevel 'final' must not be used with development versions + with self.assertRaises(ValueError): + VersionInfo(0, 1, releaselevel='final', release=False) + # "serial" must be 0 for final releases' + with self.assertRaises(ValueError): + VersionInfo(0, 1, releaselevel='final', serial=1) + def test__version_info__(self): + """Ensure that the current __version_info__ is valid.""" + releaselevels = ('alpha', 'beta', 'candidate', 'final') + self.assertEqual(len(docutils.__version_info__), 6) self.assertEqual(type(docutils.__version_info__.major), int) self.assertEqual(type(docutils.__version_info__.minor), int) self.assertEqual(type(docutils.__version_info__.micro), int) - self.assertEqual(type(docutils.__version_info__.releaselevel), str) - self.assertEqual(type(docutils.__version_info__.serial), int) - self.assertEqual(type(docutils.__version_info__.release), bool) - - releaselevels = ('alpha', 'beta', 'candidate', 'final') self.assertTrue( docutils.__version_info__.releaselevel in releaselevels) + self.assertEqual(type(docutils.__version_info__.serial), int) + self.assertEqual(type(docutils.__version_info__.release), bool) - if (docutils.__version_info__.releaselevel == 'final'): - # releaselevel 'final' must not be used with development versions - # (leads to wrong version ordering of the related __version__): - # - # Within a numeric release (1.0, 2.7.3), the following suffixes - # are permitted and MUST be ordered as shown: - # - # .devN, aN, bN, rcN, <no suffix>, .postN - # - # https://www.python.org/dev/peps/pep-0440/#summary-of-permitted-suffixes-and-relative-ordering - self.assertTrue(docutils.__version_info__.release) - # pre-release serial number must be 0 for final releases: - self.assertEqual(docutils.__version_info__.serial, 0) def test__version__(self): """Test that __version__ is equivalent to __version_info__.""" @@ -66,6 +76,66 @@ class VersionInfoTests(unittest.TestCase): docutils.utils.version_identifier(docutils.__version_info__), docutils.__version__) + def test_version_info_comparing(self): + """Test comparing of __version_info__ instances.""" + + # Example development cycle: + devcycle = ('0.1a.dev 0.1a 0.1a1.dev ' + '0.1b.dev 0.1b 0.1b1.dev ' + '0.1rc1.dev 0.1rc1 0.1rc2.dev ' + '0.1 0.1.1b.dev 0.1.1b 0.1.1 ' + '0.2b.dev 0.2b 0.2') + # corresponding version_info values: + versioninfos = [VersionInfo(0, 1, 0, 'alpha', 0, False), + VersionInfo(0, 1, 0, 'alpha', 0, True), + VersionInfo(0, 1, 0, 'alpha', 1, False), + VersionInfo(0, 1, 0, 'beta', 0, False), + VersionInfo(0, 1, 0, 'beta', 0, True), + VersionInfo(0, 1, 0, 'beta', 1, False), + VersionInfo(0, 1, 0, 'candidate', 1, False), + VersionInfo(0, 1, 0, 'candidate', 1, True), + VersionInfo(0, 1, 0, 'candidate', 2, False), + VersionInfo(0, 1, 0, 'final', 0, True), + VersionInfo(0, 1, 1, 'beta', 0, False), + VersionInfo(0, 1, 1, 'beta', 0, True), + VersionInfo(0, 1, 1, 'final', 0, True), + VersionInfo(0, 2, 0, 'beta', 0, False), + VersionInfo(0, 2, 0, 'beta', 0, True), + VersionInfo(0, 2, 0, 'final', 0, True), + ] + # transform to version strings + versions = [docutils.utils.version_identifier(vinfo) + for vinfo in versioninfos] + + # ensure version infos corresponding to the dev cycle are ascending + self.assertEqual(versions, devcycle.split()) + self.assertEqual(versioninfos, sorted(versioninfos)) + + def test_version_info_tuple_comparing(self): + """Test comparing of __version_info__ instances to tuples.""" + + # {<version string>: <version info>} + v01b = VersionInfo(0, 1, 0, 'beta', 0, True) + v01 = VersionInfo(0, 1, 0, 'final', 0, True) + v02b_dev = VersionInfo(0, 2, 0, 'beta', 0, False) + + # compare to ordinary tuples: + self.assertTrue(v01b < (0, 2)) + self.assertTrue((0, 2) > v01b) + self.assertTrue(v01b < (0, 1)) + self.assertTrue((0, 1) > v01b) + self.assertTrue(v01 <= (0, 1)) + self.assertTrue(v01 >= (0, 1)) + self.assertTrue((0, 1) <= v01) + self.assertTrue((0, 1) >= v01) + self.assertTrue(v02b_dev > (0, 1)) + self.assertTrue((0, 1) < v02b_dev) + # Test for equality requires complete tuple, because __eg__() is + # not called when comparing a namedtuple subclass to a tuple: + self.assertTrue((0, 1, 0, 'final', 0, True) == v01) + # self.assertTrue((0, 1) == v01) # fails + # self.assertTrue(v01 == (0, 1)) # fails + if __name__ == '__main__': unittest.main() |
