python-dpkg/tests/test_dpkg.py

145 lines
7.1 KiB
Python

#!/usr/bin/env python
import unittest
from pydpkg import Dpkg, DpkgVersionError
class DpkgTest(unittest.TestCase):
def test_get_epoch(self):
self.assertEqual(Dpkg.get_epoch('0'), (0, '0'))
self.assertEqual(Dpkg.get_epoch('0:0'), (0, '0'))
self.assertEqual(Dpkg.get_epoch('1:0'), (1, '0'))
self.assertRaises(DpkgVersionError, Dpkg.get_epoch, '1a:0')
def test_get_upstream(self):
self.assertEqual(Dpkg.get_upstream('00'), ('00', '0'))
self.assertEqual(Dpkg.get_upstream('foo'), ('foo', '0'))
self.assertEqual(Dpkg.get_upstream('foo-bar'), ('foo', 'bar'))
self.assertEqual(Dpkg.get_upstream('foo-bar-baz'), ('foo-bar', 'baz'))
def test_split_full_version(self):
self.assertEqual(Dpkg.split_full_version('00'), (0, '00', '0'))
self.assertEqual(Dpkg.split_full_version('00-00'), (0, '00', '00'))
self.assertEqual(Dpkg.split_full_version('0:0'), (0, '0', '0'))
self.assertEqual(Dpkg.split_full_version('0:0-0'), (0, '0', '0'))
self.assertEqual(Dpkg.split_full_version('0:0.0'), (0, '0.0', '0'))
self.assertEqual(Dpkg.split_full_version('0:0.0-0'), (0, '0.0', '0'))
self.assertEqual(Dpkg.split_full_version('0:0.0-00'), (0, '0.0', '00'))
def test_get_alpha(self):
self.assertEqual(Dpkg.get_alphas(''), ('', ''))
self.assertEqual(Dpkg.get_alphas('0'), ('', '0'))
self.assertEqual(Dpkg.get_alphas('00'), ('', '00'))
self.assertEqual(Dpkg.get_alphas('0a'), ('', '0a'))
self.assertEqual(Dpkg.get_alphas('a'), ('a', ''))
self.assertEqual(Dpkg.get_alphas('a0'), ('a', '0'))
def test_get_digits(self):
self.assertEqual(Dpkg.get_digits('00'), (0, ''))
self.assertEqual(Dpkg.get_digits('0'), (0, ''))
self.assertEqual(Dpkg.get_digits('0a'), (0, 'a'))
self.assertEqual(Dpkg.get_digits('a'), (0, 'a'))
self.assertEqual(Dpkg.get_digits('a0'), (0, 'a0'))
def test_listify(self):
self.assertEqual(Dpkg.listify('0'), ['', 0])
self.assertEqual(Dpkg.listify('00'), ['', 0])
self.assertEqual(Dpkg.listify('0a'), ['', 0, 'a', 0])
self.assertEqual(Dpkg.listify('a0'), ['a', 0])
self.assertEqual(Dpkg.listify('a00'), ['a', 0])
self.assertEqual(Dpkg.listify('a'), ['a', 0])
def test_dstringcmp(self):
self.assertEqual(Dpkg.dstringcmp('~', '.'), -1)
self.assertEqual(Dpkg.dstringcmp('~', 'a'), -1)
self.assertEqual(Dpkg.dstringcmp('a', '.'), -1)
self.assertEqual(Dpkg.dstringcmp('a', '~'), 1)
self.assertEqual(Dpkg.dstringcmp('.', '~'), 1)
self.assertEqual(Dpkg.dstringcmp('.', 'a'), 1)
self.assertEqual(Dpkg.dstringcmp('.', '.'), 0)
self.assertEqual(Dpkg.dstringcmp('0', '0'), 0)
self.assertEqual(Dpkg.dstringcmp('a', 'a'), 0)
# taken from
# http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version
self.assertEqual(
sorted(['a', '', '~', '~~a', '~~'], cmp=Dpkg.dstringcmp),
['~~', '~~a', '~', '', 'a'])
def test_compare_revision_strings(self):
# note that these are testing a single revision string, not the full
# upstream+debian version. IOW, "0.0.9-foo" is an upstream or debian
# revision onto itself, not an upstream of 0.0.9 and a debian of foo.
# equals
self.assertEqual(Dpkg.compare_revision_strings('0', '0'), 0)
self.assertEqual(Dpkg.compare_revision_strings('0', '00'), 0)
self.assertEqual(Dpkg.compare_revision_strings('00.0.9', '0.0.9'), 0)
self.assertEqual(Dpkg.compare_revision_strings('0.00.9-foo', '0.0.9-foo'), 0)
self.assertEqual(Dpkg.compare_revision_strings('0.0.9-1.00foo', '0.0.9-1.0foo'), 0)
# less than
self.assertEqual(Dpkg.compare_revision_strings('0.0.9', '0.0.10'), -1)
self.assertEqual(Dpkg.compare_revision_strings('0.0.9-foo', '0.0.10-foo'), -1)
self.assertEqual(Dpkg.compare_revision_strings('0.0.9-foo', '0.0.10-goo'), -1)
self.assertEqual(Dpkg.compare_revision_strings('0.0.9-foo', '0.0.9-goo'), -1)
self.assertEqual(Dpkg.compare_revision_strings('0.0.10-foo', '0.0.10-goo'), -1)
self.assertEqual(Dpkg.compare_revision_strings('0.0.9-1.0foo', '0.0.9-1.1foo'), -1)
# greater than
self.assertEqual(Dpkg.compare_revision_strings('0.0.10', '0.0.9'), 1)
self.assertEqual(Dpkg.compare_revision_strings('0.0.10-foo', '0.0.9-foo'), 1)
self.assertEqual(Dpkg.compare_revision_strings('0.0.10-foo', '0.0.9-goo'), 1)
self.assertEqual(Dpkg.compare_revision_strings('0.0.9-1.0foo', '0.0.9-1.0bar'), 1)
def test_compare_versions(self):
# "This [the epoch] is a single (generally small) unsigned integer.
# It may be omitted, in which case zero is assumed."
self.assertEqual(Dpkg.compare_versions('0.0.0', '0:0.0.0'), 0)
self.assertEqual(Dpkg.compare_versions('0:0.0.0-foo', '0.0.0-foo'), 0)
self.assertEqual(Dpkg.compare_versions('0.0.0-a', '0:0.0.0-a'), 0)
# "The absence of a debian_revision is equivalent to a debian_revision
# of 0."
self.assertEqual(Dpkg.compare_versions('0.0.0', '0.0.0-0'), 0)
# tricksy:
self.assertEqual(Dpkg.compare_versions('0.0.0', '0.0.0-00'), 0)
# combining the above
self.assertEqual(Dpkg.compare_versions('0.0.0-0', '0:0.0.0'), 0)
# explicitly equal
self.assertEqual(Dpkg.compare_versions('0.0.0', '0.0.0'), 0)
self.assertEqual(Dpkg.compare_versions('1:0.0.0', '1:0.0.0'), 0)
self.assertEqual(Dpkg.compare_versions('0.0.0-10', '0.0.0-10'), 0)
self.assertEqual(Dpkg.compare_versions('2:0.0.0-1', '2:0.0.0-1'), 0)
self.assertEqual(Dpkg.compare_versions('0:a.0.0-foo', '0:a.0.0-foo'), 0)
# less than
self.assertEqual(Dpkg.compare_versions('0.0.0-0', '0:0.0.1'), -1)
self.assertEqual(Dpkg.compare_versions('0.0.0-0', '0:0.0.0-a'), -1)
self.assertEqual(Dpkg.compare_versions('0.0.0-0', '0:0.0.0-1'), -1)
self.assertEqual(Dpkg.compare_versions('0.0.9', '0.0.10'), -1)
self.assertEqual(Dpkg.compare_versions('0.9.0', '0.10.0'), -1)
self.assertEqual(Dpkg.compare_versions('9.0.0', '10.0.0'), -1)
# greater than
self.assertEqual(Dpkg.compare_versions('0.0.1-0', '0:0.0.0'), 1)
self.assertEqual(Dpkg.compare_versions('0.0.0-a', '0:0.0.0-1'), 1)
self.assertEqual(Dpkg.compare_versions('0.0.0-a', '0:0.0.0-0'), 1)
self.assertEqual(Dpkg.compare_versions('0.0.9', '0.0.1'), 1)
self.assertEqual(Dpkg.compare_versions('0.9.0', '0.1.0'), 1)
self.assertEqual(Dpkg.compare_versions('9.0.0', '1.0.0'), 1)
# unicode me harder
self.assertEqual(Dpkg.compare_versions(u'2:0.0.44-1', u'2:0.0.44-nobin'), -1)
self.assertEqual(Dpkg.compare_versions(u'2:0.0.44-nobin', u'2:0.0.44-1'), 1)
self.assertEqual(Dpkg.compare_versions(u'2:0.0.44-1', u'2:0.0.44-1'), 0)
if __name__ == "__main__":
suite = unittest.TestLoader().loadTestsFromTestCase(DpkgTest)
unittest.TextTestRunner(verbosity=2).run(suite)