Procházet zdrojové kódy

More cases for patch parser, coverage reached 70%

Matthew Wang před 11 roky
rodič
revize
8e0f529b91
1 změnil soubory, kde provedl 82 přidání a 4 odebrání
  1. 82
    4
      tests/test_cdiff.py

+ 82
- 4
tests/test_cdiff.py Zobrazit soubor

@@ -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
+## -0,0 +1 ##
338
++*
339
+\ No newline at end of property
340
+Added: svn:keywords
341
+## -0,0 +1 ##
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__':