]> git.decadent.org.uk Git - dak.git/blob - tests/test_srcformats.py
Don't validate a .changes Format as a source package version format (!)
[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         self.fmt.validate_format(format, **kwargs)
112
113     def assertInvalid(self, *args, **kwargs):
114         self.assertRaises(
115             UnknownFormatError,
116             lambda: self.assertValid(*args, **kwargs),
117         )
118
119 class ValidateFormatThreeTestCase(ValidateFormatTestCase):
120     fmt = srcformats.FormatThree
121
122     def testValid(self):
123         self.assertValid((3, 0, 'native'))
124
125     def testInvalid(self):
126         self.assertInvalid((1, 0))
127         self.assertInvalid((0, 0))
128         self.assertInvalid((3, 0, 'quilt'))
129
130 class ValidateFormatThreeQuiltTestCase(ValidateFormatTestCase):
131     fmt = srcformats.FormatThreeQuilt
132
133     def testValid(self):
134         self.assertValid((3, 0, 'quilt'))
135
136     def testInvalid(self):
137         self.assertInvalid((1, 0))
138         self.assertInvalid((0, 0))
139         self.assertInvalid((3, 0, 'native'))
140
141 class FormatFromStringTestCase(unittest.TestCase):
142     def assertFormat(self, txt, klass):
143         self.assertEqual(srcformats.get_format_from_string(txt), klass)
144
145     def assertInvalid(self, txt):
146         self.assertRaises(
147             UnknownFormatError,
148             lambda: srcformats.get_format_from_string(txt),
149         )
150
151     def testFormats(self):
152         self.assertFormat('1.0', srcformats.FormatOne)
153         self.assertFormat('3.0 (native)', srcformats.FormatThree)
154         self.assertFormat('3.0 (quilt)', srcformats.FormatThreeQuilt)
155
156     def testInvalidFormats(self):
157         self.assertInvalid('')
158         self.assertInvalid('.')
159         self.assertInvalid('3.0 (cvs)')
160         self.assertInvalid(' 1.0 ')
161         self.assertInvalid('8.4 (hardy)')
162
163 if __name__ == '__main__':
164     unittest.main()