]> git.decadent.org.uk Git - dak.git/blob - tests/test_srcformats.py
Merge commit 'ftpmaster/master'
[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 class FormatFromStringTestCase(unittest.TestCase):
108     def assertFormat(self, txt, klass):
109         self.assertEqual(srcformats.get_format_from_string(txt), klass)
110
111     def assertInvalid(self, txt):
112         self.assertRaises(
113             UnknownFormatError,
114             lambda: srcformats.get_format_from_string(txt),
115         )
116
117     def testFormats(self):
118         self.assertFormat('1.0', srcformats.FormatOne)
119         self.assertFormat('3.0 (native)', srcformats.FormatThree)
120         self.assertFormat('3.0 (quilt)', srcformats.FormatThreeQuilt)
121
122     def testInvalidFormats(self):
123         self.assertInvalid('')
124         self.assertInvalid('.')
125         self.assertInvalid('3.0 (cvs)')
126         self.assertInvalid(' 1.0 ')
127         self.assertInvalid('8.4 (hardy)')
128
129 if __name__ == '__main__':
130     unittest.main()