| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2006-2009 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 import exceptions | 8 import exceptions |
| 9 import random | 9 import random |
| 10 import string | 10 import string |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 elif not input_api.change.REALLYABSOLUTELYNOSUCHKEY: | 53 elif not input_api.change.REALLYABSOLUTELYNOSUCHKEY: |
| 54 return [output_api.PresubmitPromptWarning("??"), | 54 return [output_api.PresubmitPromptWarning("??"), |
| 55 output_api.PresubmitError("XX!!XX")] | 55 output_api.PresubmitError("XX!!XX")] |
| 56 else: | 56 else: |
| 57 return () | 57 return () |
| 58 """ | 58 """ |
| 59 | 59 |
| 60 def setUp(self): | 60 def setUp(self): |
| 61 mox.MoxTestBase.setUp(self) | 61 mox.MoxTestBase.setUp(self) |
| 62 self.mox.StubOutWithMock(presubmit, 'warnings') | 62 self.mox.StubOutWithMock(presubmit, 'warnings') |
| 63 # Stub out 'os' but keep os.path.dirname/join/normpath and os.sep. | 63 # Stub out 'os' but keep os.path.dirname/join/normpath/splitext and os.sep. |
| 64 os_sep = presubmit.os.sep | 64 os_sep = presubmit.os.sep |
| 65 os_path_join = presubmit.os.path.join | 65 os_path_join = presubmit.os.path.join |
| 66 os_path_dirname = presubmit.os.path.dirname | 66 os_path_dirname = presubmit.os.path.dirname |
| 67 os_path_normpath = presubmit.os.path.normpath | 67 os_path_normpath = presubmit.os.path.normpath |
| 68 os_path_splitext = presubmit.os.path.splitext |
| 68 self.mox.StubOutWithMock(presubmit, 'os') | 69 self.mox.StubOutWithMock(presubmit, 'os') |
| 69 self.mox.StubOutWithMock(presubmit.os, 'path') | 70 self.mox.StubOutWithMock(presubmit.os, 'path') |
| 70 presubmit.os.sep = os_sep | 71 presubmit.os.sep = os_sep |
| 71 presubmit.os.path.join = os_path_join | 72 presubmit.os.path.join = os_path_join |
| 72 presubmit.os.path.dirname = os_path_dirname | 73 presubmit.os.path.dirname = os_path_dirname |
| 73 presubmit.os.path.normpath = os_path_normpath | 74 presubmit.os.path.normpath = os_path_normpath |
| 75 presubmit.os.path.splitext = os_path_splitext |
| 74 self.mox.StubOutWithMock(presubmit, 'sys') | 76 self.mox.StubOutWithMock(presubmit, 'sys') |
| 75 # Special mocks. | 77 # Special mocks. |
| 76 def MockAbsPath(f): | 78 def MockAbsPath(f): |
| 77 return f | 79 return f |
| 78 presubmit.os.path.abspath = MockAbsPath | 80 presubmit.os.path.abspath = MockAbsPath |
| 79 self.mox.StubOutWithMock(presubmit.gcl, 'GetRepositoryRoot') | 81 self.mox.StubOutWithMock(presubmit.gcl, 'GetRepositoryRoot') |
| 80 fake_root_dir = RootDir() | 82 fake_root_dir = RootDir() |
| 81 self.fake_root_dir = fake_root_dir | 83 self.fake_root_dir = fake_root_dir |
| 82 def MockGetRepositoryRoot(): | 84 def MockGetRepositoryRoot(): |
| 83 return fake_root_dir | 85 return fake_root_dir |
| (...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 516 'Running default presubmit script.\n\n' | 518 'Running default presubmit script.\n\n' |
| 517 '** Presubmit Messages **\n\n' | 519 '** Presubmit Messages **\n\n' |
| 518 'http://tracker.com/42\n\n')) | 520 'http://tracker.com/42\n\n')) |
| 519 | 521 |
| 520 | 522 |
| 521 class InputApiUnittest(PresubmitTestsBase): | 523 class InputApiUnittest(PresubmitTestsBase): |
| 522 """Tests presubmit.InputApi.""" | 524 """Tests presubmit.InputApi.""" |
| 523 def testMembersChanged(self): | 525 def testMembersChanged(self): |
| 524 self.mox.ReplayAll() | 526 self.mox.ReplayAll() |
| 525 members = [ | 527 members = [ |
| 526 'AbsoluteLocalPaths', 'AffectedFiles', 'AffectedTextFiles', | 528 'AbsoluteLocalPaths', 'AffectedFiles', 'AffectedSourceFiles', |
| 527 'DepotToLocalPath', 'LocalPaths', 'LocalToDepotPath', | 529 'AffectedTextFiles', |
| 528 'PresubmitLocalPath', 'RightHandSideLines', 'ReadFile', 'ServerPaths', | 530 'DEFAULT_BLACK_LIST', 'DEFAULT_WHITE_LIST', |
| 531 'DepotToLocalPath', 'FilterSourceFile', 'LocalPaths', |
| 532 'LocalToDepotPath', |
| 533 'PresubmitLocalPath', 'ReadFile', 'RightHandSideLines', 'ServerPaths', |
| 529 'basename', 'cPickle', 'cStringIO', 'canned_checks', 'change', | 534 'basename', 'cPickle', 'cStringIO', 'canned_checks', 'change', |
| 530 'is_committing', 'marshal', 'os_path', 'pickle', 'platform', | 535 'is_committing', 'marshal', 'os_path', 'pickle', 'platform', |
| 531 're', 'subprocess', 'tempfile', 'traceback', 'unittest', 'urllib2', | 536 're', 'subprocess', 'tempfile', 'traceback', 'unittest', 'urllib2', |
| 532 'version', | 537 'version', |
| 533 ] | 538 ] |
| 534 # If this test fails, you should add the relevant test. | 539 # If this test fails, you should add the relevant test. |
| 535 self.compareMembers(presubmit.InputApi(None, './.', False), members) | 540 self.compareMembers(presubmit.InputApi(None, './.', False), members) |
| 536 | 541 |
| 537 def testDepotToLocalPath(self): | 542 def testDepotToLocalPath(self): |
| 538 presubmit.gclient.CaptureSVNInfo('svn://foo/smurf').AndReturn( | 543 presubmit.gclient.CaptureSVNInfo('svn://foo/smurf').AndReturn( |
| (...skipping 27 matching lines...) Expand all Loading... |
| 566 self.assertEquals(api.PresubmitLocalPath(), 'foo/path') | 571 self.assertEquals(api.PresubmitLocalPath(), 'foo/path') |
| 567 self.assertEquals(api.change, 42) | 572 self.assertEquals(api.change, 42) |
| 568 | 573 |
| 569 def testInputApiPresubmitScriptFiltering(self): | 574 def testInputApiPresubmitScriptFiltering(self): |
| 570 join = presubmit.os.path.join | 575 join = presubmit.os.path.join |
| 571 description_lines = ('Hello there', | 576 description_lines = ('Hello there', |
| 572 'this is a change', | 577 'this is a change', |
| 573 'BUG=123', | 578 'BUG=123', |
| 574 ' STORY =http://foo/ \t', | 579 ' STORY =http://foo/ \t', |
| 575 'and some more regular text') | 580 'and some more regular text') |
| 581 blat = join('foo', 'blat.cc') |
| 582 readme = join('foo', 'blat', 'READ_ME2') |
| 583 binary = join('foo', 'blat', 'binary.dll') |
| 584 weird = join('foo', 'blat', 'weird.xyz') |
| 585 third_party = join('foo', 'third_party', 'third.cc') |
| 586 another = join('foo', 'blat', 'another.h') |
| 587 beingdeleted = join('foo', 'mat', 'beingdeleted.txt') |
| 588 notfound = join('flop', 'notfound.txt') |
| 589 flap = join('boo', 'flap.h') |
| 576 files = [ | 590 files = [ |
| 577 ['A', join('foo', 'blat.cc')], | 591 ['A', blat], |
| 578 ['M', join('foo', 'blat', 'binary.dll')], | 592 ['M', readme], |
| 593 ['M', binary], |
| 594 ['M', weird], |
| 595 ['M', another], |
| 596 ['M', third_party], |
| 579 ['D', 'foo/mat/beingdeleted.txt'], | 597 ['D', 'foo/mat/beingdeleted.txt'], |
| 580 ['M', 'flop/notfound.txt'], | 598 ['M', 'flop/notfound.txt'], |
| 581 ['A', 'boo/flap.h'], | 599 ['A', 'boo/flap.h'], |
| 582 ] | 600 ] |
| 583 | 601 |
| 584 | 602 for i in (blat, readme, binary, weird, another, third_party): |
| 585 blat = join('foo', 'blat.cc') | 603 presubmit.os.path.exists(i).AndReturn(True) |
| 586 binary = join('foo', 'blat', 'binary.dll') | 604 presubmit.os.path.isdir(i).AndReturn(False) |
| 587 beingdeleted = join('foo', 'mat', 'beingdeleted.txt') | |
| 588 notfound = join('flop', 'notfound.txt') | |
| 589 flap = join('boo', 'flap.h') | |
| 590 presubmit.os.path.exists(blat).AndReturn(True) | |
| 591 presubmit.os.path.isdir(blat).AndReturn(False) | |
| 592 presubmit.os.path.exists(binary).AndReturn(True) | |
| 593 presubmit.os.path.isdir(binary).AndReturn(False) | |
| 594 presubmit.os.path.exists(beingdeleted).AndReturn(False) | 605 presubmit.os.path.exists(beingdeleted).AndReturn(False) |
| 595 presubmit.os.path.exists(notfound).AndReturn(False) | 606 presubmit.os.path.exists(notfound).AndReturn(False) |
| 596 presubmit.os.path.exists(flap).AndReturn(True) | 607 presubmit.os.path.exists(flap).AndReturn(True) |
| 597 presubmit.os.path.isdir(flap).AndReturn(False) | 608 presubmit.os.path.isdir(flap).AndReturn(False) |
| 598 presubmit.gclient.CaptureSVNInfo(beingdeleted).AndReturn({}) | 609 presubmit.gclient.CaptureSVNInfo(beingdeleted).AndReturn({}) |
| 599 presubmit.gclient.CaptureSVNInfo(notfound).AndReturn({}) | 610 presubmit.gclient.CaptureSVNInfo(notfound).AndReturn({}) |
| 600 presubmit.gcl.GetSVNFileProperty(blat, 'svn:mime-type').AndReturn(None) | 611 presubmit.gcl.GetSVNFileProperty(blat, 'svn:mime-type').AndReturn(None) |
| 612 presubmit.gcl.GetSVNFileProperty(readme, 'svn:mime-type').AndReturn(None) |
| 601 presubmit.gcl.GetSVNFileProperty(binary, 'svn:mime-type').AndReturn( | 613 presubmit.gcl.GetSVNFileProperty(binary, 'svn:mime-type').AndReturn( |
| 602 'application/octet-stream') | 614 'application/octet-stream') |
| 615 presubmit.gcl.GetSVNFileProperty(weird, 'svn:mime-type').AndReturn(None) |
| 616 presubmit.gcl.GetSVNFileProperty(another, 'svn:mime-type').AndReturn(None) |
| 617 presubmit.gcl.GetSVNFileProperty(third_party, 'svn:mime-type' |
| 618 ).AndReturn(None) |
| 603 presubmit.gcl.ReadFile(blat).AndReturn('whatever\ncookie') | 619 presubmit.gcl.ReadFile(blat).AndReturn('whatever\ncookie') |
| 620 presubmit.gcl.ReadFile(another).AndReturn('whatever\ncookie2') |
| 604 self.mox.ReplayAll() | 621 self.mox.ReplayAll() |
| 605 | 622 |
| 606 ci = presubmit.gcl.ChangeInfo(name='mychange', issue=0, patchset=0, | 623 ci = presubmit.gcl.ChangeInfo(name='mychange', issue=0, patchset=0, |
| 607 description='\n'.join(description_lines), | 624 description='\n'.join(description_lines), |
| 608 files=files) | 625 files=files) |
| 609 change = presubmit.GclChange(ci) | 626 change = presubmit.GclChange(ci) |
| 610 api = presubmit.InputApi(change, 'foo/PRESUBMIT.py', False) | 627 input_api = presubmit.InputApi(change, 'foo/PRESUBMIT.py', False) |
| 611 affected_files = api.AffectedFiles() | 628 # Doesn't filter much |
| 612 self.assertEquals(len(affected_files), 3) | 629 got_files = input_api.AffectedFiles() |
| 613 self.assertEquals(affected_files[0].LocalPath(), | 630 self.assertEquals(len(got_files), 7) |
| 614 presubmit.normpath('foo/blat.cc')) | 631 self.assertEquals(got_files[0].LocalPath(), presubmit.normpath(blat)) |
| 615 self.assertEquals(affected_files[1].LocalPath(), | 632 self.assertEquals(got_files[1].LocalPath(), presubmit.normpath(readme)) |
| 616 presubmit.normpath('foo/blat/binary.dll')) | 633 self.assertEquals(got_files[2].LocalPath(), presubmit.normpath(binary)) |
| 617 self.assertEquals(affected_files[2].LocalPath(), | 634 self.assertEquals(got_files[3].LocalPath(), presubmit.normpath(weird)) |
| 618 presubmit.normpath('foo/mat/beingdeleted.txt')) | 635 self.assertEquals(got_files[4].LocalPath(), presubmit.normpath(another)) |
| 619 rhs_lines = [] | 636 self.assertEquals(got_files[5].LocalPath(), presubmit.normpath(third_party)) |
| 620 for line in api.RightHandSideLines(): | 637 self.assertEquals(got_files[6].LocalPath(), |
| 621 rhs_lines.append(line) | 638 presubmit.normpath(beingdeleted)) |
| 622 self.assertEquals(len(rhs_lines), 2) | 639 # Ignores weird because of whitelist, third_party because of blacklist, |
| 623 self.assertEqual(rhs_lines[0][0].LocalPath(), | 640 # binary isn't a text file and beingdeleted doesn't exist. The rest is |
| 624 presubmit.normpath('foo/blat.cc')) | 641 # outside foo/. |
| 642 rhs_lines = [x for x in input_api.RightHandSideLines(None)] |
| 643 self.assertEquals(len(rhs_lines), 4) |
| 644 self.assertEqual(rhs_lines[0][0].LocalPath(), presubmit.normpath(blat)) |
| 645 self.assertEqual(rhs_lines[1][0].LocalPath(), presubmit.normpath(blat)) |
| 646 self.assertEqual(rhs_lines[2][0].LocalPath(), presubmit.normpath(another)) |
| 647 self.assertEqual(rhs_lines[3][0].LocalPath(), presubmit.normpath(another)) |
| 648 |
| 649 def testCustomFilter(self): |
| 650 def FilterSourceFile(affected_file): |
| 651 return 'a' in affected_file.LocalPath() |
| 652 files = [('A', 'eeaee'), ('M', 'eeabee'), ('M', 'eebcee')] |
| 653 for (action, item) in files: |
| 654 presubmit.os.path.exists(item).AndReturn(True) |
| 655 presubmit.os.path.isdir(item).AndReturn(False) |
| 656 presubmit.gcl.GetSVNFileProperty(item, 'svn:mime-type').AndReturn(None) |
| 657 self.mox.ReplayAll() |
| 658 |
| 659 ci = presubmit.gcl.ChangeInfo('mychange', 0, 0, '', files) |
| 660 change = presubmit.GclChange(ci) |
| 661 input_api = presubmit.InputApi(change, './PRESUBMIT.py', False) |
| 662 got_files = input_api.AffectedSourceFiles(FilterSourceFile) |
| 663 self.assertEquals(len(got_files), 2) |
| 664 self.assertEquals(got_files[0].LocalPath(), 'eeaee') |
| 665 self.assertEquals(got_files[1].LocalPath(), 'eeabee') |
| 666 |
| 667 def testLambdaFilter(self): |
| 668 white_list = [r".*?a.*?"] |
| 669 black_list = [r".*?b.*?"] |
| 670 files = [('A', 'eeaee'), ('M', 'eeabee'), ('M', 'eebcee'), ('M', 'eecaee')] |
| 671 for (action, item) in files: |
| 672 presubmit.os.path.exists(item).AndReturn(True) |
| 673 presubmit.os.path.isdir(item).AndReturn(False) |
| 674 presubmit.gcl.GetSVNFileProperty(item, 'svn:mime-type').AndReturn(None) |
| 675 self.mox.ReplayAll() |
| 676 |
| 677 ci = presubmit.gcl.ChangeInfo('mychange', 0, 0, '', files) |
| 678 change = presubmit.GclChange(ci) |
| 679 input_api = presubmit.InputApi(change, './PRESUBMIT.py', False) |
| 680 # Sample usage of overiding the default white and black lists. |
| 681 got_files = input_api.AffectedSourceFiles( |
| 682 lambda x: input_api.FilterSourceFile(x, white_list, black_list)) |
| 683 self.assertEquals(len(got_files), 2) |
| 684 self.assertEquals(got_files[0].LocalPath(), 'eeaee') |
| 685 self.assertEquals(got_files[1].LocalPath(), 'eecaee') |
| 625 | 686 |
| 626 def testGetAbsoluteLocalPath(self): | 687 def testGetAbsoluteLocalPath(self): |
| 627 join = presubmit.os.path.join | 688 join = presubmit.os.path.join |
| 628 normpath = presubmit.normpath | 689 normpath = presubmit.normpath |
| 629 # Regression test for bug of presubmit stuff that relies on invoking | 690 # Regression test for bug of presubmit stuff that relies on invoking |
| 630 # SVN (e.g. to get mime type of file) not working unless gcl invoked | 691 # SVN (e.g. to get mime type of file) not working unless gcl invoked |
| 631 # from the client root (e.g. if you were at 'src' and did 'cd base' before | 692 # from the client root (e.g. if you were at 'src' and did 'cd base' before |
| 632 # invoking 'gcl upload' it would fail because svn wouldn't find the files | 693 # invoking 'gcl upload' it would fail because svn wouldn't find the files |
| 633 # the presubmit script was asking about). | 694 # the presubmit script was asking about). |
| 634 files = [ | 695 files = [ |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 898 def TestContent(self, check, content1, content2, error_type): | 959 def TestContent(self, check, content1, content2, error_type): |
| 899 input_api1 = self.MockInputApi() | 960 input_api1 = self.MockInputApi() |
| 900 input_api1.change = self.MakeBasicChange('foo', 'Foo\n') | 961 input_api1.change = self.MakeBasicChange('foo', 'Foo\n') |
| 901 affected_file = self.mox.CreateMock(presubmit.SvnAffectedFile) | 962 affected_file = self.mox.CreateMock(presubmit.SvnAffectedFile) |
| 902 affected_file.LocalPath().AndReturn('foo.cc') | 963 affected_file.LocalPath().AndReturn('foo.cc') |
| 903 output1 = [ | 964 output1 = [ |
| 904 (affected_file, 42, 'yo, ' + content1), | 965 (affected_file, 42, 'yo, ' + content1), |
| 905 (affected_file, 43, 'yer'), | 966 (affected_file, 43, 'yer'), |
| 906 (affected_file, 23, 'ya'), | 967 (affected_file, 23, 'ya'), |
| 907 ] | 968 ] |
| 908 input_api1.RightHandSideLines().AndReturn(output1) | 969 input_api1.RightHandSideLines(mox.IgnoreArg()).AndReturn(output1) |
| 909 input_api2 = self.MockInputApi() | 970 input_api2 = self.MockInputApi() |
| 910 input_api2.change = self.MakeBasicChange('foo', 'Foo\n') | 971 input_api2.change = self.MakeBasicChange('foo', 'Foo\n') |
| 911 output2 = [ | 972 output2 = [ |
| 912 (affected_file, 42, 'yo, ' + content2), | 973 (affected_file, 42, 'yo, ' + content2), |
| 913 (affected_file, 43, 'yer'), | 974 (affected_file, 43, 'yer'), |
| 914 (affected_file, 23, 'ya'), | 975 (affected_file, 23, 'ya'), |
| 915 ] | 976 ] |
| 916 input_api2.RightHandSideLines().AndReturn(output2) | 977 input_api2.RightHandSideLines(mox.IgnoreArg()).AndReturn(output2) |
| 917 self.mox.ReplayAll() | 978 self.mox.ReplayAll() |
| 918 | 979 |
| 919 results1 = check(input_api1, presubmit.OutputApi) | 980 results1 = check(input_api1, presubmit.OutputApi, None) |
| 920 self.assertEquals(results1, []) | 981 self.assertEquals(results1, []) |
| 921 results2 = check(input_api2, presubmit.OutputApi) | 982 results2 = check(input_api2, presubmit.OutputApi, None) |
| 922 self.assertEquals(len(results2), 1) | 983 self.assertEquals(len(results2), 1) |
| 923 self.assertEquals(results2[0].__class__, error_type) | 984 self.assertEquals(results2[0].__class__, error_type) |
| 924 | 985 |
| 925 def testCannedCheckChangeHasBugField(self): | 986 def testCannedCheckChangeHasBugField(self): |
| 926 self.TestDescription(presubmit_canned_checks.CheckChangeHasBugField, | 987 self.TestDescription(presubmit_canned_checks.CheckChangeHasBugField, |
| 927 'BUG=1234', '', | 988 'BUG=1234', '', |
| 928 presubmit.OutputApi.PresubmitNotifyResult) | 989 presubmit.OutputApi.PresubmitNotifyResult) |
| 929 | 990 |
| 930 def testCannedCheckChangeHasTestField(self): | 991 def testCannedCheckChangeHasTestField(self): |
| 931 self.TestDescription(presubmit_canned_checks.CheckChangeHasTestField, | 992 self.TestDescription(presubmit_canned_checks.CheckChangeHasTestField, |
| 932 'TEST=did some stuff', '', | 993 'TEST=did some stuff', '', |
| 933 presubmit.OutputApi.PresubmitNotifyResult) | 994 presubmit.OutputApi.PresubmitNotifyResult) |
| 934 | 995 |
| 935 def testCannedCheckChangeHasTestedField(self): | 996 def testCannedCheckChangeHasTestedField(self): |
| 936 self.TestDescription(presubmit_canned_checks.CheckChangeHasTestedField, | 997 self.TestDescription(presubmit_canned_checks.CheckChangeHasTestedField, |
| 937 'TESTED=did some stuff', '', | 998 'TESTED=did some stuff', '', |
| 938 presubmit.OutputApi.PresubmitError) | 999 presubmit.OutputApi.PresubmitError) |
| 939 | 1000 |
| 940 def testCannedCheckChangeHasQAField(self): | 1001 def testCannedCheckChangeHasQAField(self): |
| 941 self.TestDescription(presubmit_canned_checks.CheckChangeHasQaField, | 1002 self.TestDescription(presubmit_canned_checks.CheckChangeHasQaField, |
| 942 'QA=BSOD your machine', '', | 1003 'QA=BSOD your machine', '', |
| 943 presubmit.OutputApi.PresubmitError) | 1004 presubmit.OutputApi.PresubmitError) |
| 944 | 1005 |
| 945 def testCannedCheckDoNotSubmitInDescription(self): | 1006 def testCannedCheckDoNotSubmitInDescription(self): |
| 946 self.TestDescription(presubmit_canned_checks.CheckDoNotSubmitInDescription, | 1007 self.TestDescription(presubmit_canned_checks.CheckDoNotSubmitInDescription, |
| 947 'DO NOTSUBMIT', 'DO NOT ' + 'SUBMIT', | 1008 'DO NOTSUBMIT', 'DO NOT ' + 'SUBMIT', |
| 948 presubmit.OutputApi.PresubmitError) | 1009 presubmit.OutputApi.PresubmitError) |
| 949 | 1010 |
| 950 def testCannedCheckDoNotSubmitInFiles(self): | 1011 def testCannedCheckDoNotSubmitInFiles(self): |
| 951 self.TestContent(presubmit_canned_checks.CheckDoNotSubmitInFiles, | 1012 self.TestContent( |
| 952 'DO NOTSUBMIT', 'DO NOT ' + 'SUBMIT', | 1013 lambda x,y,z: presubmit_canned_checks.CheckDoNotSubmitInFiles(x, y), |
| 953 presubmit.OutputApi.PresubmitError) | 1014 'DO NOTSUBMIT', 'DO NOT ' + 'SUBMIT', |
| 1015 presubmit.OutputApi.PresubmitError) |
| 954 | 1016 |
| 955 def testCheckChangeHasNoCR(self): | 1017 def testCheckChangeHasNoCR(self): |
| 956 input_api1 = self.MockInputApi() | 1018 input_api1 = self.MockInputApi() |
| 957 self.mox.StubOutWithMock(input_api1, 'ReadFile') | 1019 self.mox.StubOutWithMock(input_api1, 'ReadFile') |
| 958 input_api1.change = self.MakeBasicChange('foo', 'Foo\n') | 1020 input_api1.change = self.MakeBasicChange('foo', 'Foo\n') |
| 959 affected_file1 = self.mox.CreateMock(presubmit.SvnAffectedFile) | 1021 affected_file1 = self.mox.CreateMock(presubmit.SvnAffectedFile) |
| 960 input_api1.AffectedTextFiles().AndReturn([affected_file1]) | 1022 input_api1.AffectedSourceFiles(None).AndReturn([affected_file1]) |
| 961 input_api1.ReadFile(affected_file1, 'rb').AndReturn("Hey!\nHo!\n") | 1023 input_api1.ReadFile(affected_file1, 'rb').AndReturn("Hey!\nHo!\n") |
| 962 input_api2 = self.MockInputApi() | 1024 input_api2 = self.MockInputApi() |
| 963 self.mox.StubOutWithMock(input_api2, 'ReadFile') | 1025 self.mox.StubOutWithMock(input_api2, 'ReadFile') |
| 964 input_api2.change = self.MakeBasicChange('foo', 'Foo\n') | 1026 input_api2.change = self.MakeBasicChange('foo', 'Foo\n') |
| 965 affected_file2 = self.mox.CreateMock(presubmit.SvnAffectedFile) | 1027 affected_file2 = self.mox.CreateMock(presubmit.SvnAffectedFile) |
| 966 input_api2.AffectedTextFiles().AndReturn([affected_file2]) | 1028 input_api2.AffectedSourceFiles(None).AndReturn([affected_file2]) |
| 967 input_api2.ReadFile(affected_file2, 'rb').AndReturn("Hey!\r\nHo!\r\n") | 1029 input_api2.ReadFile(affected_file2, 'rb').AndReturn("Hey!\r\nHo!\r\n") |
| 968 affected_file2.LocalPath().AndReturn('bar.cc') | 1030 affected_file2.LocalPath().AndReturn('bar.cc') |
| 969 self.mox.ReplayAll() | 1031 self.mox.ReplayAll() |
| 970 | 1032 |
| 971 results = presubmit_canned_checks.CheckChangeHasNoCR( | 1033 results = presubmit_canned_checks.CheckChangeHasNoCR( |
| 972 input_api1, presubmit.OutputApi) | 1034 input_api1, presubmit.OutputApi, None) |
| 973 self.assertEquals(results, []) | 1035 self.assertEquals(results, []) |
| 974 results2 = presubmit_canned_checks.CheckChangeHasNoCR( | 1036 results2 = presubmit_canned_checks.CheckChangeHasNoCR( |
| 975 input_api2, presubmit.OutputApi) | 1037 input_api2, presubmit.OutputApi, None) |
| 976 self.assertEquals(len(results2), 1) | 1038 self.assertEquals(len(results2), 1) |
| 977 self.assertEquals(results2[0].__class__, | 1039 self.assertEquals(results2[0].__class__, |
| 978 presubmit.OutputApi.PresubmitPromptWarning) | 1040 presubmit.OutputApi.PresubmitPromptWarning) |
| 979 | 1041 |
| 980 def testCannedCheckChangeHasNoTabs(self): | 1042 def testCannedCheckChangeHasNoTabs(self): |
| 981 self.TestContent(presubmit_canned_checks.CheckChangeHasNoTabs, | 1043 self.TestContent(presubmit_canned_checks.CheckChangeHasNoTabs, |
| 982 'blah blah', 'blah\tblah', | 1044 'blah blah', 'blah\tblah', |
| 983 presubmit.OutputApi.PresubmitPromptWarning) | 1045 presubmit.OutputApi.PresubmitPromptWarning) |
| 984 | 1046 |
| 985 def testCannedCheckLongLines(self): | 1047 def testCannedCheckLongLines(self): |
| 986 check = lambda x,y: presubmit_canned_checks.CheckLongLines(x, y, 10) | 1048 check = lambda x,y,z: presubmit_canned_checks.CheckLongLines(x, y, 10, z) |
| 987 self.TestContent(check, '', 'blah blah blah', | 1049 self.TestContent(check, '', 'blah blah blah', |
| 988 presubmit.OutputApi.PresubmitPromptWarning) | 1050 presubmit.OutputApi.PresubmitPromptWarning) |
| 989 | 1051 |
| 990 def testCannedCheckTreeIsOpenOpen(self): | 1052 def testCannedCheckTreeIsOpenOpen(self): |
| 991 input_api = self.MockInputApi() | 1053 input_api = self.MockInputApi() |
| 992 input_api.is_committing = True | 1054 input_api.is_committing = True |
| 993 connection = self.mox.CreateMockAnything() | 1055 connection = self.mox.CreateMockAnything() |
| 994 input_api.urllib2.urlopen('url_to_open').AndReturn(connection) | 1056 input_api.urllib2.urlopen('url_to_open').AndReturn(connection) |
| 995 connection.read().AndReturn('1') | 1057 connection.read().AndReturn('1') |
| 996 connection.close() | 1058 connection.close() |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1135 test_result.errors = 0 | 1197 test_result.errors = 0 |
| 1136 self.mox.ReplayAll() | 1198 self.mox.ReplayAll() |
| 1137 | 1199 |
| 1138 results = presubmit_canned_checks.RunPythonUnitTests( | 1200 results = presubmit_canned_checks.RunPythonUnitTests( |
| 1139 input_api, presubmit.OutputApi, ['test_module']) | 1201 input_api, presubmit.OutputApi, ['test_module']) |
| 1140 self.assertEquals(len(results), 0) | 1202 self.assertEquals(len(results), 0) |
| 1141 | 1203 |
| 1142 | 1204 |
| 1143 if __name__ == '__main__': | 1205 if __name__ == '__main__': |
| 1144 unittest.main() | 1206 unittest.main() |
| OLD | NEW |