]> git.decadent.org.uk Git - dak.git/blob - tests/test_srcformats.py
"Format: 0.0" is now invalid
[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 ParseFormat(unittest.TestCase):
109     def assertFormat(self, input, expected, **kwargs):
110         self.assertEqual(
111             srcformats.SourceFormat.parse_format(input, **kwargs),
112             expected,
113         )
114
115     def assertInvalidFormat(self, input, **kwargs):
116         self.assertRaises(
117             UnknownFormatError,
118             lambda: srcformats.SourceFormat.parse_format(input, **kwargs),
119         )
120
121     def testEmpty(self):
122         self.assertInvalidFormat('')
123         self.assertInvalidFormat(' ')
124         self.assertInvalidFormat('  ')
125
126     def testBroken(self):
127         self.assertInvalidFormat('.0')
128         self.assertInvalidFormat('.1')
129         self.assertInvalidFormat('format')
130
131 class ParseSourceFormat(ParseFormat):
132     def assertFormat(self, *args, **kwargs):
133         kwargs['is_a_dsc'] = kwargs.get('is_a_dsc', True)
134         super(ParseSourceFormat, self).assertFormat(*args, **kwargs)
135
136     def assertInvalidFormat(self, *args, **kwargs):
137         kwargs['is_a_dsc'] = kwargs.get('is_a_dsc', True)
138         super(ParseSourceFormat, self).assertInvalidFormat(*args, **kwargs)
139
140     def testSimple(self):
141         self.assertFormat('1.0', (1, 0))
142
143     def testZero(self):
144         self.assertInvalidFormat('0.0')
145
146     def testNative(self):
147         self.assertFormat('3.0 (native)', (3, 0, 'native'))
148
149     def testQuilt(self):
150         self.assertFormat('3.0 (quilt)', (3, 0, 'quilt'))
151
152     def testUnknownThree(self):
153         self.assertInvalidFormat('3.0 (cvs)')
154
155 class ParseBinaryFormat(ParseFormat):
156     def assertFormat(self, *args, **kwargs):
157         kwargs['is_a_dsc'] = kwargs.get('is_a_dsc', False)
158         super(ParseBinaryFormat, self).assertFormat(*args, **kwargs)
159
160     def assertInvalidFormat(self, *args, **kwargs):
161         kwargs['is_a_dsc'] = kwargs.get('is_a_dsc', False)
162         super(ParseBinaryFormat, self).assertInvalidFormat(*args, **kwargs)
163
164     def testSimple(self):
165         self.assertFormat('1.5', (1, 5))
166
167     def testRange(self):
168         self.assertInvalidFormat('1.0')
169         self.assertFormat('1.5', (1, 5))
170         self.assertFormat('1.8', (1, 8))
171         self.assertInvalidFormat('1.9')
172
173     def testFilesField(self):
174         self.assertInvalidFormat('1.7', field='notfiles')
175         self.assertFormat('1.8', (1, 8), field='notfiles')
176
177 if __name__ == '__main__':
178     unittest.main()