|
@@ -261,18 +261,96 @@ class TestUdiff(unittest.TestCase):
|
261
|
261
|
class TestDiffParser(unittest.TestCase):
|
262
|
262
|
|
263
|
263
|
def test_type_detect(self):
|
264
|
|
- items = ['spam\n', '--- README\n', '+++ README\n', '@@ -3,7 +3,6 @@\n']
|
|
264
|
+ patch = r"""\
|
|
265
|
+spam
|
|
266
|
+--- a
|
|
267
|
++++ b
|
|
268
|
+@@ -1,2 +1,2 @@
|
|
269
|
+"""
|
|
270
|
+ items = patch.splitlines(True)
|
265
|
271
|
stream = cdiff.PatchStream(Sequential(items))
|
266
|
272
|
parser = cdiff.DiffParser(stream)
|
267
|
273
|
self.assertEqual(parser._type, 'udiff')
|
268
|
274
|
|
269
|
275
|
def test_type_detect_neg(self):
|
270
|
|
- items = ['spam\n', '--- README\n', '+++ README\n', 'spam\n']
|
|
276
|
+ patch = r"""\
|
|
277
|
+spam
|
|
278
|
+--- a
|
|
279
|
++++ b
|
|
280
|
+spam
|
|
281
|
+"""
|
|
282
|
+ items = patch.splitlines(True)
|
271
|
283
|
stream = cdiff.PatchStream(Sequential(items))
|
272
|
284
|
self.assertRaises(RuntimeError, cdiff.DiffParser, stream)
|
273
|
285
|
|
274
|
|
- def test_parser(self):
|
275
|
|
- pass
|
|
286
|
+ def test_parse_dangling_header(self):
|
|
287
|
+ patch = r"""\
|
|
288
|
+--- a
|
|
289
|
++++ b
|
|
290
|
+@@ -1,2 +1,2 @@
|
|
291
|
+-foo
|
|
292
|
++bar
|
|
293
|
+ common
|
|
294
|
+spam
|
|
295
|
+"""
|
|
296
|
+ items = patch.splitlines(True)
|
|
297
|
+ stream = cdiff.PatchStream(Sequential(items))
|
|
298
|
+ parser = cdiff.DiffParser(stream)
|
|
299
|
+ self.assertRaises(RuntimeError, next, parser._parse())
|
|
300
|
+
|
|
301
|
+ def test_parse_missing_new_path(self):
|
|
302
|
+ patch = r"""\
|
|
303
|
+--- a
|
|
304
|
++++ b
|
|
305
|
+@@ -1,2 +1,2 @@
|
|
306
|
+-foo
|
|
307
|
++bar
|
|
308
|
+ common
|
|
309
|
+--- c
|
|
310
|
+"""
|
|
311
|
+ items = patch.splitlines(True)
|
|
312
|
+ stream = cdiff.PatchStream(Sequential(items))
|
|
313
|
+ parser = cdiff.DiffParser(stream)
|
|
314
|
+ self.assertRaises(AssertionError, list, parser._parse())
|
|
315
|
+
|
|
316
|
+ def test_parse_missing_hunk(self):
|
|
317
|
+ patch = r"""\
|
|
318
|
+--- a
|
|
319
|
++++ b
|
|
320
|
+@@ -1,2 +1,2 @@
|
|
321
|
+-foo
|
|
322
|
++bar
|
|
323
|
+ common
|
|
324
|
+--- c
|
|
325
|
++++ d
|
|
326
|
+"""
|
|
327
|
+ items = patch.splitlines(True)
|
|
328
|
+ stream = cdiff.PatchStream(Sequential(items))
|
|
329
|
+ parser = cdiff.DiffParser(stream)
|
|
330
|
+ self.assertRaises(AssertionError, list, parser._parse())
|
|
331
|
+
|
|
332
|
+ def test_parse_svn_prop(self):
|
|
333
|
+ patch = r"""\
|
|
334
|
+--- a
|
|
335
|
++++ b
|
|
336
|
+Added: svn:executable
|
|
337
|
+
|
|
338
|
++*
|
|
339
|
+\ No newline at end of property
|
|
340
|
+Added: svn:keywords
|
|
341
|
+
|
|
342
|
++Id
|
|
343
|
+"""
|
|
344
|
+ items = patch.splitlines(True)
|
|
345
|
+ stream = cdiff.PatchStream(Sequential(items))
|
|
346
|
+ parser = cdiff.DiffParser(stream)
|
|
347
|
+ out = list(parser._parse())
|
|
348
|
+ self.assertEqual(len(out), 1)
|
|
349
|
+ self.assertEqual(len(out[0]._hunks), 2)
|
|
350
|
+
|
|
351
|
+ hunk = out[0]._hunks[1]
|
|
352
|
+ self.assertEqual(hunk._hunk_headers, ['Added: svn:keywords\n'])
|
|
353
|
+ self.assertEqual(hunk._hunk_list, [('+', 'Id\n')])
|
276
|
354
|
|
277
|
355
|
|
278
|
356
|
if __name__ == '__main__':
|