tests/test-simplemerge.py
author Arseniy Alekseyev <aalekseyev@janestreet.com>
Thu, 21 Dec 2023 20:30:03 +0000
changeset 51396 3f37d80d3ab4
parent 48875 6000f5b25c9b
child 51690 493034cc3265
permissions -rw-r--r--
revlog: add a C implementation of `headrevsdiff` Python implementation of `headrevsdiff` can be very slow in the worst case compared with the `heads` computation it replaces, since the latter is done in C. Even the average case of this Python implementation is still noticeable in the profiles. This patch makes the computation much much faster by doing it in C.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
     1
# Copyright (C) 2004, 2005 Canonical Ltd
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
     2
#
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
     3
# This program is free software; you can redistribute it and/or modify
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
     4
# it under the terms of the GNU General Public License as published by
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
     5
# the Free Software Foundation; either version 2 of the License, or
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
     6
# (at your option) any later version.
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
     7
#
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
     8
# This program is distributed in the hope that it will be useful,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
     9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    11
# GNU General Public License for more details.
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    12
#
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    13
# You should have received a copy of the GNU General Public License
15782
7de7630053cb Remove FSF mailing address from GPL headers
Martin Geisler <mg@aragost.com>
parents: 10413
diff changeset
    14
# along with this program; if not, see <http://www.gnu.org/licenses/>.
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    15
28927
2d433fa7ff44 tests: make test-simplemerge use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28861
diff changeset
    16
4363
2e3c54fb79a3 actually port simplemerge to hg
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4362
diff changeset
    17
import unittest
28927
2d433fa7ff44 tests: make test-simplemerge use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28861
diff changeset
    18
from mercurial import (
2d433fa7ff44 tests: make test-simplemerge use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28861
diff changeset
    19
    error,
2d433fa7ff44 tests: make test-simplemerge use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28861
diff changeset
    20
    simplemerge,
2d433fa7ff44 tests: make test-simplemerge use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28861
diff changeset
    21
    util,
2d433fa7ff44 tests: make test-simplemerge use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28861
diff changeset
    22
)
6002
abd66eb0889e merge: move the bulk of simplemerge into core
Matt Mackall <mpm@selenic.com>
parents: 4633
diff changeset
    23
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    24
from mercurial.utils import stringutil
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 32279
diff changeset
    25
28927
2d433fa7ff44 tests: make test-simplemerge use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28861
diff changeset
    26
TestCase = unittest.TestCase
6002
abd66eb0889e merge: move the bulk of simplemerge into core
Matt Mackall <mpm@selenic.com>
parents: 4633
diff changeset
    27
# bzr compatible interface, for the tests
abd66eb0889e merge: move the bulk of simplemerge into core
Matt Mackall <mpm@selenic.com>
parents: 4633
diff changeset
    28
class Merge3(simplemerge.Merge3Text):
abd66eb0889e merge: move the bulk of simplemerge into core
Matt Mackall <mpm@selenic.com>
parents: 4633
diff changeset
    29
    """3-way merge of texts.
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    30
6002
abd66eb0889e merge: move the bulk of simplemerge into core
Matt Mackall <mpm@selenic.com>
parents: 4633
diff changeset
    31
    Given BASE, OTHER, THIS, tries to produce a combined text
abd66eb0889e merge: move the bulk of simplemerge into core
Matt Mackall <mpm@selenic.com>
parents: 4633
diff changeset
    32
    incorporating the changes from both BASE->OTHER and BASE->THIS.
abd66eb0889e merge: move the bulk of simplemerge into core
Matt Mackall <mpm@selenic.com>
parents: 4633
diff changeset
    33
    All three will typically be sequences of lines."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    34
6002
abd66eb0889e merge: move the bulk of simplemerge into core
Matt Mackall <mpm@selenic.com>
parents: 4633
diff changeset
    35
    def __init__(self, base, a, b):
37892
c1bc196e021d tests: port test-simplemerge.py to Python 3
Augie Fackler <augie@google.com>
parents: 37891
diff changeset
    36
        basetext = b'\n'.join([i.strip(b'\n') for i in base] + [b''])
c1bc196e021d tests: port test-simplemerge.py to Python 3
Augie Fackler <augie@google.com>
parents: 37891
diff changeset
    37
        atext = b'\n'.join([i.strip(b'\n') for i in a] + [b''])
c1bc196e021d tests: port test-simplemerge.py to Python 3
Augie Fackler <augie@google.com>
parents: 37891
diff changeset
    38
        btext = b'\n'.join([i.strip(b'\n') for i in b] + [b''])
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    39
        if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    40
            stringutil.binary(basetext)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    41
            or stringutil.binary(atext)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    42
            or stringutil.binary(btext)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    43
        ):
37892
c1bc196e021d tests: port test-simplemerge.py to Python 3
Augie Fackler <augie@google.com>
parents: 37891
diff changeset
    44
            raise error.Abort(b"don't know how to merge binary files")
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    45
        simplemerge.Merge3Text.__init__(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    46
            self, basetext, atext, btext, base, a, b
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    47
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    48
6002
abd66eb0889e merge: move the bulk of simplemerge into core
Matt Mackall <mpm@selenic.com>
parents: 4633
diff changeset
    49
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    50
def split_lines(t):
28861
86db5cb55d46 pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents: 26587
diff changeset
    51
    return util.stringio(t).readlines()
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    52
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    53
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    54
############################################################
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    55
# test case data from the gnu diffutils manual
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    56
# common base
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    57
TZU = split_lines(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    58
    b"""     The Nameless is the origin of Heaven and Earth;
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    59
     The named is the mother of all things.
4516
96d8a56d4ef9 Removed trailing whitespace and tabs from python files
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4363
diff changeset
    60
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    61
     Therefore let there always be non-being,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    62
       so we may see their subtlety,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    63
     And let there always be being,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    64
       so we may see their outcome.
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    65
     The two are the same,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    66
     But after they are produced,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    67
       they have different names.
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    68
     They both may be called deep and profound.
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    69
     Deeper and more profound,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    70
     The door of all subtleties!
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    71
"""
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    72
)
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    73
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    74
LAO = split_lines(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    75
    b"""     The Way that can be told of is not the eternal Way;
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    76
     The name that can be named is not the eternal name.
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    77
     The Nameless is the origin of Heaven and Earth;
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    78
     The Named is the mother of all things.
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    79
     Therefore let there always be non-being,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    80
       so we may see their subtlety,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    81
     And let there always be being,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    82
       so we may see their outcome.
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    83
     The two are the same,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    84
     But after they are produced,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    85
       they have different names.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    86
"""
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    87
)
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    88
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    89
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    90
TAO = split_lines(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
    91
    b"""     The Way that can be told of is not the eternal Way;
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    92
     The name that can be named is not the eternal name.
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    93
     The Nameless is the origin of Heaven and Earth;
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    94
     The named is the mother of all things.
4516
96d8a56d4ef9 Removed trailing whitespace and tabs from python files
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4363
diff changeset
    95
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    96
     Therefore let there always be non-being,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    97
       so we may see their subtlety,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    98
     And let there always be being,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    99
       so we may see their result.
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   100
     The two are the same,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   101
     But after they are produced,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   102
       they have different names.
4516
96d8a56d4ef9 Removed trailing whitespace and tabs from python files
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4363
diff changeset
   103
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   104
       -- The Way of Lao-Tzu, tr. Wing-tsit Chan
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   105
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   106
"""
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   107
)
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   108
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   109
MERGED_RESULT = split_lines(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   110
    b"""\
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 6212
diff changeset
   111
     The Way that can be told of is not the eternal Way;
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   112
     The name that can be named is not the eternal name.
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   113
     The Nameless is the origin of Heaven and Earth;
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   114
     The Named is the mother of all things.
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   115
     Therefore let there always be non-being,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   116
       so we may see their subtlety,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   117
     And let there always be being,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   118
       so we may see their result.
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   119
     The two are the same,
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   120
     But after they are produced,
38645
02850baddadd tests: prevent conflict markers in test case from triggering warnings
Danny Hooper <hooper@google.com>
parents: 37892
diff changeset
   121
       they have different names.\
02850baddadd tests: prevent conflict markers in test case from triggering warnings
Danny Hooper <hooper@google.com>
parents: 37892
diff changeset
   122
\n<<<<<<< LAO\
02850baddadd tests: prevent conflict markers in test case from triggering warnings
Danny Hooper <hooper@google.com>
parents: 37892
diff changeset
   123
\n=======
4516
96d8a56d4ef9 Removed trailing whitespace and tabs from python files
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4363
diff changeset
   124
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   125
       -- The Way of Lao-Tzu, tr. Wing-tsit Chan
38645
02850baddadd tests: prevent conflict markers in test case from triggering warnings
Danny Hooper <hooper@google.com>
parents: 37892
diff changeset
   126
\
02850baddadd tests: prevent conflict markers in test case from triggering warnings
Danny Hooper <hooper@google.com>
parents: 37892
diff changeset
   127
\n>>>>>>> TAO
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   128
"""
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   129
)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   130
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   131
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   132
class TestMerge3(TestCase):
4363
2e3c54fb79a3 actually port simplemerge to hg
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4362
diff changeset
   133
    def log(self, msg):
2e3c54fb79a3 actually port simplemerge to hg
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4362
diff changeset
   134
        pass
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   135
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   136
    def test_no_changes(self):
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   137
        """No conflicts because nothing changed"""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   138
        m3 = Merge3([b'aaa', b'bbb'], [b'aaa', b'bbb'], [b'aaa', b'bbb'])
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   139
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   140
        self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   141
            list(m3.find_sync_regions()),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   142
            [(0, 2, 0, 2, 0, 2), (2, 2, 2, 2, 2, 2)],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   143
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   144
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   145
        self.assertEqual(list(m3.merge_regions()), [(b'unchanged', 0, 2)])
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   146
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   147
        self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   148
            list(m3.merge_groups()), [(b'unchanged', [b'aaa', b'bbb'])]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   149
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   150
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   151
    def test_front_insert(self):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   152
        m3 = Merge3([b'zz'], [b'aaa', b'bbb', b'zz'], [b'zz'])
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   153
17513
d08b333816c6 spelling: sentinel
timeless@mozdev.org
parents: 15782
diff changeset
   154
        # todo: should use a sentinel at end as from get_matching_blocks
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   155
        # to match without zz
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   156
        self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   157
            list(m3.find_sync_regions()),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   158
            [(0, 1, 2, 3, 0, 1), (1, 1, 3, 3, 1, 1)],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   159
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   160
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   161
        self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   162
            list(m3.merge_regions()), [(b'a', 0, 2), (b'unchanged', 0, 1)]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   163
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   164
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   165
        self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   166
            list(m3.merge_groups()),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   167
            [(b'a', [b'aaa', b'bbb']), (b'unchanged', [b'zz'])],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   168
        )
4516
96d8a56d4ef9 Removed trailing whitespace and tabs from python files
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4363
diff changeset
   169
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   170
    def test_null_insert(self):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   171
        m3 = Merge3([], [b'aaa', b'bbb'], [])
17513
d08b333816c6 spelling: sentinel
timeless@mozdev.org
parents: 15782
diff changeset
   172
        # todo: should use a sentinel at end as from get_matching_blocks
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   173
        # to match without zz
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   174
        self.assertEqual(list(m3.find_sync_regions()), [(0, 0, 2, 2, 0, 0)])
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   175
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   176
        self.assertEqual(list(m3.merge_regions()), [(b'a', 0, 2)])
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   177
48558
2dbee604a4f0 simplemerge: clarify names of functions that render conflict markers
Martin von Zweigbergk <martinvonz@google.com>
parents: 48557
diff changeset
   178
        self.assertEqual(
48562
12ac4401ff7d simplemerge: simplify and rename `render_markers()`
Martin von Zweigbergk <martinvonz@google.com>
parents: 48558
diff changeset
   179
            simplemerge.render_minimized(m3), ([b'aaa', b'bbb'], False)
48558
2dbee604a4f0 simplemerge: clarify names of functions that render conflict markers
Martin von Zweigbergk <martinvonz@google.com>
parents: 48557
diff changeset
   180
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   181
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   182
    def test_no_conflicts(self):
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   183
        """No conflicts because only one side changed"""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   184
        m3 = Merge3(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   185
            [b'aaa', b'bbb'], [b'aaa', b'111', b'bbb'], [b'aaa', b'bbb']
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   186
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   187
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   188
        self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   189
            list(m3.find_sync_regions()),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   190
            [(0, 1, 0, 1, 0, 1), (1, 2, 2, 3, 1, 2), (2, 2, 3, 3, 2, 2)],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   191
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   192
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   193
        self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   194
            list(m3.merge_regions()),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   195
            [(b'unchanged', 0, 1), (b'a', 1, 2), (b'unchanged', 1, 2)],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   196
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   197
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   198
    def test_append_a(self):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   199
        m3 = Merge3(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   200
            [b'aaa\n', b'bbb\n'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   201
            [b'aaa\n', b'bbb\n', b'222\n'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   202
            [b'aaa\n', b'bbb\n'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   203
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   204
48557
c6649c53073f simplemerge: make merge_lines() a free function
Martin von Zweigbergk <martinvonz@google.com>
parents: 48556
diff changeset
   205
        self.assertEqual(
48562
12ac4401ff7d simplemerge: simplify and rename `render_markers()`
Martin von Zweigbergk <martinvonz@google.com>
parents: 48558
diff changeset
   206
            b''.join(simplemerge.render_minimized(m3)[0]), b'aaa\nbbb\n222\n'
48557
c6649c53073f simplemerge: make merge_lines() a free function
Martin von Zweigbergk <martinvonz@google.com>
parents: 48556
diff changeset
   207
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   208
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   209
    def test_append_b(self):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   210
        m3 = Merge3(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   211
            [b'aaa\n', b'bbb\n'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   212
            [b'aaa\n', b'bbb\n'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   213
            [b'aaa\n', b'bbb\n', b'222\n'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   214
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   215
48557
c6649c53073f simplemerge: make merge_lines() a free function
Martin von Zweigbergk <martinvonz@google.com>
parents: 48556
diff changeset
   216
        self.assertEqual(
48562
12ac4401ff7d simplemerge: simplify and rename `render_markers()`
Martin von Zweigbergk <martinvonz@google.com>
parents: 48558
diff changeset
   217
            b''.join(simplemerge.render_minimized(m3)[0]), b'aaa\nbbb\n222\n'
48557
c6649c53073f simplemerge: make merge_lines() a free function
Martin von Zweigbergk <martinvonz@google.com>
parents: 48556
diff changeset
   218
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   219
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   220
    def test_append_agreement(self):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   221
        m3 = Merge3(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   222
            [b'aaa\n', b'bbb\n'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   223
            [b'aaa\n', b'bbb\n', b'222\n'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   224
            [b'aaa\n', b'bbb\n', b'222\n'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   225
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   226
48557
c6649c53073f simplemerge: make merge_lines() a free function
Martin von Zweigbergk <martinvonz@google.com>
parents: 48556
diff changeset
   227
        self.assertEqual(
48562
12ac4401ff7d simplemerge: simplify and rename `render_markers()`
Martin von Zweigbergk <martinvonz@google.com>
parents: 48558
diff changeset
   228
            b''.join(simplemerge.render_minimized(m3)[0]), b'aaa\nbbb\n222\n'
48557
c6649c53073f simplemerge: make merge_lines() a free function
Martin von Zweigbergk <martinvonz@google.com>
parents: 48556
diff changeset
   229
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   230
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   231
    def test_append_clash(self):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   232
        m3 = Merge3(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   233
            [b'aaa\n', b'bbb\n'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   234
            [b'aaa\n', b'bbb\n', b'222\n'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   235
            [b'aaa\n', b'bbb\n', b'333\n'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   236
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   237
48562
12ac4401ff7d simplemerge: simplify and rename `render_markers()`
Martin von Zweigbergk <martinvonz@google.com>
parents: 48558
diff changeset
   238
        ml, conflicts = simplemerge.render_minimized(
48557
c6649c53073f simplemerge: make merge_lines() a free function
Martin von Zweigbergk <martinvonz@google.com>
parents: 48556
diff changeset
   239
            m3,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   240
            name_a=b'a',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   241
            name_b=b'b',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   242
            start_marker=b'<<',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   243
            mid_marker=b'--',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   244
            end_marker=b'>>',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   245
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   246
        self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   247
            b''.join(ml),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   248
            b'aaa\n' b'bbb\n' b'<< a\n' b'222\n' b'--\n' b'333\n' b'>> b\n',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   249
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   250
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   251
    def test_insert_agreement(self):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   252
        m3 = Merge3(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   253
            [b'aaa\n', b'bbb\n'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   254
            [b'aaa\n', b'222\n', b'bbb\n'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   255
            [b'aaa\n', b'222\n', b'bbb\n'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   256
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   257
48562
12ac4401ff7d simplemerge: simplify and rename `render_markers()`
Martin von Zweigbergk <martinvonz@google.com>
parents: 48558
diff changeset
   258
        ml, conflicts = simplemerge.render_minimized(
48557
c6649c53073f simplemerge: make merge_lines() a free function
Martin von Zweigbergk <martinvonz@google.com>
parents: 48556
diff changeset
   259
            m3,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   260
            name_a=b'a',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   261
            name_b=b'b',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   262
            start_marker=b'<<',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   263
            mid_marker=b'--',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   264
            end_marker=b'>>',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   265
        )
37892
c1bc196e021d tests: port test-simplemerge.py to Python 3
Augie Fackler <augie@google.com>
parents: 37891
diff changeset
   266
        self.assertEqual(b''.join(ml), b'aaa\n222\nbbb\n')
4516
96d8a56d4ef9 Removed trailing whitespace and tabs from python files
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4363
diff changeset
   267
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   268
    def test_insert_clash(self):
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   269
        """Both try to insert lines in the same place."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   270
        m3 = Merge3(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   271
            [b'aaa\n', b'bbb\n'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   272
            [b'aaa\n', b'111\n', b'bbb\n'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   273
            [b'aaa\n', b'222\n', b'bbb\n'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   274
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   275
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   276
        self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   277
            list(m3.find_sync_regions()),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   278
            [(0, 1, 0, 1, 0, 1), (1, 2, 2, 3, 2, 3), (2, 2, 3, 3, 3, 3)],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   279
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   280
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   281
        self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   282
            list(m3.merge_regions()),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   283
            [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   284
                (b'unchanged', 0, 1),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   285
                (b'conflict', 1, 1, 1, 2, 1, 2),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   286
                (b'unchanged', 1, 2),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   287
            ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   288
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   289
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   290
        self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   291
            list(m3.merge_groups()),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   292
            [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   293
                (b'unchanged', [b'aaa\n']),
48547
374bf34c9ffd simplemerge: make merge_groups() yield only 2-tuples
Martin von Zweigbergk <martinvonz@google.com>
parents: 46355
diff changeset
   294
                (b'conflict', ([], [b'111\n'], [b'222\n'])),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   295
                (b'unchanged', [b'bbb\n']),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   296
            ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   297
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   298
48562
12ac4401ff7d simplemerge: simplify and rename `render_markers()`
Martin von Zweigbergk <martinvonz@google.com>
parents: 48558
diff changeset
   299
        ml, conflicts = simplemerge.render_minimized(
48557
c6649c53073f simplemerge: make merge_lines() a free function
Martin von Zweigbergk <martinvonz@google.com>
parents: 48556
diff changeset
   300
            m3,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   301
            name_a=b'a',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   302
            name_b=b'b',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   303
            start_marker=b'<<',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   304
            mid_marker=b'--',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   305
            end_marker=b'>>',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   306
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   307
        self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   308
            b''.join(ml),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   309
            b'''aaa
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   310
<< a
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   311
111
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   312
--
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   313
222
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   314
>> b
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   315
bbb
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   316
''',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   317
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   318
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   319
    def test_replace_clash(self):
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   320
        """Both try to insert lines in the same place."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   321
        m3 = Merge3(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   322
            [b'aaa', b'000', b'bbb'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   323
            [b'aaa', b'111', b'bbb'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   324
            [b'aaa', b'222', b'bbb'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   325
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   326
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   327
        self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   328
            list(m3.find_sync_regions()),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   329
            [(0, 1, 0, 1, 0, 1), (2, 3, 2, 3, 2, 3), (3, 3, 3, 3, 3, 3)],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   330
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   331
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   332
    def test_replace_multi(self):
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   333
        """Replacement with regions of different size."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   334
        m3 = Merge3(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   335
            [b'aaa', b'000', b'000', b'bbb'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   336
            [b'aaa', b'111', b'111', b'111', b'bbb'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   337
            [b'aaa', b'222', b'222', b'222', b'222', b'bbb'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   338
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   339
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   340
        self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   341
            list(m3.find_sync_regions()),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   342
            [(0, 1, 0, 1, 0, 1), (3, 4, 4, 5, 5, 6), (4, 4, 5, 5, 6, 6)],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   343
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   344
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   345
    def test_merge_poem(self):
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   346
        """Test case from diff3 manual"""
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   347
        m3 = Merge3(TZU, LAO, TAO)
48562
12ac4401ff7d simplemerge: simplify and rename `render_markers()`
Martin von Zweigbergk <martinvonz@google.com>
parents: 48558
diff changeset
   348
        ml, conflicts = simplemerge.render_minimized(m3, b'LAO', b'TAO')
37892
c1bc196e021d tests: port test-simplemerge.py to Python 3
Augie Fackler <augie@google.com>
parents: 37891
diff changeset
   349
        self.log(b'merge result:')
c1bc196e021d tests: port test-simplemerge.py to Python 3
Augie Fackler <augie@google.com>
parents: 37891
diff changeset
   350
        self.log(b''.join(ml))
37891
a3ed6e7217c1 tests: replace use of assertEquals with assertEqual in test-simplemerge.py
Augie Fackler <augie@google.com>
parents: 37084
diff changeset
   351
        self.assertEqual(ml, MERGED_RESULT)
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   352
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   353
    def test_binary(self):
32279
68c43a416585 tests: use context manager form of assertRaises
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28927
diff changeset
   354
        with self.assertRaises(error.Abort):
37892
c1bc196e021d tests: port test-simplemerge.py to Python 3
Augie Fackler <augie@google.com>
parents: 37891
diff changeset
   355
            Merge3([b'\x00'], [b'a'], [b'b'])
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   356
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   357
    def test_dos_text(self):
37892
c1bc196e021d tests: port test-simplemerge.py to Python 3
Augie Fackler <augie@google.com>
parents: 37891
diff changeset
   358
        base_text = b'a\r\n'
c1bc196e021d tests: port test-simplemerge.py to Python 3
Augie Fackler <augie@google.com>
parents: 37891
diff changeset
   359
        this_text = b'b\r\n'
c1bc196e021d tests: port test-simplemerge.py to Python 3
Augie Fackler <augie@google.com>
parents: 37891
diff changeset
   360
        other_text = b'c\r\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   361
        m3 = Merge3(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   362
            base_text.splitlines(True),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   363
            other_text.splitlines(True),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   364
            this_text.splitlines(True),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   365
        )
48562
12ac4401ff7d simplemerge: simplify and rename `render_markers()`
Martin von Zweigbergk <martinvonz@google.com>
parents: 48558
diff changeset
   366
        m_lines, conflicts = simplemerge.render_minimized(m3, b'OTHER', b'THIS')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   367
        self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   368
            b'<<<<<<< OTHER\r\nc\r\n=======\r\nb\r\n'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   369
            b'>>>>>>> THIS\r\n'.splitlines(True),
48556
ce8c82a5cd65 simplemerge: convert `merge_lines()` away from generator
Martin von Zweigbergk <martinvonz@google.com>
parents: 48547
diff changeset
   370
            m_lines,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   371
        )
4362
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   372
465b9ea02868 Import 3-way merge code from bzr
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   373
    def test_mac_text(self):
37892
c1bc196e021d tests: port test-simplemerge.py to Python 3
Augie Fackler <augie@google.com>
parents: 37891
diff changeset
   374
        base_text = b'a\r'
c1bc196e021d tests: port test-simplemerge.py to Python 3
Augie Fackler <augie@google.com>
parents: 37891
diff changeset
   375
        this_text = b'b\r'
c1bc196e021d tests: port test-simplemerge.py to Python 3
Augie Fackler <augie@google.com>
parents: 37891
diff changeset
   376
        other_text = b'c\r'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   377
        m3 = Merge3(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   378
            base_text.splitlines(True),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   379
            other_text.splitlines(True),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   380
            this_text.splitlines(True),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   381
        )
48562
12ac4401ff7d simplemerge: simplify and rename `render_markers()`
Martin von Zweigbergk <martinvonz@google.com>
parents: 48558
diff changeset
   382
        m_lines, conflicts = simplemerge.render_minimized(m3, b'OTHER', b'THIS')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   383
        self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   384
            b'<<<<<<< OTHER\rc\r=======\rb\r'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   385
            b'>>>>>>> THIS\r'.splitlines(True),
48556
ce8c82a5cd65 simplemerge: convert `merge_lines()` away from generator
Martin von Zweigbergk <martinvonz@google.com>
parents: 48547
diff changeset
   386
            m_lines,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   387
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   388
4363
2e3c54fb79a3 actually port simplemerge to hg
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4362
diff changeset
   389
2e3c54fb79a3 actually port simplemerge to hg
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4362
diff changeset
   390
if __name__ == '__main__':
43010
d75142ef054a tests: use silenttestrunner in test-simplemerge.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38645
diff changeset
   391
    import silenttestrunner
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43010
diff changeset
   392
43010
d75142ef054a tests: use silenttestrunner in test-simplemerge.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38645
diff changeset
   393
    silenttestrunner.main(__name__)