]> git.decadent.org.uk Git - dak.git/blob - tests/test_srcformats.py
Split out parse_format to module-level and test it explicitly.
[dak.git] / tests / test_srcformats.py
1 #!/usr/bin/env python
2
3 import unittest
4
5 import os, sys
6 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
7
8 from collections import defaultdict
9
10 from daklib import srcformats
11 from daklib.dak_exceptions import UnknownFormatError
12
13 class SourceFormatTestCase(unittest.TestCase):
14     def get_rejects(self, has_vars):
15         has = defaultdict(lambda: 0)
16         has.update(has_vars)
17         return list(self.fmt.reject_msgs(has))
18
19     def assertAccepted(self, has):
20         self.assertEqual(self.get_rejects(has), [])
21
22     def assertRejected(self, has):
23         self.assertNotEqual(self.get_rejects(has), [])
24
25 class FormatOneTestCase(SourceFormatTestCase):
26     fmt = srcformats.FormatOne
27
28     def testEmpty(self):
29         self.assertRejected({})
30
31     def testNative(self):
32         self.assertAccepted({'native_tar': 1, 'native_tar_gz': 1})
33
34     def testStandard(self):
35         self.assertAccepted({
36             'orig_tar': 1,
37             'orig_tar_gz': 1,
38             'debian_diff': 1,
39         })
40
41     def testDisallowed(self):
42         self.assertRejected({
43             'native_tar': 1,
44             'native_tar_gz': 1,
45             'debian_tar': 1,
46         })
47         self.assertRejected({
48             'orig_tar': 1,
49             'orig_tar_gz': 1,
50             'debian_diff': 0,
51         })
52         self.assertRejected({
53             'native_tar': 1,
54             'native_tar_gz': 1,
55             'more_orig_tar': 1,
56         })
57         self.assertRejected({
58             'native_tar': 1,
59             'native_tar_gz': 1,
60             'debian_diff': 1,
61         })
62
63 class FormatTreeTestCase(SourceFormatTestCase):
64     fmt = srcformats.FormatThree
65
66     def testEmpty(self):
67         self.assertRejected({})
68
69     def testSimple(self):
70         self.assertAccepted({'native_tar': 1})
71
72     def testDisallowed(self):
73         self.assertRejected({'native_tar': 1, 'orig_tar': 1})
74         self.assertRejected({'native_tar': 1, 'debian_diff': 1})
75         self.assertRejected({'native_tar': 1, 'debian_tar': 1})
76         self.assertRejected({'native_tar': 1, 'more_orig_tar': 1})
77
78 class FormatTreeQuiltTestCase(SourceFormatTestCase):
79     fmt = srcformats.FormatThreeQuilt
80
81     def testEmpty(self):
82         self.assertRejected({})
83
84     def testSimple(self):
85         self.assertAccepted({'orig_tar': 1, 'debian_tar': 1})
86
87     def testMultipleTarballs(self):
88         self.assertAccepted({
89             'orig_tar': 1,
90             'debian_tar': 1,
91             'more_orig_tar': 42,
92         })
93
94     def testDisallowed(self):
95         self.assertRejected({
96             'orig_tar': 1,
97             'debian_tar': 1,
98             'debian_diff': 1
99         })
100         self.assertRejected({
101             'orig_tar': 1,
102             'debian_tar': 1,
103             'native_tar': 1,
104         })
105
106 ##
107
108 class ParseFormatTestCase(unittest.TestCase):
109     def assertParse(self, format, expected):
110         self.assertEqual(srcformats.parse_format(format), expected)
111
112     def assertParseFail(self, format):
113         self.assertRaises(
114             UnknownFormatError,
115             lambda: srcformats.parse_format(format)
116         )
117
118     def testParse(self):
119         self.assertParse('1.0', (1, 0))
120
121     def testEmpty(self):
122         self.assertParseFail('')
123         self.assertParseFail(' ')
124         self.assertParseFail('  ')
125
126     def textText(self):
127         self.assertParse('1.2 (three)', (1, 2, 'three'))
128         self.assertParseFail('0.0 ()')
129
130 class ParseSourceFormat(ParseFormat):
131     def assertFormat(self, *args, **kwargs):
132         kwargs['is_a_dsc'] = kwargs.get('is_a_dsc', True)
133         super(ParseSourceFormat, self).assertFormat(*args, **kwargs)
134
135     def assertInvalidFormat(self, *args, **kwargs):
136         kwargs['is_a_dsc'] = kwargs.get('is_a_dsc', True)
137         super(ParseSourceFormat, self).assertInvalidFormat(*args, **kwargs)
138
139     def testSimple(self):
140         self.assertFormat('1.0', (1, 0))
141
142     def testZero(self):
143         self.assertInvalidFormat('0.0')
144
145     def testNative(self):
146         self.assertFormat('3.0 (native)', (3, 0, 'native'))
147
148     def testQuilt(self):
149         self.assertFormat('3.0 (quilt)', (3, 0, 'quilt'))
150
151     def testUnknownThree(self):
152         self.assertInvalidFormat('3.0 (cvs)')
153
154 class ParseBinaryFormat(ParseFormat):
155     def assertFormat(self, *args, **kwargs):
156         kwargs['is_a_dsc'] = kwargs.get('is_a_dsc', False)
157         super(ParseBinaryFormat, self).assertFormat(*args, **kwargs)
158
159     def assertInvalidFormat(self, *args, **kwargs):
160         kwargs['is_a_dsc'] = kwargs.get('is_a_dsc', False)
161         super(ParseBinaryFormat, self).assertInvalidFormat(*args, **kwargs)
162
163     def testSimple(self):
164         self.assertFormat('1.5', (1, 5))
165
166     def testRange(self):
167         self.assertInvalidFormat('1.0')
168         self.assertFormat('1.5', (1, 5))
169         self.assertFormat('1.8', (1, 8))
170         self.assertInvalidFormat('1.9')
171
172     def testFilesField(self):
173         self.assertInvalidFormat('1.7', field='notfiles')
174         self.assertFormat('1.8', (1, 8), field='notfiles')
175
176 if __name__ == '__main__':
177     unittest.main()