1 #!/usr/bin/perl -w 2 # 3 # Copyright (C) 2010 Chris Jerdonek (chris.jerdonek (at] gmail.com) 4 # 5 # Redistribution and use in source and binary forms, with or without 6 # modification, are permitted provided that the following conditions 7 # are met: 8 # 1. Redistributions of source code must retain the above copyright 9 # notice, this list of conditions and the following disclaimer. 10 # 2. Redistributions in binary form must reproduce the above copyright 11 # notice, this list of conditions and the following disclaimer in the 12 # documentation and/or other materials provided with the distribution. 13 # 14 # THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 15 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17 # DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 18 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 19 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 20 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 21 # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 23 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 25 # Unit tests of parseDiff(). 26 27 use strict; 28 use warnings; 29 30 use Test::More; 31 use VCSUtils; 32 33 # The array of test cases. 34 my @testCaseHashRefs = ( 35 { 36 # New test 37 diffName => "SVN: simple", 38 inputText => <<'END', 39 Index: Makefile 40 =================================================================== 41 --- Makefile (revision 53052) 42 +++ Makefile (working copy) 43 @@ -1,3 +1,4 @@ 44 + 45 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools 46 47 all: 48 END 49 expectedReturn => [ 50 [{ 51 svnConvertedText => <<'END', # Same as input text 52 Index: Makefile 53 =================================================================== 54 --- Makefile (revision 53052) 55 +++ Makefile (working copy) 56 @@ -1,3 +1,4 @@ 57 + 58 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools 59 60 all: 61 END 62 indexPath => "Makefile", 63 isSvn => 1, 64 numTextChunks => 1, 65 sourceRevision => "53052", 66 }], 67 undef], 68 expectedNextLine => undef, 69 }, 70 { 71 # New test 72 diffName => "SVN: binary file (isBinary true)", 73 inputText => <<'END', 74 Index: test_file.swf 75 =================================================================== 76 Cannot display: file marked as a binary type. 77 svn:mime-type = application/octet-stream 78 79 Property changes on: test_file.swf 80 ___________________________________________________________________ 81 Name: svn:mime-type 82 + application/octet-stream 83 84 85 Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 86 END 87 expectedReturn => [ 88 [{ 89 svnConvertedText => <<'END', # Same as input text 90 Index: test_file.swf 91 =================================================================== 92 Cannot display: file marked as a binary type. 93 svn:mime-type = application/octet-stream 94 95 96 97 Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 98 END 99 indexPath => "test_file.swf", 100 isBinary => 1, 101 isSvn => 1, 102 }], 103 undef], 104 expectedNextLine => undef, 105 }, 106 { 107 # New test 108 diffName => "SVN: binary file (isBinary true) using Windows line endings", 109 inputText => toWindowsLineEndings(<<'END', 110 Index: test_file.swf 111 =================================================================== 112 Cannot display: file marked as a binary type. 113 svn:mime-type = application/octet-stream 114 115 Property changes on: test_file.swf 116 ___________________________________________________________________ 117 Name: svn:mime-type 118 + application/octet-stream 119 120 121 Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 122 END 123 ), 124 expectedReturn => [ 125 [{ 126 svnConvertedText => toWindowsLineEndings(<<'END', # Same as input text 127 Index: test_file.swf 128 =================================================================== 129 Cannot display: file marked as a binary type. 130 svn:mime-type = application/octet-stream 131 132 133 134 Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 135 END 136 ), 137 indexPath => "test_file.swf", 138 isBinary => 1, 139 isSvn => 1, 140 }], 141 undef], 142 expectedNextLine => undef, 143 }, 144 { 145 # New test 146 diffName => "SVN: leading junk", 147 inputText => <<'END', 148 149 LEADING JUNK 150 151 Index: Makefile 152 =================================================================== 153 --- Makefile (revision 53052) 154 +++ Makefile (working copy) 155 @@ -1,3 +1,4 @@ 156 + 157 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools 158 159 all: 160 END 161 expectedReturn => [ 162 [{ 163 svnConvertedText => <<'END', # Same as input text 164 165 LEADING JUNK 166 167 Index: Makefile 168 =================================================================== 169 --- Makefile (revision 53052) 170 +++ Makefile (working copy) 171 @@ -1,3 +1,4 @@ 172 + 173 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools 174 175 all: 176 END 177 indexPath => "Makefile", 178 isSvn => 1, 179 numTextChunks => 1, 180 sourceRevision => "53052", 181 }], 182 undef], 183 expectedNextLine => undef, 184 }, 185 { 186 # New test 187 diffName => "SVN: copied file", 188 inputText => <<'END', 189 Index: Makefile_new 190 =================================================================== 191 --- Makefile_new (revision 53131) (from Makefile:53131) 192 +++ Makefile_new (working copy) 193 @@ -0,0 +1,1 @@ 194 +MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools 195 END 196 expectedReturn => [ 197 [{ 198 copiedFromPath => "Makefile", 199 indexPath => "Makefile_new", 200 sourceRevision => "53131", 201 }], 202 undef], 203 expectedNextLine => undef, 204 }, 205 { 206 # New test 207 diffName => "SVN: two diffs", 208 inputText => <<'END', 209 Index: Makefile 210 =================================================================== 211 --- Makefile (revision 53131) 212 +++ Makefile (working copy) 213 @@ -1,1 +0,0 @@ 214 -MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools 215 Index: Makefile_new 216 =================================================================== 217 --- Makefile_new (revision 53131) (from Makefile:53131) 218 END 219 expectedReturn => [ 220 [{ 221 svnConvertedText => <<'END', 222 Index: Makefile 223 =================================================================== 224 --- Makefile (revision 53131) 225 +++ Makefile (working copy) 226 @@ -1,1 +0,0 @@ 227 -MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools 228 END 229 indexPath => "Makefile", 230 isSvn => 1, 231 numTextChunks => 1, 232 sourceRevision => "53131", 233 }], 234 "Index: Makefile_new\n"], 235 expectedNextLine => "===================================================================\n", 236 }, 237 { 238 # New test 239 diffName => "SVN: SVN diff followed by Git diff", # Should not recognize Git start 240 inputText => <<'END', 241 Index: Makefile 242 =================================================================== 243 --- Makefile (revision 53131) 244 +++ Makefile (working copy) 245 @@ -1,1 +0,0 @@ 246 -MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools 247 diff --git a/Makefile b/Makefile 248 index f5d5e74..3b6aa92 100644 249 --- a/Makefile 250 +++ b/Makefile 251 @@ -1,1 1,1 @@ public: 252 END 253 expectedReturn => [ 254 [{ 255 svnConvertedText => <<'END', # Same as input text 256 Index: Makefile 257 =================================================================== 258 --- Makefile (revision 53131) 259 +++ Makefile (working copy) 260 @@ -1,1 +0,0 @@ 261 -MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools 262 diff --git a/Makefile b/Makefile 263 index f5d5e74..3b6aa92 100644 264 --- a/Makefile 265 +++ b/Makefile 266 @@ -1,1 1,1 @@ public: 267 END 268 indexPath => "Makefile", 269 isSvn => 1, 270 numTextChunks => 1, 271 sourceRevision => "53131", 272 }], 273 undef], 274 expectedNextLine => undef, 275 }, 276 #### 277 # Property Changes: Simple 278 ## 279 { 280 # New test 281 diffName => "SVN: file change diff with property change diff", 282 inputText => <<'END', 283 Index: Makefile 284 =================================================================== 285 --- Makefile (revision 60021) 286 +++ Makefile (working copy) 287 @@ -1,3 +1,4 @@ 288 + 289 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 290 291 all: 292 293 Property changes on: Makefile 294 ___________________________________________________________________ 295 Name: svn:executable 296 + * 297 END 298 expectedReturn => [ 299 [{ 300 svnConvertedText => <<'END', # Same as input text 301 Index: Makefile 302 =================================================================== 303 --- Makefile (revision 60021) 304 +++ Makefile (working copy) 305 @@ -1,3 +1,4 @@ 306 + 307 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 308 309 all: 310 311 END 312 executableBitDelta => 1, 313 indexPath => "Makefile", 314 isSvn => 1, 315 numTextChunks => 1, 316 sourceRevision => "60021", 317 }], 318 undef], 319 expectedNextLine => undef, 320 }, 321 { 322 # New test 323 diffName => "SVN: file change diff, followed by property change diff on different file", 324 inputText => <<'END', 325 Index: Makefile 326 =================================================================== 327 --- Makefile (revision 60021) 328 +++ Makefile (working copy) 329 @@ -1,3 +1,4 @@ 330 + 331 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 332 333 all: 334 335 Property changes on: Makefile.shared 336 ___________________________________________________________________ 337 Name: svn:executable 338 + * 339 END 340 expectedReturn => [ 341 [{ 342 svnConvertedText => <<'END', # Same as input text 343 Index: Makefile 344 =================================================================== 345 --- Makefile (revision 60021) 346 +++ Makefile (working copy) 347 @@ -1,3 +1,4 @@ 348 + 349 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 350 351 all: 352 353 END 354 indexPath => "Makefile", 355 isSvn => 1, 356 numTextChunks => 1, 357 sourceRevision => "60021", 358 }], 359 "Property changes on: Makefile.shared\n"], 360 expectedNextLine => "___________________________________________________________________\n", 361 }, 362 { 363 # New test 364 diffName => "SVN: property diff, followed by file change diff", 365 inputText => <<'END', 366 Property changes on: Makefile 367 ___________________________________________________________________ 368 Deleted: svn:executable 369 - * 370 371 Index: Makefile.shared 372 =================================================================== 373 --- Makefile.shared (revision 60021) 374 +++ Makefile.shared (working copy) 375 @@ -1,3 +1,4 @@ 376 + 377 SCRIPTS_PATH ?= ../WebKitTools/Scripts 378 XCODE_OPTIONS = `perl -I$(SCRIPTS_PATH) -Mwebkitdirs -e 'print XcodeOptionString()'` $(ARGS) 379 END 380 expectedReturn => [ 381 [{ 382 executableBitDelta => -1, 383 indexPath => "Makefile", 384 isSvn => 1, 385 }], 386 "Index: Makefile.shared\n"], 387 expectedNextLine => "===================================================================\n", 388 }, 389 { 390 # New test 391 diffName => "SVN: property diff, followed by file change diff using Windows line endings", 392 inputText => toWindowsLineEndings(<<'END', 393 Property changes on: Makefile 394 ___________________________________________________________________ 395 Deleted: svn:executable 396 - * 397 398 Index: Makefile.shared 399 =================================================================== 400 --- Makefile.shared (revision 60021) 401 +++ Makefile.shared (working copy) 402 @@ -1,3 +1,4 @@ 403 + 404 SCRIPTS_PATH ?= ../WebKitTools/Scripts 405 XCODE_OPTIONS = `perl -I$(SCRIPTS_PATH) -Mwebkitdirs -e 'print XcodeOptionString()'` $(ARGS) 406 END 407 ), 408 expectedReturn => [ 409 [{ 410 executableBitDelta => -1, 411 indexPath => "Makefile", 412 isSvn => 1, 413 }], 414 "Index: Makefile.shared\r\n"], 415 expectedNextLine => "===================================================================\r\n", 416 }, 417 { 418 # New test 419 diffName => "SVN: copied file with property change", 420 inputText => <<'END', 421 Index: NMakefile 422 =================================================================== 423 --- NMakefile (revision 60021) (from Makefile:60021) 424 +++ NMakefile (working copy) 425 @@ -0,0 +1,1 @@ 426 +MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 427 428 Property changes on: NMakefile 429 ___________________________________________________________________ 430 Added: svn:executable 431 + * 432 END 433 expectedReturn => [ 434 [{ 435 copiedFromPath => "Makefile", 436 executableBitDelta => 1, 437 indexPath => "NMakefile", 438 sourceRevision => "60021", 439 }], 440 undef], 441 expectedNextLine => undef, 442 }, 443 { 444 # New test 445 diffName => "SVN: two consecutive property diffs", 446 inputText => <<'END', 447 Property changes on: Makefile 448 ___________________________________________________________________ 449 Added: svn:executable 450 + * 451 452 453 Property changes on: Makefile.shared 454 ___________________________________________________________________ 455 Added: svn:executable 456 + * 457 END 458 expectedReturn => [ 459 [{ 460 executableBitDelta => 1, 461 indexPath => "Makefile", 462 isSvn => 1, 463 }], 464 "Property changes on: Makefile.shared\n"], 465 expectedNextLine => "___________________________________________________________________\n", 466 }, 467 { 468 # New test 469 diffName => "SVN: two consecutive property diffs using Windows line endings", 470 inputText => toWindowsLineEndings(<<'END', 471 Property changes on: Makefile 472 ___________________________________________________________________ 473 Added: svn:executable 474 + * 475 476 477 Property changes on: Makefile.shared 478 ___________________________________________________________________ 479 Added: svn:executable 480 + * 481 END 482 ), 483 expectedReturn => [ 484 [{ 485 executableBitDelta => 1, 486 indexPath => "Makefile", 487 isSvn => 1, 488 }], 489 "Property changes on: Makefile.shared\r\n"], 490 expectedNextLine => "___________________________________________________________________\r\n", 491 }, 492 #### 493 # Property Changes: Binary files 494 ## 495 { 496 # New test 497 diffName => "SVN: binary file with executable bit change", 498 inputText => <<'END', 499 Index: test_file.swf 500 =================================================================== 501 Cannot display: file marked as a binary type. 502 svn:mime-type = application/octet-stream 503 504 Property changes on: test_file.swf 505 ___________________________________________________________________ 506 Name: svn:mime-type 507 + application/octet-stream 508 Name: svn:executable 509 + * 510 511 512 Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 513 END 514 expectedReturn => [ 515 [{ 516 svnConvertedText => <<'END', # Same as input text 517 Index: test_file.swf 518 =================================================================== 519 Cannot display: file marked as a binary type. 520 svn:mime-type = application/octet-stream 521 522 523 524 Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 525 END 526 executableBitDelta => 1, 527 indexPath => "test_file.swf", 528 isBinary => 1, 529 isSvn => 1, 530 }], 531 undef], 532 expectedNextLine => undef, 533 }, 534 { 535 # New test 536 diffName => "SVN: binary file with executable bit change usng Windows line endings", 537 inputText => toWindowsLineEndings(<<'END', 538 Index: test_file.swf 539 =================================================================== 540 Cannot display: file marked as a binary type. 541 svn:mime-type = application/octet-stream 542 543 Property changes on: test_file.swf 544 ___________________________________________________________________ 545 Name: svn:mime-type 546 + application/octet-stream 547 Name: svn:executable 548 + * 549 550 551 Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 552 END 553 ), 554 expectedReturn => [ 555 [{ 556 svnConvertedText => toWindowsLineEndings(<<'END', # Same as input text 557 Index: test_file.swf 558 =================================================================== 559 Cannot display: file marked as a binary type. 560 svn:mime-type = application/octet-stream 561 562 563 564 Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 565 END 566 ), 567 executableBitDelta => 1, 568 indexPath => "test_file.swf", 569 isBinary => 1, 570 isSvn => 1, 571 }], 572 undef], 573 expectedNextLine => undef, 574 }, 575 { 576 # New test 577 diffName => "SVN: binary file followed by property change on different file", 578 inputText => <<'END', 579 Index: test_file.swf 580 =================================================================== 581 Cannot display: file marked as a binary type. 582 svn:mime-type = application/octet-stream 583 584 Property changes on: test_file.swf 585 ___________________________________________________________________ 586 Name: svn:mime-type 587 + application/octet-stream 588 589 590 Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 591 592 Property changes on: Makefile 593 ___________________________________________________________________ 594 Added: svn:executable 595 + * 596 END 597 expectedReturn => [ 598 [{ 599 svnConvertedText => <<'END', # Same as input text 600 Index: test_file.swf 601 =================================================================== 602 Cannot display: file marked as a binary type. 603 svn:mime-type = application/octet-stream 604 605 606 607 Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 608 609 END 610 indexPath => "test_file.swf", 611 isBinary => 1, 612 isSvn => 1, 613 }], 614 "Property changes on: Makefile\n"], 615 expectedNextLine => "___________________________________________________________________\n", 616 }, 617 { 618 # New test 619 diffName => "SVN: binary file followed by property change on different file using Windows line endings", 620 inputText => toWindowsLineEndings(<<'END', 621 Index: test_file.swf 622 =================================================================== 623 Cannot display: file marked as a binary type. 624 svn:mime-type = application/octet-stream 625 626 Property changes on: test_file.swf 627 ___________________________________________________________________ 628 Name: svn:mime-type 629 + application/octet-stream 630 631 632 Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 633 634 Property changes on: Makefile 635 ___________________________________________________________________ 636 Added: svn:executable 637 + * 638 END 639 ), 640 expectedReturn => [ 641 [{ 642 svnConvertedText => toWindowsLineEndings(<<'END', # Same as input text 643 Index: test_file.swf 644 =================================================================== 645 Cannot display: file marked as a binary type. 646 svn:mime-type = application/octet-stream 647 648 649 650 Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 651 652 END 653 ), 654 indexPath => "test_file.swf", 655 isBinary => 1, 656 isSvn => 1, 657 }], 658 "Property changes on: Makefile\r\n"], 659 expectedNextLine => "___________________________________________________________________\r\n", 660 }, 661 { 662 # New test 663 diffName => "SVN: binary file followed by file change on different file", 664 inputText => <<'END', 665 Index: test_file.swf 666 =================================================================== 667 Cannot display: file marked as a binary type. 668 svn:mime-type = application/octet-stream 669 670 Property changes on: test_file.swf 671 ___________________________________________________________________ 672 Name: svn:mime-type 673 + application/octet-stream 674 675 676 Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 677 678 Index: Makefile 679 =================================================================== 680 --- Makefile (revision 60021) 681 +++ Makefile (working copy) 682 @@ -1,3 +1,4 @@ 683 + 684 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 685 686 all: 687 END 688 expectedReturn => [ 689 [{ 690 svnConvertedText => <<'END', # Same as input text 691 Index: test_file.swf 692 =================================================================== 693 Cannot display: file marked as a binary type. 694 svn:mime-type = application/octet-stream 695 696 697 698 Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 699 700 END 701 indexPath => "test_file.swf", 702 isBinary => 1, 703 isSvn => 1, 704 }], 705 "Index: Makefile\n"], 706 expectedNextLine => "===================================================================\n", 707 }, 708 { 709 # New test 710 diffName => "SVN: binary file followed by file change on different file using Windows line endings", 711 inputText => toWindowsLineEndings(<<'END', 712 Index: test_file.swf 713 =================================================================== 714 Cannot display: file marked as a binary type. 715 svn:mime-type = application/octet-stream 716 717 Property changes on: test_file.swf 718 ___________________________________________________________________ 719 Name: svn:mime-type 720 + application/octet-stream 721 722 723 Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 724 725 Index: Makefile 726 =================================================================== 727 --- Makefile (revision 60021) 728 +++ Makefile (working copy) 729 @@ -1,3 +1,4 @@ 730 + 731 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 732 733 all: 734 END 735 ), 736 expectedReturn => [ 737 [{ 738 svnConvertedText => toWindowsLineEndings(<<'END', # Same as input text 739 Index: test_file.swf 740 =================================================================== 741 Cannot display: file marked as a binary type. 742 svn:mime-type = application/octet-stream 743 744 745 746 Q1dTBx0AAAB42itg4GlgYJjGwMDDyODMxMDw34GBgQEAJPQDJA== 747 748 END 749 ), 750 indexPath => "test_file.swf", 751 isBinary => 1, 752 isSvn => 1, 753 }], 754 "Index: Makefile\r\n"], 755 expectedNextLine => "===================================================================\r\n", 756 }, 757 #### 758 # Property Changes: File change with property change 759 ## 760 { 761 # New test 762 diffName => "SVN: file change diff with property change, followed by property change diff", 763 inputText => <<'END', 764 Index: Makefile 765 =================================================================== 766 --- Makefile (revision 60021) 767 +++ Makefile (working copy) 768 @@ -1,3 +1,4 @@ 769 + 770 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 771 772 all: 773 774 Property changes on: Makefile 775 ___________________________________________________________________ 776 Added: svn:executable 777 + * 778 779 780 Property changes on: Makefile.shared 781 ___________________________________________________________________ 782 Deleted: svn:executable 783 - * 784 END 785 expectedReturn => [ 786 [{ 787 svnConvertedText => <<'END', # Same as input text 788 Index: Makefile 789 =================================================================== 790 --- Makefile (revision 60021) 791 +++ Makefile (working copy) 792 @@ -1,3 +1,4 @@ 793 + 794 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 795 796 all: 797 798 799 800 END 801 executableBitDelta => 1, 802 indexPath => "Makefile", 803 isSvn => 1, 804 numTextChunks => 1, 805 sourceRevision => "60021", 806 }], 807 "Property changes on: Makefile.shared\n"], 808 expectedNextLine => "___________________________________________________________________\n", 809 }, 810 { 811 # New test 812 diffName => "SVN: file change diff with property change, followed by property change diff using Windows line endings", 813 inputText => toWindowsLineEndings(<<'END', 814 Index: Makefile 815 =================================================================== 816 --- Makefile (revision 60021) 817 +++ Makefile (working copy) 818 @@ -1,3 +1,4 @@ 819 + 820 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 821 822 all: 823 824 Property changes on: Makefile 825 ___________________________________________________________________ 826 Added: svn:executable 827 + * 828 829 830 Property changes on: Makefile.shared 831 ___________________________________________________________________ 832 Deleted: svn:executable 833 - * 834 END 835 ), 836 expectedReturn => [ 837 [{ 838 svnConvertedText => toWindowsLineEndings(<<'END', # Same as input text 839 Index: Makefile 840 =================================================================== 841 --- Makefile (revision 60021) 842 +++ Makefile (working copy) 843 @@ -1,3 +1,4 @@ 844 + 845 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 846 847 all: 848 849 850 851 END 852 ), 853 executableBitDelta => 1, 854 indexPath => "Makefile", 855 isSvn => 1, 856 numTextChunks => 1, 857 sourceRevision => "60021", 858 }], 859 "Property changes on: Makefile.shared\r\n"], 860 expectedNextLine => "___________________________________________________________________\r\n", 861 }, 862 { 863 # New test 864 diffName => "SVN: file change diff with property change, followed by file change diff", 865 inputText => <<'END', 866 Index: Makefile 867 =================================================================== 868 --- Makefile (revision 60021) 869 +++ Makefile (working copy) 870 @@ -1,3 +1,4 @@ 871 + 872 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 873 874 all: 875 876 Property changes on: Makefile 877 ___________________________________________________________________ 878 Name: svn:executable 879 - * 880 881 Index: Makefile.shared 882 =================================================================== 883 --- Makefile.shared (revision 60021) 884 +++ Makefile.shared (working copy) 885 @@ -1,3 +1,4 @@ 886 + 887 SCRIPTS_PATH ?= ../WebKitTools/Scripts 888 XCODE_OPTIONS = `perl -I$(SCRIPTS_PATH) -Mwebkitdirs -e 'print XcodeOptionString()'` $(ARGS) 889 END 890 expectedReturn => [ 891 [{ 892 svnConvertedText => <<'END', # Same as input text 893 Index: Makefile 894 =================================================================== 895 --- Makefile (revision 60021) 896 +++ Makefile (working copy) 897 @@ -1,3 +1,4 @@ 898 + 899 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 900 901 all: 902 903 904 END 905 executableBitDelta => -1, 906 indexPath => "Makefile", 907 isSvn => 1, 908 numTextChunks => 1, 909 sourceRevision => "60021", 910 }], 911 "Index: Makefile.shared\n"], 912 expectedNextLine => "===================================================================\n", 913 }, 914 { 915 # New test 916 diffName => "SVN: file change diff with property change, followed by file change diff using Windows line endings", 917 inputText => toWindowsLineEndings(<<'END', 918 Index: Makefile 919 =================================================================== 920 --- Makefile (revision 60021) 921 +++ Makefile (working copy) 922 @@ -1,3 +1,4 @@ 923 + 924 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 925 926 all: 927 928 Property changes on: Makefile 929 ___________________________________________________________________ 930 Name: svn:executable 931 - * 932 933 Index: Makefile.shared 934 =================================================================== 935 --- Makefile.shared (revision 60021) 936 +++ Makefile.shared (working copy) 937 @@ -1,3 +1,4 @@ 938 + 939 SCRIPTS_PATH ?= ../WebKitTools/Scripts 940 XCODE_OPTIONS = `perl -I$(SCRIPTS_PATH) -Mwebkitdirs -e 'print XcodeOptionString()'` $(ARGS) 941 END 942 ), 943 expectedReturn => [ 944 [{ 945 svnConvertedText => toWindowsLineEndings(<<'END', # Same as input text 946 Index: Makefile 947 =================================================================== 948 --- Makefile (revision 60021) 949 +++ Makefile (working copy) 950 @@ -1,3 +1,4 @@ 951 + 952 MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKit2 WebKitTools 953 954 all: 955 956 957 END 958 ), 959 executableBitDelta => -1, 960 indexPath => "Makefile", 961 isSvn => 1, 962 numTextChunks => 1, 963 sourceRevision => "60021", 964 }], 965 "Index: Makefile.shared\r\n"], 966 expectedNextLine => "===================================================================\r\n", 967 }, 968 #### 969 # Git test cases 970 ## 971 { 972 # New test 973 diffName => "Git: simple", 974 inputText => <<'END', 975 diff --git a/Makefile b/Makefile 976 index f5d5e74..3b6aa92 100644 977 --- a/Makefile 978 +++ b/Makefile 979 @@ -1,1 +1,1 @@ public: 980 END 981 expectedReturn => [ 982 [{ 983 svnConvertedText => <<'END', 984 Index: Makefile 985 index f5d5e74..3b6aa92 100644 986 --- Makefile 987 +++ Makefile 988 @@ -1,1 +1,1 @@ public: 989 END 990 indexPath => "Makefile", 991 isGit => 1, 992 numTextChunks => 1, 993 }], 994 undef], 995 expectedNextLine => undef, 996 }, 997 { 998 # New test 999 diffName => "Git: Append new line to the end of an existing file", 1000 inputText => <<'END', 1001 diff --git a/foo b/foo 1002 index 863339f..db418b2 100644 1003 --- a/foo 1004 +++ b/foo 1005 @@ -1 +1,2 @@ 1006 Passed 1007 + 1008 END 1009 expectedReturn => [ 1010 [{ 1011 svnConvertedText => <<'END', 1012 Index: foo 1013 index 863339f..db418b2 100644 1014 --- foo 1015 +++ foo 1016 @@ -1 +1,2 @@ 1017 Passed 1018 + 1019 END 1020 indexPath => "foo", 1021 isGit => 1, 1022 numTextChunks => 1, 1023 }], 1024 undef], 1025 expectedNextLine => undef, 1026 }, 1027 { # New test 1028 diffName => "Git: new file", 1029 inputText => <<'END', 1030 diff --git a/foo.h b/foo.h 1031 new file mode 100644 1032 index 0000000..3c9f114 1033 --- /dev/null 1034 +++ b/foo.h 1035 @@ -0,0 +1,34 @@ 1036 +<html> 1037 diff --git a/bar b/bar 1038 index d45dd40..3494526 100644 1039 END 1040 expectedReturn => [ 1041 [{ 1042 svnConvertedText => <<'END', 1043 Index: foo.h 1044 new file mode 100644 1045 index 0000000..3c9f114 1046 --- foo.h 1047 +++ foo.h 1048 @@ -0,0 +1,34 @@ 1049 +<html> 1050 END 1051 indexPath => "foo.h", 1052 isGit => 1, 1053 isNew => 1, 1054 numTextChunks => 1, 1055 }], 1056 "diff --git a/bar b/bar\n"], 1057 expectedNextLine => "index d45dd40..3494526 100644\n", 1058 }, 1059 { # New test 1060 diffName => "Git: file deletion", 1061 inputText => <<'END', 1062 diff --git a/foo b/foo 1063 deleted file mode 100644 1064 index 1e50d1d..0000000 1065 --- a/foo 1066 +++ /dev/null 1067 @@ -1,1 +0,0 @@ 1068 -line1 1069 diff --git a/bar b/bar 1070 index d45dd40..3494526 100644 1071 END 1072 expectedReturn => [ 1073 [{ 1074 svnConvertedText => <<'END', 1075 Index: foo 1076 deleted file mode 100644 1077 index 1e50d1d..0000000 1078 --- foo 1079 +++ foo 1080 @@ -1,1 +0,0 @@ 1081 -line1 1082 END 1083 indexPath => "foo", 1084 isDeletion => 1, 1085 isGit => 1, 1086 numTextChunks => 1, 1087 }], 1088 "diff --git a/bar b/bar\n"], 1089 expectedNextLine => "index d45dd40..3494526 100644\n", 1090 }, 1091 { 1092 # New test 1093 diffName => "Git: Git diff followed by SVN diff", # Should not recognize SVN start 1094 inputText => <<'END', 1095 diff --git a/Makefile b/Makefile 1096 index f5d5e74..3b6aa92 100644 1097 --- a/Makefile 1098 +++ b/Makefile 1099 @@ -1,1 +1,1 @@ public: 1100 Index: Makefile_new 1101 =================================================================== 1102 --- Makefile_new (revision 53131) (from Makefile:53131) 1103 END 1104 expectedReturn => [ 1105 [{ 1106 svnConvertedText => <<'END', 1107 Index: Makefile 1108 index f5d5e74..3b6aa92 100644 1109 --- Makefile 1110 +++ Makefile 1111 @@ -1,1 +1,1 @@ public: 1112 Index: Makefile_new 1113 =================================================================== 1114 --- Makefile_new (revision 53131) (from Makefile:53131) 1115 END 1116 indexPath => "Makefile", 1117 isGit => 1, 1118 numTextChunks => 1, 1119 }], 1120 undef], 1121 expectedNextLine => undef, 1122 }, 1123 { 1124 # New test 1125 diffName => "Git: file that only has an executable bit change", 1126 inputText => <<'END', 1127 diff --git a/foo b/foo 1128 old mode 100644 1129 new mode 100755 1130 END 1131 expectedReturn => [ 1132 [{ 1133 svnConvertedText => <<'END', 1134 Index: foo 1135 old mode 100644 1136 new mode 100755 1137 END 1138 executableBitDelta => 1, 1139 indexPath => "foo", 1140 isGit => 1, 1141 numTextChunks => 0, 1142 }], 1143 undef], 1144 expectedNextLine => undef, 1145 }, 1146 #### 1147 # Git test cases: file moves (multiple return values) 1148 ## 1149 { 1150 diffName => "Git: rename (with similarity index 100%)", 1151 inputText => <<'END', 1152 diff --git a/foo b/foo_new 1153 similarity index 100% 1154 rename from foo 1155 rename to foo_new 1156 diff --git a/bar b/bar 1157 index d45dd40..3494526 100644 1158 END 1159 expectedReturn => [ 1160 [{ 1161 indexPath => "foo", 1162 isDeletion => 1, 1163 }, 1164 { 1165 copiedFromPath => "foo", 1166 indexPath => "foo_new", 1167 }], 1168 "diff --git a/bar b/bar\n"], 1169 expectedNextLine => "index d45dd40..3494526 100644\n", 1170 }, 1171 { 1172 diffName => "rename (with similarity index < 100%)", 1173 inputText => <<'END', 1174 diff --git a/foo b/foo_new 1175 similarity index 99% 1176 rename from foo 1177 rename to foo_new 1178 index 1e50d1d..1459d21 100644 1179 --- a/foo 1180 +++ b/foo_new 1181 @@ -15,3 +15,4 @@ release r deployment dep deploy: 1182 line1 1183 line2 1184 line3 1185 +line4 1186 diff --git a/bar b/bar 1187 index d45dd40..3494526 100644 1188 END 1189 expectedReturn => [ 1190 [{ 1191 indexPath => "foo", 1192 isDeletion => 1, 1193 }, 1194 { 1195 copiedFromPath => "foo", 1196 indexPath => "foo_new", 1197 }, 1198 { 1199 indexPath => "foo_new", 1200 isGit => 1, 1201 numTextChunks => 1, 1202 svnConvertedText => <<'END', 1203 Index: foo_new 1204 similarity index 99% 1205 rename from foo 1206 rename to foo_new 1207 index 1e50d1d..1459d21 100644 1208 --- foo_new 1209 +++ foo_new 1210 @@ -15,3 +15,4 @@ release r deployment dep deploy: 1211 line1 1212 line2 1213 line3 1214 +line4 1215 END 1216 }], 1217 "diff --git a/bar b/bar\n"], 1218 expectedNextLine => "index d45dd40..3494526 100644\n", 1219 }, 1220 { 1221 diffName => "rename (with executable bit change)", 1222 inputText => <<'END', 1223 diff --git a/foo b/foo_new 1224 old mode 100644 1225 new mode 100755 1226 similarity index 100% 1227 rename from foo 1228 rename to foo_new 1229 diff --git a/bar b/bar 1230 index d45dd40..3494526 100644 1231 END 1232 expectedReturn => [ 1233 [{ 1234 indexPath => "foo", 1235 isDeletion => 1, 1236 }, 1237 { 1238 copiedFromPath => "foo", 1239 indexPath => "foo_new", 1240 }, 1241 { 1242 executableBitDelta => 1, 1243 indexPath => "foo_new", 1244 isGit => 1, 1245 numTextChunks => 0, 1246 svnConvertedText => <<'END', 1247 Index: foo_new 1248 old mode 100644 1249 new mode 100755 1250 similarity index 100% 1251 rename from foo 1252 rename to foo_new 1253 END 1254 }], 1255 "diff --git a/bar b/bar\n"], 1256 expectedNextLine => "index d45dd40..3494526 100644\n", 1257 }, 1258 ); 1259 1260 my $testCasesCount = @testCaseHashRefs; 1261 plan(tests => 2 * $testCasesCount); # Total number of assertions. 1262 1263 foreach my $testCase (@testCaseHashRefs) { 1264 my $testNameStart = "parseDiff(): $testCase->{diffName}: comparing"; 1265 1266 my $fileHandle; 1267 open($fileHandle, "<", \$testCase->{inputText}); 1268 my $line = <$fileHandle>; 1269 1270 my @got = VCSUtils::parseDiff($fileHandle, $line, {"shouldNotUseIndexPathEOL" => 1}); 1271 my $expectedReturn = $testCase->{expectedReturn}; 1272 1273 is_deeply(\@got, $expectedReturn, "$testNameStart return value."); 1274 1275 my $gotNextLine = <$fileHandle>; 1276 is($gotNextLine, $testCase->{expectedNextLine}, "$testNameStart next read line."); 1277 } 1278