codekingpro/portable-devtools
114k
1"""Tests for distutils.version."""2 3import distutils4from distutils.version import LooseVersion, StrictVersion5 6import pytest7 8 9@pytest.fixture(autouse=True)10def suppress_deprecation():11 with distutils.version.suppress_known_deprecation():12 yield13 14 15class TestVersion:16 def test_prerelease(self):17 version = StrictVersion('1.2.3a1')18 assert version.version == (1, 2, 3)19 assert version.prerelease == ('a', 1)20 assert str(version) == '1.2.3a1'21 22 version = StrictVersion('1.2.0')23 assert str(version) == '1.2'24 25 def test_cmp_strict(self):26 versions = (27 ('1.5.1', '1.5.2b2', -1),28 ('161', '3.10a', ValueError),29 ('8.02', '8.02', 0),30 ('3.4j', '1996.07.12', ValueError),31 ('3.2.pl0', '3.1.1.6', ValueError),32 ('2g6', '11g', ValueError),33 ('0.9', '2.2', -1),34 ('1.2.1', '1.2', 1),35 ('1.1', '1.2.2', -1),36 ('1.2', '1.1', 1),37 ('1.2.1', '1.2.2', -1),38 ('1.2.2', '1.2', 1),39 ('1.2', '1.2.2', -1),40 ('0.4.0', '0.4', 0),41 ('1.13++', '5.5.kw', ValueError),42 )43 44 for v1, v2, wanted in versions:45 try:46 res = StrictVersion(v1)._cmp(StrictVersion(v2))47 except ValueError:48 if wanted is ValueError:49 continue50 else:51 raise AssertionError(f"cmp({v1}, {v2}) shouldn't raise ValueError")52 assert res == wanted, f'cmp({v1}, {v2}) should be {wanted}, got {res}'53 res = StrictVersion(v1)._cmp(v2)54 assert res == wanted, f'cmp({v1}, {v2}) should be {wanted}, got {res}'55 res = StrictVersion(v1)._cmp(object())56 assert res is NotImplemented, (57 f'cmp({v1}, {v2}) should be NotImplemented, got {res}'58 )59 60 def test_cmp(self):61 versions = (62 ('1.5.1', '1.5.2b2', -1),63 ('161', '3.10a', 1),64 ('8.02', '8.02', 0),65 ('3.4j', '1996.07.12', -1),66 ('3.2.pl0', '3.1.1.6', 1),67 ('2g6', '11g', -1),68 ('0.960923', '2.2beta29', -1),69 ('1.13++', '5.5.kw', -1),70 )71 72 for v1, v2, wanted in versions:73 res = LooseVersion(v1)._cmp(LooseVersion(v2))74 assert res == wanted, f'cmp({v1}, {v2}) should be {wanted}, got {res}'75 res = LooseVersion(v1)._cmp(v2)76 assert res == wanted, f'cmp({v1}, {v2}) should be {wanted}, got {res}'77 res = LooseVersion(v1)._cmp(object())78 assert res is NotImplemented, (79 f'cmp({v1}, {v2}) should be NotImplemented, got {res}'80 )81 