]> git.decadent.org.uk Git - dak.git/blob - tests/test_lintian.py
Alter generate_reject_messages to return a generator.
[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         msgs = list(generate_reject_messages(input, defs))
47         self.assertEqual(len(msgs), num)
48
49     def testUnknownTag(self):
50         self.assertNumReject(
51             [('W', 'pkgname', 'unknown-tag', '')],
52             {'fatal': ['known-tag'], 'nonfatal': []},
53             0,
54         )
55
56     def testFatalTags(self):
57         self.assertNumReject([
58                 ('W', 'pkgname', 'fatal-tag-1', ''),
59                 ('W', 'pkgname', 'fatal-tag-2', ''),
60             ],
61             {'fatal': ['fatal-tag-1', 'fatal-tag-2'], 'nonfatal': []},
62             2,
63         )
64
65     def testMixture(self):
66         self.assertNumReject([
67                 ('W', 'pkgname', 'fatal-tag', ''),
68                 ('W', 'pkgname', 'unknown-tag', ''),
69             ],
70             {'fatal': ['fatal-tag'], 'nonfatal': []},
71             1,
72         )
73
74     def testOverridable(self):
75         self.assertNumReject([
76                 ('W', 'pkgname', 'non-fatal-tag', ''),
77             ],
78             {'fatal': [], 'nonfatal': ['non-fatal-tag']},
79             1 + 1, # We add an extra 'reject' hint message
80         )
81
82     def testOverrideAllowed(self):
83         self.assertNumReject([
84                 ('O', 'pkgname', 'non-fatal-tag', ''),
85             ],
86             {'fatal': [], 'nonfatal': ['non-fatal-tag']},
87             0,
88         )
89
90     def testOverrideNotAllowed(self):
91         self.assertNumReject([
92                 ('O', 'pkgname', 'fatal-tag', ''),
93             ],
94             {'fatal': ['fatal-tag'], 'nonfatal': []},
95             1,
96         )
97
98 if __name__ == '__main__':
99     unittest.main()