~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_merge3.py

  • Committer: Ian Clatworthy
  • Date: 2009-01-19 02:24:15 UTC
  • mto: This revision was merged to the branch mainline in revision 3944.
  • Revision ID: ian.clatworthy@canonical.com-20090119022415-mo0mcfeiexfktgwt
apply jam's log --short fix (Ian Clatworthy)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2004, 2005 by Canonical Ltd
2
 
 
 
1
# Copyright (C) 2004, 2005 Canonical Ltd
 
2
#
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.
7
 
 
 
7
#
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.
12
 
 
 
12
#
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
363
363
 
364
364
    def test_binary(self):
365
365
        self.assertRaises(BinaryFile, Merge3, ['\x00'], ['a'], ['b'])
 
366
 
 
367
    def test_dos_text(self):
 
368
        base_text = 'a\r\n'
 
369
        this_text = 'b\r\n'
 
370
        other_text = 'c\r\n'
 
371
        m3 = Merge3(base_text.splitlines(True), other_text.splitlines(True),
 
372
                    this_text.splitlines(True))
 
373
        m_lines = m3.merge_lines('OTHER', 'THIS')
 
374
        self.assertEqual('<<<<<<< OTHER\r\nc\r\n=======\r\nb\r\n'
 
375
            '>>>>>>> THIS\r\n'.splitlines(True), list(m_lines))
 
376
 
 
377
    def test_mac_text(self):
 
378
        base_text = 'a\r'
 
379
        this_text = 'b\r'
 
380
        other_text = 'c\r'
 
381
        m3 = Merge3(base_text.splitlines(True), other_text.splitlines(True),
 
382
                    this_text.splitlines(True))
 
383
        m_lines = m3.merge_lines('OTHER', 'THIS')
 
384
        self.assertEqual('<<<<<<< OTHER\rc\r=======\rb\r'
 
385
            '>>>>>>> THIS\r'.splitlines(True), list(m_lines))
 
386
 
 
387
    def test_merge3_cherrypick(self):
 
388
        base_text = "a\nb\n"
 
389
        this_text = "a\n"
 
390
        other_text = "a\nb\nc\n"
 
391
        # When cherrypicking, lines in base are not part of the conflict
 
392
        m3 = Merge3(base_text.splitlines(True), this_text.splitlines(True),
 
393
                    other_text.splitlines(True), is_cherrypick=True)
 
394
        m_lines = m3.merge_lines()
 
395
        self.assertEqualDiff('a\n<<<<<<<\n=======\nc\n>>>>>>>\n',
 
396
                             ''.join(m_lines))
 
397
 
 
398
        # This is not symmetric
 
399
        m3 = Merge3(base_text.splitlines(True), other_text.splitlines(True),
 
400
                    this_text.splitlines(True), is_cherrypick=True)
 
401
        m_lines = m3.merge_lines()
 
402
        self.assertEqualDiff('a\n<<<<<<<\nb\nc\n=======\n>>>>>>>\n',
 
403
                             ''.join(m_lines))
 
404
 
 
405
    def test_merge3_cherrypick_w_mixed(self):
 
406
        base_text = 'a\nb\nc\nd\ne\n'
 
407
        this_text = 'a\nb\nq\n'
 
408
        other_text = 'a\nb\nc\nd\nf\ne\ng\n'
 
409
        # When cherrypicking, lines in base are not part of the conflict
 
410
        m3 = Merge3(base_text.splitlines(True), this_text.splitlines(True),
 
411
                    other_text.splitlines(True), is_cherrypick=True)
 
412
        m_lines = m3.merge_lines()
 
413
        self.assertEqualDiff('a\n'
 
414
                             'b\n'
 
415
                             '<<<<<<<\n'
 
416
                             'q\n'
 
417
                             '=======\n'
 
418
                             'f\n'
 
419
                             '>>>>>>>\n'
 
420
                             '<<<<<<<\n'
 
421
                             '=======\n'
 
422
                             'g\n'
 
423
                             '>>>>>>>\n',
 
424
                             ''.join(m_lines))