##// END OF EJS Templates
tests: use assertTrue() instead of assert_() in test-bdiff.py...
Pulkit Goyal -
r39825:e961f18a default
parent child Browse files
Show More
@@ -1,573 +1,574 b''
1 1 test-abort-checkin.t
2 2 test-absorb-filefixupstate.py
3 3 test-absorb-phase.t
4 4 test-absorb-rename.t
5 5 test-absorb-strip.t
6 6 test-absorb.t
7 7 test-add.t
8 8 test-addremove-similar.t
9 9 test-addremove.t
10 10 test-alias.t
11 11 test-amend-subrepo.t
12 12 test-amend.t
13 13 test-ancestor.py
14 14 test-annotate.py
15 15 test-annotate.t
16 16 test-archive-symlinks.t
17 17 test-atomictempfile.py
18 18 test-audit-path.t
19 19 test-audit-subrepo.t
20 20 test-automv.t
21 21 test-backout.t
22 22 test-backwards-remove.t
23 23 test-bad-pull.t
24 24 test-basic.t
25 test-bdiff.py
25 26 test-bheads.t
26 27 test-bisect.t
27 28 test-bisect2.t
28 29 test-bisect3.t
29 30 test-blackbox.t
30 31 test-bookmarks-current.t
31 32 test-bookmarks-merge.t
32 33 test-bookmarks-pushpull.t
33 34 test-bookmarks-rebase.t
34 35 test-bookmarks-strip.t
35 36 test-bookmarks.t
36 37 test-branch-change.t
37 38 test-branch-option.t
38 39 test-branch-tag-confict.t
39 40 test-branches.t
40 41 test-bundle-phases.t
41 42 test-bundle-r.t
42 43 test-bundle-type.t
43 44 test-bundle-vs-outgoing.t
44 45 test-bundle.t
45 46 test-bundle2-exchange.t
46 47 test-bundle2-format.t
47 48 test-bundle2-multiple-changegroups.t
48 49 test-bundle2-pushback.t
49 50 test-bundle2-remote-changegroup.t
50 51 test-cappedreader.py
51 52 test-casecollision.t
52 53 test-cat.t
53 54 test-cbor.py
54 55 test-censor.t
55 56 test-changelog-exec.t
56 57 test-check-code.t
57 58 test-check-commit.t
58 59 test-check-execute.t
59 60 test-check-interfaces.py
60 61 test-check-module-imports.t
61 62 test-check-py3-compat.t
62 63 test-check-pyflakes.t
63 64 test-check-pylint.t
64 65 test-check-shbang.t
65 66 test-children.t
66 67 test-clone-cgi.t
67 68 test-clone-pull-corruption.t
68 69 test-clone-r.t
69 70 test-clone-update-order.t
70 71 test-clonebundles.t
71 72 test-commit-amend.t
72 73 test-commit-interactive.t
73 74 test-commit-multiple.t
74 75 test-commit-unresolved.t
75 76 test-commit.t
76 77 test-committer.t
77 78 test-completion.t
78 79 test-config-env.py
79 80 test-config.t
80 81 test-conflict.t
81 82 test-confused-revert.t
82 83 test-context.py
83 84 test-contrib-check-code.t
84 85 test-contrib-check-commit.t
85 86 test-convert-authormap.t
86 87 test-convert-clonebranches.t
87 88 test-convert-cvs-branch.t
88 89 test-convert-cvs-detectmerge.t
89 90 test-convert-cvs-synthetic.t
90 91 test-convert-cvs.t
91 92 test-convert-cvsnt-mergepoints.t
92 93 test-convert-datesort.t
93 94 test-convert-filemap.t
94 95 test-convert-hg-sink.t
95 96 test-convert-hg-source.t
96 97 test-convert-hg-startrev.t
97 98 test-convert-splicemap.t
98 99 test-convert-tagsbranch-topology.t
99 100 test-copy-move-merge.t
100 101 test-copy.t
101 102 test-copytrace-heuristics.t
102 103 test-debugbuilddag.t
103 104 test-debugbundle.t
104 105 test-debugextensions.t
105 106 test-debugindexdot.t
106 107 test-debugrename.t
107 108 test-default-push.t
108 109 test-diff-antipatience.t
109 110 test-diff-binary-file.t
110 111 test-diff-change.t
111 112 test-diff-copy-depth.t
112 113 test-diff-hashes.t
113 114 test-diff-ignore-whitespace.t
114 115 test-diff-indent-heuristic.t
115 116 test-diff-issue2761.t
116 117 test-diff-newlines.t
117 118 test-diff-reverse.t
118 119 test-diff-subdir.t
119 120 test-diff-unified.t
120 121 test-diff-upgrade.t
121 122 test-diffdir.t
122 123 test-diffstat.t
123 124 test-directaccess.t
124 125 test-dirstate-backup.t
125 126 test-dirstate-nonnormalset.t
126 127 test-dirstate.t
127 128 test-dispatch.py
128 129 test-doctest.py
129 130 test-double-merge.t
130 131 test-drawdag.t
131 132 test-duplicateoptions.py
132 133 test-editor-filename.t
133 134 test-empty-dir.t
134 135 test-empty-file.t
135 136 test-empty-group.t
136 137 test-empty.t
137 138 test-encode.t
138 139 test-encoding-func.py
139 140 test-encoding.t
140 141 test-eol-add.t
141 142 test-eol-clone.t
142 143 test-eol-hook.t
143 144 test-eol-patch.t
144 145 test-eol-tag.t
145 146 test-eol-update.t
146 147 test-eol.t
147 148 test-eolfilename.t
148 149 test-excessive-merge.t
149 150 test-exchange-obsmarkers-case-A1.t
150 151 test-exchange-obsmarkers-case-A2.t
151 152 test-exchange-obsmarkers-case-A3.t
152 153 test-exchange-obsmarkers-case-A4.t
153 154 test-exchange-obsmarkers-case-A5.t
154 155 test-exchange-obsmarkers-case-A6.t
155 156 test-exchange-obsmarkers-case-A7.t
156 157 test-exchange-obsmarkers-case-B1.t
157 158 test-exchange-obsmarkers-case-B2.t
158 159 test-exchange-obsmarkers-case-B3.t
159 160 test-exchange-obsmarkers-case-B4.t
160 161 test-exchange-obsmarkers-case-B5.t
161 162 test-exchange-obsmarkers-case-B6.t
162 163 test-exchange-obsmarkers-case-B7.t
163 164 test-exchange-obsmarkers-case-C1.t
164 165 test-exchange-obsmarkers-case-C2.t
165 166 test-exchange-obsmarkers-case-C3.t
166 167 test-exchange-obsmarkers-case-C4.t
167 168 test-exchange-obsmarkers-case-D1.t
168 169 test-exchange-obsmarkers-case-D2.t
169 170 test-exchange-obsmarkers-case-D3.t
170 171 test-exchange-obsmarkers-case-D4.t
171 172 test-execute-bit.t
172 173 test-export.t
173 174 test-extdata.t
174 175 test-extdiff.t
175 176 test-extensions-afterloaded.t
176 177 test-extensions-wrapfunction.py
177 178 test-extra-filelog-entry.t
178 179 test-fetch.t
179 180 test-filebranch.t
180 181 test-filecache.py
181 182 test-filelog.py
182 183 test-fileset-generated.t
183 184 test-fileset.t
184 185 test-fix-topology.t
185 186 test-flags.t
186 187 test-generaldelta.t
187 188 test-getbundle.t
188 189 test-git-export.t
189 190 test-glog-beautifygraph.t
190 191 test-glog-topological.t
191 192 test-glog.t
192 193 test-gpg.t
193 194 test-graft.t
194 195 test-grep.t
195 196 test-hg-parseurl.py
196 197 test-hghave.t
197 198 test-hgignore.t
198 199 test-hgk.t
199 200 test-hgrc.t
200 201 test-hgweb-bundle.t
201 202 test-hgweb-descend-empties.t
202 203 test-hgweb-empty.t
203 204 test-hgweb-removed.t
204 205 test-hgwebdir-paths.py
205 206 test-hgwebdirsym.t
206 207 test-histedit-arguments.t
207 208 test-histedit-base.t
208 209 test-histedit-bookmark-motion.t
209 210 test-histedit-commute.t
210 211 test-histedit-drop.t
211 212 test-histedit-edit.t
212 213 test-histedit-fold-non-commute.t
213 214 test-histedit-fold.t
214 215 test-histedit-no-backup.t
215 216 test-histedit-no-change.t
216 217 test-histedit-non-commute-abort.t
217 218 test-histedit-non-commute.t
218 219 test-histedit-obsolete.t
219 220 test-histedit-outgoing.t
220 221 test-histedit-templates.t
221 222 test-http-branchmap.t
222 223 test-http-bundle1.t
223 224 test-http-clone-r.t
224 225 test-http-permissions.t
225 226 test-http.t
226 227 test-hybridencode.py
227 228 test-identify.t
228 229 test-impexp-branch.t
229 230 test-import-bypass.t
230 231 test-import-eol.t
231 232 test-import-merge.t
232 233 test-import-unknown.t
233 234 test-import.t
234 235 test-imports-checker.t
235 236 test-incoming-outgoing.t
236 237 test-inherit-mode.t
237 238 test-init.t
238 239 test-issue1089.t
239 240 test-issue1102.t
240 241 test-issue1175.t
241 242 test-issue1306.t
242 243 test-issue1438.t
243 244 test-issue1502.t
244 245 test-issue1802.t
245 246 test-issue1877.t
246 247 test-issue1993.t
247 248 test-issue2137.t
248 249 test-issue3084.t
249 250 test-issue4074.t
250 251 test-issue522.t
251 252 test-issue586.t
252 253 test-issue5979.t
253 254 test-issue612.t
254 255 test-issue619.t
255 256 test-issue660.t
256 257 test-issue672.t
257 258 test-issue842.t
258 259 test-journal-exists.t
259 260 test-journal-share.t
260 261 test-journal.t
261 262 test-known.t
262 263 test-largefiles-cache.t
263 264 test-largefiles-misc.t
264 265 test-largefiles-small-disk.t
265 266 test-largefiles-update.t
266 267 test-largefiles.t
267 268 test-lfs-largefiles.t
268 269 test-lfs-pointer.py
269 270 test-linelog.py
270 271 test-linerange.py
271 272 test-locate.t
272 273 test-lock-badness.t
273 274 test-log-linerange.t
274 275 test-log.t
275 276 test-logexchange.t
276 277 test-lrucachedict.py
277 278 test-mactext.t
278 279 test-mailmap.t
279 280 test-manifest-merging.t
280 281 test-manifest.py
281 282 test-manifest.t
282 283 test-match.py
283 284 test-mdiff.py
284 285 test-merge-changedelete.t
285 286 test-merge-closedheads.t
286 287 test-merge-commit.t
287 288 test-merge-criss-cross.t
288 289 test-merge-default.t
289 290 test-merge-force.t
290 291 test-merge-halt.t
291 292 test-merge-internal-tools-pattern.t
292 293 test-merge-local.t
293 294 test-merge-no-file-change.t
294 295 test-merge-remove.t
295 296 test-merge-revert.t
296 297 test-merge-revert2.t
297 298 test-merge-subrepos.t
298 299 test-merge-symlinks.t
299 300 test-merge-tools.t
300 301 test-merge-types.t
301 302 test-merge1.t
302 303 test-merge10.t
303 304 test-merge2.t
304 305 test-merge4.t
305 306 test-merge5.t
306 307 test-merge6.t
307 308 test-merge7.t
308 309 test-merge8.t
309 310 test-merge9.t
310 311 test-minifileset.py
311 312 test-minirst.py
312 313 test-mq-git.t
313 314 test-mq-guards.t
314 315 test-mq-header-date.t
315 316 test-mq-header-from.t
316 317 test-mq-merge.t
317 318 test-mq-pull-from-bundle.t
318 319 test-mq-qclone-http.t
319 320 test-mq-qdelete.t
320 321 test-mq-qdiff.t
321 322 test-mq-qfold.t
322 323 test-mq-qgoto.t
323 324 test-mq-qimport-fail-cleanup.t
324 325 test-mq-qnew.t
325 326 test-mq-qpush-exact.t
326 327 test-mq-qpush-fail.t
327 328 test-mq-qqueue.t
328 329 test-mq-qrefresh-interactive.t
329 330 test-mq-qrefresh-replace-log-message.t
330 331 test-mq-qrefresh.t
331 332 test-mq-qrename.t
332 333 test-mq-qsave.t
333 334 test-mq-safety.t
334 335 test-mq-subrepo.t
335 336 test-mq-symlinks.t
336 337 test-mq.t
337 338 test-mv-cp-st-diff.t
338 339 test-narrow-acl.t
339 340 test-narrow-archive.t
340 341 test-narrow-clone-no-ellipsis.t
341 342 test-narrow-clone-non-narrow-server.t
342 343 test-narrow-clone-nonlinear.t
343 344 test-narrow-clone.t
344 345 test-narrow-commit.t
345 346 test-narrow-copies.t
346 347 test-narrow-debugcommands.t
347 348 test-narrow-debugrebuilddirstate.t
348 349 test-narrow-exchange-merges.t
349 350 test-narrow-exchange.t
350 351 test-narrow-expanddirstate.t
351 352 test-narrow-merge.t
352 353 test-narrow-patch.t
353 354 test-narrow-patterns.t
354 355 test-narrow-pull.t
355 356 test-narrow-rebase.t
356 357 test-narrow-shallow-merges.t
357 358 test-narrow-shallow.t
358 359 test-narrow-strip.t
359 360 test-narrow-trackedcmd.t
360 361 test-narrow-update.t
361 362 test-narrow-widen-no-ellipsis.t
362 363 test-narrow-widen.t
363 364 test-narrow.t
364 365 test-nested-repo.t
365 366 test-newbranch.t
366 367 test-newercgi.t
367 368 test-nointerrupt.t
368 369 test-obshistory.t
369 370 test-obsmarker-template.t
370 371 test-obsmarkers-effectflag.t
371 372 test-obsolete-bounds-checking.t
372 373 test-obsolete-bundle-strip.t
373 374 test-obsolete-changeset-exchange.t
374 375 test-obsolete-checkheads.t
375 376 test-obsolete-distributed.t
376 377 test-obsolete-divergent.t
377 378 test-obsolete-tag-cache.t
378 379 test-pager.t
379 380 test-parents.t
380 381 test-parseindex2.py
381 382 test-patch-offset.t
382 383 test-patch.t
383 384 test-patchbomb-bookmark.t
384 385 test-patchbomb-tls.t
385 386 test-patchbomb.t
386 387 test-pathconflicts-merge.t
387 388 test-pathconflicts-update.t
388 389 test-pathencode.py
389 390 test-pending.t
390 391 test-permissions.t
391 392 test-phases.t
392 393 test-pull-branch.t
393 394 test-pull-http.t
394 395 test-pull-permission.t
395 396 test-pull-pull-corruption.t
396 397 test-pull-r.t
397 398 test-pull-update.t
398 399 test-pull.t
399 400 test-purge.t
400 401 test-push-cgi.t
401 402 test-push-checkheads-partial-C1.t
402 403 test-push-checkheads-partial-C2.t
403 404 test-push-checkheads-partial-C3.t
404 405 test-push-checkheads-partial-C4.t
405 406 test-push-checkheads-pruned-B1.t
406 407 test-push-checkheads-pruned-B2.t
407 408 test-push-checkheads-pruned-B3.t
408 409 test-push-checkheads-pruned-B4.t
409 410 test-push-checkheads-pruned-B5.t
410 411 test-push-checkheads-pruned-B6.t
411 412 test-push-checkheads-pruned-B7.t
412 413 test-push-checkheads-pruned-B8.t
413 414 test-push-checkheads-superceed-A1.t
414 415 test-push-checkheads-superceed-A2.t
415 416 test-push-checkheads-superceed-A3.t
416 417 test-push-checkheads-superceed-A4.t
417 418 test-push-checkheads-superceed-A5.t
418 419 test-push-checkheads-superceed-A6.t
419 420 test-push-checkheads-superceed-A7.t
420 421 test-push-checkheads-superceed-A8.t
421 422 test-push-checkheads-unpushed-D1.t
422 423 test-push-checkheads-unpushed-D2.t
423 424 test-push-checkheads-unpushed-D3.t
424 425 test-push-checkheads-unpushed-D4.t
425 426 test-push-checkheads-unpushed-D5.t
426 427 test-push-checkheads-unpushed-D6.t
427 428 test-push-checkheads-unpushed-D7.t
428 429 test-push-http.t
429 430 test-push-warn.t
430 431 test-push.t
431 432 test-pushvars.t
432 433 test-qrecord.t
433 434 test-rebase-abort.t
434 435 test-rebase-backup.t
435 436 test-rebase-base-flag.t
436 437 test-rebase-bookmarks.t
437 438 test-rebase-brute-force.t
438 439 test-rebase-cache.t
439 440 test-rebase-check-restore.t
440 441 test-rebase-collapse.t
441 442 test-rebase-conflicts.t
442 443 test-rebase-dest.t
443 444 test-rebase-detach.t
444 445 test-rebase-emptycommit.t
445 446 test-rebase-inmemory.t
446 447 test-rebase-interruptions.t
447 448 test-rebase-issue-noparam-single-rev.t
448 449 test-rebase-legacy.t
449 450 test-rebase-mq-skip.t
450 451 test-rebase-mq.t
451 452 test-rebase-named-branches.t
452 453 test-rebase-newancestor.t
453 454 test-rebase-obsolete.t
454 455 test-rebase-parameters.t
455 456 test-rebase-partial.t
456 457 test-rebase-pull.t
457 458 test-rebase-rename.t
458 459 test-rebase-scenario-global.t
459 460 test-rebase-templates.t
460 461 test-rebase-transaction.t
461 462 test-rebuildstate.t
462 463 test-record.t
463 464 test-relink.t
464 465 test-remove.t
465 466 test-removeemptydirs.t
466 467 test-rename-after-merge.t
467 468 test-rename-dir-merge.t
468 469 test-rename-merge1.t
469 470 test-rename-merge2.t
470 471 test-rename.t
471 472 test-repair-strip.t
472 473 test-repo-compengines.t
473 474 test-resolve.t
474 475 test-revert-flags.t
475 476 test-revert-interactive.t
476 477 test-revert-unknown.t
477 478 test-revert.t
478 479 test-revisions.t
479 480 test-revlog-ancestry.py
480 481 test-revlog-group-emptyiter.t
481 482 test-revlog-mmapindex.t
482 483 test-revlog-packentry.t
483 484 test-revlog-raw.py
484 485 test-revlog-v2.t
485 486 test-revset-dirstate-parents.t
486 487 test-revset-legacy-lookup.t
487 488 test-revset-outgoing.t
488 489 test-rollback.t
489 490 test-run-tests.py
490 491 test-run-tests.t
491 492 test-schemes.t
492 493 test-serve.t
493 494 test-setdiscovery.t
494 495 test-share.t
495 496 test-shelve.t
496 497 test-show-stack.t
497 498 test-show-work.t
498 499 test-show.t
499 500 test-simple-update.t
500 501 test-simplekeyvaluefile.py
501 502 test-simplemerge.py
502 503 test-single-head.t
503 504 test-sparse-clear.t
504 505 test-sparse-clone.t
505 506 test-sparse-import.t
506 507 test-sparse-merges.t
507 508 test-sparse-profiles.t
508 509 test-sparse-requirement.t
509 510 test-sparse-verbose-json.t
510 511 test-sparse.t
511 512 test-split.t
512 513 test-ssh-bundle1.t
513 514 test-ssh-clone-r.t
514 515 test-ssh-proto-unbundle.t
515 516 test-ssh-proto.t
516 517 test-ssh.t
517 518 test-sshserver.py
518 519 test-stack.t
519 520 test-status-inprocess.py
520 521 test-status-rev.t
521 522 test-status-terse.t
522 523 test-strict.t
523 524 test-strip-cross.t
524 525 test-strip.t
525 526 test-subrepo-deep-nested-change.t
526 527 test-subrepo-missing.t
527 528 test-subrepo-paths.t
528 529 test-subrepo-recursion.t
529 530 test-subrepo-relative-path.t
530 531 test-subrepo.t
531 532 test-symlink-os-yes-fs-no.py
532 533 test-symlink-placeholder.t
533 534 test-symlinks.t
534 535 test-tag.t
535 536 test-tags.t
536 537 test-template-basic.t
537 538 test-template-functions.t
538 539 test-template-keywords.t
539 540 test-template-map.t
540 541 test-transplant.t
541 542 test-treemanifest.t
542 543 test-ui-color.py
543 544 test-ui-config.py
544 545 test-ui-verbosity.py
545 546 test-unamend.t
546 547 test-unbundlehash.t
547 548 test-uncommit.t
548 549 test-unified-test.t
549 550 test-unionrepo.t
550 551 test-unrelated-pull.t
551 552 test-up-local-change.t
552 553 test-update-branches.t
553 554 test-update-dest.t
554 555 test-update-issue1456.t
555 556 test-update-names.t
556 557 test-update-reverse.t
557 558 test-upgrade-repo.t
558 559 test-url-download.t
559 560 test-url-rev.t
560 561 test-url.py
561 562 test-username-newline.t
562 563 test-util.py
563 564 test-verify.t
564 565 test-walk.t
565 566 test-walkrepo.py
566 567 test-websub.t
567 568 test-win32text.t
568 569 test-wireproto-clientreactor.py
569 570 test-wireproto-framing.py
570 571 test-wireproto-serverreactor.py
571 572 test-wireproto.py
572 573 test-wsgirequest.py
573 574 test-xdg.t
@@ -1,151 +1,151 b''
1 1 from __future__ import absolute_import, print_function
2 2 import collections
3 3 import struct
4 4 import unittest
5 5
6 6 from mercurial import (
7 7 mdiff,
8 8 )
9 9
10 10 class diffreplace(
11 11 collections.namedtuple('diffreplace', 'start end from_ to')):
12 12 def __repr__(self):
13 13 return 'diffreplace(%r, %r, %r, %r)' % self
14 14
15 15 class BdiffTests(unittest.TestCase):
16 16
17 17 def assert_bdiff_applies(self, a, b):
18 18 d = mdiff.textdiff(a, b)
19 19 c = a
20 20 if d:
21 21 c = mdiff.patches(a, [d])
22 22 self.assertEqual(
23 23 c, b, ("bad diff+patch result from\n %r to\n "
24 24 "%r: \nbdiff: %r\npatched: %r" % (a, b, d, c[:200])))
25 25
26 26 def assert_bdiff(self, a, b):
27 27 self.assert_bdiff_applies(a, b)
28 28 self.assert_bdiff_applies(b, a)
29 29
30 30 def test_bdiff_basic(self):
31 31 cases = [
32 32 (b"a\nc\n\n\n\n", b"a\nb\n\n\n"),
33 33 (b"a\nb\nc\n", b"a\nc\n"),
34 34 (b"", b""),
35 35 (b"a\nb\nc", b"a\nb\nc"),
36 36 (b"a\nb\nc\nd\n", b"a\nd\n"),
37 37 (b"a\nb\nc\nd\n", b"a\nc\ne\n"),
38 38 (b"a\nb\nc\n", b"a\nc\n"),
39 39 (b"a\n", b"c\na\nb\n"),
40 40 (b"a\n", b""),
41 41 (b"a\n", b"b\nc\n"),
42 42 (b"a\n", b"c\na\n"),
43 43 (b"", b"adjfkjdjksdhfksj"),
44 44 (b"", b"ab"),
45 45 (b"", b"abc"),
46 46 (b"a", b"a"),
47 47 (b"ab", b"ab"),
48 48 (b"abc", b"abc"),
49 49 (b"a\n", b"a\n"),
50 50 (b"a\nb", b"a\nb"),
51 51 ]
52 52 for a, b in cases:
53 53 self.assert_bdiff(a, b)
54 54
55 55 def showdiff(self, a, b):
56 56 bin = mdiff.textdiff(a, b)
57 57 pos = 0
58 58 q = 0
59 59 actions = []
60 60 while pos < len(bin):
61 61 p1, p2, l = struct.unpack(">lll", bin[pos:pos + 12])
62 62 pos += 12
63 63 if p1:
64 64 actions.append(a[q:p1])
65 65 actions.append(diffreplace(p1, p2, a[p1:p2], bin[pos:pos + l]))
66 66 pos += l
67 67 q = p2
68 68 if q < len(a):
69 69 actions.append(a[q:])
70 70 return actions
71 71
72 72 def test_issue1295(self):
73 73 cases = [
74 74 (b"x\n\nx\n\nx\n\nx\n\nz\n", b"x\n\nx\n\ny\n\nx\n\nx\n\nz\n",
75 75 [b'x\n\nx\n\n',
76 76 diffreplace(6, 6, b'', b'y\n\n'),
77 77 b'x\n\nx\n\nz\n']),
78 78 (b"x\n\nx\n\nx\n\nx\n\nz\n", b"x\n\nx\n\ny\n\nx\n\ny\n\nx\n\nz\n",
79 79 [b'x\n\nx\n\n',
80 80 diffreplace(6, 6, b'', b'y\n\n'),
81 81 b'x\n\n',
82 82 diffreplace(9, 9, b'', b'y\n\n'),
83 83 b'x\n\nz\n']),
84 84 ]
85 85 for old, new, want in cases:
86 86 self.assertEqual(self.showdiff(old, new), want)
87 87
88 88 def test_issue1295_varies_on_pure(self):
89 89 # we should pick up abbbc. rather than bc.de as the longest match
90 90 got = self.showdiff(b"a\nb\nb\nb\nc\n.\nd\ne\n.\nf\n",
91 91 b"a\nb\nb\na\nb\nb\nb\nc\n.\nb\nc\n.\nd\ne\nf\n")
92 92 want_c = [b'a\nb\nb\n',
93 93 diffreplace(6, 6, b'', b'a\nb\nb\nb\nc\n.\n'),
94 94 b'b\nc\n.\nd\ne\n',
95 95 diffreplace(16, 18, b'.\n', b''),
96 96 b'f\n']
97 97 want_pure = [diffreplace(0, 0, b'', b'a\nb\nb\n'),
98 98 b'a\nb\nb\nb\nc\n.\n',
99 99 diffreplace(12, 12, b'', b'b\nc\n.\n'),
100 100 b'd\ne\n',
101 101 diffreplace(16, 18, b'.\n', b''), b'f\n']
102 self.assert_(got in (want_c, want_pure),
103 'got: %r, wanted either %r or %r' % (
104 got, want_c, want_pure))
102 self.assertTrue(got in (want_c, want_pure),
103 'got: %r, wanted either %r or %r' % (
104 got, want_c, want_pure))
105 105
106 106 def test_fixws(self):
107 107 cases = [
108 108 (b" \ta\r b\t\n", b"ab\n", 1),
109 109 (b" \ta\r b\t\n", b" a b\n", 0),
110 110 (b"", b"", 1),
111 111 (b"", b"", 0),
112 112 ]
113 113 for a, b, allws in cases:
114 114 c = mdiff.fixws(a, allws)
115 115 self.assertEqual(
116 116 c, b, 'fixws(%r) want %r got %r (allws=%r)' % (a, b, c, allws))
117 117
118 118 def test_nice_diff_for_trivial_change(self):
119 119 self.assertEqual(self.showdiff(
120 120 b''.join(b'<%d\n-\n' % i for i in range(5)),
121 121 b''.join(b'>%d\n-\n' % i for i in range(5))),
122 122 [diffreplace(0, 3, b'<0\n', b'>0\n'),
123 123 b'-\n',
124 124 diffreplace(5, 8, b'<1\n', b'>1\n'),
125 125 b'-\n',
126 126 diffreplace(10, 13, b'<2\n', b'>2\n'),
127 127 b'-\n',
128 128 diffreplace(15, 18, b'<3\n', b'>3\n'),
129 129 b'-\n',
130 130 diffreplace(20, 23, b'<4\n', b'>4\n'),
131 131 b'-\n'])
132 132
133 133 def test_prefer_appending(self):
134 134 # 1 line to 3 lines
135 135 self.assertEqual(self.showdiff(b'a\n', b'a\n' * 3),
136 136 [b'a\n', diffreplace(2, 2, b'', b'a\na\n')])
137 137 # 1 line to 5 lines
138 138 self.assertEqual(self.showdiff(b'a\n', b'a\n' * 5),
139 139 [b'a\n', diffreplace(2, 2, b'', b'a\na\na\na\n')])
140 140
141 141 def test_prefer_removing_trailing(self):
142 142 # 3 lines to 1 line
143 143 self.assertEqual(self.showdiff(b'a\n' * 3, b'a\n'),
144 144 [b'a\n', diffreplace(2, 6, b'a\na\n', b'')])
145 145 # 5 lines to 1 line
146 146 self.assertEqual(self.showdiff(b'a\n' * 5, b'a\n'),
147 147 [b'a\n', diffreplace(2, 10, b'a\na\na\na\n', b'')])
148 148
149 149 if __name__ == '__main__':
150 150 import silenttestrunner
151 151 silenttestrunner.main(__name__)
General Comments 0
You need to be logged in to leave comments. Login now