139
141
list(result_entries))
143
def test_too_hard(self):
144
"""A conflict this plugin cannot resolve raises EntryConflict.
146
# An entry edited in other but deleted in this is a conflict we can't
147
# resolve. (Ideally perhaps we'd generate a nice conflict file, but
148
# for now we just give up.)
149
self.assertRaises(changelog_merge.EntryConflict,
150
changelog_merge.merge_entries,
151
sample2_base_entries, [], sample2_other_entries)
153
def test_default_guess_edits(self):
154
"""default_guess_edits matches a new entry only once.
156
(Even when that entry is the best match for multiple old entries.)
158
new_in_other = [('AAAAA',), ('BBBBB',)]
159
deleted_in_other = [('DDDDD',), ('BBBBBx',), ('BBBBBxx',)]
160
# BBBBB is the best match for both BBBBBx and BBBBBxx
161
result = changelog_merge.default_guess_edits(
162
new_in_other, deleted_in_other)
165
[('DDDDD',), ('BBBBBxx',)], # deleted
166
[(('BBBBBx',), ('BBBBB',))]), # edits
170
class TestChangeLogMerger(tests.TestCaseWithTransport):
171
"""Tests for ChangeLogMerger class.
173
Most tests should be unit tests for merge_entries (and its helpers).
174
This class is just to cover the handful of lines of code in ChangeLogMerger
178
def make_builder(self):
179
builder = test_merge_core.MergeBuilder(self.test_base_dir)
180
self.addCleanup(builder.cleanup)
183
def make_changelog_merger(self, base_text, this_text, other_text):
184
builder = self.make_builder()
185
builder.add_file('clog-id', builder.tree_root, 'ChangeLog',
187
builder.change_contents('clog-id', other=other_text, this=this_text)
188
merger = builder.make_merger(merge.Merge3Merger, ['clog-id'])
189
merger.this_branch.get_config().set_user_option(
190
'changelog_merge_files', 'ChangeLog')
191
merge_hook_params = merge.MergeHookParams(merger, 'clog-id', None,
192
'file', 'file', 'conflict')
193
changelog_merger = changelog_merge.ChangeLogMerger(merger)
194
return changelog_merger, merge_hook_params
196
def test_merge_text_returns_not_applicable(self):
197
"""A conflict this plugin cannot resolve returns (not_applicable, None).
199
# Build same example as TestMergeCoreLogic.test_too_hard: edit an entry
200
# in other but delete it in this.
201
def entries_as_str(entries):
202
return ''.join(entry + '\n' for entry in entries)
203
changelog_merger, merge_hook_params = self.make_changelog_merger(
204
entries_as_str(sample2_base_entries),
206
entries_as_str(sample2_other_entries))
208
('not_applicable', None),
209
changelog_merger.merge_contents(merge_hook_params))
211
def test_merge_text_returns_success(self):
212
"""A successful merge returns ('success', lines)."""
213
changelog_merger, merge_hook_params = self.make_changelog_merger(
214
'', 'this text\n', 'other text\n')
215
status, lines = changelog_merger.merge_contents(merge_hook_params)
217
('success', ['other text\n', 'this text\n']),
218
(status, list(lines)))