]> git.decadent.org.uk Git - dak.git/blob - tests/test_lintian.py
Generate lintian reject messages in daklib.lintian + tests
[dak.git] / tests / test_lintian.py
1 #!/usr/bin/env python
2
3 from base_test import DakTestCase
4
5 import unittest
6
7 from daklib.lintian import parse_lintian_output, generate_reject_messages
8
9 class ParseLintianTestCase(DakTestCase):
10     def assertParse(self, output, expected):
11         self.assertEqual(
12             list(parse_lintian_output(output)),
13             expected,
14         )
15
16     def testSimple(self):
17         self.assertParse(
18             'W: pkgname: some-tag path/to/file',
19             [('W', 'pkgname', 'some-tag', 'path/to/file')],
20         )
21
22         self.assertParse('', [])
23         self.assertParse('\n\n', [])
24         self.assertParse('dummy error test', [])
25
26     def testBinaryNoDescription(self):
27         self.assertParse(
28             'W: pkgname: some-tag',
29             [('W', 'pkgname', 'some-tag', '')],
30         )
31
32     def testSource(self):
33         self.assertParse(
34             'W: pkgname source: some-tag',
35             [('W', 'pkgname source', 'some-tag', '')]
36         )
37
38     def testSourceNoDescription(self):
39         self.assertParse(
40             'W: pkgname source: some-tag path/to/file',
41             [('W', 'pkgname source', 'some-tag', 'path/to/file')]
42         )
43
44 class GenerateRejectMessages(DakTestCase):
45     def assertNumReject(self, input, defs, num):
46         self.assertEqual(len(generate_reject_messages(input, defs)), num)
47
48     def testUnknownTag(self):
49         self.assertNumReject(
50             [('W', 'pkgname', 'unknown-tag', '')],
51             {'fatal': ['known-tag'], 'nonfatal': []},
52             0,
53         )
54
55     def testFatalTags(self):
56         self.assertNumReject([
57                 ('W', 'pkgname', 'fatal-tag-1', ''),
58                 ('W', 'pkgname', 'fatal-tag-2', ''),
59             ],
60             {'fatal': ['fatal-tag-1', 'fatal-tag-2'], 'nonfatal': []},
61             2,
62         )
63
64     def testMixture(self):
65         self.assertNumReject([
66                 ('W', 'pkgname', 'fatal-tag', ''),
67                 ('W', 'pkgname', 'unknown-tag', ''),
68             ],
69             {'fatal': ['fatal-tag'], 'nonfatal': []},
70             1,
71         )
72
73     def testOverridable(self):
74         self.assertNumReject([
75                 ('W', 'pkgname', 'non-fatal-tag', ''),
76             ],
77             {'fatal': [], 'nonfatal': ['non-fatal-tag']},
78             1 + 1, # We add an extra 'reject' hint message
79         )
80
81     def testOverrideAllowed(self):
82         self.assertNumReject([
83                 ('O', 'pkgname', 'non-fatal-tag', ''),
84             ],
85             {'fatal': [], 'nonfatal': ['non-fatal-tag']},
86             0,
87         )
88
89     def testOverrideNotAllowed(self):
90         self.assertNumReject([
91                 ('O', 'pkgname', 'fatal-tag', ''),
92             ],
93             {'fatal': ['fatal-tag'], 'nonfatal': []},
94             1,
95         )
96
97 if __name__ == '__main__':
98     unittest.main()