- bump version to 0.130.1
[opensuse:osc.git] / tests / test_difffiles.py
1 import osc.core
2 import osc.oscerr
3 import os
4 import sys
5 from common import GET, OscTestCase
6
7 FIXTURES_DIR = os.path.join(os.getcwd(), 'difffile_fixtures')
8
9 def suite():
10     import unittest
11     return unittest.makeSuite(TestDiffFiles)
12
13 class TestDiffFiles(OscTestCase):
14     diff_hdr = 'Index: %s\n==================================================================='
15     def _get_fixtures_dir(self):
16         return FIXTURES_DIR
17
18     def testDiffUnmodified(self):
19         """diff an unmodified file"""
20         self._change_to_pkg('simple')
21         p = osc.core.Package('.')
22         p.todo = ['merge']
23         self.__check_diff(p, '', None)
24
25     def testDiffAdded(self):
26         """diff an added file"""
27         self._change_to_pkg('simple')
28         p = osc.core.Package('.')
29         p.todo = ['toadd1']
30         exp = """%s
31 --- toadd1\t(revision 0)
32 +++ toadd1\t(revision 0)
33 @@ -0,0 +1,1 @@
34 +toadd1
35 """ % (TestDiffFiles.diff_hdr % 'toadd1')
36         self.__check_diff(p, exp, None)
37
38     def testDiffRemoved(self):
39         """diff a removed file"""
40         self._change_to_pkg('simple')
41         p = osc.core.Package('.')
42         p.todo = ['somefile']
43         exp = """%s
44 --- somefile\t(revision 2)
45 +++ somefile\t(working copy)
46 @@ -1,1 +0,0 @@
47 -some content
48 """ % (TestDiffFiles.diff_hdr % 'somefile')
49         self.__check_diff(p, exp, None)
50
51     def testDiffMissing(self):
52         """diff a missing file (missing files are ignored)"""
53         self._change_to_pkg('simple')
54         p = osc.core.Package('.')
55         p.todo = ['missing']
56         self.__check_diff(p, '', None)
57
58     def testDiffReplaced(self):
59         """diff a replaced file"""
60         self._change_to_pkg('simple')
61         p = osc.core.Package('.')
62         p.todo = ['replaced']
63         exp = """%s
64 --- replaced\t(revision 2)
65 +++ replaced\t(working copy)
66 @@ -1,1 +1,1 @@
67 -yet another file
68 +foo replaced
69 """ % (TestDiffFiles.diff_hdr % 'replaced')
70         self.__check_diff(p, exp, None)
71
72     def testDiffSkipped(self):
73         """diff a skipped file (skipped files are ignored)"""
74         self._change_to_pkg('simple')
75         p = osc.core.Package('.')
76         p.todo = ['skipped']
77         self.__check_diff(p, '', None)
78
79     def testDiffConflict(self):
80         """diff a file which is in the conflict state"""
81         self._change_to_pkg('simple')
82         p = osc.core.Package('.')
83         p.todo = ['foo']
84         exp = """%s
85 --- foo\t(revision 2)
86 +++ foo\t(working copy)
87 @@ -1,1 +1,5 @@
88 +<<<<<<< foo.mine
89 +This is no test.
90 +=======
91  This is a simple test.
92 +>>>>>>> foo.r2
93 """ % (TestDiffFiles.diff_hdr % 'foo')
94         self.__check_diff(p, exp, None)
95
96     def testDiffModified(self):
97         """diff a modified file"""
98         self._change_to_pkg('simple')
99         p = osc.core.Package('.')
100         p.todo = ['nochange']
101         exp = """%s
102 --- nochange\t(revision 2)
103 +++ nochange\t(working copy)
104 @@ -1,1 +1,2 @@
105 -This file didn't change.
106 +This file didn't change but
107 +is modified.
108 """ % (TestDiffFiles.diff_hdr % 'nochange')
109         self.__check_diff(p, exp, None)
110
111     def testDiffUnversioned(self):
112         """diff an unversioned file"""
113         self._change_to_pkg('simple')
114         p = osc.core.Package('.')
115         p.todo = ['toadd2']
116         self.assertRaises(osc.oscerr.OscIOError, self.__check_diff, p, '', None)
117
118     def testDiffAddedMissing(self):
119         """diff a file which has satus 'A' but the local file does not exist"""
120         self._change_to_pkg('simple')
121         p = osc.core.Package('.')
122         p.todo = ['addedmissing']
123         self.assertRaises(osc.oscerr.OscIOError, self.__check_diff, p, '', None)
124
125     def testDiffMultipleFiles(self):
126         """diff multiple files"""
127         self._change_to_pkg('simple')
128         p = osc.core.Package('.')
129         p.todo = ['nochange', 'somefile']
130         exp = """%s
131 --- nochange\t(revision 2)
132 +++ nochange\t(working copy)
133 @@ -1,1 +1,2 @@
134 -This file didn't change.
135 +This file didn't change but
136 +is modified.
137 %s
138 --- somefile\t(revision 2)
139 +++ somefile\t(working copy)
140 @@ -1,1 +0,0 @@
141 -some content
142 """ % (TestDiffFiles.diff_hdr % 'nochange', TestDiffFiles.diff_hdr % 'somefile')
143         self.__check_diff(p, exp, None)
144
145     def testDiffReplacedEmptyTodo(self):
146         """diff a complete package"""
147         self._change_to_pkg('replaced')
148         p = osc.core.Package('.')
149         exp = """%s
150 --- replaced\t(revision 2)
151 +++ replaced\t(working copy)
152 @@ -1,1 +1,1 @@
153 -yet another file
154 +foo replaced
155 """ % (TestDiffFiles.diff_hdr % 'replaced')
156         self.__check_diff(p, exp, None)
157
158     def testDiffBinaryAdded(self):
159         """diff an added binary file"""
160         self._change_to_pkg('binary')
161         p = osc.core.Package('.')
162         p.todo = ['binary_added']
163         exp = """%s
164 Binary file 'binary_added' added.
165 """ % (TestDiffFiles.diff_hdr % 'binary_added')
166         self.__check_diff(p, exp, None)
167
168     def testDiffBinaryDeleted(self):
169         """diff a deleted binary file"""
170         self._change_to_pkg('binary')
171         p = osc.core.Package('.')
172         p.todo = ['binary_deleted']
173         exp = """%s
174 Binary file 'binary_deleted' deleted.
175 """ % (TestDiffFiles.diff_hdr % 'binary_deleted')
176         self.__check_diff(p, exp, None)
177
178     def testDiffBinaryModified(self):
179         """diff a modified binary file"""
180         self._change_to_pkg('binary')
181         p = osc.core.Package('.')
182         p.todo = ['binary']
183         exp = """%s
184 Binary file 'binary' has changed.
185 """ % (TestDiffFiles.diff_hdr % 'binary')
186         self.__check_diff(p, exp, None)
187
188     # diff with revision
189     @GET('http://localhost/source/osctest/remote_simple_noadd?rev=3', file='testDiffRemoteNoChange_files')
190     def testDiffRemoteNoChange(self):
191         """diff against remote revision where no file changed"""
192         self._change_to_pkg('remote_simple_noadd')
193         p = osc.core.Package('.')
194         self.__check_diff(p, '', 3)
195
196     @GET('http://localhost/source/osctest/remote_simple?rev=3', file='testDiffRemoteModified_files')
197     @GET('http://localhost/source/osctest/remote_simple/merge?rev=3', file='testDiffRemoteModified_merge')
198     def testDiffRemoteModified(self):
199         """diff against a remote revision with one modified file"""
200         self._change_to_pkg('remote_simple')
201         p = osc.core.Package('.')
202         exp = """%s
203 --- merge\t(revision 3)
204 +++ merge\t(working copy)
205 @@ -1,3 +1,4 @@
206  Is it
207  possible to
208  merge this file?
209 +I hope so...
210 %s
211 --- toadd1\t(revision 0)
212 +++ toadd1\t(revision 0)
213 @@ -0,0 +1,1 @@
214 +toadd1
215 """ % (TestDiffFiles.diff_hdr % 'merge', TestDiffFiles.diff_hdr % 'toadd1')
216         self.__check_diff(p, exp, 3)
217
218     @GET('http://localhost/source/osctest/remote_simple?rev=3', file='testDiffRemoteDeletedLocalAdded_files')
219     def testDiffRemoteNotExistingLocalAdded(self):
220         """
221         a file which doesn't exist in a remote revision and
222         has status A in the wc
223         """
224         self._change_to_pkg('remote_simple')
225         p = osc.core.Package('.')
226         exp = """%s
227 --- toadd1\t(revision 0)
228 +++ toadd1\t(revision 0)
229 @@ -0,0 +1,1 @@
230 +toadd1
231 """ % (TestDiffFiles.diff_hdr % 'toadd1')
232         self.__check_diff(p, exp, 3)
233
234     @GET('http://localhost/source/osctest/remote_simple_noadd?rev=3', file='testDiffRemoteExistingLocalNotExisting_files')
235     @GET('http://localhost/source/osctest/remote_simple_noadd/foobar?rev=3', file='testDiffRemoteExistingLocalNotExisting_foobar')
236     @GET('http://localhost/source/osctest/remote_simple_noadd/binary?rev=3', file='testDiffRemoteExistingLocalNotExisting_binary')
237     def testDiffRemoteExistingLocalNotExisting(self):
238         """
239         a file doesn't exist in the local wc but exists
240         in the remote revision
241         """
242         self._change_to_pkg('remote_simple_noadd')
243         p = osc.core.Package('.')
244         exp = """%s
245 --- foobar\t(revision 3)
246 +++ foobar\t(working copy)
247 @@ -1,2 +0,0 @@
248 -foobar
249 -barfoo
250 %s
251 Binary file 'binary' deleted.
252 """ % (TestDiffFiles.diff_hdr % 'foobar', TestDiffFiles.diff_hdr % 'binary')
253         self.__check_diff(p, exp, 3)
254
255     @GET('http://localhost/source/osctest/remote_localmodified?rev=3', file='testDiffRemoteUnchangedLocalModified_files')
256     @GET('http://localhost/source/osctest/remote_localmodified/nochange?rev=3', file='testDiffRemoteUnchangedLocalModified_nochange')
257     @GET('http://localhost/source/osctest/remote_localmodified/binary?rev=3', file='testDiffRemoteUnchangedLocalModified_binary')
258     def testDiffRemoteUnchangedLocalModified(self):
259         """remote revision didn't change, local file is modified"""
260         self._change_to_pkg('remote_localmodified')
261         p = osc.core.Package('.')
262         exp = """%s
263 --- nochange\t(revision 3)
264 +++ nochange\t(working copy)
265 @@ -1,1 +1,2 @@
266  This file didn't change.
267 +oh it does
268 %s
269 Binary file 'binary' has changed.
270 """ % (TestDiffFiles.diff_hdr % 'nochange', TestDiffFiles.diff_hdr % 'binary')
271         self.__check_diff(p, exp, 3)
272
273     @GET('http://localhost/source/osctest/remote_simple_noadd?rev=3', file='testDiffRemoteMissingLocalExisting_files')
274     def testDiffRemoteMissingLocalExisting(self):
275         """
276         remote revision misses a file which exists in the local wc (state ' ')"""
277         self._change_to_pkg('remote_simple_noadd')
278         p = osc.core.Package('.')
279         exp = """%s
280 --- foo\t(revision 0)
281 +++ foo\t(working copy)
282 @@ -0,0 +1,1 @@
283 +This is a simple test.
284 """ % (TestDiffFiles.diff_hdr % 'foo')
285         self.__check_diff(p, exp, 3)
286
287     @GET('http://localhost/source/osctest/remote_localdelete?rev=3', file='testDiffRemoteMissingLocalDeleted_files')
288     def testDiffRemoteMissingLocalDeleted(self):
289         """
290         remote revision misses a file which is marked for
291         deletion in the local wc
292         """
293         # empty diff is expected (svn does the same)
294         self._change_to_pkg('remote_localdelete')
295         p = osc.core.Package('.')
296         self.__check_diff(p, '', 3)
297
298     def __check_diff(self, p, exp, revision=None):
299         s = ''
300         for i in p.get_diff(revision):
301             s += ''.join(i)
302         self.assertEqual(s, exp)
303
304 if __name__ == '__main__':
305     import unittest
306     unittest.main()