summaryrefslogtreecommitdiffstats
path: root/tests/test_debhelper.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_debhelper.py')
-rw-r--r--tests/test_debhelper.py192
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'])