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

Side by Side Diff: tests/presubmit_unittest.py

Issue 248029: Make the try slave selection client side. (Closed) Base URL: svn://chrome-svn/chrome/trunk/tools/depot_tools/
Patch Set: 80 columns Created 11 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « presubmit_support.py ('k') | tests/trychange_unittest.py » ('j') | 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/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 os 9 import os
10 import StringIO 10 import StringIO
(...skipping 13 matching lines...) Expand all
24 if not input_api.change.NOSUCHKEY: 24 if not input_api.change.NOSUCHKEY:
25 return [output_api.PresubmitError("!!")] 25 return [output_api.PresubmitError("!!")]
26 elif not input_api.change.REALLYNOSUCHKEY: 26 elif not input_api.change.REALLYNOSUCHKEY:
27 return [output_api.PresubmitPromptWarning("??")] 27 return [output_api.PresubmitPromptWarning("??")]
28 elif not input_api.change.REALLYABSOLUTELYNOSUCHKEY: 28 elif not input_api.change.REALLYABSOLUTELYNOSUCHKEY:
29 return [output_api.PresubmitPromptWarning("??"), 29 return [output_api.PresubmitPromptWarning("??"),
30 output_api.PresubmitError("XX!!XX")] 30 output_api.PresubmitError("XX!!XX")]
31 else: 31 else:
32 return () 32 return ()
33 """ 33 """
34 presubmit_tryslave = """
35 def GetPreferredTrySlaves():
36 return %s
37 """
34 38
35 def setUp(self): 39 def setUp(self):
36 super_mox.SuperMoxTestBase.setUp(self) 40 super_mox.SuperMoxTestBase.setUp(self)
37 self.mox.StubOutWithMock(presubmit, 'warnings') 41 self.mox.StubOutWithMock(presubmit, 'warnings')
38 # Stub out 'os' but keep os.path.commonprefix/dirname/join/normpath/splitext 42 # Stub out 'os' but keep os.path.commonprefix/dirname/join/normpath/splitext
39 # and os.sep. 43 # and os.sep.
40 os_sep = presubmit.os.sep 44 os_sep = presubmit.os.sep
41 os_path_commonprefix = presubmit.os.path.commonprefix 45 os_path_commonprefix = presubmit.os.path.commonprefix
42 os_path_dirname = presubmit.os.path.dirname 46 os_path_dirname = presubmit.os.path.dirname
43 os_path_join = presubmit.os.path.join 47 os_path_join = presubmit.os.path.join
(...skipping 22 matching lines...) Expand all
66 self.mox.StubOutWithMock(presubmit.gclient_scm, 'CaptureSVNInfo') 70 self.mox.StubOutWithMock(presubmit.gclient_scm, 'CaptureSVNInfo')
67 self.mox.StubOutWithMock(presubmit.gcl, 'GetSVNFileProperty') 71 self.mox.StubOutWithMock(presubmit.gcl, 'GetSVNFileProperty')
68 self.mox.StubOutWithMock(presubmit.gcl, 'ReadFile') 72 self.mox.StubOutWithMock(presubmit.gcl, 'ReadFile')
69 73
70 74
71 class PresubmitUnittest(PresubmitTestsBase): 75 class PresubmitUnittest(PresubmitTestsBase):
72 """General presubmit_support.py tests (excluding InputApi and OutputApi).""" 76 """General presubmit_support.py tests (excluding InputApi and OutputApi)."""
73 def testMembersChanged(self): 77 def testMembersChanged(self):
74 self.mox.ReplayAll() 78 self.mox.ReplayAll()
75 members = [ 79 members = [
76 'AffectedFile', 'Change', 'DoPresubmitChecks', 'GitChange', 80 'AffectedFile', 'Change', 'DoGetTrySlaves', 'DoPresubmitChecks',
77 'GitAffectedFile', 'InputApi', 81 'GetTrySlavesExecuter', 'GitChange', 'GitAffectedFile', 'InputApi',
78 'ListRelevantPresubmitFiles', 'Main', 'NotImplementedException', 82 'ListRelevantPresubmitFiles', 'Main', 'NotImplementedException',
79 'OutputApi', 'ParseFiles', 'PresubmitExecuter', 'ScanSubDirs', 83 'OutputApi', 'ParseFiles', 'PresubmitExecuter', 'ScanSubDirs',
80 'SvnAffectedFile', 'SvnChange', 84 'SvnAffectedFile', 'SvnChange',
81 'cPickle', 'cStringIO', 'exceptions', 85 'cPickle', 'cStringIO', 'exceptions',
82 'fnmatch', 'gcl', 'gclient_scm', 'glob', 'logging', 'marshal', 'normpath', 86 'fnmatch', 'gcl', 'gclient_scm', 'glob', 'logging', 'marshal', 'normpath',
83 'optparse', 'os', 'pickle', 87 'optparse', 'os', 'pickle',
84 'presubmit_canned_checks', 'random', 're', 'subprocess', 'sys', 'time', 88 'presubmit_canned_checks', 'random', 're', 'subprocess', 'sys', 'time',
85 'tempfile', 'traceback', 'types', 'unittest', 'urllib2', 'warnings', 89 'tempfile', 'traceback', 'types', 'unittest', 'urllib2', 'warnings',
86 ] 90 ]
87 # If this test fails, you should add the relevant test. 91 # If this test fails, you should add the relevant test.
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 'foo', "Blah Blah\n\nSTORY=http://tracker.com/42\nBUG=boo\n", 481 'foo', "Blah Blah\n\nSTORY=http://tracker.com/42\nBUG=boo\n",
478 self.fake_root_dir, None, 0, 0) 482 self.fake_root_dir, None, 0, 0)
479 self.failUnless(presubmit.DoPresubmitChecks(change, False, True, output, 483 self.failUnless(presubmit.DoPresubmitChecks(change, False, True, output,
480 input, DEFAULT_SCRIPT, False)) 484 input, DEFAULT_SCRIPT, False))
481 self.assertEquals(output.getvalue(), 485 self.assertEquals(output.getvalue(),
482 ('Warning, no presubmit.py found.\n' 486 ('Warning, no presubmit.py found.\n'
483 'Running default presubmit script.\n' 487 'Running default presubmit script.\n'
484 '** Presubmit Messages **\n' 488 '** Presubmit Messages **\n'
485 'http://tracker.com/42\n\n')) 489 'http://tracker.com/42\n\n'))
486 490
491 def testGetTrySlavesExecuter(self):
492 self.mox.ReplayAll()
493
494 executer = presubmit.GetTrySlavesExecuter()
495 self.assertEqual([], executer.ExecPresubmitScript(''))
496 self.assertEqual([], executer.ExecPresubmitScript('def foo():\n return\n'))
497
498 # bad results
499 starts_with_space_result = [' starts_with_space']
500 not_list_result1 = "'foo'"
501 not_list_result2 = "('a', 'tuple')"
502 for result in starts_with_space_result, not_list_result1, not_list_result2:
503 self.assertRaises(exceptions.RuntimeError,
504 executer.ExecPresubmitScript,
505 self.presubmit_tryslave % result)
506
507 # good results
508 expected_result = ['1', '2', '3']
509 empty_result = []
510 space_in_name_result = ['foo bar', '1\t2 3']
511 for result in expected_result, empty_result, space_in_name_result:
512 self.assertEqual(result,
513 executer.ExecPresubmitScript(self.presubmit_tryslave %
514 str(result)))
515
516 def testDoGetTrySlaves(self):
517 join = presubmit.os.path.join
518 filename = 'foo.cc'
519 filename_linux = join('linux_only', 'penguin.cc')
520 root_presubmit = join(self.fake_root_dir, 'PRESUBMIT.py')
521 linux_presubmit = join(self.fake_root_dir, 'linux_only', 'PRESUBMIT.py')
522
523 presubmit.os.path.isfile(root_presubmit).AndReturn(True)
524 presubmit.gcl.ReadFile(root_presubmit, 'rU').AndReturn(
525 self.presubmit_tryslave % '["win"]')
526
527 presubmit.os.path.isfile(root_presubmit).AndReturn(True)
528 presubmit.os.path.isfile(linux_presubmit).AndReturn(True)
529 presubmit.gcl.ReadFile(root_presubmit, 'rU').AndReturn(
530 self.presubmit_tryslave % '["win"]')
531 presubmit.gcl.ReadFile(linux_presubmit, 'rU').AndReturn(
532 self.presubmit_tryslave % '["linux"]')
533 self.mox.ReplayAll()
534
535 output = StringIO.StringIO()
536 self.assertEqual(['win'],
537 presubmit.DoGetTrySlaves([filename], self.fake_root_dir,
538 None, False, output))
539 output = StringIO.StringIO()
540 self.assertEqual(['win', 'linux'],
541 presubmit.DoGetTrySlaves([filename, filename_linux],
542 self.fake_root_dir, None, False,
543 output))
544
487 def testMain(self): 545 def testMain(self):
488 self.mox.StubOutWithMock(presubmit, 'DoPresubmitChecks') 546 self.mox.StubOutWithMock(presubmit, 'DoPresubmitChecks')
489 self.mox.StubOutWithMock(presubmit, 'ParseFiles') 547 self.mox.StubOutWithMock(presubmit, 'ParseFiles')
490 presubmit.os.path.isdir(presubmit.os.path.join(self.fake_root_dir, '.git') 548 presubmit.os.path.isdir(presubmit.os.path.join(self.fake_root_dir, '.git')
491 ).AndReturn(False) 549 ).AndReturn(False)
492 presubmit.os.path.isdir(presubmit.os.path.join(self.fake_root_dir, '.svn') 550 presubmit.os.path.isdir(presubmit.os.path.join(self.fake_root_dir, '.svn')
493 ).AndReturn(False) 551 ).AndReturn(False)
494 #presubmit.ParseFiles([], None).AndReturn([]) 552 #presubmit.ParseFiles([], None).AndReturn([])
495 presubmit.DoPresubmitChecks(mox.IgnoreArg(), False, False, 553 presubmit.DoPresubmitChecks(mox.IgnoreArg(), False, False,
496 mox.IgnoreArg(), 554 mox.IgnoreArg(),
(...skipping 915 matching lines...) Expand 10 before | Expand all | Expand 10 after
1412 process.communicate().AndReturn(('', '')) 1470 process.communicate().AndReturn(('', ''))
1413 self.mox.ReplayAll() 1471 self.mox.ReplayAll()
1414 1472
1415 results = presubmit_canned_checks.RunPythonUnitTests( 1473 results = presubmit_canned_checks.RunPythonUnitTests(
1416 input_api, presubmit.OutputApi, ['test_module']) 1474 input_api, presubmit.OutputApi, ['test_module'])
1417 self.assertEquals(len(results), 0) 1475 self.assertEquals(len(results), 0)
1418 1476
1419 1477
1420 if __name__ == '__main__': 1478 if __name__ == '__main__':
1421 unittest.main() 1479 unittest.main()
OLDNEW
« no previous file with comments | « presubmit_support.py ('k') | tests/trychange_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698