| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2011 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 checkout.py.""" | 6 """Unit tests for checkout.py.""" |
| 7 | 7 |
| 8 from __future__ import with_statement | 8 from __future__ import with_statement |
| 9 import logging | 9 import logging |
| 10 import os | 10 import os |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 tree['new_dir/subdir/new_file'] = 'A new file\nshould exist.\n' | 174 tree['new_dir/subdir/new_file'] = 'A new file\nshould exist.\n' |
| 175 return tree | 175 return tree |
| 176 | 176 |
| 177 def _check_base(self, co, root, git, expected): | 177 def _check_base(self, co, root, git, expected): |
| 178 read_only = isinstance(co, checkout.ReadOnlyCheckout) | 178 read_only = isinstance(co, checkout.ReadOnlyCheckout) |
| 179 assert not read_only == bool(expected) | 179 assert not read_only == bool(expected) |
| 180 if not read_only: | 180 if not read_only: |
| 181 self.FAKE_REPOS.svn_dirty = True | 181 self.FAKE_REPOS.svn_dirty = True |
| 182 | 182 |
| 183 self.assertEquals(root, co.project_path) | 183 self.assertEquals(root, co.project_path) |
| 184 self.assertEquals(self.previous_log['revision'], co.prepare()) | 184 self.assertEquals(self.previous_log['revision'], co.prepare(None)) |
| 185 self.assertEquals('pouet', co.get_settings('bar')) | 185 self.assertEquals('pouet', co.get_settings('bar')) |
| 186 self.assertTree(self.get_trunk(False), root) | 186 self.assertTree(self.get_trunk(False), root) |
| 187 patches = self.get_patches() | 187 patches = self.get_patches() |
| 188 co.apply_patch(patches) | 188 co.apply_patch(patches) |
| 189 self.assertEquals( | 189 self.assertEquals( |
| 190 ['bin_file', 'extra', 'new_dir/subdir/new_file', 'svn_utils_test.txt'], | 190 ['bin_file', 'extra', 'new_dir/subdir/new_file', 'svn_utils_test.txt'], |
| 191 sorted(patches.filenames)) | 191 sorted(patches.filenames)) |
| 192 | 192 |
| 193 if git: | 193 if git: |
| 194 # Hackish to verify _branches() internal function. | 194 # Hackish to verify _branches() internal function. |
| 195 # pylint: disable=W0212 | 195 # pylint: disable=W0212 |
| 196 self.assertEquals( | 196 self.assertEquals( |
| 197 (['master', 'working_branch'], 'working_branch'), | 197 (['master', 'working_branch'], 'working_branch'), |
| 198 co.checkout._branches()) | 198 co.checkout._branches()) |
| 199 | 199 |
| 200 # Verify that the patch is applied even for read only checkout. | 200 # Verify that the patch is applied even for read only checkout. |
| 201 self.assertTree(self.get_trunk(True), root) | 201 self.assertTree(self.get_trunk(True), root) |
| 202 fake_author = self.FAKE_REPOS.USERS[1][0] | 202 fake_author = self.FAKE_REPOS.USERS[1][0] |
| 203 revision = co.commit(u'msg', fake_author) | 203 revision = co.commit(u'msg', fake_author) |
| 204 # Nothing changed. | 204 # Nothing changed. |
| 205 self.assertTree(self.get_trunk(True), root) | 205 self.assertTree(self.get_trunk(True), root) |
| 206 | 206 |
| 207 if read_only: | 207 if read_only: |
| 208 self.assertEquals('FAKE', revision) | 208 self.assertEquals('FAKE', revision) |
| 209 self.assertEquals(self.previous_log['revision'], co.prepare()) | 209 self.assertEquals(self.previous_log['revision'], co.prepare(None)) |
| 210 # Changes should be reverted now. | 210 # Changes should be reverted now. |
| 211 self.assertTree(self.get_trunk(False), root) | 211 self.assertTree(self.get_trunk(False), root) |
| 212 expected = self.previous_log | 212 expected = self.previous_log |
| 213 else: | 213 else: |
| 214 self.assertEquals(self.previous_log['revision'] + 1, revision) | 214 self.assertEquals(self.previous_log['revision'] + 1, revision) |
| 215 self.assertEquals(self.previous_log['revision'] + 1, co.prepare()) | 215 self.assertEquals(self.previous_log['revision'] + 1, co.prepare(None)) |
| 216 self.assertTree(self.get_trunk(True), root) | 216 self.assertTree(self.get_trunk(True), root) |
| 217 expected = expected.copy() | 217 expected = expected.copy() |
| 218 expected['msg'] = 'msg' | 218 expected['msg'] = 'msg' |
| 219 expected['revision'] = self.previous_log['revision'] + 1 | 219 expected['revision'] = self.previous_log['revision'] + 1 |
| 220 expected.setdefault('author', fake_author) | 220 expected.setdefault('author', fake_author) |
| 221 | 221 |
| 222 actual = self._log() | 222 actual = self._log() |
| 223 self.assertEquals(expected, actual) | 223 self.assertEquals(expected, actual) |
| 224 | 224 |
| 225 def _check_exception(self, co, err_msg): | 225 def _check_exception(self, co, err_msg): |
| 226 co.prepare() | 226 co.prepare(None) |
| 227 try: | 227 try: |
| 228 co.apply_patch([patch.FilePatchDiff('svn_utils_test.txt', BAD_PATCH, [])]) | 228 co.apply_patch([patch.FilePatchDiff('svn_utils_test.txt', BAD_PATCH, [])]) |
| 229 self.fail() | 229 self.fail() |
| 230 except checkout.PatchApplicationFailed, e: | 230 except checkout.PatchApplicationFailed, e: |
| 231 self.assertEquals(e.filename, 'svn_utils_test.txt') | 231 self.assertEquals(e.filename, 'svn_utils_test.txt') |
| 232 self.assertEquals(e.status, err_msg) | 232 self.assertEquals(e.status, err_msg) |
| 233 | 233 |
| 234 def _log(self): | 234 def _log(self): |
| 235 raise NotImplementedError() | 235 raise NotImplementedError() |
| 236 | 236 |
| 237 def _test_process(self, co): | 237 def _test_process(self, co): |
| 238 """Makes sure the process lambda is called correctly.""" | 238 """Makes sure the process lambda is called correctly.""" |
| 239 co.post_processors = [lambda *args: results.append(args)] | 239 co.post_processors = [lambda *args: results.append(args)] |
| 240 co.prepare() | 240 co.prepare(None) |
| 241 ps = self.get_patches() | 241 ps = self.get_patches() |
| 242 results = [] | 242 results = [] |
| 243 co.apply_patch(ps) | 243 co.apply_patch(ps) |
| 244 expected = [(co, p) for p in ps.patches] | 244 expected = [(co, p) for p in ps.patches] |
| 245 self.assertEquals(expected, results) | 245 self.assertEquals(expected, results) |
| 246 | 246 |
| 247 | 247 |
| 248 class SvnBaseTest(BaseTest): | 248 class SvnBaseTest(BaseTest): |
| 249 def setUp(self): | 249 def setUp(self): |
| 250 super(SvnBaseTest, self).setUp() | 250 super(SvnBaseTest, self).setUp() |
| (...skipping 23 matching lines...) Expand all Loading... |
| 274 data[name] = item.text | 274 data[name] = item.text |
| 275 set_item('author') | 275 set_item('author') |
| 276 set_item('msg') | 276 set_item('msg') |
| 277 revprops = logentry.find('revprops') | 277 revprops = logentry.find('revprops') |
| 278 if revprops != None: | 278 if revprops != None: |
| 279 data['revprops'] = [] | 279 data['revprops'] = [] |
| 280 for prop in revprops.getiterator('property'): | 280 for prop in revprops.getiterator('property'): |
| 281 data['revprops'].append((prop.attrib['name'], prop.text)) | 281 data['revprops'].append((prop.attrib['name'], prop.text)) |
| 282 return data | 282 return data |
| 283 | 283 |
| 284 def _test_prepare(self, co): |
| 285 self.assertEquals(1, co.prepare(1)) |
| 286 |
| 284 | 287 |
| 285 class SvnCheckout(SvnBaseTest): | 288 class SvnCheckout(SvnBaseTest): |
| 286 def _get_co(self, read_only): | 289 def _get_co(self, read_only): |
| 287 if read_only: | 290 if read_only: |
| 288 return checkout.ReadOnlyCheckout( | 291 return checkout.ReadOnlyCheckout( |
| 289 checkout.SvnCheckout( | 292 checkout.SvnCheckout( |
| 290 self.root_dir, self.name, None, None, self.svn_url)) | 293 self.root_dir, self.name, None, None, self.svn_url)) |
| 291 else: | 294 else: |
| 292 return checkout.SvnCheckout( | 295 return checkout.SvnCheckout( |
| 293 self.root_dir, self.name, self.usr, self.pwd, self.svn_url) | 296 self.root_dir, self.name, self.usr, self.pwd, self.svn_url) |
| (...skipping 16 matching lines...) Expand all Loading... |
| 310 self._check_exception( | 313 self._check_exception( |
| 311 self._get_co(True), | 314 self._get_co(True), |
| 312 'While running patch -p1 --forward --force;\n' | 315 'While running patch -p1 --forward --force;\n' |
| 313 'patching file svn_utils_test.txt\n' | 316 'patching file svn_utils_test.txt\n' |
| 314 'Hunk #1 FAILED at 3.\n' | 317 'Hunk #1 FAILED at 3.\n' |
| 315 '1 out of 1 hunk FAILED -- saving rejects to file ' | 318 '1 out of 1 hunk FAILED -- saving rejects to file ' |
| 316 'svn_utils_test.txt.rej\n') | 319 'svn_utils_test.txt.rej\n') |
| 317 | 320 |
| 318 def testSvnProps(self): | 321 def testSvnProps(self): |
| 319 co = self._get_co(False) | 322 co = self._get_co(False) |
| 320 co.prepare() | 323 co.prepare(None) |
| 321 try: | 324 try: |
| 322 # svn:ignore can only be applied to directories. | 325 # svn:ignore can only be applied to directories. |
| 323 svn_props = [('svn:ignore', 'foo')] | 326 svn_props = [('svn:ignore', 'foo')] |
| 324 co.apply_patch( | 327 co.apply_patch( |
| 325 [patch.FilePatchDiff('svn_utils_test.txt', NAKED_PATCH, svn_props)]) | 328 [patch.FilePatchDiff('svn_utils_test.txt', NAKED_PATCH, svn_props)]) |
| 326 self.fail() | 329 self.fail() |
| 327 except checkout.PatchApplicationFailed, e: | 330 except checkout.PatchApplicationFailed, e: |
| 328 self.assertEquals(e.filename, 'svn_utils_test.txt') | 331 self.assertEquals(e.filename, 'svn_utils_test.txt') |
| 329 self.assertEquals( | 332 self.assertEquals( |
| 330 e.status, | 333 e.status, |
| 331 'While running svn propset svn:ignore foo svn_utils_test.txt ' | 334 'While running svn propset svn:ignore foo svn_utils_test.txt ' |
| 332 '--non-interactive;\n' | 335 '--non-interactive;\n' |
| 333 'patching file svn_utils_test.txt\n' | 336 'patching file svn_utils_test.txt\n' |
| 334 'svn: Cannot set \'svn:ignore\' on a file (\'svn_utils_test.txt\')\n') | 337 'svn: Cannot set \'svn:ignore\' on a file (\'svn_utils_test.txt\')\n') |
| 335 co.prepare() | 338 co.prepare(None) |
| 336 svn_props = [('svn:eol-style', 'LF'), ('foo', 'bar')] | 339 svn_props = [('svn:eol-style', 'LF'), ('foo', 'bar')] |
| 337 co.apply_patch( | 340 co.apply_patch( |
| 338 [patch.FilePatchDiff('svn_utils_test.txt', NAKED_PATCH, svn_props)]) | 341 [patch.FilePatchDiff('svn_utils_test.txt', NAKED_PATCH, svn_props)]) |
| 339 filepath = os.path.join(self.root_dir, self.name, 'svn_utils_test.txt') | 342 filepath = os.path.join(self.root_dir, self.name, 'svn_utils_test.txt') |
| 340 # Manually verify the properties. | 343 # Manually verify the properties. |
| 341 props = subprocess2.check_output( | 344 props = subprocess2.check_output( |
| 342 ['svn', 'proplist', filepath], | 345 ['svn', 'proplist', filepath], |
| 343 cwd=self.root_dir).splitlines()[1:] | 346 cwd=self.root_dir).splitlines()[1:] |
| 344 props = sorted(p.strip() for p in props) | 347 props = sorted(p.strip() for p in props) |
| 345 expected_props = dict(svn_props) | 348 expected_props = dict(svn_props) |
| (...skipping 26 matching lines...) Expand all Loading... |
| 372 root = os.path.join(self.root_dir, self.name) | 375 root = os.path.join(self.root_dir, self.name) |
| 373 expected = { | 376 expected = { |
| 374 'author': self.FAKE_REPOS.USERS[1][0], | 377 'author': self.FAKE_REPOS.USERS[1][0], |
| 375 } | 378 } |
| 376 self._check_base(co, root, False, expected) | 379 self._check_base(co, root, False, expected) |
| 377 | 380 |
| 378 def testAutoProps(self): | 381 def testAutoProps(self): |
| 379 co = self._get_co(False) | 382 co = self._get_co(False) |
| 380 co.svn_config = checkout.SvnConfig( | 383 co.svn_config = checkout.SvnConfig( |
| 381 os.path.join(ROOT_DIR, 'subversion_config')) | 384 os.path.join(ROOT_DIR, 'subversion_config')) |
| 382 co.prepare() | 385 co.prepare(None) |
| 383 patches = self.get_patches() | 386 patches = self.get_patches() |
| 384 co.apply_patch(patches) | 387 co.apply_patch(patches) |
| 385 self.assertEquals( | 388 self.assertEquals( |
| 386 ['bin_file', 'extra', 'new_dir/subdir/new_file', 'svn_utils_test.txt'], | 389 ['bin_file', 'extra', 'new_dir/subdir/new_file', 'svn_utils_test.txt'], |
| 387 sorted(patches.filenames)) | 390 sorted(patches.filenames)) |
| 388 # *.txt = svn:eol-style=LF in subversion_config/config. | 391 # *.txt = svn:eol-style=LF in subversion_config/config. |
| 389 out = subprocess2.check_output( | 392 out = subprocess2.check_output( |
| 390 ['svn', 'pget', 'svn:eol-style', 'svn_utils_test.txt'], | 393 ['svn', 'pget', 'svn:eol-style', 'svn_utils_test.txt'], |
| 391 cwd=co.project_path) | 394 cwd=co.project_path) |
| 392 self.assertEquals('LF\n', out) | 395 self.assertEquals('LF\n', out) |
| 393 | 396 |
| 394 def testProcess(self): | 397 def testProcess(self): |
| 395 co = checkout.SvnCheckout( | 398 co = checkout.SvnCheckout( |
| 396 self.root_dir, self.name, | 399 self.root_dir, self.name, |
| 397 None, None, | 400 None, None, |
| 398 self.svn_url) | 401 self.svn_url) |
| 399 self._test_process(co) | 402 self._test_process(co) |
| 400 | 403 |
| 404 def testPrepare(self): |
| 405 co = checkout.SvnCheckout( |
| 406 self.root_dir, self.name, |
| 407 None, None, |
| 408 self.svn_url) |
| 409 self._test_prepare(co) |
| 410 |
| 401 | 411 |
| 402 class GitSvnCheckout(SvnBaseTest): | 412 class GitSvnCheckout(SvnBaseTest): |
| 403 name = 'foo.git' | 413 name = 'foo.git' |
| 404 | 414 |
| 405 def _get_co(self, read_only): | 415 def _get_co(self, read_only): |
| 406 co = checkout.GitSvnCheckout( | 416 co = checkout.GitSvnCheckout( |
| 407 self.root_dir, self.name[:-4], | 417 self.root_dir, self.name[:-4], |
| 408 self.usr, self.pwd, | 418 self.usr, self.pwd, |
| 409 self.svn_base, self.svn_trunk) | 419 self.svn_base, self.svn_trunk) |
| 410 if read_only: | 420 if read_only: |
| (...skipping 12 matching lines...) Expand all Loading... |
| 423 | 433 |
| 424 def testAllRW(self): | 434 def testAllRW(self): |
| 425 expected = { | 435 expected = { |
| 426 'author': self.FAKE_REPOS.USERS[0][0], | 436 'author': self.FAKE_REPOS.USERS[0][0], |
| 427 } | 437 } |
| 428 self._check(False, expected) | 438 self._check(False, expected) |
| 429 | 439 |
| 430 def testGitSvnPremade(self): | 440 def testGitSvnPremade(self): |
| 431 # Test premade git-svn clone. First make a git-svn clone. | 441 # Test premade git-svn clone. First make a git-svn clone. |
| 432 git_svn_co = self._get_co(True) | 442 git_svn_co = self._get_co(True) |
| 433 revision = git_svn_co.prepare() | 443 revision = git_svn_co.prepare(None) |
| 434 self.assertEquals(self.previous_log['revision'], revision) | 444 self.assertEquals(self.previous_log['revision'], revision) |
| 435 # Then use GitSvnClone to clone it to lose the git-svn connection and verify | 445 # Then use GitSvnClone to clone it to lose the git-svn connection and verify |
| 436 # git svn init / git svn fetch works. | 446 # git svn init / git svn fetch works. |
| 437 git_svn_clone = checkout.GitSvnPremadeCheckout( | 447 git_svn_clone = checkout.GitSvnPremadeCheckout( |
| 438 self.root_dir, self.name[:-4] + '2', 'trunk', | 448 self.root_dir, self.name[:-4] + '2', 'trunk', |
| 439 self.usr, self.pwd, | 449 self.usr, self.pwd, |
| 440 self.svn_base, self.svn_trunk, git_svn_co.project_path) | 450 self.svn_base, self.svn_trunk, git_svn_co.project_path) |
| 441 self.assertEquals(self.previous_log['revision'], git_svn_clone.prepare()) | 451 self.assertEquals( |
| 452 self.previous_log['revision'], git_svn_clone.prepare(None)) |
| 442 | 453 |
| 443 def testException(self): | 454 def testException(self): |
| 444 self._check_exception( | 455 self._check_exception( |
| 445 self._get_co(True), 'fatal: corrupt patch at line 12\n') | 456 self._get_co(True), 'fatal: corrupt patch at line 12\n') |
| 446 | 457 |
| 447 def testSvnProps(self): | 458 def testSvnProps(self): |
| 448 co = self._get_co(False) | 459 co = self._get_co(False) |
| 449 co.prepare() | 460 co.prepare(None) |
| 450 try: | 461 try: |
| 451 svn_props = [('foo', 'bar')] | 462 svn_props = [('foo', 'bar')] |
| 452 co.apply_patch( | 463 co.apply_patch( |
| 453 [patch.FilePatchDiff('svn_utils_test.txt', NAKED_PATCH, svn_props)]) | 464 [patch.FilePatchDiff('svn_utils_test.txt', NAKED_PATCH, svn_props)]) |
| 454 self.fail() | 465 self.fail() |
| 455 except patch.UnsupportedPatchFormat, e: | 466 except patch.UnsupportedPatchFormat, e: |
| 456 self.assertEquals(e.filename, 'svn_utils_test.txt') | 467 self.assertEquals(e.filename, 'svn_utils_test.txt') |
| 457 self.assertEquals( | 468 self.assertEquals( |
| 458 e.status, | 469 e.status, |
| 459 'Cannot apply svn property foo to file svn_utils_test.txt.') | 470 'Cannot apply svn property foo to file svn_utils_test.txt.') |
| 460 co.prepare() | 471 co.prepare(None) |
| 461 # svn:eol-style is ignored. | 472 # svn:eol-style is ignored. |
| 462 svn_props = [('svn:eol-style', 'LF')] | 473 svn_props = [('svn:eol-style', 'LF')] |
| 463 co.apply_patch( | 474 co.apply_patch( |
| 464 [patch.FilePatchDiff('svn_utils_test.txt', NAKED_PATCH, svn_props)]) | 475 [patch.FilePatchDiff('svn_utils_test.txt', NAKED_PATCH, svn_props)]) |
| 465 | 476 |
| 466 def testProcess(self): | 477 def testProcess(self): |
| 467 co = checkout.SvnCheckout( | 478 co = checkout.SvnCheckout( |
| 468 self.root_dir, self.name, | 479 self.root_dir, self.name, |
| 469 None, None, | 480 None, None, |
| 470 self.svn_url) | 481 self.svn_url) |
| 471 self._test_process(co) | 482 self._test_process(co) |
| 472 | 483 |
| 484 def testPrepare(self): |
| 485 co = checkout.SvnCheckout( |
| 486 self.root_dir, self.name, |
| 487 None, None, |
| 488 self.svn_url) |
| 489 self._test_prepare(co) |
| 490 |
| 473 | 491 |
| 474 class RawCheckout(SvnBaseTest): | 492 class RawCheckout(SvnBaseTest): |
| 475 def setUp(self): | 493 def setUp(self): |
| 476 super(RawCheckout, self).setUp() | 494 super(RawCheckout, self).setUp() |
| 477 # Use a svn checkout as the base. | 495 # Use a svn checkout as the base. |
| 478 self.base_co = checkout.SvnCheckout( | 496 self.base_co = checkout.SvnCheckout( |
| 479 self.root_dir, self.name, None, None, self.svn_url) | 497 self.root_dir, self.name, None, None, self.svn_url) |
| 480 self.base_co.prepare() | 498 self.base_co.prepare(None) |
| 481 | 499 |
| 482 def _get_co(self, read_only): | 500 def _get_co(self, read_only): |
| 483 co = checkout.RawCheckout(self.root_dir, self.name, None) | 501 co = checkout.RawCheckout(self.root_dir, self.name, None) |
| 484 if read_only: | 502 if read_only: |
| 485 return checkout.ReadOnlyCheckout(co) | 503 return checkout.ReadOnlyCheckout(co) |
| 486 return co | 504 return co |
| 487 | 505 |
| 488 def _check(self, read_only): | 506 def _check(self, read_only): |
| 489 root = os.path.join(self.root_dir, self.name) | 507 root = os.path.join(self.root_dir, self.name) |
| 490 co = self._get_co(read_only) | 508 co = self._get_co(read_only) |
| 491 | 509 |
| 492 # A copy of BaseTest._check_base() | 510 # A copy of BaseTest._check_base() |
| 493 self.assertEquals(root, co.project_path) | 511 self.assertEquals(root, co.project_path) |
| 494 self.assertEquals(None, co.prepare()) | 512 self.assertEquals(None, co.prepare(None)) |
| 495 self.assertEquals('pouet', co.get_settings('bar')) | 513 self.assertEquals('pouet', co.get_settings('bar')) |
| 496 self.assertTree(self.get_trunk(False), root) | 514 self.assertTree(self.get_trunk(False), root) |
| 497 patches = self.get_patches() | 515 patches = self.get_patches() |
| 498 co.apply_patch(patches) | 516 co.apply_patch(patches) |
| 499 self.assertEquals( | 517 self.assertEquals( |
| 500 ['bin_file', 'extra', 'new_dir/subdir/new_file', 'svn_utils_test.txt'], | 518 ['bin_file', 'extra', 'new_dir/subdir/new_file', 'svn_utils_test.txt'], |
| 501 sorted(patches.filenames)) | 519 sorted(patches.filenames)) |
| 502 | 520 |
| 503 # Verify that the patch is applied even for read only checkout. | 521 # Verify that the patch is applied even for read only checkout. |
| 504 self.assertTree(self.get_trunk(True), root) | 522 self.assertTree(self.get_trunk(True), root) |
| 505 if read_only: | 523 if read_only: |
| 506 revision = co.commit(u'msg', self.FAKE_REPOS.USERS[1][0]) | 524 revision = co.commit(u'msg', self.FAKE_REPOS.USERS[1][0]) |
| 507 self.assertEquals('FAKE', revision) | 525 self.assertEquals('FAKE', revision) |
| 508 else: | 526 else: |
| 509 try: | 527 try: |
| 510 co.commit(u'msg', self.FAKE_REPOS.USERS[1][0]) | 528 co.commit(u'msg', self.FAKE_REPOS.USERS[1][0]) |
| 511 self.fail() | 529 self.fail() |
| 512 except NotImplementedError: | 530 except NotImplementedError: |
| 513 pass | 531 pass |
| 514 self.assertTree(self.get_trunk(True), root) | 532 self.assertTree(self.get_trunk(True), root) |
| 515 # Verify that prepare() is a no-op. | 533 # Verify that prepare() is a no-op. |
| 516 self.assertEquals(None, co.prepare()) | 534 self.assertEquals(None, co.prepare(None)) |
| 517 self.assertTree(self.get_trunk(True), root) | 535 self.assertTree(self.get_trunk(True), root) |
| 518 | 536 |
| 519 def testAllRW(self): | 537 def testAllRW(self): |
| 520 self._check(False) | 538 self._check(False) |
| 521 | 539 |
| 522 def testAllRO(self): | 540 def testAllRO(self): |
| 523 self._check(True) | 541 self._check(True) |
| 524 | 542 |
| 525 def testException(self): | 543 def testException(self): |
| 526 self._check_exception( | 544 self._check_exception( |
| 527 self._get_co(True), | 545 self._get_co(True), |
| 528 'patching file svn_utils_test.txt\n' | 546 'patching file svn_utils_test.txt\n' |
| 529 'Hunk #1 FAILED at 3.\n' | 547 'Hunk #1 FAILED at 3.\n' |
| 530 '1 out of 1 hunk FAILED -- saving rejects to file ' | 548 '1 out of 1 hunk FAILED -- saving rejects to file ' |
| 531 'svn_utils_test.txt.rej\n') | 549 'svn_utils_test.txt.rej\n') |
| 532 | 550 |
| 533 def testProcess(self): | 551 def testProcess(self): |
| 534 co = checkout.SvnCheckout( | 552 co = checkout.SvnCheckout( |
| 535 self.root_dir, self.name, | 553 self.root_dir, self.name, |
| 536 None, None, | 554 None, None, |
| 537 self.svn_url) | 555 self.svn_url) |
| 538 self._test_process(co) | 556 self._test_process(co) |
| 539 | 557 |
| 558 def testPrepare(self): |
| 559 co = checkout.SvnCheckout( |
| 560 self.root_dir, self.name, |
| 561 None, None, |
| 562 self.svn_url) |
| 563 self._test_prepare(co) |
| 564 |
| 540 | 565 |
| 541 if __name__ == '__main__': | 566 if __name__ == '__main__': |
| 542 if '-v' in sys.argv: | 567 if '-v' in sys.argv: |
| 543 DEBUGGING = True | 568 DEBUGGING = True |
| 544 logging.basicConfig( | 569 logging.basicConfig( |
| 545 level=logging.DEBUG, | 570 level=logging.DEBUG, |
| 546 format='%(levelname)5s %(filename)15s(%(lineno)3d): %(message)s') | 571 format='%(levelname)5s %(filename)15s(%(lineno)3d): %(message)s') |
| 547 else: | 572 else: |
| 548 logging.basicConfig( | 573 logging.basicConfig( |
| 549 level=logging.ERROR, | 574 level=logging.ERROR, |
| 550 format='%(levelname)5s %(filename)15s(%(lineno)3d): %(message)s') | 575 format='%(levelname)5s %(filename)15s(%(lineno)3d): %(message)s') |
| 551 unittest.main() | 576 unittest.main() |
| OLD | NEW |