| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Unit tests for presubmit_support.py and presubmit_canned_checks.py.""" | 6 """Unit tests for presubmit_support.py and presubmit_canned_checks.py.""" |
| 7 | 7 |
| 8 # pylint is too confused. | 8 # pylint is too confused. |
| 9 # pylint: disable=E1101,E1103,R0201,W0212,W0403 | 9 # pylint: disable=E1101,E1103,R0201,W0212,W0403 |
| 10 | 10 |
| (...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 self.mox.ReplayAll() | 361 self.mox.ReplayAll() |
| 362 | 362 |
| 363 change = presubmit.Change( | 363 change = presubmit.Change( |
| 364 'mychange', | 364 'mychange', |
| 365 '\n'.join(description_lines), | 365 '\n'.join(description_lines), |
| 366 self.fake_root_dir, | 366 self.fake_root_dir, |
| 367 files, | 367 files, |
| 368 0, | 368 0, |
| 369 0, | 369 0, |
| 370 None) | 370 None) |
| 371 executer = presubmit.PresubmitExecuter(change, False, False, None, False) | 371 executer = presubmit.PresubmitExecuter(change, False, None, False) |
| 372 self.failIf(executer.ExecPresubmitScript('', fake_presubmit)) | 372 self.failIf(executer.ExecPresubmitScript('', fake_presubmit)) |
| 373 # No error if no on-upload entry point | 373 # No error if no on-upload entry point |
| 374 self.failIf(executer.ExecPresubmitScript( | 374 self.failIf(executer.ExecPresubmitScript( |
| 375 ('def CheckChangeOnCommit(input_api, output_api):\n' | 375 ('def CheckChangeOnCommit(input_api, output_api):\n' |
| 376 ' return (output_api.PresubmitError("!!"))\n'), | 376 ' return (output_api.PresubmitError("!!"))\n'), |
| 377 fake_presubmit | 377 fake_presubmit |
| 378 )) | 378 )) |
| 379 | 379 |
| 380 executer = presubmit.PresubmitExecuter(change, True, False, None, False) | 380 executer = presubmit.PresubmitExecuter(change, True, None, False) |
| 381 # No error if no on-commit entry point | 381 # No error if no on-commit entry point |
| 382 self.failIf(executer.ExecPresubmitScript( | 382 self.failIf(executer.ExecPresubmitScript( |
| 383 ('def CheckChangeOnUpload(input_api, output_api):\n' | 383 ('def CheckChangeOnUpload(input_api, output_api):\n' |
| 384 ' return (output_api.PresubmitError("!!"))\n'), | 384 ' return (output_api.PresubmitError("!!"))\n'), |
| 385 fake_presubmit | 385 fake_presubmit |
| 386 )) | 386 )) |
| 387 | 387 |
| 388 self.failIf(executer.ExecPresubmitScript( | 388 self.failIf(executer.ExecPresubmitScript( |
| 389 ('def CheckChangeOnUpload(input_api, output_api):\n' | 389 ('def CheckChangeOnUpload(input_api, output_api):\n' |
| 390 ' if not input_api.change.STORY:\n' | 390 ' if not input_api.change.STORY:\n' |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 440 input_buf = StringIO.StringIO('y\n') | 440 input_buf = StringIO.StringIO('y\n') |
| 441 change = presubmit.Change( | 441 change = presubmit.Change( |
| 442 'mychange', | 442 'mychange', |
| 443 '\n'.join(description_lines), | 443 '\n'.join(description_lines), |
| 444 self.fake_root_dir, | 444 self.fake_root_dir, |
| 445 files, | 445 files, |
| 446 0, | 446 0, |
| 447 0, | 447 0, |
| 448 None) | 448 None) |
| 449 output = presubmit.DoPresubmitChecks( | 449 output = presubmit.DoPresubmitChecks( |
| 450 change, False, True, None, input_buf, None, False, False, None) | 450 change, False, True, None, input_buf, None, False, None) |
| 451 self.failIf(output.should_continue()) | 451 self.failIf(output.should_continue()) |
| 452 self.assertEqual(output.getvalue().count('!!'), 2) | 452 self.assertEqual(output.getvalue().count('!!'), 2) |
| 453 self.assertEqual(output.getvalue().count( | 453 self.assertEqual(output.getvalue().count( |
| 454 'Running presubmit upload checks ...\n'), 1) | 454 'Running presubmit upload checks ...\n'), 1) |
| 455 | 455 |
| 456 def testDoPresubmitChecksPromptsAfterWarnings(self): | 456 def testDoPresubmitChecksPromptsAfterWarnings(self): |
| 457 join = presubmit.os.path.join | 457 join = presubmit.os.path.join |
| 458 description_lines = ('Hello there', | 458 description_lines = ('Hello there', |
| 459 'this is a change', | 459 'this is a change', |
| 460 'NOSUCHKEY=http://tracker/123') | 460 'NOSUCHKEY=http://tracker/123') |
| (...skipping 19 matching lines...) Expand all Loading... |
| 480 input_buf = StringIO.StringIO('n\n') # say no to the warning | 480 input_buf = StringIO.StringIO('n\n') # say no to the warning |
| 481 change = presubmit.Change( | 481 change = presubmit.Change( |
| 482 'mychange', | 482 'mychange', |
| 483 '\n'.join(description_lines), | 483 '\n'.join(description_lines), |
| 484 self.fake_root_dir, | 484 self.fake_root_dir, |
| 485 files, | 485 files, |
| 486 0, | 486 0, |
| 487 0, | 487 0, |
| 488 None) | 488 None) |
| 489 output = presubmit.DoPresubmitChecks( | 489 output = presubmit.DoPresubmitChecks( |
| 490 change, False, True, None, input_buf, None, True, False, None) | 490 change, False, True, None, input_buf, None, True, None) |
| 491 self.failIf(output.should_continue()) | 491 self.failIf(output.should_continue()) |
| 492 self.assertEqual(output.getvalue().count('??'), 2) | 492 self.assertEqual(output.getvalue().count('??'), 2) |
| 493 | 493 |
| 494 input_buf = StringIO.StringIO('y\n') # say yes to the warning | 494 input_buf = StringIO.StringIO('y\n') # say yes to the warning |
| 495 output = presubmit.DoPresubmitChecks( | 495 output = presubmit.DoPresubmitChecks( |
| 496 change, False, True, None, input_buf, None, True, False, None) | 496 change, False, True, None, input_buf, None, True, None) |
| 497 self.failUnless(output.should_continue()) | 497 self.failUnless(output.should_continue()) |
| 498 self.assertEquals(output.getvalue().count('??'), 2) | 498 self.assertEquals(output.getvalue().count('??'), 2) |
| 499 self.assertEqual(output.getvalue().count( | 499 self.assertEqual(output.getvalue().count( |
| 500 'Running presubmit upload checks ...\n'), 1) | 500 'Running presubmit upload checks ...\n'), 1) |
| 501 | 501 |
| 502 def testDoPresubmitChecksNoWarningPromptIfErrors(self): | 502 def testDoPresubmitChecksNoWarningPromptIfErrors(self): |
| 503 join = presubmit.os.path.join | 503 join = presubmit.os.path.join |
| 504 description_lines = ('Hello there', | 504 description_lines = ('Hello there', |
| 505 'this is a change', | 505 'this is a change', |
| 506 'NOSUCHKEY=http://tracker/123', | 506 'NOSUCHKEY=http://tracker/123', |
| (...skipping 18 matching lines...) Expand all Loading... |
| 525 | 525 |
| 526 change = presubmit.Change( | 526 change = presubmit.Change( |
| 527 'mychange', | 527 'mychange', |
| 528 '\n'.join(description_lines), | 528 '\n'.join(description_lines), |
| 529 self.fake_root_dir, | 529 self.fake_root_dir, |
| 530 files, | 530 files, |
| 531 0, | 531 0, |
| 532 0, | 532 0, |
| 533 None) | 533 None) |
| 534 output = presubmit.DoPresubmitChecks(change, False, True, None, None, | 534 output = presubmit.DoPresubmitChecks(change, False, True, None, None, |
| 535 None, False, False, None) | 535 None, False, None) |
| 536 self.assertEqual(output.getvalue().count('??'), 2) | 536 self.assertEqual(output.getvalue().count('??'), 2) |
| 537 self.assertEqual(output.getvalue().count('XX!!XX'), 2) | 537 self.assertEqual(output.getvalue().count('XX!!XX'), 2) |
| 538 self.assertEqual(output.getvalue().count('(y/N)'), 0) | 538 self.assertEqual(output.getvalue().count('(y/N)'), 0) |
| 539 self.assertEqual(output.getvalue().count( | 539 self.assertEqual(output.getvalue().count( |
| 540 'Running presubmit upload checks ...\n'), 1) | 540 'Running presubmit upload checks ...\n'), 1) |
| 541 | 541 |
| 542 def testDoDefaultPresubmitChecksAndFeedback(self): | 542 def testDoDefaultPresubmitChecksAndFeedback(self): |
| 543 join = presubmit.os.path.join | 543 join = presubmit.os.path.join |
| 544 description_lines = ('Hello there', | 544 description_lines = ('Hello there', |
| 545 'this is a change', | 545 'this is a change', |
| (...skipping 22 matching lines...) Expand all Loading... |
| 568 # Always fail. | 568 # Always fail. |
| 569 change = presubmit.Change( | 569 change = presubmit.Change( |
| 570 'mychange', | 570 'mychange', |
| 571 '\n'.join(description_lines), | 571 '\n'.join(description_lines), |
| 572 self.fake_root_dir, | 572 self.fake_root_dir, |
| 573 files, | 573 files, |
| 574 0, | 574 0, |
| 575 0, | 575 0, |
| 576 None) | 576 None) |
| 577 output = presubmit.DoPresubmitChecks( | 577 output = presubmit.DoPresubmitChecks( |
| 578 change, False, True, None, input_buf, DEFAULT_SCRIPT, False, False, | 578 change, False, True, None, input_buf, DEFAULT_SCRIPT, False, None) |
| 579 None) | |
| 580 self.failIf(output.should_continue()) | 579 self.failIf(output.should_continue()) |
| 581 text = ('Running presubmit upload checks ...\n' | 580 text = ('Running presubmit upload checks ...\n' |
| 582 'Warning, no presubmit.py found.\n' | 581 'Warning, no presubmit.py found.\n' |
| 583 'Running default presubmit script.\n' | 582 'Running default presubmit script.\n' |
| 584 '\n' | 583 '\n' |
| 585 '** Presubmit ERRORS **\n!!\n\n' | 584 '** Presubmit ERRORS **\n!!\n\n' |
| 586 'Was the presubmit check useful? Please send feedback & hate mail ' | 585 'Was the presubmit check useful? Please send feedback & hate mail ' |
| 587 'to maruel@chromium.org!\n') | 586 'to maruel@chromium.org!\n') |
| 588 self.assertEquals(output.getvalue(), text) | 587 self.assertEquals(output.getvalue(), text) |
| 589 | 588 |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 649 input_buf = StringIO.StringIO('y\n') | 648 input_buf = StringIO.StringIO('y\n') |
| 650 change = presubmit.Change( | 649 change = presubmit.Change( |
| 651 'foo', | 650 'foo', |
| 652 'Blah Blah\n\nSTORY=http://tracker.com/42\nBUG=boo\n', | 651 'Blah Blah\n\nSTORY=http://tracker.com/42\nBUG=boo\n', |
| 653 self.fake_root_dir, | 652 self.fake_root_dir, |
| 654 None, | 653 None, |
| 655 0, | 654 0, |
| 656 0, | 655 0, |
| 657 None) | 656 None) |
| 658 self.failUnless(presubmit.DoPresubmitChecks( | 657 self.failUnless(presubmit.DoPresubmitChecks( |
| 659 change, False, True, output, input_buf, DEFAULT_SCRIPT, False, False, | 658 change, False, True, output, input_buf, DEFAULT_SCRIPT, False, None)) |
| 660 None)) | |
| 661 self.assertEquals(output.getvalue(), | 659 self.assertEquals(output.getvalue(), |
| 662 ('Running presubmit upload checks ...\n' | 660 ('Running presubmit upload checks ...\n' |
| 663 'Warning, no presubmit.py found.\n' | 661 'Warning, no presubmit.py found.\n' |
| 664 'Running default presubmit script.\n' | 662 'Running default presubmit script.\n' |
| 665 '\n' | 663 '\n' |
| 666 '** Presubmit Messages **\n' | 664 '** Presubmit Messages **\n' |
| 667 'http://tracker.com/42\n' | 665 'http://tracker.com/42\n' |
| 668 '\n' | 666 '\n' |
| 669 'Presubmit checks passed.\n')) | 667 'Presubmit checks passed.\n')) |
| 670 | 668 |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 748 self.mox.StubOutWithMock(presubmit, 'ParseFiles') | 746 self.mox.StubOutWithMock(presubmit, 'ParseFiles') |
| 749 presubmit.scm.determine_scm(self.fake_root_dir).AndReturn(None) | 747 presubmit.scm.determine_scm(self.fake_root_dir).AndReturn(None) |
| 750 presubmit.ParseFiles(['random_file.txt'], None | 748 presubmit.ParseFiles(['random_file.txt'], None |
| 751 ).AndReturn(['random_file.txt']) | 749 ).AndReturn(['random_file.txt']) |
| 752 output = self.mox.CreateMock(presubmit.PresubmitOutput) | 750 output = self.mox.CreateMock(presubmit.PresubmitOutput) |
| 753 output.should_continue().AndReturn(False) | 751 output.should_continue().AndReturn(False) |
| 754 | 752 |
| 755 presubmit.DoPresubmitChecks(mox.IgnoreArg(), False, False, | 753 presubmit.DoPresubmitChecks(mox.IgnoreArg(), False, False, |
| 756 mox.IgnoreArg(), | 754 mox.IgnoreArg(), |
| 757 mox.IgnoreArg(), | 755 mox.IgnoreArg(), |
| 758 None, False, False, None).AndReturn(output) | 756 None, False, None).AndReturn(output) |
| 759 self.mox.ReplayAll() | 757 self.mox.ReplayAll() |
| 760 | 758 |
| 761 self.assertEquals( | 759 self.assertEquals( |
| 762 True, | 760 True, |
| 763 presubmit.Main(['--root', self.fake_root_dir, 'random_file.txt'])) | 761 presubmit.Main(['--root', self.fake_root_dir, 'random_file.txt'])) |
| 764 | 762 |
| 765 def testMainUnversionedFail(self): | 763 def testMainUnversionedFail(self): |
| 766 # OptParser calls presubmit.os.path.exists and is a pain when mocked. | 764 # OptParser calls presubmit.os.path.exists and is a pain when mocked. |
| 767 self.UnMock(presubmit.os.path, 'exists') | 765 self.UnMock(presubmit.os.path, 'exists') |
| 768 self.mox.StubOutWithMock(presubmit, 'DoPresubmitChecks') | 766 self.mox.StubOutWithMock(presubmit, 'DoPresubmitChecks') |
| (...skipping 28 matching lines...) Expand all Loading... |
| 797 'PresubmitLocalPath', 'ReadFile', 'RightHandSideLines', 'ServerPaths', | 795 'PresubmitLocalPath', 'ReadFile', 'RightHandSideLines', 'ServerPaths', |
| 798 'basename', 'cPickle', 'cStringIO', 'canned_checks', 'change', 'environ', | 796 'basename', 'cPickle', 'cStringIO', 'canned_checks', 'change', 'environ', |
| 799 'host_url', 'is_committing', 'json', 'logging', 'marshal', 'os_listdir', | 797 'host_url', 'is_committing', 'json', 'logging', 'marshal', 'os_listdir', |
| 800 'os_walk', | 798 'os_walk', |
| 801 'os_path', 'owners_db', 'pickle', 'platform', 'python_executable', 're', | 799 'os_path', 'owners_db', 'pickle', 'platform', 'python_executable', 're', |
| 802 'rietveld', 'subprocess', 'tbr', 'tempfile', 'time', 'traceback', | 800 'rietveld', 'subprocess', 'tbr', 'tempfile', 'time', 'traceback', |
| 803 'unittest', 'urllib2', 'version', 'verbose', | 801 'unittest', 'urllib2', 'version', 'verbose', |
| 804 ] | 802 ] |
| 805 # If this test fails, you should add the relevant test. | 803 # If this test fails, you should add the relevant test. |
| 806 self.compareMembers( | 804 self.compareMembers( |
| 807 presubmit.InputApi(self.fake_change, './.', False, False, None, False), | 805 presubmit.InputApi(self.fake_change, './.', False, None, False), |
| 808 members) | 806 members) |
| 809 | 807 |
| 810 def testDepotToLocalPath(self): | 808 def testDepotToLocalPath(self): |
| 811 presubmit.scm.SVN.CaptureInfo('svn://foo/smurf').AndReturn( | 809 presubmit.scm.SVN.CaptureInfo('svn://foo/smurf').AndReturn( |
| 812 {'Path': 'prout'}) | 810 {'Path': 'prout'}) |
| 813 presubmit.scm.SVN.CaptureInfo('svn:/foo/notfound/burp').AndReturn({}) | 811 presubmit.scm.SVN.CaptureInfo('svn:/foo/notfound/burp').AndReturn({}) |
| 814 self.mox.ReplayAll() | 812 self.mox.ReplayAll() |
| 815 | 813 |
| 816 path = presubmit.InputApi( | 814 path = presubmit.InputApi( |
| 817 self.fake_change, './p', False, False, None, False).DepotToLocalPath( | 815 self.fake_change, './p', False, None, False).DepotToLocalPath( |
| 818 'svn://foo/smurf') | 816 'svn://foo/smurf') |
| 819 self.failUnless(path == 'prout') | 817 self.failUnless(path == 'prout') |
| 820 path = presubmit.InputApi( | 818 path = presubmit.InputApi( |
| 821 self.fake_change, './p', False, False, None, False).DepotToLocalPath( | 819 self.fake_change, './p', False, None, False).DepotToLocalPath( |
| 822 'svn:/foo/notfound/burp') | 820 'svn:/foo/notfound/burp') |
| 823 self.failUnless(path == None) | 821 self.failUnless(path == None) |
| 824 | 822 |
| 825 def testLocalToDepotPath(self): | 823 def testLocalToDepotPath(self): |
| 826 presubmit.scm.SVN.CaptureInfo('smurf').AndReturn({'URL': 'svn://foo'}) | 824 presubmit.scm.SVN.CaptureInfo('smurf').AndReturn({'URL': 'svn://foo'}) |
| 827 presubmit.scm.SVN.CaptureInfo('notfound-food').AndReturn({}) | 825 presubmit.scm.SVN.CaptureInfo('notfound-food').AndReturn({}) |
| 828 self.mox.ReplayAll() | 826 self.mox.ReplayAll() |
| 829 path = presubmit.InputApi( | 827 path = presubmit.InputApi( |
| 830 self.fake_change, './p', False, False, None, False).LocalToDepotPath( | 828 self.fake_change, './p', False, None, False).LocalToDepotPath( |
| 831 'smurf') | 829 'smurf') |
| 832 self.assertEqual(path, 'svn://foo') | 830 self.assertEqual(path, 'svn://foo') |
| 833 path = presubmit.InputApi( | 831 path = presubmit.InputApi( |
| 834 self.fake_change, './p', False, False, None, False).LocalToDepotPath( | 832 self.fake_change, './p', False, None, False).LocalToDepotPath( |
| 835 'notfound-food') | 833 'notfound-food') |
| 836 self.assertEquals(path, None) | 834 self.assertEquals(path, None) |
| 837 | 835 |
| 838 def testInputApiConstruction(self): | 836 def testInputApiConstruction(self): |
| 839 self.mox.ReplayAll() | 837 self.mox.ReplayAll() |
| 840 api = presubmit.InputApi( | 838 api = presubmit.InputApi( |
| 841 self.fake_change, | 839 self.fake_change, |
| 842 presubmit_path='foo/path/PRESUBMIT.py', | 840 presubmit_path='foo/path/PRESUBMIT.py', |
| 843 is_committing=False, tbr=False, rietveld_obj=None, verbose=False) | 841 is_committing=False, rietveld_obj=None, verbose=False) |
| 844 self.assertEquals(api.PresubmitLocalPath(), 'foo/path') | 842 self.assertEquals(api.PresubmitLocalPath(), 'foo/path') |
| 845 self.assertEquals(api.change, self.fake_change) | 843 self.assertEquals(api.change, self.fake_change) |
| 846 self.assertEquals(api.host_url, 'http://codereview.chromium.org') | 844 self.assertEquals(api.host_url, 'http://codereview.chromium.org') |
| 847 | 845 |
| 848 def testInputApiPresubmitScriptFiltering(self): | 846 def testInputApiPresubmitScriptFiltering(self): |
| 849 join = presubmit.os.path.join | 847 join = presubmit.os.path.join |
| 850 description_lines = ('Hello there', | 848 description_lines = ('Hello there', |
| 851 'this is a change', | 849 'this is a change', |
| 852 'BUG=123', | 850 'BUG=123', |
| 853 ' STORY =http://foo/ \t', | 851 ' STORY =http://foo/ \t', |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 898 'mychange', | 896 'mychange', |
| 899 '\n'.join(description_lines), | 897 '\n'.join(description_lines), |
| 900 self.fake_root_dir, | 898 self.fake_root_dir, |
| 901 files, | 899 files, |
| 902 0, | 900 0, |
| 903 0, | 901 0, |
| 904 None) | 902 None) |
| 905 input_api = presubmit.InputApi( | 903 input_api = presubmit.InputApi( |
| 906 change, | 904 change, |
| 907 join(self.fake_root_dir, 'foo', 'PRESUBMIT.py'), | 905 join(self.fake_root_dir, 'foo', 'PRESUBMIT.py'), |
| 908 False, False, None, False) | 906 False, None, False) |
| 909 # Doesn't filter much | 907 # Doesn't filter much |
| 910 got_files = input_api.AffectedFiles() | 908 got_files = input_api.AffectedFiles() |
| 911 self.assertEquals(len(got_files), 7) | 909 self.assertEquals(len(got_files), 7) |
| 912 self.assertEquals(got_files[0].LocalPath(), presubmit.normpath(files[0][1])) | 910 self.assertEquals(got_files[0].LocalPath(), presubmit.normpath(files[0][1])) |
| 913 self.assertEquals(got_files[1].LocalPath(), presubmit.normpath(files[1][1])) | 911 self.assertEquals(got_files[1].LocalPath(), presubmit.normpath(files[1][1])) |
| 914 self.assertEquals(got_files[2].LocalPath(), presubmit.normpath(files[2][1])) | 912 self.assertEquals(got_files[2].LocalPath(), presubmit.normpath(files[2][1])) |
| 915 self.assertEquals(got_files[3].LocalPath(), presubmit.normpath(files[3][1])) | 913 self.assertEquals(got_files[3].LocalPath(), presubmit.normpath(files[3][1])) |
| 916 self.assertEquals(got_files[4].LocalPath(), presubmit.normpath(files[4][1])) | 914 self.assertEquals(got_files[4].LocalPath(), presubmit.normpath(files[4][1])) |
| 917 self.assertEquals(got_files[5].LocalPath(), presubmit.normpath(files[5][1])) | 915 self.assertEquals(got_files[5].LocalPath(), presubmit.normpath(files[5][1])) |
| 918 self.assertEquals(got_files[6].LocalPath(), presubmit.normpath(files[6][1])) | 916 self.assertEquals(got_files[6].LocalPath(), presubmit.normpath(files[6][1])) |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 984 f('b.c/.git'), | 982 f('b.c/.git'), |
| 985 f('a/.git/bleh.py'), | 983 f('a/.git/bleh.py'), |
| 986 f('.git/bleh.py'), | 984 f('.git/bleh.py'), |
| 987 ], | 985 ], |
| 988 [ | 986 [ |
| 989 # Expected. | 987 # Expected. |
| 990 ], | 988 ], |
| 991 ), | 989 ), |
| 992 ] | 990 ] |
| 993 input_api = presubmit.InputApi( | 991 input_api = presubmit.InputApi( |
| 994 self.fake_change, './PRESUBMIT.py', False, | 992 self.fake_change, './PRESUBMIT.py', False, None, False) |
| 995 False, None, False) | |
| 996 self.mox.ReplayAll() | 993 self.mox.ReplayAll() |
| 997 | 994 |
| 998 self.assertEqual(len(input_api.DEFAULT_WHITE_LIST), 21) | 995 self.assertEqual(len(input_api.DEFAULT_WHITE_LIST), 21) |
| 999 self.assertEqual(len(input_api.DEFAULT_BLACK_LIST), 9) | 996 self.assertEqual(len(input_api.DEFAULT_BLACK_LIST), 9) |
| 1000 for item in files: | 997 for item in files: |
| 1001 results = filter(input_api.FilterSourceFile, item[0]) | 998 results = filter(input_api.FilterSourceFile, item[0]) |
| 1002 for i in range(len(results)): | 999 for i in range(len(results)): |
| 1003 self.assertEquals(results[i].LocalPath(), | 1000 self.assertEquals(results[i].LocalPath(), |
| 1004 presubmit.normpath(item[1][i])) | 1001 presubmit.normpath(item[1][i])) |
| 1005 # Same number of expected results. | 1002 # Same number of expected results. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1016 presubmit.os.path.exists(item).AndReturn(True) | 1013 presubmit.os.path.exists(item).AndReturn(True) |
| 1017 presubmit.os.path.isdir(item).AndReturn(False) | 1014 presubmit.os.path.isdir(item).AndReturn(False) |
| 1018 presubmit.scm.SVN.GetFileProperty(item, 'svn:mime-type').AndReturn(None) | 1015 presubmit.scm.SVN.GetFileProperty(item, 'svn:mime-type').AndReturn(None) |
| 1019 self.mox.ReplayAll() | 1016 self.mox.ReplayAll() |
| 1020 | 1017 |
| 1021 change = presubmit.SvnChange( | 1018 change = presubmit.SvnChange( |
| 1022 'mychange', '', self.fake_root_dir, files, 0, 0, None) | 1019 'mychange', '', self.fake_root_dir, files, 0, 0, None) |
| 1023 input_api = presubmit.InputApi( | 1020 input_api = presubmit.InputApi( |
| 1024 change, | 1021 change, |
| 1025 presubmit.os.path.join(self.fake_root_dir, 'PRESUBMIT.py'), | 1022 presubmit.os.path.join(self.fake_root_dir, 'PRESUBMIT.py'), |
| 1026 False, False, None, False) | 1023 False, None, False) |
| 1027 got_files = input_api.AffectedSourceFiles(FilterSourceFile) | 1024 got_files = input_api.AffectedSourceFiles(FilterSourceFile) |
| 1028 self.assertEquals(len(got_files), 2) | 1025 self.assertEquals(len(got_files), 2) |
| 1029 self.assertEquals(got_files[0].LocalPath(), 'eeaee') | 1026 self.assertEquals(got_files[0].LocalPath(), 'eeaee') |
| 1030 self.assertEquals(got_files[1].LocalPath(), 'eeabee') | 1027 self.assertEquals(got_files[1].LocalPath(), 'eeabee') |
| 1031 | 1028 |
| 1032 def testLambdaFilter(self): | 1029 def testLambdaFilter(self): |
| 1033 white_list = presubmit.InputApi.DEFAULT_BLACK_LIST + (r".*?a.*?",) | 1030 white_list = presubmit.InputApi.DEFAULT_BLACK_LIST + (r".*?a.*?",) |
| 1034 black_list = [r".*?b.*?"] | 1031 black_list = [r".*?b.*?"] |
| 1035 files = [('A', 'eeaee'), ('M', 'eeabee'), ('M', 'eebcee'), ('M', 'eecaee')] | 1032 files = [('A', 'eeaee'), ('M', 'eeabee'), ('M', 'eebcee'), ('M', 'eecaee')] |
| 1036 for _, item in files: | 1033 for _, item in files: |
| 1037 item = presubmit.os.path.join(self.fake_root_dir, item) | 1034 item = presubmit.os.path.join(self.fake_root_dir, item) |
| 1038 presubmit.os.path.exists(item).AndReturn(True) | 1035 presubmit.os.path.exists(item).AndReturn(True) |
| 1039 presubmit.os.path.isdir(item).AndReturn(False) | 1036 presubmit.os.path.isdir(item).AndReturn(False) |
| 1040 presubmit.scm.SVN.GetFileProperty(item, 'svn:mime-type').AndReturn(None) | 1037 presubmit.scm.SVN.GetFileProperty(item, 'svn:mime-type').AndReturn(None) |
| 1041 self.mox.ReplayAll() | 1038 self.mox.ReplayAll() |
| 1042 | 1039 |
| 1043 change = presubmit.SvnChange( | 1040 change = presubmit.SvnChange( |
| 1044 'mychange', '', self.fake_root_dir, files, 0, 0, None) | 1041 'mychange', '', self.fake_root_dir, files, 0, 0, None) |
| 1045 input_api = presubmit.InputApi( | 1042 input_api = presubmit.InputApi( |
| 1046 change, './PRESUBMIT.py', False, False, None, False) | 1043 change, './PRESUBMIT.py', False, None, False) |
| 1047 # Sample usage of overiding the default white and black lists. | 1044 # Sample usage of overiding the default white and black lists. |
| 1048 got_files = input_api.AffectedSourceFiles( | 1045 got_files = input_api.AffectedSourceFiles( |
| 1049 lambda x: input_api.FilterSourceFile(x, white_list, black_list)) | 1046 lambda x: input_api.FilterSourceFile(x, white_list, black_list)) |
| 1050 self.assertEquals(len(got_files), 2) | 1047 self.assertEquals(len(got_files), 2) |
| 1051 self.assertEquals(got_files[0].LocalPath(), 'eeaee') | 1048 self.assertEquals(got_files[0].LocalPath(), 'eeaee') |
| 1052 self.assertEquals(got_files[1].LocalPath(), 'eecaee') | 1049 self.assertEquals(got_files[1].LocalPath(), 'eecaee') |
| 1053 | 1050 |
| 1054 def testGetAbsoluteLocalPath(self): | 1051 def testGetAbsoluteLocalPath(self): |
| 1055 join = presubmit.os.path.join | 1052 join = presubmit.os.path.join |
| 1056 normpath = presubmit.normpath | 1053 normpath = presubmit.normpath |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1077 normpath(join(self.fake_root_dir, 'isdir'))) | 1074 normpath(join(self.fake_root_dir, 'isdir'))) |
| 1078 self.assertEquals(affected_files[1].AbsoluteLocalPath(), | 1075 self.assertEquals(affected_files[1].AbsoluteLocalPath(), |
| 1079 normpath(join(self.fake_root_dir, 'isdir/blat.cc'))) | 1076 normpath(join(self.fake_root_dir, 'isdir/blat.cc'))) |
| 1080 | 1077 |
| 1081 # New helper functions need to work | 1078 # New helper functions need to work |
| 1082 paths_from_change = change.AbsoluteLocalPaths(include_dirs=True) | 1079 paths_from_change = change.AbsoluteLocalPaths(include_dirs=True) |
| 1083 self.assertEqual(len(paths_from_change), 3) | 1080 self.assertEqual(len(paths_from_change), 3) |
| 1084 presubmit_path = join(self.fake_root_dir, 'isdir', 'PRESUBMIT.py') | 1081 presubmit_path = join(self.fake_root_dir, 'isdir', 'PRESUBMIT.py') |
| 1085 api = presubmit.InputApi( | 1082 api = presubmit.InputApi( |
| 1086 change=change, presubmit_path=presubmit_path, | 1083 change=change, presubmit_path=presubmit_path, |
| 1087 is_committing=True, tbr=False, rietveld_obj=None, verbose=False) | 1084 is_committing=True, rietveld_obj=None, verbose=False) |
| 1088 paths_from_api = api.AbsoluteLocalPaths(include_dirs=True) | 1085 paths_from_api = api.AbsoluteLocalPaths(include_dirs=True) |
| 1089 self.assertEqual(len(paths_from_api), 2) | 1086 self.assertEqual(len(paths_from_api), 2) |
| 1090 for absolute_paths in [paths_from_change, paths_from_api]: | 1087 for absolute_paths in [paths_from_change, paths_from_api]: |
| 1091 self.assertEqual(absolute_paths[0], | 1088 self.assertEqual(absolute_paths[0], |
| 1092 normpath(join(self.fake_root_dir, 'isdir'))) | 1089 normpath(join(self.fake_root_dir, 'isdir'))) |
| 1093 self.assertEqual(absolute_paths[1], | 1090 self.assertEqual(absolute_paths[1], |
| 1094 normpath(join(self.fake_root_dir, 'isdir', 'blat.cc'))) | 1091 normpath(join(self.fake_root_dir, 'isdir', 'blat.cc'))) |
| 1095 | 1092 |
| 1096 def testDeprecated(self): | 1093 def testDeprecated(self): |
| 1097 presubmit.warn(mox.IgnoreArg(), category=mox.IgnoreArg(), stacklevel=2) | 1094 presubmit.warn(mox.IgnoreArg(), category=mox.IgnoreArg(), stacklevel=2) |
| 1098 self.mox.ReplayAll() | 1095 self.mox.ReplayAll() |
| 1099 | 1096 |
| 1100 change = presubmit.Change( | 1097 change = presubmit.Change( |
| 1101 'mychange', '', self.fake_root_dir, [], 0, 0, None) | 1098 'mychange', '', self.fake_root_dir, [], 0, 0, None) |
| 1102 api = presubmit.InputApi( | 1099 api = presubmit.InputApi( |
| 1103 change, | 1100 change, |
| 1104 presubmit.os.path.join(self.fake_root_dir, 'foo', 'PRESUBMIT.py'), True, | 1101 presubmit.os.path.join(self.fake_root_dir, 'foo', 'PRESUBMIT.py'), True, |
| 1105 False, None, False) | 1102 None, False) |
| 1106 api.AffectedTextFiles(include_deletes=False) | 1103 api.AffectedTextFiles(include_deletes=False) |
| 1107 | 1104 |
| 1108 def testReadFileStringDenied(self): | 1105 def testReadFileStringDenied(self): |
| 1109 self.mox.ReplayAll() | 1106 self.mox.ReplayAll() |
| 1110 | 1107 |
| 1111 change = presubmit.Change( | 1108 change = presubmit.Change( |
| 1112 'foo', 'foo', self.fake_root_dir, [('M', 'AA')], 0, 0, None) | 1109 'foo', 'foo', self.fake_root_dir, [('M', 'AA')], 0, 0, None) |
| 1113 input_api = presubmit.InputApi( | 1110 input_api = presubmit.InputApi( |
| 1114 change, presubmit.os.path.join(self.fake_root_dir, '/p'), False, | 1111 change, presubmit.os.path.join(self.fake_root_dir, '/p'), False, |
| 1115 False, None, False) | 1112 None, False) |
| 1116 self.assertRaises(IOError, input_api.ReadFile, 'boo', 'x') | 1113 self.assertRaises(IOError, input_api.ReadFile, 'boo', 'x') |
| 1117 | 1114 |
| 1118 def testReadFileStringAccepted(self): | 1115 def testReadFileStringAccepted(self): |
| 1119 path = presubmit.os.path.join(self.fake_root_dir, 'AA/boo') | 1116 path = presubmit.os.path.join(self.fake_root_dir, 'AA/boo') |
| 1120 presubmit.gclient_utils.FileRead(path, 'x').AndReturn(None) | 1117 presubmit.gclient_utils.FileRead(path, 'x').AndReturn(None) |
| 1121 self.mox.ReplayAll() | 1118 self.mox.ReplayAll() |
| 1122 | 1119 |
| 1123 change = presubmit.Change( | 1120 change = presubmit.Change( |
| 1124 'foo', 'foo', self.fake_root_dir, [('M', 'AA')], 0, 0, None) | 1121 'foo', 'foo', self.fake_root_dir, [('M', 'AA')], 0, 0, None) |
| 1125 input_api = presubmit.InputApi( | 1122 input_api = presubmit.InputApi( |
| 1126 change, presubmit.os.path.join(self.fake_root_dir, '/p'), False, | 1123 change, presubmit.os.path.join(self.fake_root_dir, '/p'), False, |
| 1127 False, None, False) | 1124 None, False) |
| 1128 input_api.ReadFile(path, 'x') | 1125 input_api.ReadFile(path, 'x') |
| 1129 | 1126 |
| 1130 def testReadFileAffectedFileDenied(self): | 1127 def testReadFileAffectedFileDenied(self): |
| 1131 fileobj = presubmit.AffectedFile('boo', 'M', 'Unrelated') | 1128 fileobj = presubmit.AffectedFile('boo', 'M', 'Unrelated') |
| 1132 self.mox.ReplayAll() | 1129 self.mox.ReplayAll() |
| 1133 | 1130 |
| 1134 change = presubmit.Change( | 1131 change = presubmit.Change( |
| 1135 'foo', 'foo', self.fake_root_dir, [('M', 'AA')], 0, 0, None) | 1132 'foo', 'foo', self.fake_root_dir, [('M', 'AA')], 0, 0, None) |
| 1136 input_api = presubmit.InputApi( | 1133 input_api = presubmit.InputApi( |
| 1137 change, presubmit.os.path.join(self.fake_root_dir, '/p'), False, | 1134 change, presubmit.os.path.join(self.fake_root_dir, '/p'), False, |
| 1138 False, None, False) | 1135 None, False) |
| 1139 self.assertRaises(IOError, input_api.ReadFile, fileobj, 'x') | 1136 self.assertRaises(IOError, input_api.ReadFile, fileobj, 'x') |
| 1140 | 1137 |
| 1141 def testReadFileAffectedFileAccepted(self): | 1138 def testReadFileAffectedFileAccepted(self): |
| 1142 fileobj = presubmit.AffectedFile('AA/boo', 'M', self.fake_root_dir) | 1139 fileobj = presubmit.AffectedFile('AA/boo', 'M', self.fake_root_dir) |
| 1143 presubmit.gclient_utils.FileRead(fileobj.AbsoluteLocalPath(), 'x' | 1140 presubmit.gclient_utils.FileRead(fileobj.AbsoluteLocalPath(), 'x' |
| 1144 ).AndReturn(None) | 1141 ).AndReturn(None) |
| 1145 self.mox.ReplayAll() | 1142 self.mox.ReplayAll() |
| 1146 | 1143 |
| 1147 change = presubmit.Change( | 1144 change = presubmit.Change( |
| 1148 'foo', 'foo', self.fake_root_dir, [('M', 'AA')], 0, 0, None) | 1145 'foo', 'foo', self.fake_root_dir, [('M', 'AA')], 0, 0, None) |
| 1149 input_api = presubmit.InputApi( | 1146 input_api = presubmit.InputApi( |
| 1150 change, presubmit.os.path.join(self.fake_root_dir, '/p'), False, | 1147 change, presubmit.os.path.join(self.fake_root_dir, '/p'), False, |
| 1151 False, None, False) | 1148 None, False) |
| 1152 input_api.ReadFile(fileobj, 'x') | 1149 input_api.ReadFile(fileobj, 'x') |
| 1153 | 1150 |
| 1154 | 1151 |
| 1155 class OuputApiUnittest(PresubmitTestsBase): | 1152 class OuputApiUnittest(PresubmitTestsBase): |
| 1156 """Tests presubmit.OutputApi.""" | 1153 """Tests presubmit.OutputApi.""" |
| 1157 def testMembersChanged(self): | 1154 def testMembersChanged(self): |
| 1158 self.mox.ReplayAll() | 1155 self.mox.ReplayAll() |
| 1159 members = [ | 1156 members = [ |
| 1160 'MailTextResult', 'PresubmitAddReviewers', 'PresubmitError', | 1157 'MailTextResult', 'PresubmitAddReviewers', 'PresubmitError', |
| 1161 'PresubmitNotifyResult', 'PresubmitPromptWarning', 'PresubmitResult', | 1158 'PresubmitNotifyResult', 'PresubmitPromptWarning', 'PresubmitResult', |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1372 'CheckBuildbotPendingBuilds', | 1369 'CheckBuildbotPendingBuilds', |
| 1373 'CheckChangeHasBugField', 'CheckChangeHasDescription', | 1370 'CheckChangeHasBugField', 'CheckChangeHasDescription', |
| 1374 'CheckChangeHasNoStrayWhitespace', | 1371 'CheckChangeHasNoStrayWhitespace', |
| 1375 'CheckChangeHasOnlyOneEol', 'CheckChangeHasNoCR', | 1372 'CheckChangeHasOnlyOneEol', 'CheckChangeHasNoCR', |
| 1376 'CheckChangeHasNoCrAndHasOnlyOneEol', 'CheckChangeHasNoTabs', | 1373 'CheckChangeHasNoCrAndHasOnlyOneEol', 'CheckChangeHasNoTabs', |
| 1377 'CheckChangeTodoHasOwner', | 1374 'CheckChangeTodoHasOwner', |
| 1378 'CheckChangeHasQaField', 'CheckChangeHasTestedField', | 1375 'CheckChangeHasQaField', 'CheckChangeHasTestedField', |
| 1379 'CheckChangeHasTestField', | 1376 'CheckChangeHasTestField', |
| 1380 'CheckChangeLintsClean', | 1377 'CheckChangeLintsClean', |
| 1381 'CheckChangeSvnEolStyle', | 1378 'CheckChangeSvnEolStyle', |
| 1379 'CheckChangeWasUploaded', |
| 1382 'CheckDoNotSubmit', | 1380 'CheckDoNotSubmit', |
| 1383 'CheckDoNotSubmitInDescription', 'CheckDoNotSubmitInFiles', | 1381 'CheckDoNotSubmitInDescription', 'CheckDoNotSubmitInFiles', |
| 1384 'CheckLongLines', 'CheckTreeIsOpen', 'PanProjectChecks', | 1382 'CheckLongLines', 'CheckTreeIsOpen', 'PanProjectChecks', |
| 1385 'CheckLicense', | 1383 'CheckLicense', |
| 1386 'CheckOwners', | 1384 'CheckOwners', |
| 1387 'CheckRietveldTryJobExecution', | 1385 'CheckRietveldTryJobExecution', |
| 1388 'CheckSvnModifiedDirectories', | 1386 'CheckSvnModifiedDirectories', |
| 1389 'CheckSvnForCommonMimeTypes', 'CheckSvnProperty', | 1387 'CheckSvnForCommonMimeTypes', 'CheckSvnProperty', |
| 1390 'RunPythonUnitTests', 'RunPylint', | 1388 'RunPythonUnitTests', 'RunPylint', |
| 1391 'RunUnitTests', 'RunUnitTestsInDirectory', | 1389 'RunUnitTests', 'RunUnitTestsInDirectory', |
| (...skipping 835 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2227 owners_check=True) | 2225 owners_check=True) |
| 2228 self.assertEqual(1, len(results)) | 2226 self.assertEqual(1, len(results)) |
| 2229 self.assertEqual( | 2227 self.assertEqual( |
| 2230 'Found line ending with white spaces in:', results[0]._message) | 2228 'Found line ending with white spaces in:', results[0]._message) |
| 2231 self.checkstdout('') | 2229 self.checkstdout('') |
| 2232 | 2230 |
| 2233 | 2231 |
| 2234 if __name__ == '__main__': | 2232 if __name__ == '__main__': |
| 2235 import unittest | 2233 import unittest |
| 2236 unittest.main() | 2234 unittest.main() |
| OLD | NEW |