]> git.decadent.org.uk Git - dak.git/blob - tests/test_lintian.py
show-new: refactor Luca's changes
[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                 'level': 'W',
20                 'package': 'pkgname',
21                 'tag': 'some-tag',
22                 'description': 'path/to/file',
23             }],
24         )
25
26         self.assertParse('', [])
27         self.assertParse('\n\n', [])
28         self.assertParse('dummy error test', [])
29
30     def testBinaryNoDescription(self):
31         self.assertParse(
32             'W: pkgname: some-tag', [{
33                 'level': 'W',
34                 'package': 'pkgname',
35                 'tag': 'some-tag',
36                 'description': '',
37             }],
38         )
39
40     def testSource(self):
41         self.assertParse(
42             'W: pkgname source: some-tag', [{
43                 'level': 'W',
44                 'package': 'pkgname source',
45                 'tag': 'some-tag',
46                 'description': '',
47             }]
48         )
49
50     def testSourceNoDescription(self):
51         self.assertParse(
52             'W: pkgname source: some-tag path/to/file', [{
53                 'level': 'W',
54                 'package': 'pkgname source',
55                 'tag': 'some-tag',
56                 'description': 'path/to/file',
57             }]
58         )
59
60 class GenerateRejectMessages(DakTestCase):
61     def assertNumReject(self, input, defs, num):
62         msgs = list(generate_reject_messages(input, defs))
63         self.assertEqual(len(msgs), num)
64
65     def testUnknownTag(self):
66         self.assertNumReject([
67             {
68                 'level': 'W',
69                 'package': 'pkgname',
70                 'tag': 'unknown-tag',
71                 'description': '',
72             }
73             ], {'fatal': ['known-tag'], 'nonfatal': []},
74             0,
75         )
76
77     def testFatalTags(self):
78         self.assertNumReject([
79             {
80                 'level': 'W',
81                 'package': 'pkgname',
82                 'tag': 'fatal-tag-1',
83                 'description': '',
84             },
85             {
86                 'level': 'W',
87                 'package': 'pkgname',
88                 'tag': 'fatal-tag-2',
89                 'description': '',
90             },
91             ], {'fatal': ['fatal-tag-1', 'fatal-tag-2'], 'nonfatal': []},
92             2,
93         )
94
95     def testMixture(self):
96         self.assertNumReject([
97             {
98                 'level': 'W',
99                 'package': 'pkgname',
100                 'tag': 'fatal-tag',
101                 'description': '',
102             },
103             {
104                 'level': 'W',
105                 'package': 'pkgname',
106                 'tag': 'unknown-tag',
107                 'description': '',
108             },
109             ], {'fatal': ['fatal-tag'], 'nonfatal': []},
110             1,
111         )
112
113     def testOverridable(self):
114         self.assertNumReject([
115             {
116                 'level': 'W',
117                 'package': 'pkgname',
118                 'tag': 'non-fatal-tag',
119                 'description': '',
120             },
121             ], {'fatal': [], 'nonfatal': ['non-fatal-tag']},
122             1 + 1, # We add an extra 'reject' hint message
123         )
124
125     def testOverrideAllowed(self):
126         self.assertNumReject([
127                 {'level': 'O',
128                 'package': 'pkgname',
129                 'tag': 'non-fatal-tag',
130                 'description': ''},
131             ], {'fatal': [], 'nonfatal': ['non-fatal-tag']},
132             0,
133         )
134
135     def testOverrideNotAllowed(self):
136         self.assertNumReject([
137             {
138                 'level': 'O',
139                 'package': 'pkgname',
140                 'tag': 'fatal-tag',
141                 'description': '',
142             },
143             ], {'fatal': ['fatal-tag'], 'nonfatal': []},
144             1,
145         )
146
147 if __name__ == '__main__':
148     unittest.main()