diff options
Diffstat (limited to 'tests/test_debhelper.py')
-rw-r--r-- | tests/test_debhelper.py | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/tests/test_debhelper.py b/tests/test_debhelper.py new file mode 100644 index 0000000..285440c --- /dev/null +++ b/tests/test_debhelper.py @@ -0,0 +1,192 @@ +from tempfile import TemporaryDirectory +import unittest +import os + +from dhpython.debhelper import DebHelper, build_options + + +class DebHelperTestCase(unittest.TestCase): + impl = 'cpython3' + control = [] + options = {} + parse_control = True + + def build_options(self): + return build_options(**self.options) + + def setUp(self): + self.tempdir = TemporaryDirectory() + self.addCleanup(self.tempdir.cleanup) + + old_wd = os.getcwd() + os.chdir(self.tempdir.name) + self.addCleanup(os.chdir, old_wd) + + os.mkdir('debian') + with open('debian/control', 'w') as f: + f.write('\n'.join(self.control)) + if self.parse_control: + self.dh = DebHelper(self.build_options(), impl=self.impl) + + +CONTROL = [ + 'Source: foo-src', + 'Build-Depends: python3-all,', + ' python-all,', + ' bar (<< 2) [amd64],', + ' baz (>= 1.0)', + 'X-Python3-Version: >= 3.1, << 3.10', + '', + 'Architecture: all', + 'Package: python3-foo', + 'Depends: ${python3:Depends}', + '', + 'Package: python3-foo-ext', + 'Architecture: any', + 'Depends: ${python3:Depends}, ' + '# COMMENT', + ' ${shlibs:Depends},', + '', + 'Package: python-foo', + 'Architecture: all', + 'Depends: ${python:Depends}', + '', + '', + 'Package: foo', + 'Architecture: all', + 'Depends: ${python3:Depends}', + '', + '', + 'Package: recfoo', + 'Architecture: all', + 'Recommends: ${python3:Depends}', + '', + '', +] + +class TestControlBlockParsing(DebHelperTestCase): + control = CONTROL + + def test_parses_source(self): + self.assertEqual(self.dh.source_name, 'foo-src') + + def test_parses_build_depends(self): + self.assertEqual(self.dh.build_depends, { + 'python3-all': {None: None}, + 'python-all': {None: None}, + 'bar': {'amd64': '<< 2'}, + 'baz': {None: '>= 1.0'}, + }) + + def test_parses_XPV(self): + self.assertEqual(self.dh.python_version, '>= 3.1, << 3.10') + + def test_parses_packages(self): + self.assertEqual(list(self.dh.packages.keys()), + ['python3-foo', 'python3-foo-ext', 'foo', 'recfoo']) + + def test_parses_arch(self): + self.assertEqual(self.dh.packages['python3-foo-ext']['arch'], 'any') + + def test_parses_arch_all(self): + self.assertEqual(self.dh.packages['python3-foo']['arch'], 'all') + + +class TestControlSkipIndep(DebHelperTestCase): + control = CONTROL + options = { + 'arch': True, + } + + def test_skip_indep(self): + self.assertEqual(list(self.dh.packages.keys()), ['python3-foo-ext']) + + +class TestControlSkipArch(DebHelperTestCase): + control = CONTROL + options = { + 'arch': False, + } + + def test_skip_arch(self): + self.assertEqual(list(self.dh.packages.keys()), + ['python3-foo', 'foo', 'recfoo']) + + +class TestControlSinglePkg(DebHelperTestCase): + control = CONTROL + options = { + 'package': ['python3-foo'], + } + + def test_parses_packages(self): + self.assertEqual(list(self.dh.packages.keys()), ['python3-foo']) + + +class TestControlSkipSinglePkg(DebHelperTestCase): + control = CONTROL + options = { + 'no_package': ['python3-foo'], + } + + def test_parses_packages(self): + self.assertEqual(list(self.dh.packages.keys()), + ['python3-foo-ext', 'foo', 'recfoo']) + + +class TestControlBlockParsingPy2(DebHelperTestCase): + control = CONTROL + impl = 'cpython2' + + def test_parses_packages(self): + self.assertEqual(list(self.dh.packages.keys()), ['python-foo']) + + +class TestControlNoBinaryPackages(DebHelperTestCase): + control = [ + 'Source: foo-src', + 'Build-Depends: python3-all', + '', + ] + parse_control = False + + def test_throws_error(self): + msg = ('Unable to parse debian/control, found less than 2 paragraphs') + with self.assertRaisesRegex(Exception, msg): + DebHelper(self.build_options()) + + +class TestControlMissingPackage(DebHelperTestCase): + control = [ + 'Source: foo-src', + 'Build-Depends: python3-all', + '', + 'Architecture: all', + ] + parse_control = False + + def test_parses_packages(self): + msg = ('Unable to parse debian/control, paragraph 2 missing Package ' + 'field') + with self.assertRaisesRegex(Exception, msg): + DebHelper(self.build_options()) + + +class TestRemainingPackages(DebHelperTestCase): + control = CONTROL + options = { + 'remaining_packages': True, + } + parse_control = False + + def setUp(self): + super().setUp() + with open('debian/python3-foo.debhelper.log', 'w') as f: + f.write('dh_python3\n') + with open('debian/python3-foo-ext.debhelper.log', 'w') as f: + f.write('dh_foobar\n') + self.dh = DebHelper(self.build_options(), impl=self.impl) + + def test_skips_logged_packages(self): + self.assertEqual(list(self.dh.packages.keys()), + ['python3-foo-ext', 'foo', 'recfoo']) |