1
1
# Copyright (C) 2004, 2005 by Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
5
5
# the Free Software Foundation; either version 2 of the License, or
6
6
# (at your option) any later version.
8
8
# This program is distributed in the hope that it will be useful,
9
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
11
# GNU General Public License for more details.
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
from bzrlib.tests import TestCaseInTempDir, TestCase
18
from bzrlib.selftest import TestCaseInTempDir, TestCase
19
19
from bzrlib.merge3 import Merge3
20
from bzrlib.errors import CantReprocessAndShowBase, BinaryFile
20
from bzrlib.errors import CantReprocessAndShowBase
22
22
def split_lines(t):
23
23
from cStringIO import StringIO
310
310
m3 = Merge3(base_text, other_text, this_text)
311
311
m_lines = m3.merge_lines('OTHER', 'THIS', reprocess=True)
312
312
merged_text = "".join(list(m_lines))
313
optimal_text = ("a\n" * 10 + "<<<<<<< OTHER\nc\n"
314
+ 8* "b\n" + "c\n=======\n"
315
+ 10*"b\n" + ">>>>>>> THIS\n")
316
self.assertEqualDiff(optimal_text, merged_text)
318
def test_minimal_conflicts_unique(self):
320
"""Add a newline to each entry in the string"""
321
return [(x+'\n') for x in s]
323
base_text = add_newline("abcdefghijklm")
324
this_text = add_newline("abcdefghijklmNOPQRSTUVWXYZ")
325
other_text = add_newline("abcdefghijklm1OPQRSTUVWXY2")
326
m3 = Merge3(base_text, other_text, this_text)
327
m_lines = m3.merge_lines('OTHER', 'THIS', reprocess=True)
328
merged_text = "".join(list(m_lines))
329
optimal_text = ''.join(add_newline("abcdefghijklm")
330
+ ["<<<<<<< OTHER\n1\n=======\nN\n>>>>>>> THIS\n"]
331
+ add_newline('OPQRSTUVWXY')
332
+ ["<<<<<<< OTHER\n2\n=======\nZ\n>>>>>>> THIS\n"]
334
self.assertEqualDiff(optimal_text, merged_text)
336
def test_minimal_conflicts_nonunique(self):
338
"""Add a newline to each entry in the string"""
339
return [(x+'\n') for x in s]
341
base_text = add_newline("abacddefgghij")
342
this_text = add_newline("abacddefgghijkalmontfprz")
343
other_text = add_newline("abacddefgghijknlmontfprd")
344
m3 = Merge3(base_text, other_text, this_text)
345
m_lines = m3.merge_lines('OTHER', 'THIS', reprocess=True)
346
merged_text = "".join(list(m_lines))
347
optimal_text = ''.join(add_newline("abacddefgghijk")
348
+ ["<<<<<<< OTHER\nn\n=======\na\n>>>>>>> THIS\n"]
349
+ add_newline('lmontfpr')
350
+ ["<<<<<<< OTHER\nd\n=======\nz\n>>>>>>> THIS\n"]
352
self.assertEqualDiff(optimal_text, merged_text)
313
optimal_text = "a\n" * 10 + "<<<<<<< OTHER\nc\n=======\n>>>>>>> THIS"\
314
+ "\n" + 8* "b\n" + "<<<<<<< OTHER\nc\n=======\nb\nb\n>>>>>>>"\
316
self.assertEqualDiff(merged_text, optimal_text)
354
318
def test_reprocess_and_base(self):
355
319
"""Reprocessing and showing base breaks correctly"""
360
324
m_lines = m3.merge_lines('OTHER', 'THIS', reprocess=True,
361
325
base_marker='|||||||')
362
326
self.assertRaises(CantReprocessAndShowBase, list, m_lines)
364
def test_binary(self):
365
self.assertRaises(BinaryFile, Merge3, ['\x00'], ['a'], ['b'])