Index: tests/git_cl_test.py |
diff --git a/tests/git_cl_test.py b/tests/git_cl_test.py |
index 1e70e1b3248b7799772a4d62ede361af043366f3..9c0f32c68563469c12e73bb02a9bc216a5cfd3c4 100755 |
--- a/tests/git_cl_test.py |
+++ b/tests/git_cl_test.py |
@@ -10,6 +10,7 @@ import StringIO |
import stat |
import sys |
import unittest |
+import re |
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) |
@@ -18,7 +19,7 @@ from testing_support.auto_stub import TestCase |
import git_cl |
import git_common |
import subprocess2 |
- |
+import presubmit_support |
class PresubmitMock(object): |
def __init__(self, *args, **kwargs): |
@@ -750,6 +751,84 @@ class TestGitCl(TestCase): |
actual.append(obj.description) |
self.assertEqual(expected, actual) |
+ def test_trybots_from_PRESUBMIT(self): |
+ TEST_MASTER = 'testMaster' |
+ TEST_BUILDER = 'testBuilder' |
+ MASTERS = {TEST_MASTER:{TEST_BUILDER:['a']}} |
+ self.mock(presubmit_support, 'DoGetTryMasters', |
+ lambda *args: MASTERS) |
+ |
+ change_mock = ChangeMock() |
+ changelist_mock = ChangelistMock(change_mock) |
+ self.mock(git_cl, 'is_dirty_git_tree', lambda x: False) |
+ self.mock(git_cl, 'print_stats', lambda *arg: True) |
+ self.mock(git_cl, 'Changelist', lambda *args: changelist_mock) |
+ self.mock(git_cl, 'CreateDescriptionFromLog', lambda arg: 'Commit message') |
+ self.mock(git_cl.ChangeDescription, 'prompt', lambda self: None) |
+ |
+ self.calls = [ |
+ ((['git', 'config', 'rietveld.autoupdate',],), |
+ ''), |
+ ((['git', 'config', 'gerrit.host',],), |
+ ''), |
+ ((['git', 'rev-parse', '--show-cdup',],), |
+ ''), |
+ ((['git', 'config', 'rietveld.private',],), |
+ ''), |
+ ((['git', 'config', '--local', '--get-regexp', '^svn-remote\\.'],), |
+ ''), |
+ ((['git', 'config', 'rietveld.project',],), |
+ ''), |
+ ((['git', 'rev-parse', 'HEAD',],), |
+ ''), |
+ ] |
+ |
+ stored_description = [] |
+ def check_upload(args): |
+ i = 0 |
+ for arg in args: |
+ if arg == '--message': |
+ break |
+ i += 1 |
+ |
+ self.assertTrue(i < len(args)) |
+ stored_description.append(args[i+1]) |
+ return 1, 2 |
+ self.mock(git_cl.upload, 'RealMain', check_upload) |
+ |
+ git_cl.main(['upload', '--bypass-hooks', '--auto-bots']) |
+ found = re.search("CQ_TRYBOTS=(.*?)$", stored_description[0]) |
+ self.assertTrue(found) |
+ self.assertEqual(found.group(1), '%s:%s;' % (TEST_MASTER, TEST_BUILDER)) |
+ |
+ |
+class ChangelistMock(object): |
+ def __init__(self, change_mock): |
+ self.change_mock = change_mock |
+ |
+ def __getattr__(self, key): |
+ if key == 'GetChange': |
+ return lambda *args: self.change_mock |
+ if key == 'SetWatchers': |
+ return lambda *args: None |
+ if 'Set' in key: |
+ return lambda x: True |
iannucci
2014/06/24 23:23:59
these should be methods :D
martiniss
2014/06/24 23:55:55
Done! Manually added all the mocked methods.
|
+ return lambda: [] |
+ |
+class ChangeMock(object): |
+ def __init__(self): |
+ self.stored_description = None |
+ |
+ def __getattr__(self, key): |
+ if key == 'SetDescriptionText': |
+ def func(description): |
+ self.stored_description = description |
+ return func |
+ if key == 'FullDescriptionText': |
+ return lambda: "HIHI TEST DESCRIPTION" |
+ if 'Repository' in key: |
+ return lambda: '' |
+ return lambda: [] |
if __name__ == '__main__': |
git_cl.logging.basicConfig( |