/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
2052.3.2 by John Arbash Meinel
Change Copyright .. by Canonical to Copyright ... Canonical
1
# Copyright (C) 2006 Canonical Ltd
7296.5.1 by Jelmer Vernooij
Import patch code from bzrtools.
2
# Copyright (C) 2008 Aaron Bentley <aaron@aaronbentley.com>
1558.15.7 by Aaron Bentley
Add copyright statements
3
#
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; either version 2 of the License, or
7
# (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1558.15.7 by Aaron Bentley
Add copyright statements
17
7413.2.1 by Jelmer Vernooij
Add iter_patched_from_hunks implementation that calls out to the patch command.
18
import os
19
20
from breezy.iterablefile import IterableFile
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
21
from breezy.errors import BinaryFile
7413.2.1 by Jelmer Vernooij
Add iter_patched_from_hunks implementation that calls out to the patch command.
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
1558.15.6 by Aaron Bentley
Added more tests
25
1558.15.8 by Aaron Bentley
Whitespace fixes
26
1558.15.6 by Aaron Bentley
Added more tests
27
class TestPatch(TestCaseInTempDir):
1558.15.8 by Aaron Bentley
Whitespace fixes
28
1558.15.6 by Aaron Bentley
Added more tests
29
    def test_diff3_binaries(self):
7143.15.2 by Jelmer Vernooij
Run autopep8.
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')
1558.15.6 by Aaron Bentley
Added more tests
36
        self.assertRaises(BinaryFile, diff3, 'unused', 'this', 'other', 'base')
7296.5.1 by Jelmer Vernooij
Import patch code from bzrtools.
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')
7413.2.1 by Jelmer Vernooij
Add iter_patched_from_hunks implementation that calls out to the patch command.
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))