Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Side by Side Diff: tests/presubmit_unittest.py

Issue 14247012: Add support for parallel presubmit unit testing. (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: fix nits Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « presubmit_support.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 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: disable=E1101,E1103 8 # pylint: disable=E1101,E1103
9 9
10 import logging 10 import logging
11 import os 11 import os
12 import StringIO 12 import StringIO
13 import subprocess
14 import sys 13 import sys
15 import time 14 import time
15 import unittest
16 16
17 _ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 17 _ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
18 sys.path.insert(0, _ROOT) 18 sys.path.insert(0, _ROOT)
19 19
20 from testing_support.super_mox import mox, SuperMoxTestBase 20 from testing_support.super_mox import mox, SuperMoxTestBase
21 21
22 import owners 22 import owners
23 import subprocess2 as subprocess
23 import presubmit_support as presubmit 24 import presubmit_support as presubmit
24 import rietveld 25 import rietveld
25 26
26 # Shortcut. 27 # Shortcut.
27 presubmit_canned_checks = presubmit.presubmit_canned_checks 28 presubmit_canned_checks = presubmit.presubmit_canned_checks
28 29
29 30
30 # Access to a protected member XXX of a client class 31 # Access to a protected member XXX of a client class
31 # pylint: disable=W0212 32 # pylint: disable=W0212
32 33
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 151
151 class PresubmitUnittest(PresubmitTestsBase): 152 class PresubmitUnittest(PresubmitTestsBase):
152 """General presubmit_support.py tests (excluding InputApi and OutputApi).""" 153 """General presubmit_support.py tests (excluding InputApi and OutputApi)."""
153 154
154 _INHERIT_SETTINGS = 'inherit-review-settings-ok' 155 _INHERIT_SETTINGS = 'inherit-review-settings-ok'
155 156
156 def testMembersChanged(self): 157 def testMembersChanged(self):
157 self.mox.ReplayAll() 158 self.mox.ReplayAll()
158 members = [ 159 members = [
159 'AffectedFile', 'Change', 'DoGetTrySlaves', 'DoPresubmitChecks', 160 'AffectedFile', 'Change', 'DoGetTrySlaves', 'DoPresubmitChecks',
160 'GetTrySlavesExecuter', 'GitAffectedFile', 161 'GetTrySlavesExecuter', 'GitAffectedFile', 'CallCommand', 'CommandData',
161 'GitChange', 'InputApi', 'ListRelevantPresubmitFiles', 'Main', 162 'GitChange', 'InputApi', 'ListRelevantPresubmitFiles', 'Main',
162 'NonexistantCannedCheckFilter', 'OutputApi', 'ParseFiles', 163 'NonexistantCannedCheckFilter', 'OutputApi', 'ParseFiles',
163 'PresubmitFailure', 'PresubmitExecuter', 'PresubmitOutput', 'ScanSubDirs', 164 'PresubmitFailure', 'PresubmitExecuter', 'PresubmitOutput', 'ScanSubDirs',
164 'SvnAffectedFile', 'SvnChange', 'cPickle', 'cpplint', 'cStringIO', 165 'SvnAffectedFile', 'SvnChange', 'cPickle', 'cpplint', 'cStringIO',
165 'contextlib', 'canned_check_filter', 'fix_encoding', 'fnmatch', 166 'contextlib', 'canned_check_filter', 'fix_encoding', 'fnmatch',
166 'gclient_utils', 'glob', 'inspect', 'json', 'load_files', 'logging', 167 'gclient_utils', 'glob', 'inspect', 'json', 'load_files', 'logging',
167 'marshal', 'normpath', 'optparse', 'os', 'owners', 'pickle', 168 'marshal', 'normpath', 'optparse', 'os', 'owners', 'pickle',
168 'presubmit_canned_checks', 'random', 're', 'rietveld', 'scm', 169 'presubmit_canned_checks', 'random', 're', 'rietveld', 'scm',
169 'subprocess', 'sys', 'tempfile', 'time', 'traceback', 'types', 'unittest', 170 'subprocess', 'sys', 'tempfile', 'time', 'traceback', 'types', 'unittest',
170 'urllib2', 'warn', 171 'urllib2', 'warn', 'collections', 'multiprocessing',
171 ] 172 ]
172 # If this test fails, you should add the relevant test. 173 # If this test fails, you should add the relevant test.
173 self.compareMembers(presubmit, members) 174 self.compareMembers(presubmit, members)
174 175
175 def testCannedCheckFilter(self): 176 def testCannedCheckFilter(self):
176 canned = presubmit.presubmit_canned_checks 177 canned = presubmit.presubmit_canned_checks
177 orig = canned.CheckOwners 178 orig = canned.CheckOwners
178 with presubmit.canned_check_filter(['CheckOwners']): 179 with presubmit.canned_check_filter(['CheckOwners']):
179 self.assertNotEqual(canned.CheckOwners, orig) 180 self.assertNotEqual(canned.CheckOwners, orig)
180 self.assertEqual(canned.CheckOwners(None, None), []) 181 self.assertEqual(canned.CheckOwners(None, None), [])
(...skipping 693 matching lines...) Expand 10 before | Expand all | Expand 10 after
874 875
875 class InputApiUnittest(PresubmitTestsBase): 876 class InputApiUnittest(PresubmitTestsBase):
876 """Tests presubmit.InputApi.""" 877 """Tests presubmit.InputApi."""
877 def testMembersChanged(self): 878 def testMembersChanged(self):
878 self.mox.ReplayAll() 879 self.mox.ReplayAll()
879 members = [ 880 members = [
880 'AbsoluteLocalPaths', 'AffectedFiles', 'AffectedSourceFiles', 881 'AbsoluteLocalPaths', 'AffectedFiles', 'AffectedSourceFiles',
881 'AffectedTextFiles', 882 'AffectedTextFiles',
882 'DEFAULT_BLACK_LIST', 'DEFAULT_WHITE_LIST', 883 'DEFAULT_BLACK_LIST', 'DEFAULT_WHITE_LIST',
883 'DepotToLocalPath', 'FilterSourceFile', 'LocalPaths', 884 'DepotToLocalPath', 'FilterSourceFile', 'LocalPaths',
884 'LocalToDepotPath', 885 'LocalToDepotPath', 'Command', 'RunTests',
885 'PresubmitLocalPath', 'ReadFile', 'RightHandSideLines', 'ServerPaths', 886 'PresubmitLocalPath', 'ReadFile', 'RightHandSideLines', 'ServerPaths',
886 'basename', 'cPickle', 'cpplint', 'cStringIO', 'canned_checks', 'change', 887 'basename', 'cPickle', 'cpplint', 'cStringIO', 'canned_checks', 'change',
887 'environ', 'glob', 'host_url', 'is_committing', 'json', 'logging', 888 'environ', 'glob', 'host_url', 'is_committing', 'json', 'logging',
888 'marshal', 'os_listdir', 'os_walk', 'os_path', 'owners_db', 'pickle', 889 'marshal', 'os_listdir', 'os_walk', 'os_path', 'owners_db', 'pickle',
889 'platform', 'python_executable', 're', 'rietveld', 'subprocess', 'tbr', 890 'platform', 'python_executable', 're', 'rietveld', 'subprocess', 'tbr',
890 'tempfile', 'time', 'traceback', 'unittest', 'urllib2', 'version', 891 'tempfile', 'time', 'traceback', 'unittest', 'urllib2', 'version',
891 'verbose', 892 'verbose',
892 ] 893 ]
893 # If this test fails, you should add the relevant test. 894 # If this test fails, you should add the relevant test.
894 self.compareMembers( 895 self.compareMembers(
(...skipping 583 matching lines...) Expand 10 before | Expand all | Expand 10 after
1478 self.assertEquals('foo2', change.DescriptionText()) 1479 self.assertEquals('foo2', change.DescriptionText())
1479 self.assertEquals('foo3', change.author_email) 1480 self.assertEquals('foo3', change.author_email)
1480 self.assertEquals('ro', change.DRU) 1481 self.assertEquals('ro', change.DRU)
1481 self.assertEquals(3, change.issue) 1482 self.assertEquals(3, change.issue)
1482 self.assertEquals(5, change.patchset) 1483 self.assertEquals(5, change.patchset)
1483 self.assertEquals(self.fake_root_dir, change.RepositoryRoot()) 1484 self.assertEquals(self.fake_root_dir, change.RepositoryRoot())
1484 self.assertEquals(1, len(change.AffectedFiles(include_dirs=True))) 1485 self.assertEquals(1, len(change.AffectedFiles(include_dirs=True)))
1485 self.assertEquals('Y', change.AffectedFiles(include_dirs=True)[0].Action()) 1486 self.assertEquals('Y', change.AffectedFiles(include_dirs=True)[0].Action())
1486 1487
1487 1488
1489 def CommHelper(input_api, cmd, ret=None, **kwargs):
1490 ret = ret or (('', None), 0)
1491 input_api.subprocess.communicate(
1492 cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kwargs
1493 ).AndReturn(ret)
1494
1495
1488 class CannedChecksUnittest(PresubmitTestsBase): 1496 class CannedChecksUnittest(PresubmitTestsBase):
1489 """Tests presubmit_canned_checks.py.""" 1497 """Tests presubmit_canned_checks.py."""
1490 1498
1491 def MockInputApi(self, change, committing): 1499 def MockInputApi(self, change, committing):
1492 # pylint: disable=R0201 1500 # pylint: disable=R0201
1493 input_api = self.mox.CreateMock(presubmit.InputApi) 1501 input_api = self.mox.CreateMock(presubmit.InputApi)
1494 input_api.cStringIO = presubmit.cStringIO 1502 input_api.cStringIO = presubmit.cStringIO
1495 input_api.json = presubmit.json 1503 input_api.json = presubmit.json
1496 input_api.logging = logging 1504 input_api.logging = logging
1497 input_api.os_listdir = self.mox.CreateMockAnything() 1505 input_api.os_listdir = self.mox.CreateMockAnything()
1498 input_api.os_walk = self.mox.CreateMockAnything() 1506 input_api.os_walk = self.mox.CreateMockAnything()
1499 input_api.os_path = presubmit.os.path 1507 input_api.os_path = presubmit.os.path
1500 input_api.re = presubmit.re 1508 input_api.re = presubmit.re
1501 input_api.rietveld = self.mox.CreateMock(rietveld.Rietveld) 1509 input_api.rietveld = self.mox.CreateMock(rietveld.Rietveld)
1502 input_api.traceback = presubmit.traceback 1510 input_api.traceback = presubmit.traceback
1503 input_api.urllib2 = self.mox.CreateMock(presubmit.urllib2) 1511 input_api.urllib2 = self.mox.CreateMock(presubmit.urllib2)
1504 input_api.unittest = unittest 1512 input_api.unittest = unittest
1505 input_api.subprocess = self.mox.CreateMock(presubmit.subprocess) 1513 input_api.subprocess = self.mox.CreateMock(subprocess)
1514 presubmit.subprocess = input_api.subprocess
1506 class fake_CalledProcessError(Exception): 1515 class fake_CalledProcessError(Exception):
1507 def __str__(self): 1516 def __str__(self):
1508 return 'foo' 1517 return 'foo'
1509 input_api.subprocess.CalledProcessError = fake_CalledProcessError 1518 input_api.subprocess.CalledProcessError = fake_CalledProcessError
1510 input_api.verbose = False 1519 input_api.verbose = False
1511 1520
1512 input_api.change = change 1521 input_api.change = change
1513 input_api.host_url = 'http://localhost' 1522 input_api.host_url = 'http://localhost'
1514 input_api.is_committing = committing 1523 input_api.is_committing = committing
1515 input_api.tbr = False 1524 input_api.tbr = False
1516 input_api.python_executable = 'pyyyyython' 1525 input_api.python_executable = 'pyyyyython'
1517 input_api.platform = sys.platform 1526 input_api.platform = sys.platform
1518 input_api.time = time 1527 input_api.time = time
1519 input_api.canned_checks = presubmit_canned_checks 1528 input_api.canned_checks = presubmit_canned_checks
1529 input_api.Command = presubmit.CommandData
1530 input_api.RunTests = presubmit.InputApi.RunTests
1520 return input_api 1531 return input_api
1521 1532
1522 def testMembersChanged(self): 1533 def testMembersChanged(self):
1523 self.mox.ReplayAll() 1534 self.mox.ReplayAll()
1524 members = [ 1535 members = [
1525 'CheckBuildbotPendingBuilds', 1536 'CheckBuildbotPendingBuilds',
1526 'CheckChangeHasBugField', 'CheckChangeHasDescription', 1537 'CheckChangeHasBugField', 'CheckChangeHasDescription',
1527 'CheckChangeHasNoStrayWhitespace', 1538 'CheckChangeHasNoStrayWhitespace',
1528 'CheckChangeHasOnlyOneEol', 'CheckChangeHasNoCR', 1539 'CheckChangeHasOnlyOneEol', 'CheckChangeHasNoCR',
1529 'CheckChangeHasNoCrAndHasOnlyOneEol', 'CheckChangeHasNoTabs', 1540 'CheckChangeHasNoCrAndHasOnlyOneEol', 'CheckChangeHasNoTabs',
1530 'CheckChangeTodoHasOwner', 1541 'CheckChangeTodoHasOwner',
1531 'CheckChangeHasQaField', 'CheckChangeHasTestedField', 1542 'CheckChangeHasQaField', 'CheckChangeHasTestedField',
1532 'CheckChangeHasTestField', 1543 'CheckChangeHasTestField',
1533 'CheckChangeLintsClean', 1544 'CheckChangeLintsClean',
1534 'CheckChangeSvnEolStyle', 1545 'CheckChangeSvnEolStyle',
1535 'CheckChangeWasUploaded', 1546 'CheckChangeWasUploaded',
1536 'CheckDoNotSubmit', 1547 'CheckDoNotSubmit',
1537 'CheckDoNotSubmitInDescription', 'CheckDoNotSubmitInFiles', 1548 'CheckDoNotSubmitInDescription', 'CheckDoNotSubmitInFiles',
1538 'CheckLongLines', 'CheckTreeIsOpen', 'PanProjectChecks', 1549 'CheckLongLines', 'CheckTreeIsOpen', 'PanProjectChecks',
1539 'CheckLicense', 1550 'CheckLicense',
1540 'CheckOwners', 1551 'CheckOwners',
1541 'CheckRietveldTryJobExecution', 1552 'CheckRietveldTryJobExecution',
1542 'CheckSingletonInHeaders', 1553 'CheckSingletonInHeaders',
1543 'CheckSvnModifiedDirectories', 1554 'CheckSvnModifiedDirectories',
1544 'CheckSvnForCommonMimeTypes', 'CheckSvnProperty', 1555 'CheckSvnForCommonMimeTypes', 'CheckSvnProperty',
1545 'RunPythonUnitTests', 'RunPylint', 1556 'RunPythonUnitTests', 'RunPylint',
1546 'RunUnitTests', 'RunUnitTestsInDirectory', 1557 'RunUnitTests', 'RunUnitTestsInDirectory',
1558 'GetPythonUnitTests', 'GetPylint',
1559 'GetUnitTests', 'GetUnitTestsInDirectory',
1547 ] 1560 ]
1548 # If this test fails, you should add the relevant test. 1561 # If this test fails, you should add the relevant test.
1549 self.compareMembers(presubmit_canned_checks, members) 1562 self.compareMembers(presubmit_canned_checks, members)
1550 1563
1551 def DescriptionTest(self, check, description1, description2, error_type, 1564 def DescriptionTest(self, check, description1, description2, error_type,
1552 committing): 1565 committing):
1553 change1 = presubmit.Change( 1566 change1 = presubmit.Change(
1554 'foo1', description1, self.fake_root_dir, None, 0, 0, None) 1567 'foo1', description1, self.fake_root_dir, None, 0, 0, None)
1555 input_api1 = self.MockInputApi(change1, committing) 1568 input_api1 = self.MockInputApi(change1, committing)
1556 change2 = presubmit.Change( 1569 change2 = presubmit.Change(
(...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after
2110 2123
2111 def testRunPythonUnitTestsNoTest(self): 2124 def testRunPythonUnitTestsNoTest(self):
2112 input_api = self.MockInputApi(None, False) 2125 input_api = self.MockInputApi(None, False)
2113 self.mox.ReplayAll() 2126 self.mox.ReplayAll()
2114 results = presubmit_canned_checks.RunPythonUnitTests( 2127 results = presubmit_canned_checks.RunPythonUnitTests(
2115 input_api, presubmit.OutputApi, []) 2128 input_api, presubmit.OutputApi, [])
2116 self.assertEquals(results, []) 2129 self.assertEquals(results, [])
2117 2130
2118 def testRunPythonUnitTestsNonExistentUpload(self): 2131 def testRunPythonUnitTestsNonExistentUpload(self):
2119 input_api = self.MockInputApi(None, False) 2132 input_api = self.MockInputApi(None, False)
2120 input_api.subprocess.check_output( 2133 CommHelper(input_api, ['pyyyyython', '-m', '_non_existent_module'],
2121 ['pyyyyython', '-m', '_non_existent_module'], cwd=None, env=None, 2134 ret=(('foo', None), 1), cwd=None, env=None)
2122 stderr=input_api.subprocess.STDOUT).AndRaise(
2123 input_api.subprocess.CalledProcessError())
2124 self.mox.ReplayAll() 2135 self.mox.ReplayAll()
2125 2136
2126 results = presubmit_canned_checks.RunPythonUnitTests( 2137 results = presubmit_canned_checks.RunPythonUnitTests(
2127 input_api, presubmit.OutputApi, ['_non_existent_module']) 2138 input_api, presubmit.OutputApi, ['_non_existent_module'])
2128 self.assertEquals(len(results), 1) 2139 self.assertEquals(len(results), 1)
2129 self.assertEquals(results[0].__class__, 2140 self.assertEquals(results[0].__class__,
2130 presubmit.OutputApi.PresubmitNotifyResult) 2141 presubmit.OutputApi.PresubmitNotifyResult)
2131 2142
2132 def testRunPythonUnitTestsNonExistentCommitting(self): 2143 def testRunPythonUnitTestsNonExistentCommitting(self):
2133 input_api = self.MockInputApi(None, True) 2144 input_api = self.MockInputApi(None, True)
2134 input_api.subprocess.check_output( 2145 CommHelper(input_api, ['pyyyyython', '-m', '_non_existent_module'],
2135 ['pyyyyython', '-m', '_non_existent_module'], cwd=None, env=None, 2146 ret=(('foo', None), 1), cwd=None, env=None)
2136 stderr=input_api.subprocess.STDOUT).AndRaise(
2137 input_api.subprocess.CalledProcessError())
2138 self.mox.ReplayAll() 2147 self.mox.ReplayAll()
2139 2148
2140 results = presubmit_canned_checks.RunPythonUnitTests( 2149 results = presubmit_canned_checks.RunPythonUnitTests(
2141 input_api, presubmit.OutputApi, ['_non_existent_module']) 2150 input_api, presubmit.OutputApi, ['_non_existent_module'])
2142 self.assertEquals(len(results), 1) 2151 self.assertEquals(len(results), 1)
2143 self.assertEquals(results[0].__class__, presubmit.OutputApi.PresubmitError) 2152 self.assertEquals(results[0].__class__, presubmit.OutputApi.PresubmitError)
2144 2153
2145 def testRunPythonUnitTestsFailureUpload(self): 2154 def testRunPythonUnitTestsFailureUpload(self):
2146 input_api = self.MockInputApi(None, False) 2155 input_api = self.MockInputApi(None, False)
2147 input_api.unittest = self.mox.CreateMock(unittest) 2156 input_api.unittest = self.mox.CreateMock(unittest)
2148 input_api.cStringIO = self.mox.CreateMock(presubmit.cStringIO) 2157 input_api.cStringIO = self.mox.CreateMock(presubmit.cStringIO)
2149 input_api.subprocess.check_output( 2158 CommHelper(input_api, ['pyyyyython', '-m', 'test_module'],
2150 ['pyyyyython', '-m', 'test_module'], cwd=None, env=None, 2159 ret=(('foo', None), 1), cwd=None, env=None)
2151 stderr=input_api.subprocess.STDOUT).AndRaise(
2152 input_api.subprocess.CalledProcessError())
2153 self.mox.ReplayAll() 2160 self.mox.ReplayAll()
2154 2161
2155 results = presubmit_canned_checks.RunPythonUnitTests( 2162 results = presubmit_canned_checks.RunPythonUnitTests(
2156 input_api, presubmit.OutputApi, ['test_module']) 2163 input_api, presubmit.OutputApi, ['test_module'])
2157 self.assertEquals(len(results), 1) 2164 self.assertEquals(len(results), 1)
2158 self.assertEquals(results[0].__class__, 2165 self.assertEquals(results[0].__class__,
2159 presubmit.OutputApi.PresubmitNotifyResult) 2166 presubmit.OutputApi.PresubmitNotifyResult)
2160 self.assertEquals('test_module failed!\nfoo', results[0]._message) 2167 self.assertEquals('test_module failed\nfoo', results[0]._message)
2161 2168
2162 def testRunPythonUnitTestsFailureCommitting(self): 2169 def testRunPythonUnitTestsFailureCommitting(self):
2163 input_api = self.MockInputApi(None, True) 2170 input_api = self.MockInputApi(None, True)
2164 input_api.subprocess.check_output( 2171 CommHelper(input_api, ['pyyyyython', '-m', 'test_module'],
2165 ['pyyyyython', '-m', 'test_module'], cwd=None, env=None, 2172 ret=(('foo', None), 1), cwd=None, env=None)
2166 stderr=input_api.subprocess.STDOUT).AndRaise(
2167 input_api.subprocess.CalledProcessError())
2168 self.mox.ReplayAll() 2173 self.mox.ReplayAll()
2169 2174
2170 results = presubmit_canned_checks.RunPythonUnitTests( 2175 results = presubmit_canned_checks.RunPythonUnitTests(
2171 input_api, presubmit.OutputApi, ['test_module']) 2176 input_api, presubmit.OutputApi, ['test_module'])
2172 self.assertEquals(len(results), 1) 2177 self.assertEquals(len(results), 1)
2173 self.assertEquals(results[0].__class__, presubmit.OutputApi.PresubmitError) 2178 self.assertEquals(results[0].__class__, presubmit.OutputApi.PresubmitError)
2174 self.assertEquals('test_module failed!\nfoo', results[0]._message) 2179 self.assertEquals('test_module failed\nfoo', results[0]._message)
2175 2180
2176 def testRunPythonUnitTestsSuccess(self): 2181 def testRunPythonUnitTestsSuccess(self):
2177 input_api = self.MockInputApi(None, False) 2182 input_api = self.MockInputApi(None, False)
2178 input_api.cStringIO = self.mox.CreateMock(presubmit.cStringIO) 2183 input_api.cStringIO = self.mox.CreateMock(presubmit.cStringIO)
2179 input_api.unittest = self.mox.CreateMock(unittest) 2184 input_api.unittest = self.mox.CreateMock(unittest)
2180 input_api.subprocess.check_output( 2185 CommHelper(input_api, ['pyyyyython', '-m', 'test_module'],
2181 ['pyyyyython', '-m', 'test_module'], cwd=None, env=None, 2186 cwd=None, env=None)
2182 stderr=input_api.subprocess.STDOUT)
2183 self.mox.ReplayAll() 2187 self.mox.ReplayAll()
2184 2188
2185 results = presubmit_canned_checks.RunPythonUnitTests( 2189 results = presubmit_canned_checks.RunPythonUnitTests(
2186 input_api, presubmit.OutputApi, ['test_module']) 2190 input_api, presubmit.OutputApi, ['test_module'])
2187 self.assertEquals(len(results), 0) 2191 self.assertEquals(len(results), 0)
2188 2192
2189 def testCannedRunPylint(self): 2193 def testCannedRunPylint(self):
2190 input_api = self.MockInputApi(None, True) 2194 input_api = self.MockInputApi(None, True)
2191 input_api.environ = self.mox.CreateMock(os.environ) 2195 input_api.environ = self.mox.CreateMock(os.environ)
2192 input_api.environ.copy().AndReturn({}) 2196 input_api.environ.copy().AndReturn({})
2193 input_api.AffectedSourceFiles(mox.IgnoreArg()).AndReturn(True) 2197 input_api.AffectedSourceFiles(mox.IgnoreArg()).AndReturn(True)
2194 input_api.PresubmitLocalPath().AndReturn('/foo') 2198 input_api.PresubmitLocalPath().AndReturn('/foo')
2195 input_api.PresubmitLocalPath().AndReturn('/foo') 2199 input_api.PresubmitLocalPath().AndReturn('/foo')
2196 input_api.os_walk('/foo').AndReturn([('/foo', [], ['file1.py'])]) 2200 input_api.os_walk('/foo').AndReturn([('/foo', [], ['file1.py'])])
2197 pylint = os.path.join(_ROOT, 'third_party', 'pylint.py') 2201 pylint = os.path.join(_ROOT, 'third_party', 'pylint.py')
2198 pylintrc = os.path.join(_ROOT, 'pylintrc') 2202 pylintrc = os.path.join(_ROOT, 'pylintrc')
2199 2203
2200 # Create a mock Popen object, and set up its expectations. 2204 CommHelper(input_api,
2201 child = self.mox.CreateMock(subprocess.Popen) 2205 ['pyyyyython', pylint, '--args-on-stdin'],
2202 child.stdin = self.mox.CreateMock(file) 2206 env=mox.IgnoreArg(), stdin='file1.py\n--rcfile=%s' % pylintrc)
2203 child.stdin.write('file1.py\n')
2204 child.stdin.write('--rcfile=%s\n' % pylintrc)
2205 child.stdin.close()
2206 child.communicate()
2207 child.returncode = 0
2208
2209 input_api.subprocess.Popen(['pyyyyython', pylint, '--args-on-stdin'],
2210 env=mox.IgnoreArg(), stdin=subprocess.PIPE).AndReturn(child)
2211 self.mox.ReplayAll() 2207 self.mox.ReplayAll()
2212 2208
2213 results = presubmit_canned_checks.RunPylint( 2209 results = presubmit_canned_checks.RunPylint(
2214 input_api, presubmit.OutputApi) 2210 input_api, presubmit.OutputApi)
2215 self.assertEquals([], results) 2211 self.assertEquals([], results)
2216 self.checkstdout('Running pylint on 1 files.\n') 2212 self.checkstdout('')
2217 2213
2218 def testCheckBuildbotPendingBuildsBad(self): 2214 def testCheckBuildbotPendingBuildsBad(self):
2219 input_api = self.MockInputApi(None, True) 2215 input_api = self.MockInputApi(None, True)
2220 connection = self.mox.CreateMockAnything() 2216 connection = self.mox.CreateMockAnything()
2221 input_api.urllib2.urlopen('uurl').AndReturn(connection) 2217 input_api.urllib2.urlopen('uurl').AndReturn(connection)
2222 connection.read().AndReturn('foo') 2218 connection.read().AndReturn('foo')
2223 connection.close() 2219 connection.close()
2224 self.mox.ReplayAll() 2220 self.mox.ReplayAll()
2225 2221
2226 results = presubmit_canned_checks.CheckBuildbotPendingBuilds( 2222 results = presubmit_canned_checks.CheckBuildbotPendingBuilds(
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
2448 uncovered_files=set()) 2444 uncovered_files=set())
2449 2445
2450 def testCannedRunUnitTests(self): 2446 def testCannedRunUnitTests(self):
2451 change = presubmit.Change( 2447 change = presubmit.Change(
2452 'foo1', 'description1', self.fake_root_dir, None, 0, 0, None) 2448 'foo1', 'description1', self.fake_root_dir, None, 0, 0, None)
2453 input_api = self.MockInputApi(change, False) 2449 input_api = self.MockInputApi(change, False)
2454 input_api.verbose = True 2450 input_api.verbose = True
2455 unit_tests = ['allo', 'bar.py'] 2451 unit_tests = ['allo', 'bar.py']
2456 input_api.PresubmitLocalPath().AndReturn(self.fake_root_dir) 2452 input_api.PresubmitLocalPath().AndReturn(self.fake_root_dir)
2457 input_api.PresubmitLocalPath().AndReturn(self.fake_root_dir) 2453 input_api.PresubmitLocalPath().AndReturn(self.fake_root_dir)
2458 input_api.subprocess.check_call( 2454 CommHelper(input_api, ['allo', '--verbose'], cwd=self.fake_root_dir)
2459 ['allo', '--verbose'], cwd=self.fake_root_dir)
2460 cmd = ['bar.py', '--verbose'] 2455 cmd = ['bar.py', '--verbose']
2461 if input_api.platform == 'win32': 2456 if input_api.platform == 'win32':
2462 cmd.insert(0, input_api.python_executable) 2457 cmd.insert(0, input_api.python_executable)
2463 input_api.subprocess.check_call( 2458 CommHelper(input_api, cmd, cwd=self.fake_root_dir, ret=(('', None), 1))
2464 cmd, cwd=self.fake_root_dir).AndRaise(
2465 input_api.subprocess.CalledProcessError())
2466 2459
2467 self.mox.ReplayAll() 2460 self.mox.ReplayAll()
2468 results = presubmit_canned_checks.RunUnitTests( 2461 results = presubmit_canned_checks.RunUnitTests(
2469 input_api, 2462 input_api,
2470 presubmit.OutputApi, 2463 presubmit.OutputApi,
2471 unit_tests) 2464 unit_tests)
2472 self.assertEqual(1, len(results)) 2465 self.assertEqual(1, len(results))
2473 self.assertEqual( 2466 self.assertEqual(
2474 presubmit.OutputApi.PresubmitPromptWarning, results[0].__class__) 2467 presubmit.OutputApi.PresubmitPromptWarning, results[0].__class__)
2475 self.checkstdout('Running allo\nRunning bar.py\n') 2468 self.checkstdout('Running allo\nRunning bar.py\n')
2476 2469
2477 def testCannedRunUnitTestsInDirectory(self): 2470 def testCannedRunUnitTestsInDirectory(self):
2478 change = presubmit.Change( 2471 change = presubmit.Change(
2479 'foo1', 'description1', self.fake_root_dir, None, 0, 0, None) 2472 'foo1', 'description1', self.fake_root_dir, None, 0, 0, None)
2480 input_api = self.MockInputApi(change, False) 2473 input_api = self.MockInputApi(change, False)
2481 input_api.verbose = True 2474 input_api.verbose = True
2482 input_api.logging = self.mox.CreateMock(logging) 2475 input_api.logging = self.mox.CreateMock(logging)
2483 input_api.PresubmitLocalPath().AndReturn(self.fake_root_dir) 2476 input_api.PresubmitLocalPath().AndReturn(self.fake_root_dir)
2484 input_api.PresubmitLocalPath().AndReturn(self.fake_root_dir) 2477 input_api.PresubmitLocalPath().AndReturn(self.fake_root_dir)
2485 path = presubmit.os.path.join(self.fake_root_dir, 'random_directory') 2478 path = presubmit.os.path.join(self.fake_root_dir, 'random_directory')
2486 input_api.os_listdir(path).AndReturn(['.', '..', 'a', 'b', 'c']) 2479 input_api.os_listdir(path).AndReturn(['.', '..', 'a', 'b', 'c'])
2487 input_api.os_path.isfile = lambda x: not x.endswith('.') 2480 input_api.os_path.isfile = lambda x: not x.endswith('.')
2488 input_api.subprocess.check_call( 2481 CommHelper(
2482 input_api,
2489 [presubmit.os.path.join('random_directory', 'b'), '--verbose'], 2483 [presubmit.os.path.join('random_directory', 'b'), '--verbose'],
2490 cwd=self.fake_root_dir) 2484 cwd=self.fake_root_dir)
2491 input_api.logging.debug('Found 5 files, running 1') 2485 input_api.logging.debug('Found 5 files, running 1')
2492 2486
2493 self.mox.ReplayAll() 2487 self.mox.ReplayAll()
2494 results = presubmit_canned_checks.RunUnitTestsInDirectory( 2488 results = presubmit_canned_checks.RunUnitTestsInDirectory(
2495 input_api, 2489 input_api,
2496 presubmit.OutputApi, 2490 presubmit.OutputApi,
2497 'random_directory', 2491 'random_directory',
2498 whitelist=['^a$', '^b$'], 2492 whitelist=['^a$', '^b$'],
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2537 owners_check=False) 2531 owners_check=False)
2538 self.assertEqual(1, len(results)) 2532 self.assertEqual(1, len(results))
2539 self.assertEqual( 2533 self.assertEqual(
2540 'Found line ending with white spaces in:', results[0]._message) 2534 'Found line ending with white spaces in:', results[0]._message)
2541 self.checkstdout('') 2535 self.checkstdout('')
2542 2536
2543 2537
2544 if __name__ == '__main__': 2538 if __name__ == '__main__':
2545 import unittest 2539 import unittest
2546 unittest.main() 2540 unittest.main()
OLDNEW
« no previous file with comments | « presubmit_support.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698