]> git.decadent.org.uk Git - dak.git/blob - tests/test_srcformats.py
Move parse_format tests to test_formats.py
[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.formats import parse_format
12 from daklib.dak_exceptions import UnknownFormatError
13
14 class SourceFormatTestCase(unittest.TestCase):
15     def get_rejects(self, has_vars):
16         has = defaultdict(lambda: 0)
17         has.update(has_vars)
18         return list(self.fmt.reject_msgs(has))
19
20     def assertAccepted(self, has):
21         self.assertEqual(self.get_rejects(has), [])
22
23     def assertRejected(self, has):
24         self.assertNotEqual(self.get_rejects(has), [])
25
26 class FormatOneTestCase(SourceFormatTestCase):
27     fmt = srcformats.FormatOne
28
29     def testEmpty(self):
30         self.assertRejected({})
31
32     def testNative(self):
33         self.assertAccepted({'native_tar': 1, 'native_tar_gz': 1})
34
35     def testStandard(self):
36         self.assertAccepted({
37             'orig_tar': 1,
38             'orig_tar_gz': 1,
39             'debian_diff': 1,
40         })
41
42     def testDisallowed(self):
43         self.assertRejected({
44             'native_tar': 1,
45             'native_tar_gz': 1,
46             'debian_tar': 1,
47         })
48         self.assertRejected({
49             'orig_tar': 1,
50             'orig_tar_gz': 1,
51             'debian_diff': 0,
52         })
53         self.assertRejected({
54             'native_tar': 1,
55             'native_tar_gz': 1,
56             'more_orig_tar': 1,
57         })
58         self.assertRejected({
59             'native_tar': 1,
60             'native_tar_gz': 1,
61             'debian_diff': 1,
62         })
63
64 class FormatTreeTestCase(SourceFormatTestCase):
65     fmt = srcformats.FormatThree
66
67     def testEmpty(self):
68         self.assertRejected({})
69
70     def testSimple(self):
71         self.assertAccepted({'native_tar': 1})
72
73     def testDisallowed(self):
74         self.assertRejected({'native_tar': 1, 'orig_tar': 1})
75         self.assertRejected({'native_tar': 1, 'debian_diff': 1})
76         self.assertRejected({'native_tar': 1, 'debian_tar': 1})
77         self.assertRejected({'native_tar': 1, 'more_orig_tar': 1})
78
79 class FormatTreeQuiltTestCase(SourceFormatTestCase):
80     fmt = srcformats.FormatThreeQuilt
81
82     def testEmpty(self):
83         self.assertRejected({})
84
85     def testSimple(self):
86         self.assertAccepted({'orig_tar': 1, 'debian_tar': 1})
87
88     def testMultipleTarballs(self):
89         self.assertAccepted({
90             'orig_tar': 1,
91             'debian_tar': 1,
92             'more_orig_tar': 42,
93         })
94
95     def testDisallowed(self):
96         self.assertRejected({
97             'orig_tar': 1,
98             'debian_tar': 1,
99             'debian_diff': 1
100         })
101         self.assertRejected({
102             'orig_tar': 1,
103             'debian_tar': 1,
104             'native_tar': 1,
105         })
106
107 ##
108
109 class ValidateFormatTestCase(unittest.TestCase):
110     def assertValid(self, format, **kwargs):
111         kwargs['is_a_dsc'] = kwargs.get('is_a_dsc', True)
112         self.fmt.validate_format(format, **kwargs)
113
114     def assertInvalid(self, *args, **kwargs):
115         self.assertRaises(
116             UnknownFormatError,
117             lambda: self.assertValid(*args, **kwargs),
118         )
119
120 class ValidateFormatOneTestCase(ValidateFormatTestCase):
121     fmt = srcformats.FormatOne
122
123     def testValid(self):
124         self.assertValid((1, 0))
125
126     def testInvalid(self):
127         self.assertInvalid((0, 1))
128         self.assertInvalid((3, 0, 'quilt'))
129
130     ##
131
132     def testBinary(self):
133         self.assertValid((1, 5), is_a_dsc=False)
134         self.assertInvalid((1, 0), is_a_dsc=False)
135
136     def testRange(self):
137         self.assertInvalid((1, 3), is_a_dsc=False)
138         self.assertValid((1, 5), is_a_dsc=False)
139         self.assertValid((1, 8), is_a_dsc=False)
140         self.assertInvalid((1, 9), is_a_dsc=False)
141
142     def testFilesField(self):
143         self.assertInvalid((1, 7), is_a_dsc=False, field='notfiles')
144         self.assertValid((1, 8), is_a_dsc=False, field='notfiles')
145
146 class ValidateFormatThreeTestCase(ValidateFormatTestCase):
147     fmt = srcformats.FormatThree
148
149     def testValid(self):
150         self.assertValid((3, 0, 'native'))
151
152     def testInvalid(self):
153         self.assertInvalid((1, 0))
154         self.assertInvalid((0, 0))
155         self.assertInvalid((3, 0, 'quilt'))
156
157 class ValidateFormatThreeQuiltTestCase(ValidateFormatTestCase):
158     fmt = srcformats.FormatThreeQuilt
159
160     def testValid(self):
161         self.assertValid((3, 0, 'quilt'))
162
163     def testInvalid(self):
164         self.assertInvalid((1, 0))
165         self.assertInvalid((0, 0))
166         self.assertInvalid((3, 0, 'native'))
167
168 class FormatFromStringTestCase(unittest.TestCase):
169     def assertFormat(self, txt, klass):
170         self.assertEqual(srcformats.get_format_from_string(txt), klass)
171
172     def assertInvalid(self, txt):
173         self.assertRaises(
174             UnknownFormatError,
175             lambda: srcformats.get_format_from_string(txt),
176         )
177
178     def testFormats(self):
179         self.assertFormat('1.0', srcformats.FormatOne)
180         self.assertFormat('3.0 (native)', srcformats.FormatThree)
181         self.assertFormat('3.0 (quilt)', srcformats.FormatThreeQuilt)
182
183     def testInvalidFormats(self):
184         self.assertInvalid('')
185         self.assertInvalid('.')
186         self.assertInvalid('3.0 (cvs)')
187         self.assertInvalid(' 1.0 ')
188         self.assertInvalid('8.4 (hardy)')
189
190 if __name__ == '__main__':
191     unittest.main()