| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # | 2 # |
| 3 # Copyright 2008-2009 Google Inc. All Rights Reserved. | 3 # Copyright 2008-2009 Google Inc. All Rights Reserved. |
| 4 # | 4 # |
| 5 # Licensed under the Apache License, Version 2.0 (the "License"); | 5 # Licensed under the Apache License, Version 2.0 (the "License"); |
| 6 # you may not use this file except in compliance with the License. | 6 # you may not use this file except in compliance with the License. |
| 7 # You may obtain a copy of the License at | 7 # You may obtain a copy of the License at |
| 8 # | 8 # |
| 9 # http://www.apache.org/licenses/LICENSE-2.0 | 9 # http://www.apache.org/licenses/LICENSE-2.0 |
| 10 # | 10 # |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 self._RemoveDirectory = gclient.RemoveDirectory | 112 self._RemoveDirectory = gclient.RemoveDirectory |
| 113 gclient.RemoveDirectory = self.mox.CreateMockAnything() | 113 gclient.RemoveDirectory = self.mox.CreateMockAnything() |
| 114 self._RunSVN = gclient.RunSVN | 114 self._RunSVN = gclient.RunSVN |
| 115 gclient.RunSVN = self.mox.CreateMockAnything() | 115 gclient.RunSVN = self.mox.CreateMockAnything() |
| 116 self._RunSVNAndGetFileList = gclient.RunSVNAndGetFileList | 116 self._RunSVNAndGetFileList = gclient.RunSVNAndGetFileList |
| 117 gclient.RunSVNAndGetFileList = self.mox.CreateMockAnything() | 117 gclient.RunSVNAndGetFileList = self.mox.CreateMockAnything() |
| 118 self._sys_stdout = gclient.sys.stdout | 118 self._sys_stdout = gclient.sys.stdout |
| 119 gclient.sys.stdout = self.mox.CreateMock(self._sys_stdout) | 119 gclient.sys.stdout = self.mox.CreateMock(self._sys_stdout) |
| 120 self._subprocess = gclient.subprocess | 120 self._subprocess = gclient.subprocess |
| 121 gclient.subprocess = self.mox.CreateMock(self._subprocess) | 121 gclient.subprocess = self.mox.CreateMock(self._subprocess) |
| 122 self._os_path_exists = gclient.os.path.exists |
| 123 gclient.os.path.exists = self.mox.CreateMockAnything() |
| 122 | 124 |
| 123 def tearDown(self): | 125 def tearDown(self): |
| 124 gclient.CaptureSVN = self._CaptureSVN | 126 gclient.CaptureSVN = self._CaptureSVN |
| 125 gclient.CaptureSVNInfo = self._CaptureSVNInfo | 127 gclient.CaptureSVNInfo = self._CaptureSVNInfo |
| 126 gclient.CaptureSVNStatus = self._CaptureSVNStatus | 128 gclient.CaptureSVNStatus = self._CaptureSVNStatus |
| 127 gclient.FileRead = self._FileRead | 129 gclient.FileRead = self._FileRead |
| 128 gclient.FileWrite = self._FileWrite | 130 gclient.FileWrite = self._FileWrite |
| 129 gclient.RemoveDirectory = self._RemoveDirectory | 131 gclient.RemoveDirectory = self._RemoveDirectory |
| 130 gclient.RunSVN = self._RunSVN | 132 gclient.RunSVN = self._RunSVN |
| 131 gclient.RunSVNAndGetFileList = self._RunSVNAndGetFileList | 133 gclient.RunSVNAndGetFileList = self._RunSVNAndGetFileList |
| 132 gclient.sys.stdout = self._sys_stdout | 134 gclient.sys.stdout = self._sys_stdout |
| 133 gclient.subprocess = self._subprocess | 135 gclient.subprocess = self._subprocess |
| 136 gclient.os.path.exists = self._os_path_exists |
| 134 | 137 |
| 135 | 138 |
| 136 class GclientTestCase(GClientBaseTestCase): | 139 class GclientTestCase(GClientBaseTestCase): |
| 137 class OptionsObject(object): | 140 class OptionsObject(object): |
| 138 def __init__(self, test_case, verbose=False, spec=None, | 141 def __init__(self, test_case, verbose=False, spec=None, |
| 139 config_filename='a_file_name', | 142 config_filename='a_file_name', |
| 140 entries_filename='a_entry_file_name', | 143 entries_filename='a_entry_file_name', |
| 141 deps_file='a_deps_file_name', force=False): | 144 deps_file='a_deps_file_name', force=False): |
| 142 self.verbose = verbose | 145 self.verbose = verbose |
| 143 self.spec = spec | 146 self.spec = spec |
| 144 self.config_filename = config_filename | 147 self.config_filename = config_filename |
| 145 self.entries_filename = entries_filename | 148 self.entries_filename = entries_filename |
| 146 self.deps_file = deps_file | 149 self.deps_file = deps_file |
| 147 self.force = force | 150 self.force = force |
| 148 self.revisions = [] | 151 self.revisions = [] |
| 149 self.manually_grab_svn_rev = True | 152 self.manually_grab_svn_rev = True |
| 150 self.deps_os = None | 153 self.deps_os = None |
| 151 self.head = False | 154 self.head = False |
| 152 | 155 |
| 153 # Mox | 156 # Mox |
| 154 self.path_exists = test_case.path_exists | |
| 155 self.platform = test_case.platform | 157 self.platform = test_case.platform |
| 156 self.gclient = test_case.gclient | 158 self.gclient = test_case.gclient |
| 157 self.scm_wrapper = test_case.scm_wrapper | 159 self.scm_wrapper = test_case.scm_wrapper |
| 158 | 160 |
| 159 def setUp(self): | 161 def setUp(self): |
| 160 GClientBaseTestCase.setUp(self) | 162 GClientBaseTestCase.setUp(self) |
| 161 #self.subprocess = self.mox.CreateMock(subprocess) | |
| 162 # Stub os.path.exists. | |
| 163 self.path_exists = self.mox.CreateMockAnything() | |
| 164 self.platform = 'darwin' | 163 self.platform = 'darwin' |
| 165 | 164 |
| 166 self.gclient = self.mox.CreateMock(gclient.GClient) | 165 self.gclient = self.mox.CreateMock(gclient.GClient) |
| 167 self.scm_wrapper = self.mox.CreateMock(gclient.SCMWrapper) | 166 self.scm_wrapper = self.mox.CreateMock(gclient.SCMWrapper) |
| 168 | 167 |
| 169 self.args = Args() | 168 self.args = Args() |
| 170 self.root_dir = Dir() | 169 self.root_dir = Dir() |
| 171 self.url = Url() | 170 self.url = Url() |
| 172 | 171 |
| 173 | 172 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 192 exception_msg = "required argument missing; see 'gclient help config'" | 191 exception_msg = "required argument missing; see 'gclient help config'" |
| 193 | 192 |
| 194 self.mox.ReplayAll() | 193 self.mox.ReplayAll() |
| 195 self.assertRaisesError(exception_msg, gclient.DoConfig, self.Options(), ()) | 194 self.assertRaisesError(exception_msg, gclient.DoConfig, self.Options(), ()) |
| 196 self.mox.VerifyAll() | 195 self.mox.VerifyAll() |
| 197 | 196 |
| 198 def testExistingClientFile(self): | 197 def testExistingClientFile(self): |
| 199 options = self.Options() | 198 options = self.Options() |
| 200 exception_msg = ('%s file already exists in the current directory' % | 199 exception_msg = ('%s file already exists in the current directory' % |
| 201 options.config_filename) | 200 options.config_filename) |
| 202 self.path_exists(options.config_filename).AndReturn(True) | 201 gclient.os.path.exists(options.config_filename).AndReturn(True) |
| 203 | 202 |
| 204 self.mox.ReplayAll() | 203 self.mox.ReplayAll() |
| 205 self.assertRaisesError(exception_msg, gclient.DoConfig, options, (1,)) | 204 self.assertRaisesError(exception_msg, gclient.DoConfig, options, (1,)) |
| 206 self.mox.VerifyAll() | 205 self.mox.VerifyAll() |
| 207 | 206 |
| 208 def testFromText(self): | 207 def testFromText(self): |
| 209 options = self.Options(spec='config_source_content') | 208 options = self.Options(spec='config_source_content') |
| 210 options.path_exists(options.config_filename).AndReturn(False) | 209 gclient.os.path.exists(options.config_filename).AndReturn(False) |
| 211 options.gclient('.', options).AndReturn(options.gclient) | 210 options.gclient('.', options).AndReturn(options.gclient) |
| 212 options.gclient.SetConfig(options.spec) | 211 options.gclient.SetConfig(options.spec) |
| 213 options.gclient.SaveConfig() | 212 options.gclient.SaveConfig() |
| 214 | 213 |
| 215 self.mox.ReplayAll() | 214 self.mox.ReplayAll() |
| 216 gclient.DoConfig(options, (1,),) | 215 gclient.DoConfig(options, (1,),) |
| 217 self.mox.VerifyAll() | 216 self.mox.VerifyAll() |
| 218 | 217 |
| 219 def testCreateClientFile(self): | 218 def testCreateClientFile(self): |
| 220 options = self.Options() | 219 options = self.Options() |
| 221 options.path_exists(options.config_filename).AndReturn(False) | 220 gclient.os.path.exists(options.config_filename).AndReturn(False) |
| 222 options.gclient('.', options).AndReturn(options.gclient) | 221 options.gclient('.', options).AndReturn(options.gclient) |
| 223 options.gclient.SetDefaultConfig('the_name', 'http://svn/url/the_name', | 222 options.gclient.SetDefaultConfig('the_name', 'http://svn/url/the_name', |
| 224 'other') | 223 'other') |
| 225 options.gclient.SaveConfig() | 224 options.gclient.SaveConfig() |
| 226 | 225 |
| 227 self.mox.ReplayAll() | 226 self.mox.ReplayAll() |
| 228 gclient.DoConfig(options, | 227 gclient.DoConfig(options, |
| 229 ('http://svn/url/the_name', 'other', 'args', 'ignored')) | 228 ('http://svn/url/the_name', 'other', 'args', 'ignored')) |
| 230 self.mox.VerifyAll() | 229 self.mox.VerifyAll() |
| 231 | 230 |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 423 }] | 422 }] |
| 424 self.assertEqual(client.GetVar('solutions'), solutions) | 423 self.assertEqual(client.GetVar('solutions'), solutions) |
| 425 self.assertEqual(client.GetVar('foo'), None) | 424 self.assertEqual(client.GetVar('foo'), None) |
| 426 self.mox.VerifyAll() | 425 self.mox.VerifyAll() |
| 427 | 426 |
| 428 def testLoadCurrentConfig(self): | 427 def testLoadCurrentConfig(self): |
| 429 # pymox has trouble to mock the class object and not a class instance. | 428 # pymox has trouble to mock the class object and not a class instance. |
| 430 self.gclient = self.mox.CreateMockAnything() | 429 self.gclient = self.mox.CreateMockAnything() |
| 431 options = self.Options() | 430 options = self.Options() |
| 432 path = os.path.realpath(self.root_dir) | 431 path = os.path.realpath(self.root_dir) |
| 433 options.path_exists(os.path.join(path, options.config_filename) | 432 gclient.os.path.exists(os.path.join(path, options.config_filename) |
| 434 ).AndReturn(True) | 433 ).AndReturn(True) |
| 435 options.gclient(path, options).AndReturn(options.gclient) | 434 options.gclient(path, options).AndReturn(options.gclient) |
| 436 options.gclient._LoadConfig() | 435 options.gclient._LoadConfig() |
| 437 | 436 |
| 438 self.mox.ReplayAll() | 437 self.mox.ReplayAll() |
| 439 client = gclient.GClient.LoadCurrentConfig(options, self.root_dir) | 438 client = gclient.GClient.LoadCurrentConfig(options, self.root_dir) |
| 440 self.mox.VerifyAll() | 439 self.mox.VerifyAll() |
| 441 | 440 |
| 442 def testRunOnDepsNoDeps(self): | 441 def testRunOnDepsNoDeps(self): |
| 443 solution_name = 'testRunOnDepsNoDeps_solution_name' | 442 solution_name = 'testRunOnDepsNoDeps_solution_name' |
| 444 gclient_config = ( | 443 gclient_config = ( |
| 445 "solutions = [ {\n" | 444 "solutions = [ {\n" |
| 446 " 'name': '%s',\n" | 445 " 'name': '%s',\n" |
| 447 " 'url': '%s',\n" | 446 " 'url': '%s',\n" |
| 448 " 'custom_deps': {},\n" | 447 " 'custom_deps': {},\n" |
| 449 "} ]\n" | 448 "} ]\n" |
| 450 ) % (solution_name, self.url) | 449 ) % (solution_name, self.url) |
| 451 | 450 |
| 452 entries_content = ( | 451 entries_content = ( |
| 453 'entries = [\n' | 452 'entries = [\n' |
| 454 ' "%s",\n' | 453 ' "%s",\n' |
| 455 ']\n' | 454 ']\n' |
| 456 ) % solution_name | 455 ) % solution_name |
| 457 | 456 |
| 458 self.scm_wrapper = self.mox.CreateMockAnything() | 457 self.scm_wrapper = self.mox.CreateMockAnything() |
| 459 scm_wrapper_sol = self.mox.CreateMock(gclient.SCMWrapper) | 458 scm_wrapper_sol = self.mox.CreateMock(gclient.SCMWrapper) |
| 460 | 459 |
| 461 options = self.Options() | 460 options = self.Options() |
| 462 | 461 |
| 462 checkout_path = os.path.join(self.root_dir, solution_name) |
| 463 gclient.os.path.exists(os.path.join(checkout_path, '.git')).AndReturn(False) |
| 463 # Expect a check for the entries file and we say there is not one. | 464 # Expect a check for the entries file and we say there is not one. |
| 464 options.path_exists(os.path.join(self.root_dir, options.entries_filename) | 465 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) |
| 465 ).AndReturn(False) | 466 ).AndReturn(False) |
| 466 | 467 |
| 467 # An scm will be requested for the solution. | 468 # An scm will be requested for the solution. |
| 468 options.scm_wrapper(self.url, self.root_dir, solution_name | 469 options.scm_wrapper(self.url, self.root_dir, solution_name |
| 469 ).AndReturn(scm_wrapper_sol) | 470 ).AndReturn(scm_wrapper_sol) |
| 470 # Then an update will be performed. | 471 # Then an update will be performed. |
| 471 scm_wrapper_sol.RunCommand('update', options, self.args, []) | 472 scm_wrapper_sol.RunCommand('update', options, self.args, []) |
| 472 # Then an attempt will be made to read its DEPS file. | 473 # Then an attempt will be made to read its DEPS file. |
| 473 gclient.FileRead(os.path.join(self.root_dir, | 474 gclient.FileRead(os.path.join(self.root_dir, |
| 474 solution_name, | 475 solution_name, |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 507 ' "%s",\n' | 508 ' "%s",\n' |
| 508 ']\n' | 509 ']\n' |
| 509 ) % (os.path.join(solution_name, 'src', 't'), solution_name) | 510 ) % (os.path.join(solution_name, 'src', 't'), solution_name) |
| 510 | 511 |
| 511 self.scm_wrapper = self.mox.CreateMockAnything() | 512 self.scm_wrapper = self.mox.CreateMockAnything() |
| 512 scm_wrapper_sol = self.mox.CreateMock(gclient.SCMWrapper) | 513 scm_wrapper_sol = self.mox.CreateMock(gclient.SCMWrapper) |
| 513 scm_wrapper_t = self.mox.CreateMock(gclient.SCMWrapper) | 514 scm_wrapper_t = self.mox.CreateMock(gclient.SCMWrapper) |
| 514 | 515 |
| 515 options = self.Options() | 516 options = self.Options() |
| 516 | 517 |
| 518 gclient.os.path.exists(os.path.join(self.root_dir, solution_name, 'src', |
| 519 't', '.git') |
| 520 ).AndReturn(False) |
| 521 gclient.os.path.exists(os.path.join(self.root_dir, solution_name, '.git') |
| 522 ).AndReturn(False) |
| 517 # Expect a check for the entries file and we say there is not one. | 523 # Expect a check for the entries file and we say there is not one. |
| 518 options.path_exists(os.path.join(self.root_dir, options.entries_filename) | 524 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) |
| 519 ).AndReturn(False) | 525 ).AndReturn(False) |
| 520 | 526 |
| 521 # An scm will be requested for the solution. | 527 # An scm will be requested for the solution. |
| 522 options.scm_wrapper(self.url, self.root_dir, solution_name | 528 options.scm_wrapper(self.url, self.root_dir, solution_name |
| 523 ).AndReturn(scm_wrapper_sol) | 529 ).AndReturn(scm_wrapper_sol) |
| 524 # Then an update will be performed. | 530 # Then an update will be performed. |
| 525 scm_wrapper_sol.RunCommand('update', options, self.args, []) | 531 scm_wrapper_sol.RunCommand('update', options, self.args, []) |
| 526 # Then an attempt will be made to read its DEPS file. | 532 # Then an attempt will be made to read its DEPS file. |
| 527 gclient.FileRead(os.path.join(self.root_dir, | 533 gclient.FileRead(os.path.join(self.root_dir, |
| 528 solution_name, | 534 solution_name, |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 576 ']\n' | 582 ']\n' |
| 577 ) % solution_name | 583 ) % solution_name |
| 578 | 584 |
| 579 self.scm_wrapper = self.mox.CreateMockAnything() | 585 self.scm_wrapper = self.mox.CreateMockAnything() |
| 580 scm_wrapper_sol = self.mox.CreateMock(gclient.SCMWrapper) | 586 scm_wrapper_sol = self.mox.CreateMock(gclient.SCMWrapper) |
| 581 scm_wrapper_t = self.mox.CreateMock(gclient.SCMWrapper) | 587 scm_wrapper_t = self.mox.CreateMock(gclient.SCMWrapper) |
| 582 scm_wrapper_n = self.mox.CreateMock(gclient.SCMWrapper) | 588 scm_wrapper_n = self.mox.CreateMock(gclient.SCMWrapper) |
| 583 | 589 |
| 584 options = self.Options() | 590 options = self.Options() |
| 585 | 591 |
| 592 checkout_path = os.path.join(self.root_dir, solution_name) |
| 593 gclient.os.path.exists(os.path.join(checkout_path, '.git')).AndReturn(False) |
| 594 gclient.os.path.exists(os.path.join(self.root_dir, 'src/n', '.git') |
| 595 ).AndReturn(False) |
| 596 gclient.os.path.exists(os.path.join(self.root_dir, 'src/t', '.git') |
| 597 ).AndReturn(False) |
| 598 |
| 586 # Expect a check for the entries file and we say there is not one. | 599 # Expect a check for the entries file and we say there is not one. |
| 587 options.path_exists(os.path.join(self.root_dir, options.entries_filename) | 600 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) |
| 588 ).AndReturn(False) | 601 ).AndReturn(False) |
| 589 | 602 |
| 590 # An scm will be requested for the solution. | 603 # An scm will be requested for the solution. |
| 591 options.scm_wrapper(self.url, self.root_dir, solution_name | 604 options.scm_wrapper(self.url, self.root_dir, solution_name |
| 592 ).AndReturn(scm_wrapper_sol) | 605 ).AndReturn(scm_wrapper_sol) |
| 593 # Then an update will be performed. | 606 # Then an update will be performed. |
| 594 scm_wrapper_sol.RunCommand('update', options, self.args, []) | 607 scm_wrapper_sol.RunCommand('update', options, self.args, []) |
| 595 # Then an attempt will be made to read its DEPS file. | 608 # Then an attempt will be made to read its DEPS file. |
| 596 gclient.FileRead(os.path.join(self.root_dir, | 609 gclient.FileRead(os.path.join(checkout_path, options.deps_file) |
| 597 solution_name, | 610 ).AndReturn(deps) |
| 598 options.deps_file)).AndReturn(deps) | |
| 599 | 611 |
| 600 # Next we expect an scm to be request for dep src/n even though it does not | 612 # Next we expect an scm to be request for dep src/n even though it does not |
| 601 # exist in the DEPS file. | 613 # exist in the DEPS file. |
| 602 options.scm_wrapper('svn://custom.n/trunk', | 614 options.scm_wrapper('svn://custom.n/trunk', |
| 603 self.root_dir, | 615 self.root_dir, |
| 604 "src/n").AndReturn(scm_wrapper_n) | 616 "src/n").AndReturn(scm_wrapper_n) |
| 605 | 617 |
| 606 # Next we expect an scm to be request for dep src/t but it should | 618 # Next we expect an scm to be request for dep src/t but it should |
| 607 # use the url specified in custom_deps. | 619 # use the url specified in custom_deps. |
| 608 options.scm_wrapper('svn://custom.t/trunk', | 620 options.scm_wrapper('svn://custom.t/trunk', |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 658 ' "src/t",\n' | 670 ' "src/t",\n' |
| 659 ']\n') % (name_a, name_b) | 671 ']\n') % (name_a, name_b) |
| 660 | 672 |
| 661 self.scm_wrapper = self.mox.CreateMockAnything() | 673 self.scm_wrapper = self.mox.CreateMockAnything() |
| 662 scm_wrapper_a = self.mox.CreateMock(gclient.SCMWrapper) | 674 scm_wrapper_a = self.mox.CreateMock(gclient.SCMWrapper) |
| 663 scm_wrapper_b = self.mox.CreateMock(gclient.SCMWrapper) | 675 scm_wrapper_b = self.mox.CreateMock(gclient.SCMWrapper) |
| 664 scm_wrapper_dep = self.mox.CreateMock(gclient.SCMWrapper) | 676 scm_wrapper_dep = self.mox.CreateMock(gclient.SCMWrapper) |
| 665 | 677 |
| 666 options = self.Options() | 678 options = self.Options() |
| 667 | 679 |
| 680 gclient.os.path.exists(os.path.join(self.root_dir, name_a, '.git') |
| 681 ).AndReturn(False) |
| 682 gclient.os.path.exists(os.path.join(self.root_dir, name_b, '.git') |
| 683 ).AndReturn(False) |
| 684 gclient.os.path.exists(os.path.join(self.root_dir, 'src/t', '.git') |
| 685 ).AndReturn(False) |
| 686 |
| 668 # Expect a check for the entries file and we say there is not one. | 687 # Expect a check for the entries file and we say there is not one. |
| 669 options.path_exists(os.path.join(self.root_dir, options.entries_filename) | 688 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) |
| 670 ).AndReturn(False) | 689 ).AndReturn(False) |
| 671 | 690 |
| 672 # An scm will be requested for the first solution. | 691 # An scm will be requested for the first solution. |
| 673 options.scm_wrapper(url_a, self.root_dir, name_a).AndReturn( | 692 options.scm_wrapper(url_a, self.root_dir, name_a).AndReturn( |
| 674 scm_wrapper_a) | 693 scm_wrapper_a) |
| 675 # Then an attempt will be made to read it's DEPS file. | 694 # Then an attempt will be made to read it's DEPS file. |
| 676 gclient.FileRead(os.path.join(self.root_dir, name_a, options.deps_file) | 695 gclient.FileRead(os.path.join(self.root_dir, name_a, options.deps_file) |
| 677 ).AndReturn(deps_a) | 696 ).AndReturn(deps_a) |
| 678 # Then an update will be performed. | 697 # Then an update will be performed. |
| 679 scm_wrapper_a.RunCommand('update', options, self.args, []) | 698 scm_wrapper_a.RunCommand('update', options, self.args, []) |
| (...skipping 28 matching lines...) Expand all Loading... |
| 708 name = 'testRunOnDepsSuccess_solution_name' | 727 name = 'testRunOnDepsSuccess_solution_name' |
| 709 gclient_config = """solutions = [ { | 728 gclient_config = """solutions = [ { |
| 710 'name': '%s', | 729 'name': '%s', |
| 711 'url': '%s', | 730 'url': '%s', |
| 712 'custom_deps': {}, | 731 'custom_deps': {}, |
| 713 }, ]""" % (name, self.url) | 732 }, ]""" % (name, self.url) |
| 714 | 733 |
| 715 # pymox has trouble to mock the class object and not a class instance. | 734 # pymox has trouble to mock the class object and not a class instance. |
| 716 self.scm_wrapper = self.mox.CreateMockAnything() | 735 self.scm_wrapper = self.mox.CreateMockAnything() |
| 717 options = self.Options() | 736 options = self.Options() |
| 718 options.path_exists(os.path.join(self.root_dir, options.entries_filename) | 737 gclient.os.path.exists(os.path.join(self.root_dir, name, '.git') |
| 738 ).AndReturn(False) |
| 739 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) |
| 719 ).AndReturn(False) | 740 ).AndReturn(False) |
| 720 options.scm_wrapper(self.url, self.root_dir, name).AndReturn( | 741 options.scm_wrapper(self.url, self.root_dir, name).AndReturn( |
| 721 options.scm_wrapper) | 742 options.scm_wrapper) |
| 722 options.scm_wrapper.RunCommand('update', options, self.args, []) | 743 options.scm_wrapper.RunCommand('update', options, self.args, []) |
| 723 gclient.FileRead(os.path.join(self.root_dir, name, options.deps_file) | 744 gclient.FileRead(os.path.join(self.root_dir, name, options.deps_file) |
| 724 ).AndReturn("Boo = 'a'") | 745 ).AndReturn("Boo = 'a'") |
| 725 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), | 746 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), |
| 726 'entries = [\n "%s",\n]\n' % name) | 747 'entries = [\n "%s",\n]\n' % name) |
| 727 | 748 |
| 728 self.mox.ReplayAll() | 749 self.mox.ReplayAll() |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 790 options.revisions = [ 'src@123', 'foo/third_party/WebKit@42', | 811 options.revisions = [ 'src@123', 'foo/third_party/WebKit@42', |
| 791 'src/third_party/cygwin@333' ] | 812 'src/third_party/cygwin@333' ] |
| 792 | 813 |
| 793 # Also, pymox doesn't verify the order of function calling w.r.t. different | 814 # Also, pymox doesn't verify the order of function calling w.r.t. different |
| 794 # mock objects. Pretty lame. So reorder as we wish to make it clearer. | 815 # mock objects. Pretty lame. So reorder as we wish to make it clearer. |
| 795 gclient.FileRead(os.path.join(self.root_dir, 'src', options.deps_file) | 816 gclient.FileRead(os.path.join(self.root_dir, 'src', options.deps_file) |
| 796 ).AndReturn(deps_content) | 817 ).AndReturn(deps_content) |
| 797 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), | 818 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), |
| 798 entries_content) | 819 entries_content) |
| 799 | 820 |
| 800 options.path_exists(os.path.join(self.root_dir, options.entries_filename) | 821 gclient.os.path.exists(os.path.join(self.root_dir, 'src', '.git') |
| 822 ).AndReturn(False) |
| 823 gclient.os.path.exists(os.path.join(self.root_dir, 'foo/third_party/WebKit', |
| 824 '.git') |
| 825 ).AndReturn(False) |
| 826 gclient.os.path.exists(os.path.join(self.root_dir, 'src/third_party/cygwin', |
| 827 '.git') |
| 828 ).AndReturn(False) |
| 829 gclient.os.path.exists(os.path.join(self.root_dir, |
| 830 'src/third_party/python_24', '.git') |
| 831 ).AndReturn(False) |
| 832 gclient.os.path.exists(os.path.join(self.root_dir, 'src/breakpad/bar', |
| 833 '.git') |
| 834 ).AndReturn(False) |
| 835 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) |
| 801 ).AndReturn(False) | 836 ).AndReturn(False) |
| 802 | 837 |
| 803 options.scm_wrapper(self.url, self.root_dir, 'src').AndReturn( | 838 options.scm_wrapper(self.url, self.root_dir, 'src').AndReturn( |
| 804 scm_wrapper_src) | 839 scm_wrapper_src) |
| 805 scm_wrapper_src.RunCommand('update', mox.Func(OptIsRev123), self.args, []) | 840 scm_wrapper_src.RunCommand('update', mox.Func(OptIsRev123), self.args, []) |
| 806 | 841 |
| 807 options.scm_wrapper(self.url, self.root_dir, | 842 options.scm_wrapper(self.url, self.root_dir, |
| 808 None).AndReturn(scm_wrapper_src2) | 843 None).AndReturn(scm_wrapper_src2) |
| 809 scm_wrapper_src2.FullUrlForRelativeUrl('/trunk/deps/third_party/cygwin@3248' | 844 scm_wrapper_src2.FullUrlForRelativeUrl('/trunk/deps/third_party/cygwin@3248' |
| 810 ).AndReturn(cygwin_path) | 845 ).AndReturn(cygwin_path) |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 895 self.scm_wrapper = self.mox.CreateMockAnything() | 930 self.scm_wrapper = self.mox.CreateMockAnything() |
| 896 scm_wrapper_webkit = self.mox.CreateMock(gclient.SCMWrapper) | 931 scm_wrapper_webkit = self.mox.CreateMock(gclient.SCMWrapper) |
| 897 scm_wrapper_src = self.mox.CreateMock(gclient.SCMWrapper) | 932 scm_wrapper_src = self.mox.CreateMock(gclient.SCMWrapper) |
| 898 | 933 |
| 899 options = self.Options() | 934 options = self.Options() |
| 900 gclient.FileRead(os.path.join(self.root_dir, name, options.deps_file) | 935 gclient.FileRead(os.path.join(self.root_dir, name, options.deps_file) |
| 901 ).AndReturn(deps_content) | 936 ).AndReturn(deps_content) |
| 902 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), | 937 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), |
| 903 entries_content) | 938 entries_content) |
| 904 | 939 |
| 905 options.path_exists(os.path.join(self.root_dir, options.entries_filename) | 940 gclient.os.path.exists(os.path.join(self.root_dir, 'foo/third_party/WebKit', |
| 941 '.git')).AndReturn(False) |
| 942 gclient.os.path.exists(os.path.join(self.root_dir, name, '.git') |
| 943 ).AndReturn(False) |
| 944 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) |
| 906 ).AndReturn(False) | 945 ).AndReturn(False) |
| 907 options.scm_wrapper(self.url, self.root_dir, name).AndReturn( | 946 options.scm_wrapper(self.url, self.root_dir, name).AndReturn( |
| 908 options.scm_wrapper) | 947 options.scm_wrapper) |
| 909 options.scm_wrapper.RunCommand('update', options, self.args, []) | 948 options.scm_wrapper.RunCommand('update', options, self.args, []) |
| 910 | 949 |
| 911 options.scm_wrapper(self.url, self.root_dir, | 950 options.scm_wrapper(self.url, self.root_dir, |
| 912 None).AndReturn(scm_wrapper_src) | 951 None).AndReturn(scm_wrapper_src) |
| 913 scm_wrapper_src.FullUrlForRelativeUrl('/trunk/bar/WebKit' | 952 scm_wrapper_src.FullUrlForRelativeUrl('/trunk/bar/WebKit' |
| 914 ).AndReturn(webkit_path) | 953 ).AndReturn(webkit_path) |
| 915 | 954 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 949 self.scm_wrapper = self.mox.CreateMockAnything() | 988 self.scm_wrapper = self.mox.CreateMockAnything() |
| 950 scm_wrapper_webkit = self.mox.CreateMock(gclient.SCMWrapper) | 989 scm_wrapper_webkit = self.mox.CreateMock(gclient.SCMWrapper) |
| 951 scm_wrapper_src = self.mox.CreateMock(gclient.SCMWrapper) | 990 scm_wrapper_src = self.mox.CreateMock(gclient.SCMWrapper) |
| 952 | 991 |
| 953 options = self.Options() | 992 options = self.Options() |
| 954 gclient.FileRead(os.path.join(self.root_dir, name, options.deps_file) | 993 gclient.FileRead(os.path.join(self.root_dir, name, options.deps_file) |
| 955 ).AndReturn(deps_content) | 994 ).AndReturn(deps_content) |
| 956 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), | 995 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), |
| 957 entries_content) | 996 entries_content) |
| 958 | 997 |
| 959 options.path_exists(os.path.join(self.root_dir, options.entries_filename) | 998 gclient.os.path.exists(os.path.join(self.root_dir, 'foo/third_party/WebKit', |
| 999 '.git') |
| 1000 ).AndReturn(False) |
| 1001 gclient.os.path.exists(os.path.join(self.root_dir, name, '.git') |
| 1002 ).AndReturn(False) |
| 1003 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) |
| 960 ).AndReturn(False) | 1004 ).AndReturn(False) |
| 961 options.scm_wrapper(self.url, self.root_dir, name).AndReturn( | 1005 options.scm_wrapper(self.url, self.root_dir, name).AndReturn( |
| 962 options.scm_wrapper) | 1006 options.scm_wrapper) |
| 963 options.scm_wrapper.RunCommand('update', options, self.args, []) | 1007 options.scm_wrapper.RunCommand('update', options, self.args, []) |
| 964 | 1008 |
| 965 options.scm_wrapper(self.url, self.root_dir, | 1009 options.scm_wrapper(self.url, self.root_dir, |
| 966 None).AndReturn(scm_wrapper_src) | 1010 None).AndReturn(scm_wrapper_src) |
| 967 scm_wrapper_src.FullUrlForRelativeUrl('/trunk/bar_custom/WebKit' | 1011 scm_wrapper_src.FullUrlForRelativeUrl('/trunk/bar_custom/WebKit' |
| 968 ).AndReturn(webkit_path) | 1012 ).AndReturn(webkit_path) |
| 969 | 1013 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 993 | 1037 |
| 994 # pymox has trouble to mock the class object and not a class instance. | 1038 # pymox has trouble to mock the class object and not a class instance. |
| 995 self.scm_wrapper = self.mox.CreateMockAnything() | 1039 self.scm_wrapper = self.mox.CreateMockAnything() |
| 996 | 1040 |
| 997 options = self.Options() | 1041 options = self.Options() |
| 998 gclient.FileRead(os.path.join(self.root_dir, name, options.deps_file) | 1042 gclient.FileRead(os.path.join(self.root_dir, name, options.deps_file) |
| 999 ).AndReturn(deps_content) | 1043 ).AndReturn(deps_content) |
| 1000 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), | 1044 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), |
| 1001 'dummy entries content') | 1045 'dummy entries content') |
| 1002 | 1046 |
| 1003 options.path_exists(os.path.join(self.root_dir, options.entries_filename) | 1047 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) |
| 1004 ).AndReturn(False) | 1048 ).AndReturn(False) |
| 1005 options.scm_wrapper(self.url, self.root_dir, name).AndReturn( | 1049 options.scm_wrapper(self.url, self.root_dir, name).AndReturn( |
| 1006 options.scm_wrapper) | 1050 options.scm_wrapper) |
| 1007 options.scm_wrapper.RunCommand('update', options, self.args, []) | 1051 options.scm_wrapper.RunCommand('update', options, self.args, []) |
| 1008 | 1052 |
| 1009 self.mox.ReplayAll() | 1053 self.mox.ReplayAll() |
| 1010 client = gclient.GClient(self.root_dir, options) | 1054 client = gclient.GClient(self.root_dir, options) |
| 1011 client.SetConfig(gclient_config) | 1055 client.SetConfig(gclient_config) |
| 1012 exception = "Var is not defined: webkit" | 1056 exception = "Var is not defined: webkit" |
| 1013 try: | 1057 try: |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1063 | 1107 |
| 1064 class SCMWrapperTestCase(GClientBaseTestCase): | 1108 class SCMWrapperTestCase(GClientBaseTestCase): |
| 1065 class OptionsObject(object): | 1109 class OptionsObject(object): |
| 1066 def __init__(self, test_case, verbose=False, revision=None): | 1110 def __init__(self, test_case, verbose=False, revision=None): |
| 1067 self.verbose = verbose | 1111 self.verbose = verbose |
| 1068 self.revision = revision | 1112 self.revision = revision |
| 1069 self.manually_grab_svn_rev = True | 1113 self.manually_grab_svn_rev = True |
| 1070 self.deps_os = None | 1114 self.deps_os = None |
| 1071 self.force = False | 1115 self.force = False |
| 1072 | 1116 |
| 1073 # Mox | |
| 1074 self.path_exists = test_case.path_exists | |
| 1075 | |
| 1076 def setUp(self): | 1117 def setUp(self): |
| 1077 GClientBaseTestCase.setUp(self) | 1118 GClientBaseTestCase.setUp(self) |
| 1078 self.root_dir = Dir() | 1119 self.root_dir = Dir() |
| 1079 self.args = Args() | 1120 self.args = Args() |
| 1080 self.url = Url() | 1121 self.url = Url() |
| 1081 self.relpath = 'asf' | 1122 self.relpath = 'asf' |
| 1082 # Stub os.path.exists. | 1123 self._os_path_isdir = gclient.os.path.isdir |
| 1083 self.path_exists = self.mox.CreateMockAnything() | 1124 gclient.os.path.isdir = self.mox.CreateMockAnything() |
| 1125 |
| 1126 def tearDown(self): |
| 1127 GClientBaseTestCase.tearDown(self) |
| 1128 gclient.os.path.isdir = self._os_path_isdir |
| 1084 | 1129 |
| 1085 def testDir(self): | 1130 def testDir(self): |
| 1086 members = [ | 1131 members = [ |
| 1087 'FullUrlForRelativeUrl', 'RunCommand', 'cleanup', 'diff', 'relpath', | 1132 'FullUrlForRelativeUrl', 'RunCommand', 'cleanup', 'diff', 'relpath', |
| 1088 'revert', 'scm_name', 'status', 'update', 'url', | 1133 'revert', 'scm_name', 'status', 'update', 'url', |
| 1089 ] | 1134 ] |
| 1090 | 1135 |
| 1091 # If you add a member, be sure to add the relevant test! | 1136 # If you add a member, be sure to add the relevant test! |
| 1092 self.compareMembers(gclient.SCMWrapper(), members) | 1137 self.compareMembers(gclient.SCMWrapper(), members) |
| 1093 | 1138 |
| 1094 def testFullUrlForRelativeUrl(self): | 1139 def testFullUrlForRelativeUrl(self): |
| 1095 self.url = 'svn://a/b/c/d' | 1140 self.url = 'svn://a/b/c/d' |
| 1096 | 1141 |
| 1097 self.mox.ReplayAll() | 1142 self.mox.ReplayAll() |
| 1098 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, | 1143 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, |
| 1099 relpath=self.relpath) | 1144 relpath=self.relpath) |
| 1100 self.assertEqual(scm.FullUrlForRelativeUrl('/crap'), 'svn://a/b/crap') | 1145 self.assertEqual(scm.FullUrlForRelativeUrl('/crap'), 'svn://a/b/crap') |
| 1101 self.mox.VerifyAll() | 1146 self.mox.VerifyAll() |
| 1102 | 1147 |
| 1103 def testRunCommandException(self): | 1148 def testRunCommandException(self): |
| 1104 options = self.Options(verbose=False) | 1149 options = self.Options(verbose=False) |
| 1105 options.path_exists(os.path.join(self.root_dir, self.relpath, '.git') | 1150 gclient.os.path.exists(os.path.join(self.root_dir, self.relpath, '.git') |
| 1106 ).AndReturn(False) | 1151 ).AndReturn(False) |
| 1107 | 1152 |
| 1108 self.mox.ReplayAll() | 1153 self.mox.ReplayAll() |
| 1109 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, | 1154 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, |
| 1110 relpath=self.relpath) | 1155 relpath=self.relpath) |
| 1111 exception = "Unsupported argument(s): %s" % ','.join(self.args) | 1156 exception = "Unsupported argument(s): %s" % ','.join(self.args) |
| 1112 self.assertRaisesError(exception, gclient.SCMWrapper.RunCommand, | 1157 self.assertRaisesError(exception, gclient.SCMWrapper.RunCommand, |
| 1113 scm, 'update', options, self.args) | 1158 scm, 'update', options, self.args) |
| 1114 self.mox.VerifyAll() | 1159 self.mox.VerifyAll() |
| 1115 | 1160 |
| 1116 def testRunCommandUnknown(self): | 1161 def testRunCommandUnknown(self): |
| 1117 # TODO(maruel): if ever used. | 1162 # TODO(maruel): if ever used. |
| 1118 pass | 1163 pass |
| 1119 | 1164 |
| 1120 def testRevertMissing(self): | 1165 def testRevertMissing(self): |
| 1121 options = self.Options(verbose=True) | 1166 options = self.Options(verbose=True) |
| 1122 gclient.os.path.isdir = self.mox.CreateMockAnything() | |
| 1123 base_path = os.path.join(self.root_dir, self.relpath) | 1167 base_path = os.path.join(self.root_dir, self.relpath) |
| 1124 gclient.os.path.isdir(base_path).AndReturn(False) | 1168 gclient.os.path.isdir(base_path).AndReturn(False) |
| 1125 # It'll to a checkout instead. | 1169 # It'll to a checkout instead. |
| 1126 options.path_exists(os.path.join(base_path, '.git')).AndReturn(False) | 1170 gclient.os.path.exists(os.path.join(base_path, '.git')).AndReturn(False) |
| 1127 print("\n_____ %s is missing, synching instead" % self.relpath) | 1171 print("\n_____ %s is missing, synching instead" % self.relpath) |
| 1128 # Checkout. | 1172 # Checkout. |
| 1129 options.path_exists(base_path).AndReturn(False) | 1173 gclient.os.path.exists(base_path).AndReturn(False) |
| 1130 files_list = self.mox.CreateMockAnything() | 1174 files_list = self.mox.CreateMockAnything() |
| 1131 gclient.RunSVNAndGetFileList(['checkout', self.url, base_path], | 1175 gclient.RunSVNAndGetFileList(['checkout', self.url, base_path], |
| 1132 self.root_dir, files_list) | 1176 self.root_dir, files_list) |
| 1133 | 1177 |
| 1134 self.mox.ReplayAll() | 1178 self.mox.ReplayAll() |
| 1135 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, | 1179 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, |
| 1136 relpath=self.relpath) | 1180 relpath=self.relpath) |
| 1137 scm.revert(options, self.args, files_list) | 1181 scm.revert(options, self.args, files_list) |
| 1138 self.mox.VerifyAll() | 1182 self.mox.VerifyAll() |
| 1139 gclient.os.path.isdir = os.path.isdir | |
| 1140 | 1183 |
| 1141 def testRevertNone(self): | 1184 def testRevertNone(self): |
| 1142 options = self.Options(verbose=True) | 1185 options = self.Options(verbose=True) |
| 1143 base_path = os.path.join(self.root_dir, self.relpath) | 1186 base_path = os.path.join(self.root_dir, self.relpath) |
| 1144 gclient.os.path.isdir = self.mox.CreateMockAnything() | |
| 1145 gclient.os.path.isdir(base_path).AndReturn(True) | 1187 gclient.os.path.isdir(base_path).AndReturn(True) |
| 1146 gclient.CaptureSVNStatus(base_path).AndReturn([]) | 1188 gclient.CaptureSVNStatus(base_path).AndReturn([]) |
| 1147 | 1189 |
| 1148 self.mox.ReplayAll() | 1190 self.mox.ReplayAll() |
| 1149 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, | 1191 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, |
| 1150 relpath=self.relpath) | 1192 relpath=self.relpath) |
| 1151 file_list = [] | 1193 file_list = [] |
| 1152 scm.revert(options, self.args, file_list) | 1194 scm.revert(options, self.args, file_list) |
| 1153 self.mox.VerifyAll() | 1195 self.mox.VerifyAll() |
| 1154 gclient.os.path.isdir = os.path.isdir | |
| 1155 | 1196 |
| 1156 def testRevert2Files(self): | 1197 def testRevert2Files(self): |
| 1157 options = self.Options(verbose=True) | 1198 options = self.Options(verbose=True) |
| 1158 base_path = os.path.join(self.root_dir, self.relpath) | 1199 base_path = os.path.join(self.root_dir, self.relpath) |
| 1159 gclient.os.path.isdir = self.mox.CreateMockAnything() | |
| 1160 gclient.os.path.isdir(base_path).AndReturn(True) | 1200 gclient.os.path.isdir(base_path).AndReturn(True) |
| 1161 items = [ | 1201 items = [ |
| 1162 ('M ', 'a'), | 1202 ('M ', 'a'), |
| 1163 ('A ', 'b'), | 1203 ('A ', 'b'), |
| 1164 ] | 1204 ] |
| 1165 gclient.CaptureSVNStatus(base_path).AndReturn(items) | 1205 gclient.CaptureSVNStatus(base_path).AndReturn(items) |
| 1166 | 1206 |
| 1167 print(os.path.join(base_path, 'a')) | 1207 print(os.path.join(base_path, 'a')) |
| 1168 print(os.path.join(base_path, 'b')) | 1208 print(os.path.join(base_path, 'b')) |
| 1169 gclient.RunSVN(['revert', 'a', 'b'], base_path) | 1209 gclient.RunSVN(['revert', 'a', 'b'], base_path) |
| 1170 | 1210 |
| 1171 self.mox.ReplayAll() | 1211 self.mox.ReplayAll() |
| 1172 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, | 1212 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, |
| 1173 relpath=self.relpath) | 1213 relpath=self.relpath) |
| 1174 file_list = [] | 1214 file_list = [] |
| 1175 scm.revert(options, self.args, file_list) | 1215 scm.revert(options, self.args, file_list) |
| 1176 self.mox.VerifyAll() | 1216 self.mox.VerifyAll() |
| 1177 gclient.os.path.isdir = os.path.isdir | |
| 1178 | 1217 |
| 1179 def testStatus(self): | 1218 def testStatus(self): |
| 1180 options = self.Options(verbose=True) | 1219 options = self.Options(verbose=True) |
| 1181 base_path = os.path.join(self.root_dir, self.relpath) | 1220 base_path = os.path.join(self.root_dir, self.relpath) |
| 1182 gclient.os.path.isdir = self.mox.CreateMockAnything() | |
| 1183 gclient.os.path.isdir(base_path).AndReturn(True) | 1221 gclient.os.path.isdir(base_path).AndReturn(True) |
| 1184 gclient.RunSVNAndGetFileList(['status'] + self.args, base_path, | 1222 gclient.RunSVNAndGetFileList(['status'] + self.args, base_path, |
| 1185 []).AndReturn(None) | 1223 []).AndReturn(None) |
| 1186 | 1224 |
| 1187 self.mox.ReplayAll() | 1225 self.mox.ReplayAll() |
| 1188 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, | 1226 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, |
| 1189 relpath=self.relpath) | 1227 relpath=self.relpath) |
| 1190 file_list = [] | 1228 file_list = [] |
| 1191 self.assertEqual(scm.status(options, self.args, file_list), None) | 1229 self.assertEqual(scm.status(options, self.args, file_list), None) |
| 1192 self.mox.VerifyAll() | 1230 self.mox.VerifyAll() |
| 1193 | 1231 |
| 1194 | 1232 |
| 1195 # TODO(maruel): TEST REVISIONS!!! | 1233 # TODO(maruel): TEST REVISIONS!!! |
| 1196 # TODO(maruel): TEST RELOCATE!!! | 1234 # TODO(maruel): TEST RELOCATE!!! |
| 1197 def testUpdateCheckout(self): | 1235 def testUpdateCheckout(self): |
| 1198 options = self.Options(verbose=True) | 1236 options = self.Options(verbose=True) |
| 1199 base_path = os.path.join(self.root_dir, self.relpath) | 1237 base_path = os.path.join(self.root_dir, self.relpath) |
| 1200 file_info = gclient.PrintableObject() | 1238 file_info = gclient.PrintableObject() |
| 1201 file_info.root = 'blah' | 1239 file_info.root = 'blah' |
| 1202 file_info.url = self.url | 1240 file_info.url = self.url |
| 1203 file_info.uuid = 'ABC' | 1241 file_info.uuid = 'ABC' |
| 1204 file_info.revision = 42 | 1242 file_info.revision = 42 |
| 1205 options.path_exists(os.path.join(base_path, '.git')).AndReturn(False) | 1243 gclient.os.path.exists(os.path.join(base_path, '.git')).AndReturn(False) |
| 1206 # Checkout. | 1244 # Checkout. |
| 1207 options.path_exists(base_path).AndReturn(False) | 1245 gclient.os.path.exists(base_path).AndReturn(False) |
| 1208 files_list = self.mox.CreateMockAnything() | 1246 files_list = self.mox.CreateMockAnything() |
| 1209 gclient.RunSVNAndGetFileList(['checkout', self.url, base_path], | 1247 gclient.RunSVNAndGetFileList(['checkout', self.url, base_path], |
| 1210 self.root_dir, files_list) | 1248 self.root_dir, files_list) |
| 1211 self.mox.ReplayAll() | 1249 self.mox.ReplayAll() |
| 1212 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, | 1250 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, |
| 1213 relpath=self.relpath) | 1251 relpath=self.relpath) |
| 1214 scm.update(options, (), files_list) | 1252 scm.update(options, (), files_list) |
| 1215 self.mox.VerifyAll() | 1253 self.mox.VerifyAll() |
| 1216 | 1254 |
| 1217 def testUpdateUpdate(self): | 1255 def testUpdateUpdate(self): |
| 1218 options = self.Options(verbose=True) | 1256 options = self.Options(verbose=True) |
| 1219 base_path = os.path.join(self.root_dir, self.relpath) | 1257 base_path = os.path.join(self.root_dir, self.relpath) |
| 1220 options.force = True | 1258 options.force = True |
| 1221 file_info = { | 1259 file_info = { |
| 1222 'Repository Root': 'blah', | 1260 'Repository Root': 'blah', |
| 1223 'URL': self.url, | 1261 'URL': self.url, |
| 1224 'UUID': 'ABC', | 1262 'UUID': 'ABC', |
| 1225 'Revision': 42, | 1263 'Revision': 42, |
| 1226 } | 1264 } |
| 1227 options.path_exists(os.path.join(base_path, '.git')).AndReturn(False) | 1265 gclient.os.path.exists(os.path.join(base_path, '.git')).AndReturn(False) |
| 1228 # Checkout or update. | 1266 # Checkout or update. |
| 1229 options.path_exists(base_path).AndReturn(True) | 1267 gclient.os.path.exists(base_path).AndReturn(True) |
| 1230 gclient.CaptureSVNInfo(os.path.join(base_path, "."), '.' | 1268 gclient.CaptureSVNInfo(os.path.join(base_path, "."), '.' |
| 1231 ).AndReturn(file_info) | 1269 ).AndReturn(file_info) |
| 1232 # Cheat a bit here. | 1270 # Cheat a bit here. |
| 1233 gclient.CaptureSVNInfo(file_info['URL'], '.').AndReturn(file_info) | 1271 gclient.CaptureSVNInfo(file_info['URL'], '.').AndReturn(file_info) |
| 1234 additional_args = [] | 1272 additional_args = [] |
| 1235 if options.manually_grab_svn_rev: | 1273 if options.manually_grab_svn_rev: |
| 1236 additional_args = ['--revision', str(file_info['Revision'])] | 1274 additional_args = ['--revision', str(file_info['Revision'])] |
| 1237 files_list = [] | 1275 files_list = [] |
| 1238 gclient.RunSVNAndGetFileList(['update', base_path] + additional_args, | 1276 gclient.RunSVNAndGetFileList(['update', base_path] + additional_args, |
| 1239 self.root_dir, files_list) | 1277 self.root_dir, files_list) |
| 1240 | 1278 |
| 1241 self.mox.ReplayAll() | 1279 self.mox.ReplayAll() |
| 1242 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, | 1280 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, |
| 1243 relpath=self.relpath) | 1281 relpath=self.relpath) |
| 1244 scm.update(options, (), files_list) | 1282 scm.update(options, (), files_list) |
| 1245 self.mox.VerifyAll() | 1283 self.mox.VerifyAll() |
| 1246 | 1284 |
| 1247 def testUpdateGit(self): | 1285 def testUpdateGit(self): |
| 1248 options = self.Options(verbose=True) | 1286 options = self.Options(verbose=True) |
| 1249 options.path_exists(os.path.join(self.root_dir, self.relpath, '.git') | 1287 gclient.os.path.exists(os.path.join(self.root_dir, self.relpath, '.git') |
| 1250 ).AndReturn(True) | 1288 ).AndReturn(True) |
| 1251 print("________ found .git directory; skipping %s" % self.relpath) | 1289 print("________ found .git directory; skipping %s" % self.relpath) |
| 1252 | 1290 |
| 1253 self.mox.ReplayAll() | 1291 self.mox.ReplayAll() |
| 1254 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, | 1292 scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir, |
| 1255 relpath=self.relpath) | 1293 relpath=self.relpath) |
| 1256 file_list = [] | 1294 file_list = [] |
| 1257 scm.update(options, self.args, file_list) | 1295 scm.update(options, self.args, file_list) |
| 1258 self.mox.VerifyAll() | 1296 self.mox.VerifyAll() |
| 1259 | 1297 |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1351 self.mox.VerifyAll() | 1389 self.mox.VerifyAll() |
| 1352 | 1390 |
| 1353 | 1391 |
| 1354 class SubprocessCallAndCaptureTestCase(BaseTestCase): | 1392 class SubprocessCallAndCaptureTestCase(BaseTestCase): |
| 1355 def setUp(self): | 1393 def setUp(self): |
| 1356 self.mox = mox.Mox() | 1394 self.mox = mox.Mox() |
| 1357 self._sys_stdout = gclient.sys.stdout | 1395 self._sys_stdout = gclient.sys.stdout |
| 1358 gclient.sys.stdout = self.mox.CreateMock(self._sys_stdout) | 1396 gclient.sys.stdout = self.mox.CreateMock(self._sys_stdout) |
| 1359 self._subprocess_Popen = gclient.subprocess.Popen | 1397 self._subprocess_Popen = gclient.subprocess.Popen |
| 1360 gclient.subprocess.Popen = self.mox.CreateMockAnything() | 1398 gclient.subprocess.Popen = self.mox.CreateMockAnything() |
| 1399 self._CaptureSVN = gclient.CaptureSVN |
| 1400 gclient.CaptureSVN = self.mox.CreateMockAnything() |
| 1361 | 1401 |
| 1362 def tearDown(self): | 1402 def tearDown(self): |
| 1363 gclient.sys.stdout = self._sys_stdout | 1403 gclient.sys.stdout = self._sys_stdout |
| 1364 gclient.subprocess.Popen = self._subprocess_Popen | 1404 gclient.subprocess.Popen = self._subprocess_Popen |
| 1405 gclient.CaptureSVN = self._CaptureSVN |
| 1365 | 1406 |
| 1366 def testSubprocessCallAndCapture(self): | 1407 def testSubprocessCallAndCapture(self): |
| 1367 command = ['boo', 'foo', 'bar'] | 1408 command = ['boo', 'foo', 'bar'] |
| 1368 in_directory = 'bleh' | 1409 in_directory = 'bleh' |
| 1369 fail_status = None | 1410 fail_status = None |
| 1370 pattern = 'a(.*)b' | 1411 pattern = 'a(.*)b' |
| 1371 test_string = 'ahah\naccb\nallo\naddb\n' | 1412 test_string = 'ahah\naccb\nallo\naddb\n' |
| 1372 class Mock(object): | 1413 class Mock(object): |
| 1373 stdout = StringIO.StringIO(test_string) | 1414 stdout = StringIO.StringIO(test_string) |
| 1374 def wait(self): | 1415 def wait(self): |
| 1375 pass | 1416 pass |
| 1376 kid = Mock() | 1417 kid = Mock() |
| 1377 print("\n________ running 'boo foo bar' in 'bleh'") | 1418 print("\n________ running 'boo foo bar' in 'bleh'") |
| 1378 for i in test_string: | 1419 for i in test_string: |
| 1379 sys.stdout.write(i) | 1420 gclient.sys.stdout.write(i) |
| 1380 gclient.subprocess.Popen(command, bufsize=0, cwd=in_directory, | 1421 gclient.subprocess.Popen(command, bufsize=0, cwd=in_directory, |
| 1381 shell=(sys.platform == 'win32'), | 1422 shell=(sys.platform == 'win32'), |
| 1382 stdout=gclient.subprocess.PIPE).AndReturn(kid) | 1423 stdout=gclient.subprocess.PIPE).AndReturn(kid) |
| 1383 self.mox.ReplayAll() | 1424 self.mox.ReplayAll() |
| 1384 capture_list = [] | 1425 capture_list = [] |
| 1385 gclient.SubprocessCallAndCapture(command, in_directory, fail_status, | 1426 gclient.SubprocessCallAndCapture(command, in_directory, fail_status, |
| 1386 pattern, capture_list) | 1427 pattern, capture_list) |
| 1387 self.assertEquals(capture_list, ['cc', 'dd']) | 1428 self.assertEquals(capture_list, ['cc', 'dd']) |
| 1388 self.mox.VerifyAll() | 1429 self.mox.VerifyAll() |
| 1389 | 1430 |
| 1390 def testCaptureSVNStatus(self): | 1431 def testCaptureSVNStatus(self): |
| 1391 x = self | 1432 x = self |
| 1392 def CaptureSVNMock(command): | 1433 def CaptureSVNMock(command, in_directory=None, print_error=True): |
| 1434 x.assertEquals(in_directory, None) |
| 1435 x.assertEquals(print_error, True) |
| 1393 x.assertEquals(['status', '--xml', '.'], command) | 1436 x.assertEquals(['status', '--xml', '.'], command) |
| 1394 return r"""<?xml version="1.0"?> | 1437 return r"""<?xml version="1.0"?> |
| 1395 <status> | 1438 <status> |
| 1396 <target path="."> | 1439 <target path="."> |
| 1397 <entry path="unversionned_file.txt"> | 1440 <entry path="unversionned_file.txt"> |
| 1398 <wc-status props="none" item="unversioned"></wc-status> | 1441 <wc-status props="none" item="unversioned"></wc-status> |
| 1399 </entry> | 1442 </entry> |
| 1400 <entry path="build\internal\essential.vsprops"> | 1443 <entry path="build\internal\essential.vsprops"> |
| 1401 <wc-status props="normal" item="modified" revision="14628"> | 1444 <wc-status props="normal" item="modified" revision="14628"> |
| 1402 <commit revision="13818"> | 1445 <commit revision="13818"> |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1434 ('? ', 'unversionned_file.txt'), | 1477 ('? ', 'unversionned_file.txt'), |
| 1435 ('M ', 'build\\internal\\essential.vsprops'), | 1478 ('M ', 'build\\internal\\essential.vsprops'), |
| 1436 ('A + ', 'chrome\\app\\d'), | 1479 ('A + ', 'chrome\\app\\d'), |
| 1437 ('MM ', 'chrome\\app\\DEPS'), | 1480 ('MM ', 'chrome\\app\\DEPS'), |
| 1438 ('C ', 'scripts\\master\\factory\\gclient_factory.py'), | 1481 ('C ', 'scripts\\master\\factory\\gclient_factory.py'), |
| 1439 ] | 1482 ] |
| 1440 self.assertEquals(sorted(info), sorted(expected)) | 1483 self.assertEquals(sorted(info), sorted(expected)) |
| 1441 | 1484 |
| 1442 def testCaptureSVNStatusEmpty(self): | 1485 def testCaptureSVNStatusEmpty(self): |
| 1443 x = self | 1486 x = self |
| 1444 def CaptureSVNMock(command): | 1487 def CaptureSVNMock(command, in_directory=None, print_error=True): |
| 1488 x.assertEquals(in_directory, None) |
| 1445 x.assertEquals(['status', '--xml'], command) | 1489 x.assertEquals(['status', '--xml'], command) |
| 1446 return r"""<?xml version="1.0"?> | 1490 return r"""<?xml version="1.0"?> |
| 1447 <status> | 1491 <status> |
| 1448 <target | 1492 <target |
| 1449 path="perf"> | 1493 path="perf"> |
| 1450 </target> | 1494 </target> |
| 1451 </status> | 1495 </status> |
| 1452 """ | 1496 """ |
| 1453 gclient.CaptureSVN = CaptureSVNMock | 1497 gclient.CaptureSVN = CaptureSVNMock |
| 1454 info = gclient.CaptureSVNStatus(None) | 1498 info = gclient.CaptureSVNStatus(None) |
| 1455 self.assertEquals(info, []) | 1499 self.assertEquals(info, []) |
| 1456 | 1500 |
| 1457 | 1501 |
| 1458 if __name__ == '__main__': | 1502 if __name__ == '__main__': |
| 1459 unittest.main() | 1503 unittest.main() |
| 1460 | 1504 |
| 1461 # vim: ts=2:sw=2:tw=80:et: | 1505 # vim: ts=2:sw=2:tw=80:et: |
| OLD | NEW |