OLD | NEW |
---|---|
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright (c) 2009 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 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 gcl.py.""" | 6 """Unit tests for gcl.py.""" |
7 | 7 |
8 import StringIO | 8 import StringIO |
9 import os | 9 import os |
10 import sys | 10 import sys |
11 import unittest | 11 import unittest |
12 | 12 |
13 # Local imports | 13 # Local imports |
14 import __init__ | 14 import __init__ |
15 import gcl | 15 import gcl |
16 mox = __init__.mox | 16 mox = __init__.mox |
17 | 17 |
18 | 18 |
19 class GclTestsBase(unittest.TestCase): | 19 class GclTestsBase(unittest.TestCase): |
20 """Setups and tear downs the mocks but doesn't test anything as-is.""" | 20 """Setups and tear downs the mocks but doesn't test anything as-is.""" |
21 def setUp(self): | 21 def setUp(self): |
22 self.mox = mox.Mox() | |
22 def RunShellMock(filename): | 23 def RunShellMock(filename): |
23 return filename | 24 return filename |
24 self._RunShell = gcl.RunShell | 25 self._RunShell = gcl.RunShell |
25 gcl.RunShell = RunShellMock | 26 gcl.RunShell = RunShellMock |
27 self._gcl_gclient_CaptureSVNInfo = gcl.gclient.CaptureSVNInfo | |
28 gcl.gclient.CaptureSVNInfo = self.mox.CreateMockAnything() | |
29 self._gcl_os_getcwd = gcl.os.getcwd | |
30 gcl.os.getcwd = self.mox.CreateMockAnything() | |
26 | 31 |
27 def tearDown(self): | 32 def tearDown(self): |
28 gcl.RunShell = self._RunShell | 33 gcl.RunShell = self._RunShell |
34 gcl.gclient.CaptureSVNInfo = self._gcl_gclient_CaptureSVNInfo | |
35 gcl.os.getcwd = self._gcl_os_getcwd | |
29 | 36 |
30 def compareMembers(self, object, members): | 37 def compareMembers(self, object, members): |
31 """If you add a member, be sure to add the relevant test!""" | 38 """If you add a member, be sure to add the relevant test!""" |
32 # Skip over members starting with '_' since they are usually not meant to | 39 # Skip over members starting with '_' since they are usually not meant to |
33 # be for public use. | 40 # be for public use. |
34 actual_members = [x for x in sorted(dir(object)) | 41 actual_members = [x for x in sorted(dir(object)) |
35 if not x.startswith('_')] | 42 if not x.startswith('_')] |
36 expected_members = sorted(members) | 43 expected_members = sorted(members) |
37 if actual_members != expected_members: | 44 if actual_members != expected_members: |
38 diff = ([i for i in actual_members if i not in expected_members] + | 45 diff = ([i for i in actual_members if i not in expected_members] + |
(...skipping 29 matching lines...) Expand all Loading... | |
68 def testHelp(self): | 75 def testHelp(self): |
69 old_stdout = sys.stdout | 76 old_stdout = sys.stdout |
70 try: | 77 try: |
71 dummy = StringIO.StringIO() | 78 dummy = StringIO.StringIO() |
72 gcl.sys.stdout = dummy | 79 gcl.sys.stdout = dummy |
73 gcl.Help() | 80 gcl.Help() |
74 self.assertEquals(len(dummy.getvalue()), 1813) | 81 self.assertEquals(len(dummy.getvalue()), 1813) |
75 finally: | 82 finally: |
76 gcl.sys.stdout = old_stdout | 83 gcl.sys.stdout = old_stdout |
77 | 84 |
78 def testGetRepositoryRoot(self): | 85 def testGetRepositoryRootNone(self): |
79 try: | 86 gcl.repository_root = None |
80 def RunShellMock(filename): | 87 gcl.os.getcwd().AndReturn("/bleh/prout") |
81 return '<?xml version="1.0"?>\n<info>' | 88 result = { |
82 gcl.RunShell = RunShellMock | 89 "Repository Root": "" |
83 gcl.GetRepositoryRoot() | 90 } |
84 except Exception,e: | 91 gcl.gclient.CaptureSVNInfo("/bleh/prout", print_error=False).AndReturn(resul t) |
Nicolas Sylvain
2009/05/20 18:26:57
80 chars
| |
85 self.assertEquals(e.args[0], "gcl run outside of repository") | 92 self.mox.ReplayAll() |
86 pass | 93 self.assertRaises(Exception, gcl.GetRepositoryRoot) |
94 self.mox.VerifyAll() | |
95 | |
96 def testGetRepositoryRootGood(self): | |
97 gcl.repository_root = None | |
98 root_path = os.path.join('bleh', 'prout', 'pouet') | |
99 gcl.os.getcwd().AndReturn(root_path) | |
100 result1 = { "Repository Root": "Some root" } | |
101 gcl.gclient.CaptureSVNInfo(root_path, print_error=False).AndReturn(result1) | |
102 gcl.os.getcwd().AndReturn(root_path) | |
103 results2 = { "Repository Root": "A different root" } | |
104 gcl.gclient.CaptureSVNInfo( | |
105 os.path.dirname(root_path), | |
106 print_error=False).AndReturn(results2) | |
107 self.mox.ReplayAll() | |
108 self.assertEquals(gcl.GetRepositoryRoot(), root_path) | |
109 self.mox.VerifyAll() | |
87 | 110 |
88 | 111 |
89 class ChangeInfoUnittest(GclTestsBase): | 112 class ChangeInfoUnittest(GclTestsBase): |
90 def testChangeInfoMembers(self): | 113 def testChangeInfoMembers(self): |
91 members = [ | 114 members = [ |
92 'CloseIssue', 'Delete', 'FileList', 'MissingTests', 'Save', | 115 'CloseIssue', 'Delete', 'FileList', 'MissingTests', 'Save', |
93 'UpdateRietveldDescription', 'description', 'files', 'issue', 'name', | 116 'UpdateRietveldDescription', 'description', 'files', 'issue', 'name', |
94 'patch' | 117 'patch' |
95 ] | 118 ] |
96 # If this test fails, you should add the relevant test. | 119 # If this test fails, you should add the relevant test. |
97 self.compareMembers(gcl.ChangeInfo(), members) | 120 self.compareMembers(gcl.ChangeInfo(), members) |
98 | 121 |
99 def testChangeInfoBase(self): | 122 def testChangeInfoBase(self): |
100 files = [('M', 'foo'), ('A', 'bar')] | 123 files = [('M', 'foo'), ('A', 'bar')] |
101 o = gcl.ChangeInfo('name2', 'issue2', 'description2', files) | 124 o = gcl.ChangeInfo('name2', 'issue2', 'description2', files) |
102 self.assertEquals(o.name, 'name2') | 125 self.assertEquals(o.name, 'name2') |
103 self.assertEquals(o.issue, 'issue2') | 126 self.assertEquals(o.issue, 'issue2') |
104 self.assertEquals(o.description, 'description2') | 127 self.assertEquals(o.description, 'description2') |
105 self.assertEquals(o.files, files) | 128 self.assertEquals(o.files, files) |
106 self.assertEquals(o.patch, None) | 129 self.assertEquals(o.patch, None) |
107 self.assertEquals(o.FileList(), ['foo', 'bar']) | 130 self.assertEquals(o.FileList(), ['foo', 'bar']) |
108 | 131 |
109 | 132 |
110 class UploadCLUnittest(GclTestsBase): | 133 class UploadCLUnittest(GclTestsBase): |
111 def setUp(self): | 134 def setUp(self): |
112 GclTestsBase.setUp(self) | 135 GclTestsBase.setUp(self) |
113 self.mox = mox.Mox() | |
114 self._os_chdir = gcl.os.chdir | 136 self._os_chdir = gcl.os.chdir |
115 gcl.os.chdir = self.mox.CreateMockAnything() | 137 gcl.os.chdir = self.mox.CreateMockAnything() |
116 self._os_close = gcl.os.close | 138 self._os_close = gcl.os.close |
117 gcl.os.close = self.mox.CreateMockAnything() | 139 gcl.os.close = self.mox.CreateMockAnything() |
118 self._os_getcwd = gcl.os.getcwd | |
119 gcl.os.getcwd = self.mox.CreateMockAnything() | |
120 self._os_remove = gcl.os.remove | 140 self._os_remove = gcl.os.remove |
121 gcl.os.remove = self.mox.CreateMockAnything() | 141 gcl.os.remove = self.mox.CreateMockAnything() |
122 self._os_write = gcl.os.write | 142 self._os_write = gcl.os.write |
123 gcl.os.write = self.mox.CreateMockAnything() | 143 gcl.os.write = self.mox.CreateMockAnything() |
124 self._tempfile = gcl.tempfile | 144 self._tempfile = gcl.tempfile |
125 gcl.tempfile = self.mox.CreateMockAnything() | 145 gcl.tempfile = self.mox.CreateMockAnything() |
126 self._upload_RealMain = gcl.upload.RealMain | 146 self._upload_RealMain = gcl.upload.RealMain |
127 gcl.upload.RealMain = self.mox.CreateMockAnything() | 147 gcl.upload.RealMain = self.mox.CreateMockAnything() |
128 self._DoPresubmitChecks = gcl.DoPresubmitChecks | 148 self._DoPresubmitChecks = gcl.DoPresubmitChecks |
129 gcl.DoPresubmitChecks = self.mox.CreateMockAnything() | 149 gcl.DoPresubmitChecks = self.mox.CreateMockAnything() |
130 self._GenerateDiff = gcl.GenerateDiff | 150 self._GenerateDiff = gcl.GenerateDiff |
131 gcl.GenerateDiff = self.mox.CreateMockAnything() | 151 gcl.GenerateDiff = self.mox.CreateMockAnything() |
132 self._GetCodeReviewSetting = gcl.GetCodeReviewSetting | 152 self._GetCodeReviewSetting = gcl.GetCodeReviewSetting |
133 gcl.GetCodeReviewSetting = self.mox.CreateMockAnything() | 153 gcl.GetCodeReviewSetting = self.mox.CreateMockAnything() |
134 self._GetRepositoryRoot = gcl.GetRepositoryRoot | 154 self._GetRepositoryRoot = gcl.GetRepositoryRoot |
135 gcl.GetRepositoryRoot = self.mox.CreateMockAnything() | 155 gcl.GetRepositoryRoot = self.mox.CreateMockAnything() |
136 self._SendToRietveld = gcl.SendToRietveld | 156 self._SendToRietveld = gcl.SendToRietveld |
137 gcl.SendToRietveld = self.mox.CreateMockAnything() | 157 gcl.SendToRietveld = self.mox.CreateMockAnything() |
138 self._TryChange = gcl.TryChange | 158 self._TryChange = gcl.TryChange |
139 gcl.TryChange = self.mox.CreateMockAnything() | 159 gcl.TryChange = self.mox.CreateMockAnything() |
140 | 160 |
141 def tearDown(self): | 161 def tearDown(self): |
142 GclTestsBase.tearDown(self) | 162 GclTestsBase.tearDown(self) |
143 gcl.os.chdir = self._os_chdir | 163 gcl.os.chdir = self._os_chdir |
144 gcl.os.close = self._os_close | 164 gcl.os.close = self._os_close |
145 gcl.os.getcwd = self._os_getcwd | |
146 gcl.os.remove = self._os_remove | 165 gcl.os.remove = self._os_remove |
147 gcl.os.write = self._os_write | 166 gcl.os.write = self._os_write |
148 gcl.tempfile = self._tempfile | 167 gcl.tempfile = self._tempfile |
149 gcl.upload.RealMain = self._upload_RealMain | 168 gcl.upload.RealMain = self._upload_RealMain |
150 gcl.DoPresubmitChecks = self._DoPresubmitChecks | 169 gcl.DoPresubmitChecks = self._DoPresubmitChecks |
151 gcl.GenerateDiff = self._GenerateDiff | 170 gcl.GenerateDiff = self._GenerateDiff |
152 gcl.GetCodeReviewSetting = self._GetCodeReviewSetting | 171 gcl.GetCodeReviewSetting = self._GetCodeReviewSetting |
153 gcl.GetRepositoryRoot = self._GetRepositoryRoot | 172 gcl.GetRepositoryRoot = self._GetRepositoryRoot |
154 gcl.SendToRietveld = self._SendToRietveld | 173 gcl.SendToRietveld = self._SendToRietveld |
155 gcl.TryChange = self._TryChange | 174 gcl.TryChange = self._TryChange |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
257 ['--issue', '1', '--patchset', '2'], | 276 ['--issue', '1', '--patchset', '2'], |
258 swallow_exception=True) | 277 swallow_exception=True) |
259 gcl.os.chdir('somewhere') | 278 gcl.os.chdir('somewhere') |
260 self.mox.ReplayAll() | 279 self.mox.ReplayAll() |
261 gcl.UploadCL(change_info, args) | 280 gcl.UploadCL(change_info, args) |
262 self.mox.VerifyAll() | 281 self.mox.VerifyAll() |
263 | 282 |
264 | 283 |
265 if __name__ == '__main__': | 284 if __name__ == '__main__': |
266 unittest.main() | 285 unittest.main() |
OLD | NEW |