OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2010 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 pending_manager.py.""" | 6 """Unit tests for pending_manager.py.""" |
7 | 7 |
8 import logging | 8 import logging |
9 import os | 9 import os |
10 import re | 10 import re |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 { | 95 { |
96 "date": "2010-12-27 03:23:32.489999", | 96 "date": "2010-12-27 03:23:32.489999", |
97 "text": "hi!", | 97 "text": "hi!", |
98 "sender": "author@example.com", | 98 "sender": "author@example.com", |
99 "recipients": ["rev@example.com", "cc@example.com"], | 99 "recipients": ["rev@example.com", "cc@example.com"], |
100 }, | 100 }, |
101 ], | 101 ], |
102 "commit": True, | 102 "commit": True, |
103 }, | 103 }, |
104 } | 104 } |
| 105 self.patchsets = [] |
105 | 106 |
106 def get_pending_issues(self): | 107 def get_pending_issues(self): |
107 return self.issues.keys() | 108 return self.issues.keys() |
108 | 109 |
109 def get_issue_properties(self, issue_id, _): | 110 def get_issue_properties(self, issue_id, _): |
110 return self.issues[issue_id] | 111 return self.issues[issue_id] |
111 | 112 |
112 def close_issue(self, issue): | 113 def close_issue(self, issue): |
113 pass | 114 pass |
114 | 115 |
115 def update_description(self, issue, text): | 116 def update_description(self, issue, text): |
116 pass | 117 pass |
117 | 118 |
118 def set_flag(self, issue, patchset, flag, value): | 119 def set_flag(self, issue, patchset, flag, value): |
119 pass | 120 pass |
120 | 121 |
121 def add_comment(self, issue, text): | 122 def add_comment(self, issue, text): |
122 pass | 123 pass |
123 | 124 |
124 def get_patch(self, issue, patchset): | 125 def get_patch(self, issue, patchset): |
125 return patch.PatchSet([ | 126 self.patchsets.append(patch.PatchSet([ |
126 patch.FilePatchDiff('chrome/file.cc', SVN_PATCH, []), | 127 patch.FilePatchDiff('chrome/file.cc', SVN_PATCH, []), |
127 patch.FilePatchDelete('other/place/foo', True), | 128 patch.FilePatchDelete('other/place/foo', True), |
128 patch.FilePatchBinary('foo', 'data', []), | 129 patch.FilePatchBinary('foo', 'data', []), |
129 ]) | 130 ])) |
| 131 return self.patchsets[-1] |
130 | 132 |
131 | 133 |
132 class FakeCheckout(object): | 134 class FakeCheckout(object): |
133 project_path = os.getcwd() | 135 project_path = os.getcwd() |
134 | 136 |
135 def __init__(self): | 137 def __init__(self): |
136 self._prepare = 0 | 138 self._prepare = 0 |
137 self._commit = [] | 139 self._commit = [] |
138 self._apply_patch = [] | 140 self._apply_patch = [] |
139 | 141 |
140 def prepare(self): | 142 def prepare(self): |
141 self._prepare += 1 | 143 self._prepare += 1 |
142 | 144 |
143 def apply_patch(self, patchset): | 145 def apply_patch(self, *args): |
144 self._apply_patch.append(patchset) | 146 self._apply_patch.append(args) |
145 | 147 |
146 def commit(self, message, author): | 148 def commit(self, *args): |
147 self._commit.append((message, author)) | 149 self._commit.append(args) |
148 | 150 |
149 def get_settings(self, key): | 151 def get_settings(self, key): |
150 return None | 152 return None |
151 | 153 |
152 | 154 |
153 class PendingManager(unittest.TestCase): | 155 class TestPendingManager(unittest.TestCase): |
154 def setUp(self): | 156 def setUp(self): |
155 super(PendingManager, self).setUp() | 157 super(TestPendingManager, self).setUp() |
156 self.root_dir = ROOT_DIR | 158 self.root_dir = ROOT_DIR |
157 self._old_send_stack = pending_manager.breakpad.SendStack | 159 self._old_send_stack = pending_manager.breakpad.SendStack |
158 pending_manager.breakpad.SendStack = _SendStackFail | 160 pending_manager.breakpad.SendStack = _SendStackFail |
159 | 161 |
160 def tearDown(self): | 162 def tearDown(self): |
161 pending_manager.breakpad.SendStack = self._old_send_stack | 163 pending_manager.breakpad.SendStack = self._old_send_stack |
162 super(PendingManager, self).tearDown() | 164 super(TestPendingManager, self).tearDown() |
163 | 165 |
164 def testLoadSave(self): | 166 def testLoadSave(self): |
165 pc = pending_manager.PendingManager( | 167 pc = pending_manager.PendingManager( |
166 None, None, [fake.FakeVerifier(base.SUCCEEDED)], []) | 168 None, None, [fake.FakeVerifier(base.SUCCEEDED)], [], []) |
167 filename = os.path.join(self.root_dir, 'foo.json') | 169 filename = os.path.join(self.root_dir, 'foo.json') |
168 empty = """{ | 170 empty = """{ |
169 "__persistent_module__": "pending_manager", | 171 "__persistent_module__": "pending_manager", |
170 "__persistent_type__": "PendingQueue", | 172 "__persistent_type__": "PendingQueue", |
171 "pending_commits": [] | 173 "pending_commits": [] |
172 } | 174 } |
173 """ | 175 """ |
174 write(filename, empty) | 176 write(filename, empty) |
175 try: | 177 try: |
176 pc.load(filename) | 178 pc.load(filename) |
177 self.assertEquals(pc.queue.pending_commits, []) | 179 self.assertEquals(pc.queue.pending_commits, []) |
178 pc.save(filename) | 180 pc.save(filename) |
179 self.assertEquals(trim(empty), trim(read(filename))) | 181 self.assertEquals(trim(empty), trim(read(filename))) |
180 finally: | 182 finally: |
181 os.remove(filename) | 183 os.remove(filename) |
182 if os.path.exists(filename + '.old'): | 184 if os.path.exists(filename + '.old'): |
183 os.remove(filename + '.old') | 185 os.remove(filename + '.old') |
184 | 186 |
185 def _get_pc(self, verifiers_no_patch, verifiers): | 187 def _get_pc(self, verifiers_no_patch, verifiers): |
186 pc = pending_manager.PendingManager( | 188 pc = pending_manager.PendingManager( |
187 FakeRietveld(), FakeCheckout(), verifiers_no_patch, verifiers) | 189 FakeRietveld(), FakeCheckout(), verifiers_no_patch, verifiers, []) |
188 | 190 |
189 def apply_patch(pending, revision): | 191 def apply_patch(pending, revision): |
190 pc._patch_applied = True | 192 pc._patch_applied = True |
191 | 193 |
192 pc._apply_patch = apply_patch | 194 pc._apply_patch = apply_patch |
193 pc._patch_applied = False | 195 pc._patch_applied = False |
194 return pc | 196 return pc |
195 | 197 |
196 def testNoVerification(self): | 198 def testNoVerification(self): |
197 try: | 199 try: |
198 pending_manager.PendingManager( | 200 pending_manager.PendingManager( |
199 FakeRietveld(), FakeCheckout(), [], []) | 201 FakeRietveld(), FakeCheckout(), [], [], []) |
200 self.fail() | 202 self.fail() |
201 except AssertionError: | 203 except AssertionError: |
202 pass | 204 pass |
203 try: | 205 try: |
204 pending_manager.PendingManager( | 206 pending_manager.PendingManager( |
205 FakeRietveld(), | 207 FakeRietveld(), |
206 FakeCheckout(), | 208 FakeCheckout(), |
207 [fake.FakeVerifier(base.SUCCEEDED)], | 209 [fake.FakeVerifier(base.SUCCEEDED)], |
208 [fake.FakeVerifier(base.SUCCEEDED)]) | 210 [fake.FakeVerifier(base.SUCCEEDED)], |
| 211 []) |
209 self.fail() | 212 self.fail() |
210 except AssertionError: | 213 except AssertionError: |
211 pass | 214 pass |
212 | 215 |
213 def _check_1(self, pc, result): | 216 def _check_1(self, pc, result): |
214 self.assertEquals(len(pc.queue.pending_commits), 0) | 217 self.assertEquals(len(pc.queue.pending_commits), 0) |
215 pc.look_for_new_pending_commit() | 218 pc.look_for_new_pending_commit() |
216 self.assertEquals(len(pc.queue.pending_commits), 1) | 219 self.assertEquals(len(pc.queue.pending_commits), 1) |
217 commit = pc.queue.pending_commits[0] | 220 commit = pc.queue.pending_commits[0] |
218 self.assertEquals(len(commit.verifications), 0) | 221 self.assertEquals(len(commit.verifications), 0) |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
403 | 406 |
404 def testDefer4Verification3rdFail(self): | 407 def testDefer4Verification3rdFail(self): |
405 self._check_defer_4( | 408 self._check_defer_4( |
406 base.SUCCEEDED, base.SUCCEEDED, base.FAILED, base.SUCCEEDED) | 409 base.SUCCEEDED, base.SUCCEEDED, base.FAILED, base.SUCCEEDED) |
407 | 410 |
408 def testRelPath(self): | 411 def testRelPath(self): |
409 verifiers = [ | 412 verifiers = [ |
410 project_base.ProjectBaseUrlVerifier( | 413 project_base.ProjectBaseUrlVerifier( |
411 [r'^%s(.*)$' % re.escape(r'http://example.com/')]), | 414 [r'^%s(.*)$' % re.escape(r'http://example.com/')]), |
412 ] | 415 ] |
| 416 r = FakeRietveld() |
| 417 processors = [object()] |
413 pc = pending_manager.PendingManager( | 418 pc = pending_manager.PendingManager( |
414 FakeRietveld(), FakeCheckout(), verifiers, []) | 419 r, FakeCheckout(), verifiers, [], processors) |
415 pc.rietveld.issues[31337]['base_url'] = 'http://example.com/sub/dir' | 420 pc.rietveld.issues[31337]['base_url'] = 'http://example.com/sub/dir' |
416 pc.look_for_new_pending_commit() | 421 pc.look_for_new_pending_commit() |
417 self.assertEquals(1, len(pc.queue.pending_commits)) | 422 self.assertEquals(1, len(pc.queue.pending_commits)) |
418 pc.process_new_pending_commit() | 423 pc.process_new_pending_commit() |
419 self.assertEquals('sub/dir', pc.queue.pending_commits[0].relpath) | 424 self.assertEquals('sub/dir', pc.queue.pending_commits[0].relpath) |
420 self.assertEquals(1, pc.checkout._prepare) | 425 self.assertEquals(1, pc.checkout._prepare) |
421 self.assertEquals(1, len(pc.checkout._apply_patch)) | 426 self.assertEquals([(r.patchsets[0], processors)], pc.checkout._apply_patch) |
422 self.assertEquals([], pc.checkout._commit) | 427 self.assertEquals([], pc.checkout._commit) |
423 pc.update_status() | 428 pc.update_status() |
424 self.assertEquals(1, pc.checkout._prepare) | 429 self.assertEquals(1, pc.checkout._prepare) |
425 self.assertEquals(1, len(pc.checkout._apply_patch)) | 430 self.assertEquals([(r.patchsets[0], processors)], pc.checkout._apply_patch) |
426 self.assertEquals([], pc.checkout._commit) | 431 self.assertEquals([], pc.checkout._commit) |
427 patches = pc.checkout._apply_patch[0] | 432 patches = pc.checkout._apply_patch[0] |
428 self.assertEquals( | 433 self.assertEquals( |
429 ['sub/dir/chrome/file.cc', 'sub/dir/other/place/foo', 'sub/dir/foo'], | 434 ['sub/dir/chrome/file.cc', 'sub/dir/other/place/foo', 'sub/dir/foo'], |
430 patches.filenames) | 435 patches[0].filenames) |
431 pc.scan_results() | 436 pc.scan_results() |
432 self.assertEquals(2, pc.checkout._prepare) | 437 self.assertEquals(2, pc.checkout._prepare) |
433 self.assertEquals(2, len(pc.checkout._apply_patch)) | 438 self.assertEquals( |
| 439 [(r.patchsets[0], processors), (r.patchsets[1], processors)], |
| 440 pc.checkout._apply_patch) |
434 self.assertEquals( | 441 self.assertEquals( |
435 [('foo\n\nReview URL: http://nowhere/31337', 'author@example.com')], | 442 [('foo\n\nReview URL: http://nowhere/31337', 'author@example.com')], |
436 pc.checkout._commit) | 443 pc.checkout._commit) |
437 | 444 |
438 | 445 |
439 if __name__ == '__main__': | 446 if __name__ == '__main__': |
440 logging.basicConfig(level=logging.ERROR) | 447 logging.basicConfig(level=logging.ERROR) |
441 unittest.main() | 448 unittest.main() |
OLD | NEW |