/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/tests/test_patch.py

  • Committer: Jelmer Vernooij
  • Date: 2020-05-06 02:13:25 UTC
  • mfrom: (7490.7.21 work)
  • mto: This revision was merged to the branch mainline in revision 7501.
  • Revision ID: jelmer@jelmer.uk-20200506021325-awbmmqu1zyorz7sj
Merge 3.1 branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# Copyright (C) 2006 Canonical Ltd
 
2
# Copyright (C) 2008 Aaron Bentley <aaron@aaronbentley.com>
2
3
#
3
4
# This program is free software; you can redistribute it and/or modify
4
5
# it under the terms of the GNU General Public License as published by
14
15
# along with this program; if not, write to the Free Software
15
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
17
 
 
18
import os
 
19
 
 
20
from breezy.iterablefile import IterableFile
17
21
from breezy.errors import BinaryFile
18
 
from breezy.patch import diff3
19
 
from breezy.tests import TestCaseInTempDir
 
22
from breezy.patch import diff3, PatchInvokeError, run_patch, iter_patched_from_hunks
 
23
from breezy.patches import parse_patch
 
24
from breezy.tests import TestCaseInTempDir, TestCase
20
25
 
21
26
 
22
27
class TestPatch(TestCaseInTempDir):
23
28
 
24
29
    def test_diff3_binaries(self):
25
 
        with file('this', 'wb') as f: f.write('a')
26
 
        with file('other', 'wb') as f: f.write('a')
27
 
        with file('base', 'wb') as f: f.write('\x00')
 
30
        with open('this', 'wb') as f:
 
31
            f.write(b'a')
 
32
        with open('other', 'wb') as f:
 
33
            f.write(b'a')
 
34
        with open('base', 'wb') as f:
 
35
            f.write(b'\x00')
28
36
        self.assertRaises(BinaryFile, diff3, 'unused', 'this', 'other', 'base')
 
37
 
 
38
 
 
39
class TestPatch(TestCaseInTempDir):
 
40
 
 
41
    def test_missing_patch(self):
 
42
        self.assertRaises(PatchInvokeError, run_patch, '.', [],
 
43
                          _patch_cmd='/unlikely/to/exist')
 
44
 
 
45
 
 
46
class PatchesTester(TestCase):
 
47
 
 
48
    def datafile(self, filename):
 
49
        data_path = os.path.join(os.path.dirname(__file__),
 
50
                                 "test_patches_data", filename)
 
51
        return open(data_path, "rb")
 
52
 
 
53
    def data_lines(self, filename):
 
54
        with self.datafile(filename) as datafile:
 
55
            return datafile.readlines()
 
56
 
 
57
    def test_iter_patched_from_hunks(self):
 
58
        """Test a few patch files, and make sure they work."""
 
59
        files = [
 
60
            ('diff-2', 'orig-2', 'mod-2'),
 
61
            ('diff-3', 'orig-3', 'mod-3'),
 
62
            ('diff-4', 'orig-4', 'mod-4'),
 
63
            ('diff-5', 'orig-5', 'mod-5'),
 
64
            ('diff-6', 'orig-6', 'mod-6'),
 
65
            ('diff-7', 'orig-7', 'mod-7'),
 
66
        ]
 
67
        for diff, orig, mod in files:
 
68
            parsed = parse_patch(self.datafile(diff))
 
69
            orig_lines = list(self.datafile(orig))
 
70
            mod_lines = list(self.datafile(mod))
 
71
            iter_patched = iter_patched_from_hunks(orig_lines, parsed.hunks)
 
72
            patched_file = IterableFile(iter_patched)
 
73
            count = 0
 
74
            for patch_line in patched_file:
 
75
                self.assertEqual(patch_line, mod_lines[count], 'for file %s' % diff)
 
76
                count += 1
 
77
            self.assertEqual(count, len(mod_lines))