Chromium Code Reviews| Index: tests/presubmit_unittest.py | 
| diff --git a/tests/presubmit_unittest.py b/tests/presubmit_unittest.py | 
| index 28bf5bcecf12870cdb97fb3333ecb6fe99f6512e..6c2c8b3a6022085ab50a3f3bb2d44b20f8ed1f8e 100755 | 
| --- a/tests/presubmit_unittest.py | 
| +++ b/tests/presubmit_unittest.py | 
| @@ -8,6 +8,7 @@ | 
| # pylint: disable=E1101,E1103 | 
| import functools | 
| +import itertools | 
| import logging | 
| import os | 
| import StringIO | 
| @@ -60,6 +61,11 @@ def GetPreferredTrySlaves(project): | 
| return %s | 
| """ | 
| + presubmit_trymaster = """ | 
| +def GetPreferredTryMasters(project, change): | 
| + return %s | 
| +""" | 
| + | 
| presubmit_diffs = """ | 
| --- file1 2011-02-09 10:38:16.517224845 -0800 | 
| +++ file2 2011-02-09 10:38:53.177226516 -0800 | 
| @@ -170,7 +176,8 @@ class PresubmitUnittest(PresubmitTestsBase): | 
| 'marshal', 'normpath', 'optparse', 'os', 'owners', 'pickle', | 
| 'presubmit_canned_checks', 'random', 're', 'rietveld', 'scm', | 
| 'subprocess', 'sys', 'tempfile', 'time', 'traceback', 'types', 'unittest', | 
| - 'urllib2', 'warn', 'multiprocessing', | 
| + 'urllib2', 'warn', 'multiprocessing', 'DoGetTryMasters', | 
| + 'GetTryMastersExecuter', 'itertools', | 
| ] | 
| # If this test fails, you should add the relevant test. | 
| self.compareMembers(presubmit, members) | 
| @@ -1027,6 +1034,103 @@ def CheckChangeOnCommit(input_api, output_api): | 
| except presubmit.PresubmitFailure: | 
| pass | 
| + def testGetTryMastersExecuter(self): | 
| + self.mox.ReplayAll() | 
| + change = presubmit.Change( | 
| + 'foo', | 
| + 'Blah Blah\n\nSTORY=http://tracker.com/42\nBUG=boo\n', | 
| + self.fake_root_dir, | 
| + None, | 
| + 0, | 
| + 0, | 
| + None) | 
| + executer = presubmit.GetTryMastersExecuter() | 
| + self.assertEqual({}, executer.ExecPresubmitScript('', '', '', change)) | 
| + self.assertEqual({}, | 
| + executer.ExecPresubmitScript('def foo():\n return\n', '', '', change)) | 
| + | 
| 
 
Michael Achenbach
2014/03/01 01:30:40
After removing the checks, there are no bad result
 
 | 
| + expected_result = {'m1': {'s1': set(['t1', 't2'])}, | 
| + 'm2': {'s1': set(['defaulttests']), | 
| + 's2': set(['defaulttests'])}} | 
| + empty_result1 = {} | 
| + empty_result2 = {'m': {}} | 
| + space_in_name_result = {'m r': {'s\tv': set(['t1'])}} | 
| + for result in ( | 
| + expected_result, empty_result1, empty_result2, space_in_name_result): | 
| + self.assertEqual( | 
| + result, | 
| + executer.ExecPresubmitScript( | 
| + self.presubmit_trymaster % result, '', '', change)) | 
| + | 
| + def testMergeMasters(self): | 
| + merge = presubmit._MergeMasters | 
| + self.assertEqual({}, merge({}, {})) | 
| + self.assertEqual({'m1': {}}, merge({}, {'m1': {}})) | 
| + self.assertEqual({'m1': {}}, merge({'m1': {}}, {})) | 
| + parts = [ | 
| + {'try1.cr': {'win': set(['defaulttests'])}}, | 
| + {'try1.cr': {'linux1': set(['test1'])}, | 
| + 'try2.cr': {'linux2': set(['defaulttests'])}}, | 
| + {'try1.cr': {'mac1': set(['defaulttests']), | 
| + 'mac2': set(['test1', 'test2']), | 
| + 'linux1': set(['defaulttests'])}}, | 
| + ] | 
| + expected = { | 
| + 'try1.cr': {'win': set(['defaulttests']), | 
| + 'linux1': set(['defaulttests', 'test1']), | 
| + 'mac1': set(['defaulttests']), | 
| + 'mac2': set(['test1', 'test2'])}, | 
| + 'try2.cr': {'linux2': set(['defaulttests'])}, | 
| + } | 
| + for permutation in itertools.permutations(parts): | 
| + self.assertEqual(expected, reduce(merge, permutation, {})) | 
| + | 
| + def testDoGetTryMasters(self): | 
| + root_text = (self.presubmit_trymaster | 
| + % '{"t1.cr": {"win": set(["defaulttests"])}}') | 
| + linux_text = (self.presubmit_trymaster | 
| + % ('{"t1.cr": {"linux1": set(["t1"])},' | 
| + ' "t2.cr": {"linux2": set(["defaulttests"])}}')) | 
| + | 
| + join = presubmit.os.path.join | 
| + isfile = presubmit.os.path.isfile | 
| + FileRead = presubmit.gclient_utils.FileRead | 
| + filename = 'foo.cc' | 
| + filename_linux = join('linux_only', 'penguin.cc') | 
| + root_presubmit = join(self.fake_root_dir, 'PRESUBMIT.py') | 
| + linux_presubmit = join(self.fake_root_dir, 'linux_only', 'PRESUBMIT.py') | 
| + inherit_path = join(self.fake_root_dir, self._INHERIT_SETTINGS) | 
| + | 
| + isfile(inherit_path).AndReturn(False) | 
| + isfile(root_presubmit).AndReturn(True) | 
| + FileRead(root_presubmit, 'rU').AndReturn(root_text) | 
| + | 
| + isfile(inherit_path).AndReturn(False) | 
| + isfile(root_presubmit).AndReturn(True) | 
| + isfile(linux_presubmit).AndReturn(True) | 
| + FileRead(root_presubmit, 'rU').AndReturn(root_text) | 
| + FileRead(linux_presubmit, 'rU').AndReturn(linux_text) | 
| + self.mox.ReplayAll() | 
| + | 
| + change = presubmit.Change( | 
| + 'mychange', '', self.fake_root_dir, [], 0, 0, None) | 
| + | 
| + output = StringIO.StringIO() | 
| + self.assertEqual({'t1.cr': {'win': ['defaulttests']}}, | 
| + presubmit.DoGetTryMasters(change, [filename], | 
| + self.fake_root_dir, | 
| + None, None, False, output)) | 
| + output = StringIO.StringIO() | 
| + expected = { | 
| + 't1.cr': {'win': ['defaulttests'], 'linux1': ['t1']}, | 
| + 't2.cr': {'linux2': ['defaulttests']}, | 
| + } | 
| + self.assertEqual(expected, | 
| + presubmit.DoGetTryMasters(change, | 
| + [filename, filename_linux], | 
| + self.fake_root_dir, None, None, | 
| + False, output)) | 
| + | 
| def testMainUnversioned(self): | 
| # OptParser calls presubmit.os.path.exists and is a pain when mocked. | 
| self.UnMock(presubmit.os.path, 'exists') |