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
17
from bzrlib.errors import BinaryFile
18
from bzrlib.patch import diff3
19
from bzrlib.tests import TestCaseInTempDir
20
from breezy.iterablefile import IterableFile
21
from breezy.errors import BinaryFile
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
22
27
class TestPatch(TestCaseInTempDir):
24
29
def test_diff3_binaries(self):
25
file('this', 'wb').write('a')
26
file('other', 'wb').write('a')
27
file('base', 'wb').write('\x00')
30
with open('this', 'wb') as f:
32
with open('other', 'wb') as f:
34
with open('base', 'wb') as f:
28
36
self.assertRaises(BinaryFile, diff3, 'unused', 'this', 'other', 'base')
39
class TestPatch(TestCaseInTempDir):
41
def test_missing_patch(self):
42
self.assertRaises(PatchInvokeError, run_patch, '.', [],
43
_patch_cmd='/unlikely/to/exist')
46
class PatchesTester(TestCase):
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")
53
def data_lines(self, filename):
54
with self.datafile(filename) as datafile:
55
return datafile.readlines()
57
def test_iter_patched_from_hunks(self):
58
"""Test a few patch files, and make sure they work."""
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'),
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)
74
for patch_line in patched_file:
75
self.assertEqual(patch_line, mod_lines[count], 'for file %s' % diff)
77
self.assertEqual(count, len(mod_lines))