##// END OF EJS Templates
tests: port test-simplemerge.py to Python 3...
Augie Fackler -
r37909:c1bc196e default
parent child Browse files
Show More
@@ -1,465 +1,466
1 test-abort-checkin.t
1 test-abort-checkin.t
2 test-add.t
2 test-add.t
3 test-addremove-similar.t
3 test-addremove-similar.t
4 test-addremove.t
4 test-addremove.t
5 test-amend-subrepo.t
5 test-amend-subrepo.t
6 test-amend.t
6 test-amend.t
7 test-ancestor.py
7 test-ancestor.py
8 test-annotate.py
8 test-annotate.py
9 test-annotate.t
9 test-annotate.t
10 test-archive-symlinks.t
10 test-archive-symlinks.t
11 test-atomictempfile.py
11 test-atomictempfile.py
12 test-audit-path.t
12 test-audit-path.t
13 test-audit-subrepo.t
13 test-audit-subrepo.t
14 test-automv.t
14 test-automv.t
15 test-backout.t
15 test-backout.t
16 test-backwards-remove.t
16 test-backwards-remove.t
17 test-basic.t
17 test-basic.t
18 test-bheads.t
18 test-bheads.t
19 test-bisect.t
19 test-bisect.t
20 test-bisect2.t
20 test-bisect2.t
21 test-bisect3.t
21 test-bisect3.t
22 test-blackbox.t
22 test-blackbox.t
23 test-bookmarks-current.t
23 test-bookmarks-current.t
24 test-bookmarks-merge.t
24 test-bookmarks-merge.t
25 test-bookmarks-rebase.t
25 test-bookmarks-rebase.t
26 test-bookmarks-strip.t
26 test-bookmarks-strip.t
27 test-bookmarks.t
27 test-bookmarks.t
28 test-branch-change.t
28 test-branch-change.t
29 test-branch-option.t
29 test-branch-option.t
30 test-branch-tag-confict.t
30 test-branch-tag-confict.t
31 test-branches.t
31 test-branches.t
32 test-bundle-phases.t
32 test-bundle-phases.t
33 test-bundle-type.t
33 test-bundle-type.t
34 test-bundle-vs-outgoing.t
34 test-bundle-vs-outgoing.t
35 test-bundle2-multiple-changegroups.t
35 test-bundle2-multiple-changegroups.t
36 test-cappedreader.py
36 test-cappedreader.py
37 test-casecollision.t
37 test-casecollision.t
38 test-cat.t
38 test-cat.t
39 test-censor.t
39 test-censor.t
40 test-changelog-exec.t
40 test-changelog-exec.t
41 test-check-commit.t
41 test-check-commit.t
42 test-check-execute.t
42 test-check-execute.t
43 test-check-interfaces.py
43 test-check-interfaces.py
44 test-check-module-imports.t
44 test-check-module-imports.t
45 test-check-pyflakes.t
45 test-check-pyflakes.t
46 test-check-pylint.t
46 test-check-pylint.t
47 test-check-shbang.t
47 test-check-shbang.t
48 test-children.t
48 test-children.t
49 test-clone-cgi.t
49 test-clone-cgi.t
50 test-clone-pull-corruption.t
50 test-clone-pull-corruption.t
51 test-clone-r.t
51 test-clone-r.t
52 test-clone-update-order.t
52 test-clone-update-order.t
53 test-command-template.t
53 test-command-template.t
54 test-commit-amend.t
54 test-commit-amend.t
55 test-commit-interactive.t
55 test-commit-interactive.t
56 test-commit-multiple.t
56 test-commit-multiple.t
57 test-commit-unresolved.t
57 test-commit-unresolved.t
58 test-commit.t
58 test-commit.t
59 test-committer.t
59 test-committer.t
60 test-completion.t
60 test-completion.t
61 test-config-env.py
61 test-config-env.py
62 test-config.t
62 test-config.t
63 test-conflict.t
63 test-conflict.t
64 test-confused-revert.t
64 test-confused-revert.t
65 test-contrib-check-code.t
65 test-contrib-check-code.t
66 test-contrib-check-commit.t
66 test-contrib-check-commit.t
67 test-convert-authormap.t
67 test-convert-authormap.t
68 test-convert-clonebranches.t
68 test-convert-clonebranches.t
69 test-convert-datesort.t
69 test-convert-datesort.t
70 test-convert-filemap.t
70 test-convert-filemap.t
71 test-convert-hg-sink.t
71 test-convert-hg-sink.t
72 test-convert-hg-source.t
72 test-convert-hg-source.t
73 test-convert-hg-startrev.t
73 test-convert-hg-startrev.t
74 test-convert-splicemap.t
74 test-convert-splicemap.t
75 test-convert-tagsbranch-topology.t
75 test-convert-tagsbranch-topology.t
76 test-copy-move-merge.t
76 test-copy-move-merge.t
77 test-copy.t
77 test-copy.t
78 test-copytrace-heuristics.t
78 test-copytrace-heuristics.t
79 test-debugbuilddag.t
79 test-debugbuilddag.t
80 test-debugbundle.t
80 test-debugbundle.t
81 test-debugextensions.t
81 test-debugextensions.t
82 test-debugindexdot.t
82 test-debugindexdot.t
83 test-debugrename.t
83 test-debugrename.t
84 test-default-push.t
84 test-default-push.t
85 test-diff-binary-file.t
85 test-diff-binary-file.t
86 test-diff-change.t
86 test-diff-change.t
87 test-diff-copy-depth.t
87 test-diff-copy-depth.t
88 test-diff-hashes.t
88 test-diff-hashes.t
89 test-diff-ignore-whitespace.t
89 test-diff-ignore-whitespace.t
90 test-diff-indent-heuristic.t
90 test-diff-indent-heuristic.t
91 test-diff-issue2761.t
91 test-diff-issue2761.t
92 test-diff-newlines.t
92 test-diff-newlines.t
93 test-diff-reverse.t
93 test-diff-reverse.t
94 test-diff-subdir.t
94 test-diff-subdir.t
95 test-diff-unified.t
95 test-diff-unified.t
96 test-diff-upgrade.t
96 test-diff-upgrade.t
97 test-diffdir.t
97 test-diffdir.t
98 test-diffstat.t
98 test-diffstat.t
99 test-directaccess.t
99 test-directaccess.t
100 test-dirstate-backup.t
100 test-dirstate-backup.t
101 test-dirstate-nonnormalset.t
101 test-dirstate-nonnormalset.t
102 test-dirstate.t
102 test-dirstate.t
103 test-doctest.py
103 test-doctest.py
104 test-double-merge.t
104 test-double-merge.t
105 test-drawdag.t
105 test-drawdag.t
106 test-duplicateoptions.py
106 test-duplicateoptions.py
107 test-editor-filename.t
107 test-editor-filename.t
108 test-empty-dir.t
108 test-empty-dir.t
109 test-empty-file.t
109 test-empty-file.t
110 test-empty-group.t
110 test-empty-group.t
111 test-empty.t
111 test-empty.t
112 test-encode.t
112 test-encode.t
113 test-encoding-func.py
113 test-encoding-func.py
114 test-encoding.t
114 test-encoding.t
115 test-eol-add.t
115 test-eol-add.t
116 test-eol-clone.t
116 test-eol-clone.t
117 test-eol-hook.t
117 test-eol-hook.t
118 test-eol-tag.t
118 test-eol-tag.t
119 test-eol-update.t
119 test-eol-update.t
120 test-excessive-merge.t
120 test-excessive-merge.t
121 test-exchange-obsmarkers-case-A1.t
121 test-exchange-obsmarkers-case-A1.t
122 test-exchange-obsmarkers-case-A2.t
122 test-exchange-obsmarkers-case-A2.t
123 test-exchange-obsmarkers-case-A3.t
123 test-exchange-obsmarkers-case-A3.t
124 test-exchange-obsmarkers-case-A4.t
124 test-exchange-obsmarkers-case-A4.t
125 test-exchange-obsmarkers-case-A5.t
125 test-exchange-obsmarkers-case-A5.t
126 test-exchange-obsmarkers-case-A6.t
126 test-exchange-obsmarkers-case-A6.t
127 test-exchange-obsmarkers-case-A7.t
127 test-exchange-obsmarkers-case-A7.t
128 test-exchange-obsmarkers-case-B1.t
128 test-exchange-obsmarkers-case-B1.t
129 test-exchange-obsmarkers-case-B2.t
129 test-exchange-obsmarkers-case-B2.t
130 test-exchange-obsmarkers-case-B3.t
130 test-exchange-obsmarkers-case-B3.t
131 test-exchange-obsmarkers-case-B4.t
131 test-exchange-obsmarkers-case-B4.t
132 test-exchange-obsmarkers-case-B5.t
132 test-exchange-obsmarkers-case-B5.t
133 test-exchange-obsmarkers-case-B6.t
133 test-exchange-obsmarkers-case-B6.t
134 test-exchange-obsmarkers-case-B7.t
134 test-exchange-obsmarkers-case-B7.t
135 test-exchange-obsmarkers-case-C1.t
135 test-exchange-obsmarkers-case-C1.t
136 test-exchange-obsmarkers-case-C2.t
136 test-exchange-obsmarkers-case-C2.t
137 test-exchange-obsmarkers-case-C3.t
137 test-exchange-obsmarkers-case-C3.t
138 test-exchange-obsmarkers-case-C4.t
138 test-exchange-obsmarkers-case-C4.t
139 test-exchange-obsmarkers-case-D1.t
139 test-exchange-obsmarkers-case-D1.t
140 test-exchange-obsmarkers-case-D2.t
140 test-exchange-obsmarkers-case-D2.t
141 test-exchange-obsmarkers-case-D3.t
141 test-exchange-obsmarkers-case-D3.t
142 test-exchange-obsmarkers-case-D4.t
142 test-exchange-obsmarkers-case-D4.t
143 test-execute-bit.t
143 test-execute-bit.t
144 test-export.t
144 test-export.t
145 test-extdata.t
145 test-extdata.t
146 test-extdiff.t
146 test-extdiff.t
147 test-extra-filelog-entry.t
147 test-extra-filelog-entry.t
148 test-filebranch.t
148 test-filebranch.t
149 test-fileset-generated.t
149 test-fileset-generated.t
150 test-fix-topology.t
150 test-fix-topology.t
151 test-flags.t
151 test-flags.t
152 test-generaldelta.t
152 test-generaldelta.t
153 test-getbundle.t
153 test-getbundle.t
154 test-git-export.t
154 test-git-export.t
155 test-glog-topological.t
155 test-glog-topological.t
156 test-gpg.t
156 test-gpg.t
157 test-graft.t
157 test-graft.t
158 test-hg-parseurl.py
158 test-hg-parseurl.py
159 test-hghave.t
159 test-hghave.t
160 test-hgignore.t
160 test-hgignore.t
161 test-hgk.t
161 test-hgk.t
162 test-hgweb-bundle.t
162 test-hgweb-bundle.t
163 test-hgweb-descend-empties.t
163 test-hgweb-descend-empties.t
164 test-hgweb-empty.t
164 test-hgweb-empty.t
165 test-hgweb-removed.t
165 test-hgweb-removed.t
166 test-hgwebdir-paths.py
166 test-hgwebdir-paths.py
167 test-hgwebdirsym.t
167 test-hgwebdirsym.t
168 test-histedit-arguments.t
168 test-histedit-arguments.t
169 test-histedit-base.t
169 test-histedit-base.t
170 test-histedit-bookmark-motion.t
170 test-histedit-bookmark-motion.t
171 test-histedit-commute.t
171 test-histedit-commute.t
172 test-histedit-drop.t
172 test-histedit-drop.t
173 test-histedit-edit.t
173 test-histedit-edit.t
174 test-histedit-fold-non-commute.t
174 test-histedit-fold-non-commute.t
175 test-histedit-fold.t
175 test-histedit-fold.t
176 test-histedit-no-change.t
176 test-histedit-no-change.t
177 test-histedit-non-commute-abort.t
177 test-histedit-non-commute-abort.t
178 test-histedit-non-commute.t
178 test-histedit-non-commute.t
179 test-histedit-obsolete.t
179 test-histedit-obsolete.t
180 test-histedit-outgoing.t
180 test-histedit-outgoing.t
181 test-histedit-templates.t
181 test-histedit-templates.t
182 test-http-branchmap.t
182 test-http-branchmap.t
183 test-http-bundle1.t
183 test-http-bundle1.t
184 test-http-clone-r.t
184 test-http-clone-r.t
185 test-http.t
185 test-http.t
186 test-hybridencode.py
186 test-hybridencode.py
187 test-identify.t
187 test-identify.t
188 test-import-unknown.t
188 test-import-unknown.t
189 test-import.t
189 test-import.t
190 test-imports-checker.t
190 test-imports-checker.t
191 test-incoming-outgoing.t
191 test-incoming-outgoing.t
192 test-inherit-mode.t
192 test-inherit-mode.t
193 test-issue1089.t
193 test-issue1089.t
194 test-issue1102.t
194 test-issue1102.t
195 test-issue1175.t
195 test-issue1175.t
196 test-issue1306.t
196 test-issue1306.t
197 test-issue1438.t
197 test-issue1438.t
198 test-issue1502.t
198 test-issue1502.t
199 test-issue1802.t
199 test-issue1802.t
200 test-issue1877.t
200 test-issue1877.t
201 test-issue1993.t
201 test-issue1993.t
202 test-issue2137.t
202 test-issue2137.t
203 test-issue3084.t
203 test-issue3084.t
204 test-issue4074.t
204 test-issue4074.t
205 test-issue522.t
205 test-issue522.t
206 test-issue586.t
206 test-issue586.t
207 test-issue612.t
207 test-issue612.t
208 test-issue619.t
208 test-issue619.t
209 test-issue660.t
209 test-issue660.t
210 test-issue672.t
210 test-issue672.t
211 test-issue842.t
211 test-issue842.t
212 test-journal-exists.t
212 test-journal-exists.t
213 test-journal-share.t
213 test-journal-share.t
214 test-journal.t
214 test-journal.t
215 test-largefiles-cache.t
215 test-largefiles-cache.t
216 test-largefiles-misc.t
216 test-largefiles-misc.t
217 test-largefiles-small-disk.t
217 test-largefiles-small-disk.t
218 test-largefiles-update.t
218 test-largefiles-update.t
219 test-largefiles.t
219 test-largefiles.t
220 test-lfs-largefiles.t
220 test-lfs-largefiles.t
221 test-linerange.py
221 test-linerange.py
222 test-locate.t
222 test-locate.t
223 test-lock-badness.t
223 test-lock-badness.t
224 test-log-linerange.t
224 test-log-linerange.t
225 test-log.t
225 test-log.t
226 test-logexchange.t
226 test-logexchange.t
227 test-lrucachedict.py
227 test-lrucachedict.py
228 test-mactext.t
228 test-mactext.t
229 test-mailmap.t
229 test-mailmap.t
230 test-manifest-merging.t
230 test-manifest-merging.t
231 test-manifest.py
231 test-manifest.py
232 test-manifest.t
232 test-manifest.t
233 test-match.py
233 test-match.py
234 test-mdiff.py
234 test-mdiff.py
235 test-merge-changedelete.t
235 test-merge-changedelete.t
236 test-merge-closedheads.t
236 test-merge-closedheads.t
237 test-merge-commit.t
237 test-merge-commit.t
238 test-merge-criss-cross.t
238 test-merge-criss-cross.t
239 test-merge-default.t
239 test-merge-default.t
240 test-merge-force.t
240 test-merge-force.t
241 test-merge-halt.t
241 test-merge-halt.t
242 test-merge-internal-tools-pattern.t
242 test-merge-internal-tools-pattern.t
243 test-merge-local.t
243 test-merge-local.t
244 test-merge-remove.t
244 test-merge-remove.t
245 test-merge-revert.t
245 test-merge-revert.t
246 test-merge-revert2.t
246 test-merge-revert2.t
247 test-merge-subrepos.t
247 test-merge-subrepos.t
248 test-merge-symlinks.t
248 test-merge-symlinks.t
249 test-merge-tools.t
249 test-merge-tools.t
250 test-merge-types.t
250 test-merge-types.t
251 test-merge1.t
251 test-merge1.t
252 test-merge10.t
252 test-merge10.t
253 test-merge2.t
253 test-merge2.t
254 test-merge4.t
254 test-merge4.t
255 test-merge5.t
255 test-merge5.t
256 test-merge6.t
256 test-merge6.t
257 test-merge7.t
257 test-merge7.t
258 test-merge8.t
258 test-merge8.t
259 test-merge9.t
259 test-merge9.t
260 test-minifileset.py
260 test-minifileset.py
261 test-minirst.py
261 test-minirst.py
262 test-mq-git.t
262 test-mq-git.t
263 test-mq-header-date.t
263 test-mq-header-date.t
264 test-mq-header-from.t
264 test-mq-header-from.t
265 test-mq-merge.t
265 test-mq-merge.t
266 test-mq-pull-from-bundle.t
266 test-mq-pull-from-bundle.t
267 test-mq-qclone-http.t
267 test-mq-qclone-http.t
268 test-mq-qdelete.t
268 test-mq-qdelete.t
269 test-mq-qdiff.t
269 test-mq-qdiff.t
270 test-mq-qfold.t
270 test-mq-qfold.t
271 test-mq-qgoto.t
271 test-mq-qgoto.t
272 test-mq-qimport-fail-cleanup.t
272 test-mq-qimport-fail-cleanup.t
273 test-mq-qnew.t
273 test-mq-qnew.t
274 test-mq-qpush-exact.t
274 test-mq-qpush-exact.t
275 test-mq-qqueue.t
275 test-mq-qqueue.t
276 test-mq-qrefresh-interactive.t
276 test-mq-qrefresh-interactive.t
277 test-mq-qrefresh-replace-log-message.t
277 test-mq-qrefresh-replace-log-message.t
278 test-mq-qrefresh.t
278 test-mq-qrefresh.t
279 test-mq-qrename.t
279 test-mq-qrename.t
280 test-mq-qsave.t
280 test-mq-qsave.t
281 test-mq-safety.t
281 test-mq-safety.t
282 test-mq-subrepo.t
282 test-mq-subrepo.t
283 test-mq-symlinks.t
283 test-mq-symlinks.t
284 test-mv-cp-st-diff.t
284 test-mv-cp-st-diff.t
285 test-narrow-archive.t
285 test-narrow-archive.t
286 test-narrow-clone-no-ellipsis.t
286 test-narrow-clone-no-ellipsis.t
287 test-narrow-clone-non-narrow-server.t
287 test-narrow-clone-non-narrow-server.t
288 test-narrow-clone-nonlinear.t
288 test-narrow-clone-nonlinear.t
289 test-narrow-clone.t
289 test-narrow-clone.t
290 test-narrow-commit.t
290 test-narrow-commit.t
291 test-narrow-copies.t
291 test-narrow-copies.t
292 test-narrow-debugcommands.t
292 test-narrow-debugcommands.t
293 test-narrow-debugrebuilddirstate.t
293 test-narrow-debugrebuilddirstate.t
294 test-narrow-exchange-merges.t
294 test-narrow-exchange-merges.t
295 test-narrow-exchange.t
295 test-narrow-exchange.t
296 test-narrow-expanddirstate.t
296 test-narrow-expanddirstate.t
297 test-narrow-merge.t
297 test-narrow-merge.t
298 test-narrow-patch.t
298 test-narrow-patch.t
299 test-narrow-patterns.t
299 test-narrow-patterns.t
300 test-narrow-pull.t
300 test-narrow-pull.t
301 test-narrow-rebase.t
301 test-narrow-rebase.t
302 test-narrow-shallow-merges.t
302 test-narrow-shallow-merges.t
303 test-narrow-shallow.t
303 test-narrow-shallow.t
304 test-narrow-strip.t
304 test-narrow-strip.t
305 test-narrow-update.t
305 test-narrow-update.t
306 test-nested-repo.t
306 test-nested-repo.t
307 test-newbranch.t
307 test-newbranch.t
308 test-obshistory.t
308 test-obshistory.t
309 test-obsmarker-template.t
309 test-obsmarker-template.t
310 test-obsmarkers-effectflag.t
310 test-obsmarkers-effectflag.t
311 test-obsolete-bundle-strip.t
311 test-obsolete-bundle-strip.t
312 test-obsolete-changeset-exchange.t
312 test-obsolete-changeset-exchange.t
313 test-obsolete-checkheads.t
313 test-obsolete-checkheads.t
314 test-obsolete-distributed.t
314 test-obsolete-distributed.t
315 test-obsolete-tag-cache.t
315 test-obsolete-tag-cache.t
316 test-parents.t
316 test-parents.t
317 test-pathconflicts-merge.t
317 test-pathconflicts-merge.t
318 test-pathconflicts-update.t
318 test-pathconflicts-update.t
319 test-pathencode.py
319 test-pathencode.py
320 test-pending.t
320 test-pending.t
321 test-permissions.t
321 test-permissions.t
322 test-phases.t
322 test-phases.t
323 test-pull-branch.t
323 test-pull-branch.t
324 test-pull-http.t
324 test-pull-http.t
325 test-pull-permission.t
325 test-pull-permission.t
326 test-pull-pull-corruption.t
326 test-pull-pull-corruption.t
327 test-pull-r.t
327 test-pull-r.t
328 test-pull-update.t
328 test-pull-update.t
329 test-purge.t
329 test-purge.t
330 test-push-checkheads-partial-C1.t
330 test-push-checkheads-partial-C1.t
331 test-push-checkheads-partial-C2.t
331 test-push-checkheads-partial-C2.t
332 test-push-checkheads-partial-C3.t
332 test-push-checkheads-partial-C3.t
333 test-push-checkheads-partial-C4.t
333 test-push-checkheads-partial-C4.t
334 test-push-checkheads-pruned-B1.t
334 test-push-checkheads-pruned-B1.t
335 test-push-checkheads-pruned-B2.t
335 test-push-checkheads-pruned-B2.t
336 test-push-checkheads-pruned-B3.t
336 test-push-checkheads-pruned-B3.t
337 test-push-checkheads-pruned-B4.t
337 test-push-checkheads-pruned-B4.t
338 test-push-checkheads-pruned-B5.t
338 test-push-checkheads-pruned-B5.t
339 test-push-checkheads-pruned-B6.t
339 test-push-checkheads-pruned-B6.t
340 test-push-checkheads-pruned-B7.t
340 test-push-checkheads-pruned-B7.t
341 test-push-checkheads-pruned-B8.t
341 test-push-checkheads-pruned-B8.t
342 test-push-checkheads-superceed-A1.t
342 test-push-checkheads-superceed-A1.t
343 test-push-checkheads-superceed-A2.t
343 test-push-checkheads-superceed-A2.t
344 test-push-checkheads-superceed-A3.t
344 test-push-checkheads-superceed-A3.t
345 test-push-checkheads-superceed-A4.t
345 test-push-checkheads-superceed-A4.t
346 test-push-checkheads-superceed-A5.t
346 test-push-checkheads-superceed-A5.t
347 test-push-checkheads-superceed-A6.t
347 test-push-checkheads-superceed-A6.t
348 test-push-checkheads-superceed-A7.t
348 test-push-checkheads-superceed-A7.t
349 test-push-checkheads-superceed-A8.t
349 test-push-checkheads-superceed-A8.t
350 test-push-checkheads-unpushed-D1.t
350 test-push-checkheads-unpushed-D1.t
351 test-push-checkheads-unpushed-D2.t
351 test-push-checkheads-unpushed-D2.t
352 test-push-checkheads-unpushed-D3.t
352 test-push-checkheads-unpushed-D3.t
353 test-push-checkheads-unpushed-D4.t
353 test-push-checkheads-unpushed-D4.t
354 test-push-checkheads-unpushed-D5.t
354 test-push-checkheads-unpushed-D5.t
355 test-push-checkheads-unpushed-D6.t
355 test-push-checkheads-unpushed-D6.t
356 test-push-checkheads-unpushed-D7.t
356 test-push-checkheads-unpushed-D7.t
357 test-push-http.t
357 test-push-http.t
358 test-push-warn.t
358 test-push-warn.t
359 test-pushvars.t
359 test-pushvars.t
360 test-rebase-abort.t
360 test-rebase-abort.t
361 test-rebase-base-flag.t
361 test-rebase-base-flag.t
362 test-rebase-bookmarks.t
362 test-rebase-bookmarks.t
363 test-rebase-brute-force.t
363 test-rebase-brute-force.t
364 test-rebase-cache.t
364 test-rebase-cache.t
365 test-rebase-check-restore.t
365 test-rebase-check-restore.t
366 test-rebase-collapse.t
366 test-rebase-collapse.t
367 test-rebase-conflicts.t
367 test-rebase-conflicts.t
368 test-rebase-dest.t
368 test-rebase-dest.t
369 test-rebase-detach.t
369 test-rebase-detach.t
370 test-rebase-emptycommit.t
370 test-rebase-emptycommit.t
371 test-rebase-inmemory.t
371 test-rebase-inmemory.t
372 test-rebase-interruptions.t
372 test-rebase-interruptions.t
373 test-rebase-issue-noparam-single-rev.t
373 test-rebase-issue-noparam-single-rev.t
374 test-rebase-legacy.t
374 test-rebase-legacy.t
375 test-rebase-mq-skip.t
375 test-rebase-mq-skip.t
376 test-rebase-mq.t
376 test-rebase-mq.t
377 test-rebase-named-branches.t
377 test-rebase-named-branches.t
378 test-rebase-newancestor.t
378 test-rebase-newancestor.t
379 test-rebase-obsolete.t
379 test-rebase-obsolete.t
380 test-rebase-parameters.t
380 test-rebase-parameters.t
381 test-rebase-partial.t
381 test-rebase-partial.t
382 test-rebase-pull.t
382 test-rebase-pull.t
383 test-rebase-rename.t
383 test-rebase-rename.t
384 test-rebase-scenario-global.t
384 test-rebase-scenario-global.t
385 test-rebase-templates.t
385 test-rebase-templates.t
386 test-rebase-transaction.t
386 test-rebase-transaction.t
387 test-record.t
387 test-record.t
388 test-relink.t
388 test-relink.t
389 test-remove.t
389 test-remove.t
390 test-rename-after-merge.t
390 test-rename-after-merge.t
391 test-rename-dir-merge.t
391 test-rename-dir-merge.t
392 test-rename-merge1.t
392 test-rename-merge1.t
393 test-rename.t
393 test-rename.t
394 test-repair-strip.t
394 test-repair-strip.t
395 test-repo-compengines.t
395 test-repo-compengines.t
396 test-resolve.t
396 test-resolve.t
397 test-revert-flags.t
397 test-revert-flags.t
398 test-revert-unknown.t
398 test-revert-unknown.t
399 test-revlog-ancestry.py
399 test-revlog-ancestry.py
400 test-revlog-group-emptyiter.t
400 test-revlog-group-emptyiter.t
401 test-revlog-mmapindex.t
401 test-revlog-mmapindex.t
402 test-revlog-packentry.t
402 test-revlog-packentry.t
403 test-revset-dirstate-parents.t
403 test-revset-dirstate-parents.t
404 test-revset-legacy-lookup.t
404 test-revset-legacy-lookup.t
405 test-revset-outgoing.t
405 test-revset-outgoing.t
406 test-rollback.t
406 test-rollback.t
407 test-run-tests.py
407 test-run-tests.py
408 test-run-tests.t
408 test-run-tests.t
409 test-schemes.t
409 test-schemes.t
410 test-serve.t
410 test-serve.t
411 test-setdiscovery.t
411 test-setdiscovery.t
412 test-share.t
412 test-share.t
413 test-shelve.t
413 test-shelve.t
414 test-show-stack.t
414 test-show-stack.t
415 test-show-work.t
415 test-show-work.t
416 test-show.t
416 test-show.t
417 test-simple-update.t
417 test-simple-update.t
418 test-simplemerge.py
418 test-single-head.t
419 test-single-head.t
419 test-sparse-clear.t
420 test-sparse-clear.t
420 test-sparse-import.t
421 test-sparse-import.t
421 test-sparse-merges.t
422 test-sparse-merges.t
422 test-sparse-profiles.t
423 test-sparse-profiles.t
423 test-sparse-requirement.t
424 test-sparse-requirement.t
424 test-sparse-verbose-json.t
425 test-sparse-verbose-json.t
425 test-ssh-clone-r.t
426 test-ssh-clone-r.t
426 test-ssh-proto.t
427 test-ssh-proto.t
427 test-sshserver.py
428 test-sshserver.py
428 test-stack.t
429 test-stack.t
429 test-status-rev.t
430 test-status-rev.t
430 test-status-terse.t
431 test-status-terse.t
431 test-strip-cross.t
432 test-strip-cross.t
432 test-strip.t
433 test-strip.t
433 test-subrepo-deep-nested-change.t
434 test-subrepo-deep-nested-change.t
434 test-subrepo-missing.t
435 test-subrepo-missing.t
435 test-subrepo-recursion.t
436 test-subrepo-recursion.t
436 test-subrepo-relative-path.t
437 test-subrepo-relative-path.t
437 test-subrepo.t
438 test-subrepo.t
438 test-symlinks.t
439 test-symlinks.t
439 test-tag.t
440 test-tag.t
440 test-tags.t
441 test-tags.t
441 test-template-engine.t
442 test-template-engine.t
442 test-treemanifest.t
443 test-treemanifest.t
443 test-unamend.t
444 test-unamend.t
444 test-uncommit.t
445 test-uncommit.t
445 test-unified-test.t
446 test-unified-test.t
446 test-unrelated-pull.t
447 test-unrelated-pull.t
447 test-up-local-change.t
448 test-up-local-change.t
448 test-update-branches.t
449 test-update-branches.t
449 test-update-dest.t
450 test-update-dest.t
450 test-update-issue1456.t
451 test-update-issue1456.t
451 test-update-names.t
452 test-update-names.t
452 test-update-reverse.t
453 test-update-reverse.t
453 test-upgrade-repo.t
454 test-upgrade-repo.t
454 test-url-download.t
455 test-url-download.t
455 test-url-rev.t
456 test-url-rev.t
456 test-url.py
457 test-url.py
457 test-username-newline.t
458 test-username-newline.t
458 test-verify.t
459 test-verify.t
459 test-walkrepo.py
460 test-walkrepo.py
460 test-websub.t
461 test-websub.t
461 test-win32text.t
462 test-win32text.t
462 test-wireproto-clientreactor.py
463 test-wireproto-clientreactor.py
463 test-wireproto-framing.py
464 test-wireproto-framing.py
464 test-wireproto-serverreactor.py
465 test-wireproto-serverreactor.py
465 test-xdg.t
466 test-xdg.t
@@ -1,365 +1,365
1 # Copyright (C) 2004, 2005 Canonical Ltd
1 # Copyright (C) 2004, 2005 Canonical Ltd
2 #
2 #
3 # This program is free software; you can redistribute it and/or modify
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 2 of the License, or
5 # the Free Software Foundation; either version 2 of the License, or
6 # (at your option) any later version.
6 # (at your option) any later version.
7 #
7 #
8 # This program is distributed in the hope that it will be useful,
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
11 # GNU General Public License for more details.
12 #
12 #
13 # You should have received a copy of the GNU General Public License
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, see <http://www.gnu.org/licenses/>.
14 # along with this program; if not, see <http://www.gnu.org/licenses/>.
15
15
16 from __future__ import absolute_import
16 from __future__ import absolute_import
17
17
18 import unittest
18 import unittest
19 from mercurial import (
19 from mercurial import (
20 error,
20 error,
21 simplemerge,
21 simplemerge,
22 util,
22 util,
23 )
23 )
24
24
25 from mercurial.utils import (
25 from mercurial.utils import (
26 stringutil,
26 stringutil,
27 )
27 )
28
28
29 TestCase = unittest.TestCase
29 TestCase = unittest.TestCase
30 # bzr compatible interface, for the tests
30 # bzr compatible interface, for the tests
31 class Merge3(simplemerge.Merge3Text):
31 class Merge3(simplemerge.Merge3Text):
32 """3-way merge of texts.
32 """3-way merge of texts.
33
33
34 Given BASE, OTHER, THIS, tries to produce a combined text
34 Given BASE, OTHER, THIS, tries to produce a combined text
35 incorporating the changes from both BASE->OTHER and BASE->THIS.
35 incorporating the changes from both BASE->OTHER and BASE->THIS.
36 All three will typically be sequences of lines."""
36 All three will typically be sequences of lines."""
37 def __init__(self, base, a, b):
37 def __init__(self, base, a, b):
38 basetext = '\n'.join([i.strip('\n') for i in base] + [''])
38 basetext = b'\n'.join([i.strip(b'\n') for i in base] + [b''])
39 atext = '\n'.join([i.strip('\n') for i in a] + [''])
39 atext = b'\n'.join([i.strip(b'\n') for i in a] + [b''])
40 btext = '\n'.join([i.strip('\n') for i in b] + [''])
40 btext = b'\n'.join([i.strip(b'\n') for i in b] + [b''])
41 if (stringutil.binary(basetext) or stringutil.binary(atext)
41 if (stringutil.binary(basetext) or stringutil.binary(atext)
42 or stringutil.binary(btext)):
42 or stringutil.binary(btext)):
43 raise error.Abort("don't know how to merge binary files")
43 raise error.Abort(b"don't know how to merge binary files")
44 simplemerge.Merge3Text.__init__(self, basetext, atext, btext,
44 simplemerge.Merge3Text.__init__(self, basetext, atext, btext,
45 base, a, b)
45 base, a, b)
46
46
47 CantReprocessAndShowBase = simplemerge.CantReprocessAndShowBase
47 CantReprocessAndShowBase = simplemerge.CantReprocessAndShowBase
48
48
49 def split_lines(t):
49 def split_lines(t):
50 return util.stringio(t).readlines()
50 return util.stringio(t).readlines()
51
51
52 ############################################################
52 ############################################################
53 # test case data from the gnu diffutils manual
53 # test case data from the gnu diffutils manual
54 # common base
54 # common base
55 TZU = split_lines(""" The Nameless is the origin of Heaven and Earth;
55 TZU = split_lines(b""" The Nameless is the origin of Heaven and Earth;
56 The named is the mother of all things.
56 The named is the mother of all things.
57
57
58 Therefore let there always be non-being,
58 Therefore let there always be non-being,
59 so we may see their subtlety,
59 so we may see their subtlety,
60 And let there always be being,
60 And let there always be being,
61 so we may see their outcome.
61 so we may see their outcome.
62 The two are the same,
62 The two are the same,
63 But after they are produced,
63 But after they are produced,
64 they have different names.
64 they have different names.
65 They both may be called deep and profound.
65 They both may be called deep and profound.
66 Deeper and more profound,
66 Deeper and more profound,
67 The door of all subtleties!
67 The door of all subtleties!
68 """)
68 """)
69
69
70 LAO = split_lines(""" The Way that can be told of is not the eternal Way;
70 LAO = split_lines(b""" The Way that can be told of is not the eternal Way;
71 The name that can be named is not the eternal name.
71 The name that can be named is not the eternal name.
72 The Nameless is the origin of Heaven and Earth;
72 The Nameless is the origin of Heaven and Earth;
73 The Named is the mother of all things.
73 The Named is the mother of all things.
74 Therefore let there always be non-being,
74 Therefore let there always be non-being,
75 so we may see their subtlety,
75 so we may see their subtlety,
76 And let there always be being,
76 And let there always be being,
77 so we may see their outcome.
77 so we may see their outcome.
78 The two are the same,
78 The two are the same,
79 But after they are produced,
79 But after they are produced,
80 they have different names.
80 they have different names.
81 """)
81 """)
82
82
83
83
84 TAO = split_lines(""" The Way that can be told of is not the eternal Way;
84 TAO = split_lines(b""" The Way that can be told of is not the eternal Way;
85 The name that can be named is not the eternal name.
85 The name that can be named is not the eternal name.
86 The Nameless is the origin of Heaven and Earth;
86 The Nameless is the origin of Heaven and Earth;
87 The named is the mother of all things.
87 The named is the mother of all things.
88
88
89 Therefore let there always be non-being,
89 Therefore let there always be non-being,
90 so we may see their subtlety,
90 so we may see their subtlety,
91 And let there always be being,
91 And let there always be being,
92 so we may see their result.
92 so we may see their result.
93 The two are the same,
93 The two are the same,
94 But after they are produced,
94 But after they are produced,
95 they have different names.
95 they have different names.
96
96
97 -- The Way of Lao-Tzu, tr. Wing-tsit Chan
97 -- The Way of Lao-Tzu, tr. Wing-tsit Chan
98
98
99 """)
99 """)
100
100
101 MERGED_RESULT = split_lines("""\
101 MERGED_RESULT = split_lines(b"""\
102 The Way that can be told of is not the eternal Way;
102 The Way that can be told of is not the eternal Way;
103 The name that can be named is not the eternal name.
103 The name that can be named is not the eternal name.
104 The Nameless is the origin of Heaven and Earth;
104 The Nameless is the origin of Heaven and Earth;
105 The Named is the mother of all things.
105 The Named is the mother of all things.
106 Therefore let there always be non-being,
106 Therefore let there always be non-being,
107 so we may see their subtlety,
107 so we may see their subtlety,
108 And let there always be being,
108 And let there always be being,
109 so we may see their result.
109 so we may see their result.
110 The two are the same,
110 The two are the same,
111 But after they are produced,
111 But after they are produced,
112 they have different names.
112 they have different names.
113 <<<<<<< LAO
113 <<<<<<< LAO
114 =======
114 =======
115
115
116 -- The Way of Lao-Tzu, tr. Wing-tsit Chan
116 -- The Way of Lao-Tzu, tr. Wing-tsit Chan
117
117
118 >>>>>>> TAO
118 >>>>>>> TAO
119 """)
119 """)
120
120
121 class TestMerge3(TestCase):
121 class TestMerge3(TestCase):
122 def log(self, msg):
122 def log(self, msg):
123 pass
123 pass
124
124
125 def test_no_changes(self):
125 def test_no_changes(self):
126 """No conflicts because nothing changed"""
126 """No conflicts because nothing changed"""
127 m3 = Merge3(['aaa', 'bbb'],
127 m3 = Merge3([b'aaa', b'bbb'],
128 ['aaa', 'bbb'],
128 [b'aaa', b'bbb'],
129 ['aaa', 'bbb'])
129 [b'aaa', b'bbb'])
130
130
131 self.assertEqual(m3.find_unconflicted(),
131 self.assertEqual(m3.find_unconflicted(),
132 [(0, 2)])
132 [(0, 2)])
133
133
134 self.assertEqual(list(m3.find_sync_regions()),
134 self.assertEqual(list(m3.find_sync_regions()),
135 [(0, 2,
135 [(0, 2,
136 0, 2,
136 0, 2,
137 0, 2),
137 0, 2),
138 (2, 2, 2, 2, 2, 2)])
138 (2, 2, 2, 2, 2, 2)])
139
139
140 self.assertEqual(list(m3.merge_regions()),
140 self.assertEqual(list(m3.merge_regions()),
141 [('unchanged', 0, 2)])
141 [(b'unchanged', 0, 2)])
142
142
143 self.assertEqual(list(m3.merge_groups()),
143 self.assertEqual(list(m3.merge_groups()),
144 [('unchanged', ['aaa', 'bbb'])])
144 [(b'unchanged', [b'aaa', b'bbb'])])
145
145
146 def test_front_insert(self):
146 def test_front_insert(self):
147 m3 = Merge3(['zz'],
147 m3 = Merge3([b'zz'],
148 ['aaa', 'bbb', 'zz'],
148 [b'aaa', b'bbb', b'zz'],
149 ['zz'])
149 [b'zz'])
150
150
151 # todo: should use a sentinel at end as from get_matching_blocks
151 # todo: should use a sentinel at end as from get_matching_blocks
152 # to match without zz
152 # to match without zz
153 self.assertEqual(list(m3.find_sync_regions()),
153 self.assertEqual(list(m3.find_sync_regions()),
154 [(0, 1, 2, 3, 0, 1),
154 [(0, 1, 2, 3, 0, 1),
155 (1, 1, 3, 3, 1, 1)])
155 (1, 1, 3, 3, 1, 1)])
156
156
157 self.assertEqual(list(m3.merge_regions()),
157 self.assertEqual(list(m3.merge_regions()),
158 [('a', 0, 2),
158 [(b'a', 0, 2),
159 ('unchanged', 0, 1)])
159 (b'unchanged', 0, 1)])
160
160
161 self.assertEqual(list(m3.merge_groups()),
161 self.assertEqual(list(m3.merge_groups()),
162 [('a', ['aaa', 'bbb']),
162 [(b'a', [b'aaa', b'bbb']),
163 ('unchanged', ['zz'])])
163 (b'unchanged', [b'zz'])])
164
164
165 def test_null_insert(self):
165 def test_null_insert(self):
166 m3 = Merge3([],
166 m3 = Merge3([],
167 ['aaa', 'bbb'],
167 [b'aaa', b'bbb'],
168 [])
168 [])
169 # todo: should use a sentinel at end as from get_matching_blocks
169 # todo: should use a sentinel at end as from get_matching_blocks
170 # to match without zz
170 # to match without zz
171 self.assertEqual(list(m3.find_sync_regions()),
171 self.assertEqual(list(m3.find_sync_regions()),
172 [(0, 0, 2, 2, 0, 0)])
172 [(0, 0, 2, 2, 0, 0)])
173
173
174 self.assertEqual(list(m3.merge_regions()),
174 self.assertEqual(list(m3.merge_regions()),
175 [('a', 0, 2)])
175 [(b'a', 0, 2)])
176
176
177 self.assertEqual(list(m3.merge_lines()),
177 self.assertEqual(list(m3.merge_lines()),
178 ['aaa', 'bbb'])
178 [b'aaa', b'bbb'])
179
179
180 def test_no_conflicts(self):
180 def test_no_conflicts(self):
181 """No conflicts because only one side changed"""
181 """No conflicts because only one side changed"""
182 m3 = Merge3(['aaa', 'bbb'],
182 m3 = Merge3([b'aaa', b'bbb'],
183 ['aaa', '111', 'bbb'],
183 [b'aaa', b'111', b'bbb'],
184 ['aaa', 'bbb'])
184 [b'aaa', b'bbb'])
185
185
186 self.assertEqual(m3.find_unconflicted(),
186 self.assertEqual(m3.find_unconflicted(),
187 [(0, 1), (1, 2)])
187 [(0, 1), (1, 2)])
188
188
189 self.assertEqual(list(m3.find_sync_regions()),
189 self.assertEqual(list(m3.find_sync_regions()),
190 [(0, 1, 0, 1, 0, 1),
190 [(0, 1, 0, 1, 0, 1),
191 (1, 2, 2, 3, 1, 2),
191 (1, 2, 2, 3, 1, 2),
192 (2, 2, 3, 3, 2, 2)])
192 (2, 2, 3, 3, 2, 2)])
193
193
194 self.assertEqual(list(m3.merge_regions()),
194 self.assertEqual(list(m3.merge_regions()),
195 [('unchanged', 0, 1),
195 [(b'unchanged', 0, 1),
196 ('a', 1, 2),
196 (b'a', 1, 2),
197 ('unchanged', 1, 2)])
197 (b'unchanged', 1, 2)])
198
198
199 def test_append_a(self):
199 def test_append_a(self):
200 m3 = Merge3(['aaa\n', 'bbb\n'],
200 m3 = Merge3([b'aaa\n', b'bbb\n'],
201 ['aaa\n', 'bbb\n', '222\n'],
201 [b'aaa\n', b'bbb\n', b'222\n'],
202 ['aaa\n', 'bbb\n'])
202 [b'aaa\n', b'bbb\n'])
203
203
204 self.assertEqual(''.join(m3.merge_lines()),
204 self.assertEqual(b''.join(m3.merge_lines()),
205 'aaa\nbbb\n222\n')
205 b'aaa\nbbb\n222\n')
206
206
207 def test_append_b(self):
207 def test_append_b(self):
208 m3 = Merge3(['aaa\n', 'bbb\n'],
208 m3 = Merge3([b'aaa\n', b'bbb\n'],
209 ['aaa\n', 'bbb\n'],
209 [b'aaa\n', b'bbb\n'],
210 ['aaa\n', 'bbb\n', '222\n'])
210 [b'aaa\n', b'bbb\n', b'222\n'])
211
211
212 self.assertEqual(''.join(m3.merge_lines()),
212 self.assertEqual(b''.join(m3.merge_lines()),
213 'aaa\nbbb\n222\n')
213 b'aaa\nbbb\n222\n')
214
214
215 def test_append_agreement(self):
215 def test_append_agreement(self):
216 m3 = Merge3(['aaa\n', 'bbb\n'],
216 m3 = Merge3([b'aaa\n', b'bbb\n'],
217 ['aaa\n', 'bbb\n', '222\n'],
217 [b'aaa\n', b'bbb\n', b'222\n'],
218 ['aaa\n', 'bbb\n', '222\n'])
218 [b'aaa\n', b'bbb\n', b'222\n'])
219
219
220 self.assertEqual(''.join(m3.merge_lines()),
220 self.assertEqual(b''.join(m3.merge_lines()),
221 'aaa\nbbb\n222\n')
221 b'aaa\nbbb\n222\n')
222
222
223 def test_append_clash(self):
223 def test_append_clash(self):
224 m3 = Merge3(['aaa\n', 'bbb\n'],
224 m3 = Merge3([b'aaa\n', b'bbb\n'],
225 ['aaa\n', 'bbb\n', '222\n'],
225 [b'aaa\n', b'bbb\n', b'222\n'],
226 ['aaa\n', 'bbb\n', '333\n'])
226 [b'aaa\n', b'bbb\n', b'333\n'])
227
227
228 ml = m3.merge_lines(name_a='a',
228 ml = m3.merge_lines(name_a=b'a',
229 name_b='b',
229 name_b=b'b',
230 start_marker='<<',
230 start_marker=b'<<',
231 mid_marker='--',
231 mid_marker=b'--',
232 end_marker='>>')
232 end_marker=b'>>')
233 self.assertEqual(''.join(ml),
233 self.assertEqual(b''.join(ml),
234 'aaa\n'
234 b'aaa\n'
235 'bbb\n'
235 b'bbb\n'
236 '<< a\n'
236 b'<< a\n'
237 '222\n'
237 b'222\n'
238 '--\n'
238 b'--\n'
239 '333\n'
239 b'333\n'
240 '>> b\n'
240 b'>> b\n'
241 )
241 )
242
242
243 def test_insert_agreement(self):
243 def test_insert_agreement(self):
244 m3 = Merge3(['aaa\n', 'bbb\n'],
244 m3 = Merge3([b'aaa\n', b'bbb\n'],
245 ['aaa\n', '222\n', 'bbb\n'],
245 [b'aaa\n', b'222\n', b'bbb\n'],
246 ['aaa\n', '222\n', 'bbb\n'])
246 [b'aaa\n', b'222\n', b'bbb\n'])
247
247
248 ml = m3.merge_lines(name_a='a',
248 ml = m3.merge_lines(name_a=b'a',
249 name_b='b',
249 name_b=b'b',
250 start_marker='<<',
250 start_marker=b'<<',
251 mid_marker='--',
251 mid_marker=b'--',
252 end_marker='>>')
252 end_marker=b'>>')
253 self.assertEqual(''.join(ml), 'aaa\n222\nbbb\n')
253 self.assertEqual(b''.join(ml), b'aaa\n222\nbbb\n')
254
254
255
255
256 def test_insert_clash(self):
256 def test_insert_clash(self):
257 """Both try to insert lines in the same place."""
257 """Both try to insert lines in the same place."""
258 m3 = Merge3(['aaa\n', 'bbb\n'],
258 m3 = Merge3([b'aaa\n', b'bbb\n'],
259 ['aaa\n', '111\n', 'bbb\n'],
259 [b'aaa\n', b'111\n', b'bbb\n'],
260 ['aaa\n', '222\n', 'bbb\n'])
260 [b'aaa\n', b'222\n', b'bbb\n'])
261
261
262 self.assertEqual(m3.find_unconflicted(),
262 self.assertEqual(m3.find_unconflicted(),
263 [(0, 1), (1, 2)])
263 [(0, 1), (1, 2)])
264
264
265 self.assertEqual(list(m3.find_sync_regions()),
265 self.assertEqual(list(m3.find_sync_regions()),
266 [(0, 1, 0, 1, 0, 1),
266 [(0, 1, 0, 1, 0, 1),
267 (1, 2, 2, 3, 2, 3),
267 (1, 2, 2, 3, 2, 3),
268 (2, 2, 3, 3, 3, 3)])
268 (2, 2, 3, 3, 3, 3)])
269
269
270 self.assertEqual(list(m3.merge_regions()),
270 self.assertEqual(list(m3.merge_regions()),
271 [('unchanged', 0, 1),
271 [(b'unchanged', 0, 1),
272 ('conflict', 1, 1, 1, 2, 1, 2),
272 (b'conflict', 1, 1, 1, 2, 1, 2),
273 ('unchanged', 1, 2)])
273 (b'unchanged', 1, 2)])
274
274
275 self.assertEqual(list(m3.merge_groups()),
275 self.assertEqual(list(m3.merge_groups()),
276 [('unchanged', ['aaa\n']),
276 [(b'unchanged', [b'aaa\n']),
277 ('conflict', [], ['111\n'], ['222\n']),
277 (b'conflict', [], [b'111\n'], [b'222\n']),
278 ('unchanged', ['bbb\n']),
278 (b'unchanged', [b'bbb\n']),
279 ])
279 ])
280
280
281 ml = m3.merge_lines(name_a='a',
281 ml = m3.merge_lines(name_a=b'a',
282 name_b='b',
282 name_b=b'b',
283 start_marker='<<',
283 start_marker=b'<<',
284 mid_marker='--',
284 mid_marker=b'--',
285 end_marker='>>')
285 end_marker=b'>>')
286 self.assertEqual(''.join(ml),
286 self.assertEqual(b''.join(ml),
287 '''aaa
287 b'''aaa
288 << a
288 << a
289 111
289 111
290 --
290 --
291 222
291 222
292 >> b
292 >> b
293 bbb
293 bbb
294 ''')
294 ''')
295
295
296 def test_replace_clash(self):
296 def test_replace_clash(self):
297 """Both try to insert lines in the same place."""
297 """Both try to insert lines in the same place."""
298 m3 = Merge3(['aaa', '000', 'bbb'],
298 m3 = Merge3([b'aaa', b'000', b'bbb'],
299 ['aaa', '111', 'bbb'],
299 [b'aaa', b'111', b'bbb'],
300 ['aaa', '222', 'bbb'])
300 [b'aaa', b'222', b'bbb'])
301
301
302 self.assertEqual(m3.find_unconflicted(),
302 self.assertEqual(m3.find_unconflicted(),
303 [(0, 1), (2, 3)])
303 [(0, 1), (2, 3)])
304
304
305 self.assertEqual(list(m3.find_sync_regions()),
305 self.assertEqual(list(m3.find_sync_regions()),
306 [(0, 1, 0, 1, 0, 1),
306 [(0, 1, 0, 1, 0, 1),
307 (2, 3, 2, 3, 2, 3),
307 (2, 3, 2, 3, 2, 3),
308 (3, 3, 3, 3, 3, 3)])
308 (3, 3, 3, 3, 3, 3)])
309
309
310 def test_replace_multi(self):
310 def test_replace_multi(self):
311 """Replacement with regions of different size."""
311 """Replacement with regions of different size."""
312 m3 = Merge3(['aaa', '000', '000', 'bbb'],
312 m3 = Merge3([b'aaa', b'000', b'000', b'bbb'],
313 ['aaa', '111', '111', '111', 'bbb'],
313 [b'aaa', b'111', b'111', b'111', b'bbb'],
314 ['aaa', '222', '222', '222', '222', 'bbb'])
314 [b'aaa', b'222', b'222', b'222', b'222', b'bbb'])
315
315
316 self.assertEqual(m3.find_unconflicted(),
316 self.assertEqual(m3.find_unconflicted(),
317 [(0, 1), (3, 4)])
317 [(0, 1), (3, 4)])
318
318
319
319
320 self.assertEqual(list(m3.find_sync_regions()),
320 self.assertEqual(list(m3.find_sync_regions()),
321 [(0, 1, 0, 1, 0, 1),
321 [(0, 1, 0, 1, 0, 1),
322 (3, 4, 4, 5, 5, 6),
322 (3, 4, 4, 5, 5, 6),
323 (4, 4, 5, 5, 6, 6)])
323 (4, 4, 5, 5, 6, 6)])
324
324
325 def test_merge_poem(self):
325 def test_merge_poem(self):
326 """Test case from diff3 manual"""
326 """Test case from diff3 manual"""
327 m3 = Merge3(TZU, LAO, TAO)
327 m3 = Merge3(TZU, LAO, TAO)
328 ml = list(m3.merge_lines('LAO', 'TAO'))
328 ml = list(m3.merge_lines(b'LAO', b'TAO'))
329 self.log('merge result:')
329 self.log(b'merge result:')
330 self.log(''.join(ml))
330 self.log(b''.join(ml))
331 self.assertEqual(ml, MERGED_RESULT)
331 self.assertEqual(ml, MERGED_RESULT)
332
332
333 def test_binary(self):
333 def test_binary(self):
334 with self.assertRaises(error.Abort):
334 with self.assertRaises(error.Abort):
335 Merge3(['\x00'], ['a'], ['b'])
335 Merge3([b'\x00'], [b'a'], [b'b'])
336
336
337 def test_dos_text(self):
337 def test_dos_text(self):
338 base_text = 'a\r\n'
338 base_text = b'a\r\n'
339 this_text = 'b\r\n'
339 this_text = b'b\r\n'
340 other_text = 'c\r\n'
340 other_text = b'c\r\n'
341 m3 = Merge3(base_text.splitlines(True), other_text.splitlines(True),
341 m3 = Merge3(base_text.splitlines(True), other_text.splitlines(True),
342 this_text.splitlines(True))
342 this_text.splitlines(True))
343 m_lines = m3.merge_lines('OTHER', 'THIS')
343 m_lines = m3.merge_lines(b'OTHER', b'THIS')
344 self.assertEqual('<<<<<<< OTHER\r\nc\r\n=======\r\nb\r\n'
344 self.assertEqual(b'<<<<<<< OTHER\r\nc\r\n=======\r\nb\r\n'
345 '>>>>>>> THIS\r\n'.splitlines(True), list(m_lines))
345 b'>>>>>>> THIS\r\n'.splitlines(True), list(m_lines))
346
346
347 def test_mac_text(self):
347 def test_mac_text(self):
348 base_text = 'a\r'
348 base_text = b'a\r'
349 this_text = 'b\r'
349 this_text = b'b\r'
350 other_text = 'c\r'
350 other_text = b'c\r'
351 m3 = Merge3(base_text.splitlines(True), other_text.splitlines(True),
351 m3 = Merge3(base_text.splitlines(True), other_text.splitlines(True),
352 this_text.splitlines(True))
352 this_text.splitlines(True))
353 m_lines = m3.merge_lines('OTHER', 'THIS')
353 m_lines = m3.merge_lines(b'OTHER', b'THIS')
354 self.assertEqual('<<<<<<< OTHER\rc\r=======\rb\r'
354 self.assertEqual(b'<<<<<<< OTHER\rc\r=======\rb\r'
355 '>>>>>>> THIS\r'.splitlines(True), list(m_lines))
355 b'>>>>>>> THIS\r'.splitlines(True), list(m_lines))
356
356
357 if __name__ == '__main__':
357 if __name__ == '__main__':
358 # hide the timer
358 # hide the timer
359 import time
359 import time
360 orig = time.time
360 orig = time.time
361 try:
361 try:
362 time.time = lambda: 0
362 time.time = lambda: 0
363 unittest.main()
363 unittest.main()
364 finally:
364 finally:
365 time.time = orig
365 time.time = orig
General Comments 0
You need to be logged in to leave comments. Login now