Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1293)

Unified Diff: tests/gclient_test.py

Issue 2285002: Revert "Reapply 48271 with fix." (Closed)
Patch Set: Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tests/gclient_smoketest.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/gclient_test.py
diff --git a/tests/gclient_test.py b/tests/gclient_test.py
new file mode 100755
index 0000000000000000000000000000000000000000..c81a9de5706825ed1476aca19fa54ad5050a1313
--- /dev/null
+++ b/tests/gclient_test.py
@@ -0,0 +1,1273 @@
+#!/usr/bin/python
+# Copyright (c) 2010 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Unit tests for gclient.py."""
+
+# Fixes include path.
+from super_mox import mox, SuperMoxTestBase
+
+import gclient
+
+
+class BaseTestCase(SuperMoxTestBase):
+ # Like unittest's assertRaises, but checks for Gclient.Error.
+ def assertRaisesError(self, msg, fn, *args, **kwargs):
+ try:
+ fn(*args, **kwargs)
+ except gclient.gclient_utils.Error, e:
+ self.assertEquals(e.args[0], msg)
+ else:
+ self.fail('%s not raised' % msg)
+
+
+class GClientBaseTestCase(BaseTestCase):
+ def Options(self, *args, **kwargs):
+ return self.OptionsObject(self, *args, **kwargs)
+
+ def setUp(self):
+ BaseTestCase.setUp(self)
+ # These are not tested.
+ self.mox.StubOutWithMock(gclient.gclient_utils, 'FileRead')
+ self.mox.StubOutWithMock(gclient.gclient_utils, 'FileWrite')
+ self.mox.StubOutWithMock(gclient.gclient_utils, 'SubprocessCall')
+ self.mox.StubOutWithMock(gclient.gclient_utils, 'RemoveDirectory')
+ # Mock them to be sure nothing bad happens.
+ self.mox.StubOutWithMock(gclient.gclient_scm.scm.SVN, 'Capture')
+ self.mox.StubOutWithMock(gclient.gclient_scm.scm.SVN, 'CaptureInfo')
+ self.mox.StubOutWithMock(gclient.gclient_scm.scm.SVN, 'CaptureStatus')
+ self.mox.StubOutWithMock(gclient.gclient_scm.scm.SVN, 'Run')
+ self.mox.StubOutWithMock(gclient.gclient_scm.scm.SVN, 'RunAndGetFileList')
+ self._gclient_gclient = gclient.GClient
+ gclient.GClient = self.mox.CreateMockAnything()
+ gclient.GClient.DEPS_FILE = self._gclient_gclient.DEPS_FILE
+ gclient.GClient.DEFAULT_CLIENT_FILE_TEXT = (
+ self._gclient_gclient.DEFAULT_CLIENT_FILE_TEXT)
+ self._scm_wrapper = gclient.gclient_scm.CreateSCM
+ gclient.gclient_scm.CreateSCM = self.mox.CreateMockAnything()
+
+ def tearDown(self):
+ gclient.GClient = self._gclient_gclient
+ gclient.gclient_scm.CreateSCM = self._scm_wrapper
+ BaseTestCase.tearDown(self)
+
+
+class GclientTestCase(GClientBaseTestCase):
+ class OptionsObject(object):
+ def __init__(self, test_case, verbose=0, spec=None,
+ config_filename='a_file_name',
+ entries_filename='a_entry_file_name',
+ force=False, nohooks=False):
+ self.verbose = verbose
+ self.config_filename = config_filename
+ self.entries_filename = entries_filename
+ self.spec = spec
+ self.name = None
+ self.force = force
+ self.nohooks = nohooks
+ self.revisions = []
+ self.manually_grab_svn_rev = True
+ self.deps_os = None
+ self.head = False
+
+ def setUp(self):
+ GClientBaseTestCase.setUp(self)
+ self.args = self.Args()
+ self.root_dir = self.Dir()
+ self.url = self.Url()
+
+
+class GClientCommandsTestCase(GClientBaseTestCase):
+ def testCommands(self):
+ known_commands = [gclient.CMDcleanup, gclient.CMDconfig, gclient.CMDdiff,
+ gclient.CMDexport, gclient.CMDhelp, gclient.CMDpack,
+ gclient.CMDrevert, gclient.CMDrevinfo,
+ gclient.CMDrunhooks, gclient.CMDstatus, gclient.CMDsync,
+ gclient.CMDupdate]
+ cmds = [getattr(gclient, x) for x in dir(gclient) if x.startswith('CMD')]
+ self.assertEquals(len(known_commands), len(cmds))
+ for v in cmds:
+ # If it fails, you need to add a test case for the new command.
+ self.assert_(v in known_commands)
+ self.mox.ReplayAll()
+
+class TestCMDconfig(GclientTestCase):
+ def testMissingArgument(self):
+ exception_msg = "required argument missing; see 'gclient help config'"
+
+ self.mox.ReplayAll()
+ self.assertRaisesError(exception_msg, gclient.CMDconfig, None,
+ self.Options(), ())
+
+ def testExistingClientFile(self):
+ options = self.Options()
+ exception_msg = ('%s file already exists in the current directory' %
+ options.config_filename)
+ gclient.os.path.exists(options.config_filename).AndReturn(True)
+
+ self.mox.ReplayAll()
+ self.assertRaisesError(exception_msg, gclient.CMDconfig, None, options,
+ (1,))
+
+ def testFromText(self):
+ options = self.Options(spec='config_source_content')
+ gclient.os.path.exists(options.config_filename).AndReturn(False)
+ gclient.GClient('.', options).AndReturn(gclient.GClient)
+ gclient.GClient.SetConfig(options.spec)
+ gclient.GClient.SaveConfig()
+
+ self.mox.ReplayAll()
+ gclient.CMDconfig(None, options, (1,),)
+
+ def testCreateClientFile(self):
+ options = self.Options()
+ gclient.os.path.exists(options.config_filename).AndReturn(False)
+ gclient.GClient('.', options).AndReturn(gclient.GClient)
+ gclient.GClient.SetDefaultConfig('the_name', 'http://svn/url/the_name',
+ 'other')
+ gclient.GClient.SaveConfig()
+
+ self.mox.ReplayAll()
+ gclient.CMDconfig(None, options,
+ ('http://svn/url/the_name', 'other', 'args', 'ignored'))
+
+
+class GenericCommandTestCase(GclientTestCase):
+ def ReturnValue(self, command, return_value):
+ options = self.Options()
+ gclient.GClient.LoadCurrentConfig(options).AndReturn(gclient.GClient)
+ gclient.GClient.RunOnDeps(command, self.args).AndReturn(return_value)
+
+ self.mox.ReplayAll()
+ function = getattr(gclient, 'CMD' + command)
+ result = function(None, options, self.args)
+ self.assertEquals(result, return_value)
+
+ def BadClient(self, command):
+ options = self.Options()
+ gclient.GClient.LoadCurrentConfig(options).AndReturn(None)
+
+ self.mox.ReplayAll()
+ function = getattr(gclient, 'CMD' + command)
+ self.assertRaisesError(
+ "client not configured; see 'gclient config'",
+ function, None, options, self.args)
+
+ def Verbose(self, command):
+ options = self.Options(verbose=True)
+ gclient.GClient.LoadCurrentConfig(options).AndReturn(gclient.GClient)
+ text = "# Dummy content\nclient = 'my client'"
+ gclient.GClient.ConfigContent().AndReturn(text)
+ print(text)
+ gclient.GClient.RunOnDeps(command, self.args).AndReturn(0)
+
+ self.mox.ReplayAll()
+ function = getattr(gclient, 'CMD' + command)
+ result = function(None, options, self.args)
+ self.assertEquals(result, 0)
+
+
+class TestCMDcleanup(GenericCommandTestCase):
+ def testGoodClient(self):
+ self.ReturnValue('cleanup', 0)
+ def testError(self):
+ self.ReturnValue('cleanup', 42)
+ def testBadClient(self):
+ self.BadClient('cleanup')
+
+
+class TestCMDstatus(GenericCommandTestCase):
+ def testGoodClient(self):
+ self.ReturnValue('status', 0)
+ def testError(self):
+ self.ReturnValue('status', 42)
+ def testBadClient(self):
+ self.BadClient('status')
+
+
+class TestCMDrunhooks(GenericCommandTestCase):
+ def Options(self, verbose=False, *args, **kwargs):
+ return self.OptionsObject(self, verbose=verbose, *args, **kwargs)
+
+ def testGoodClient(self):
+ self.ReturnValue('runhooks', 0)
+ def testError(self):
+ self.ReturnValue('runhooks', 42)
+ def testBadClient(self):
+ self.BadClient('runhooks')
+
+
+class TestCMDupdate(GenericCommandTestCase):
+ def ReturnValue(self, command, return_value):
+ options = self.Options()
+ gclient.GClient.LoadCurrentConfig(options).AndReturn(gclient.GClient)
+ gclient.GClient.GetVar("solutions")
+ gclient.GClient.RunOnDeps(command, self.args).AndReturn(return_value)
+
+ self.mox.ReplayAll()
+ function = getattr(gclient, 'CMD' + command)
+ result = function(None, options, self.args)
+ self.assertEquals(result, return_value)
+
+ def Verbose(self, command):
+ options = self.Options(verbose=True)
+ gclient.GClient.LoadCurrentConfig(options).AndReturn(gclient.GClient)
+ gclient.GClient.GetVar("solutions")
+ text = "# Dummy content\nclient = 'my client'"
+ gclient.GClient.ConfigContent().AndReturn(text)
+ print(text)
+ gclient.GClient.RunOnDeps(command, self.args).AndReturn(0)
+
+ self.mox.ReplayAll()
+ function = getattr(gclient, 'CMD' + command)
+ result = function(None, options, self.args)
+ self.assertEquals(result, 0)
+
+ def Options(self, verbose=False, *args, **kwargs):
+ return self.OptionsObject(self, verbose=verbose, *args, **kwargs)
+
+ def testBasic(self):
+ self.ReturnValue('update', 0)
+ def testError(self):
+ self.ReturnValue('update', 42)
+ def testBadClient(self):
+ self.BadClient('update')
+ def testVerbose(self):
+ self.Verbose('update')
+
+
+class TestCMDdiff(GenericCommandTestCase):
+ def Options(self, *args, **kwargs):
+ return self.OptionsObject(self, *args, **kwargs)
+
+ def testBasic(self):
+ self.ReturnValue('diff', 0)
+ def testError(self):
+ self.ReturnValue('diff', 42)
+ def testBadClient(self):
+ self.BadClient('diff')
+ def testVerbose(self):
+ self.Verbose('diff')
+
+
+class TestCMDexport(GenericCommandTestCase):
+ def testBasic(self):
+ self.args = ['dir']
+ self.ReturnValue('export', 0)
+ def testError(self):
+ self.args = ['dir']
+ self.ReturnValue('export', 42)
+ def testBadClient(self):
+ self.args = ['dir']
+ self.BadClient('export')
+
+
+class TestCMDpack(GenericCommandTestCase):
+ def Options(self, *args, **kwargs):
+ return self.OptionsObject(self, *args, **kwargs)
+
+ def testBasic(self):
+ self.ReturnValue('pack', 0)
+ def testError(self):
+ self.ReturnValue('pack', 42)
+ def testBadClient(self):
+ self.BadClient('pack')
+
+
+class TestCMDrevert(GenericCommandTestCase):
+ def testBasic(self):
+ self.ReturnValue('revert', 0)
+ def testError(self):
+ self.ReturnValue('revert', 42)
+ def testBadClient(self):
+ self.BadClient('revert')
+
+
+class GClientClassTestCase(GclientTestCase):
+ def testDir(self):
+ members = [
+ 'ConfigContent', 'DEFAULT_CLIENT_FILE_TEXT',
+ 'DEFAULT_SNAPSHOT_FILE_TEXT', 'DEFAULT_SNAPSHOT_SOLUTION_TEXT',
+ 'DEPS_FILE', 'FileImpl', 'FromImpl', 'GetVar', 'LoadCurrentConfig',
+ 'PrintRevInfo', 'RunOnDeps', 'SaveConfig', 'SetConfig',
+ 'SetDefaultConfig',
+ 'deps_os_choices', 'supported_commands',
+ ]
+
+ # If you add a member, be sure to add the relevant test!
+ self.compareMembers(self._gclient_gclient('root_dir', 'options'), members)
+
+ def testSetConfig_ConfigContent_GetVar_SaveConfig_SetDefaultConfig(self):
+ options = self.Options()
+ text = "# Dummy content\nclient = 'my client'"
+ gclient.gclient_utils.FileWrite(
+ gclient.os.path.join(self.root_dir, options.config_filename),
+ text)
+
+ self.mox.ReplayAll()
+ client = self._gclient_gclient(self.root_dir, options)
+ client.SetConfig(text)
+ self.assertEqual(client.ConfigContent(), text)
+ self.assertEqual(client.GetVar('client'), 'my client')
+ self.assertEqual(client.GetVar('foo'), None)
+ client.SaveConfig()
+
+ solution_name = 'solution name'
+ solution_url = 'solution url'
+ safesync_url = 'safesync url'
+ default_text = gclient.GClient.DEFAULT_CLIENT_FILE_TEXT % {
+ 'solution_name' : solution_name,
+ 'solution_url' : solution_url,
+ 'safesync_url' : safesync_url
+ }
+ client.SetDefaultConfig(solution_name, solution_url, safesync_url)
+ self.assertEqual(client.ConfigContent(), default_text)
+ solutions = [{
+ 'name': solution_name,
+ 'url': solution_url,
+ 'custom_deps': {},
+ 'safesync_url': safesync_url
+ }]
+ self.assertEqual(client.GetVar('solutions'), solutions)
+ self.assertEqual(client.GetVar('foo'), None)
+
+ def testLoadCurrentConfig(self):
+ options = self.Options()
+ gclient.os.path.realpath(self.root_dir).AndReturn(self.root_dir)
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, options.config_filename)
+ ).AndReturn(True)
+ gclient.GClient(self.root_dir, options).AndReturn(gclient.GClient)
+ gclient.GClient._LoadConfig()
+
+ self.mox.ReplayAll()
+ client = self._gclient_gclient.LoadCurrentConfig(options, self.root_dir)
+
+ def testRunOnDepsNoDeps(self):
+ solution_name = 'testRunOnDepsNoDeps_solution_name'
+ gclient_config = (
+ "solutions = [ {\n"
+ " 'name': '%s',\n"
+ " 'url': '%s',\n"
+ " 'custom_deps': {},\n"
+ "} ]\n"
+ ) % (solution_name, self.url)
+
+ # pprint.pformat() is non-deterministic in this case!!
+ entries_content = (
+ "entries = \\\n"
+ "{ '%s': '%s'}\n"
+ ) % (solution_name, self.url)
+
+ options = self.Options()
+
+ checkout_path = gclient.os.path.join(self.root_dir, solution_name)
+ gclient.os.path.exists(gclient.os.path.join(checkout_path, '.git')
+ ).AndReturn(False)
+ # Expect a check for the entries file and we say there is not one.
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, options.entries_filename)
+ ).AndReturn(False)
+
+ # An scm will be requested for the solution.
+ scm_wrapper_sol = self.mox.CreateMockAnything()
+ gclient.gclient_scm.CreateSCM(self.url, self.root_dir, solution_name
+ ).AndReturn(scm_wrapper_sol)
+ # Then an update will be performed.
+ scm_wrapper_sol.RunCommand('update', options, self.args, [])
+ # Then an attempt will be made to read its DEPS file.
+ gclient.gclient_utils.FileRead(
+ gclient.os.path.join(self.root_dir, solution_name,
+ gclient.GClient.DEPS_FILE)
+ ).AndRaise(IOError(2, 'No DEPS file'))
+
+ # After everything is done, an attempt is made to write an entries
+ # file.
+ gclient.gclient_utils.FileWrite(
+ gclient.os.path.join(self.root_dir, options.entries_filename),
+ entries_content)
+
+ self.mox.ReplayAll()
+ client = self._gclient_gclient(self.root_dir, options)
+ client.SetConfig(gclient_config)
+ client.RunOnDeps('update', self.args)
+
+ def testRunOnDepsRelativePaths(self):
+ solution_name = 'testRunOnDepsRelativePaths_solution_name'
+ gclient_config = (
+ "solutions = [ {\n"
+ " 'name': '%s',\n"
+ " 'url': '%s',\n"
+ " 'custom_deps': {},\n"
+ "} ]\n"
+ ) % (solution_name, self.url)
+
+ deps = (
+ "use_relative_paths = True\n"
+ "deps = {\n"
+ " 'src/t': 'svn://scm.t/trunk',\n"
+ "}\n")
+ entry_path = gclient.os.path.join(solution_name, 'src', 't'
+ ).replace('\\', '\\\\')
+ entries_content = (
+ "entries = \\\n"
+ "{ '%s': '%s',\n"
+ " '%s': 'svn://scm.t/trunk'}\n"
+ ) % (solution_name, self.url, entry_path)
+
+ scm_wrapper_sol = self.mox.CreateMockAnything()
+ scm_wrapper_t = self.mox.CreateMockAnything()
+
+ options = self.Options()
+
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, solution_name, 'src', 't', '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, solution_name, '.git')
+ ).AndReturn(False)
+ # Expect a check for the entries file and we say there is not one.
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, options.entries_filename)
+ ).AndReturn(False)
+
+ # An scm will be requested for the solution.
+ gclient.gclient_scm.CreateSCM(self.url, self.root_dir, solution_name
+ ).AndReturn(scm_wrapper_sol)
+ # Then an update will be performed.
+ scm_wrapper_sol.RunCommand('update', options, self.args, [])
+ # Then an attempt will be made to read its DEPS file.
+ gclient.gclient_utils.FileRead(
+ gclient.os.path.join(self.root_dir, solution_name,
+ gclient.GClient.DEPS_FILE)
+ ).AndReturn(deps)
+
+ # Next we expect an scm to be request for dep src/t but it should
+ # use the url specified in deps and the relative path should now
+ # be relative to the DEPS file.
+ gclient.gclient_scm.CreateSCM(
+ 'svn://scm.t/trunk',
+ self.root_dir,
+ gclient.os.path.join(solution_name, "src", "t")
+ ).AndReturn(scm_wrapper_t)
+ scm_wrapper_t.RunCommand('update', options, self.args, [])
+
+ # After everything is done, an attempt is made to write an entries
+ # file.
+ gclient.gclient_utils.FileWrite(
+ gclient.os.path.join(self.root_dir, options.entries_filename),
+ entries_content)
+
+ self.mox.ReplayAll()
+ client = self._gclient_gclient(self.root_dir, options)
+ client.SetConfig(gclient_config)
+ client.RunOnDeps('update', self.args)
+
+ def testRunOnDepsCustomDeps(self):
+ solution_name = 'testRunOnDepsCustomDeps_solution_name'
+ gclient_config = (
+ "solutions = [ {\n"
+ " 'name': '%s',\n"
+ " 'url': '%s',\n"
+ " 'custom_deps': {\n"
+ " 'src/b': None,\n"
+ " 'src/n': 'svn://custom.n/trunk',\n"
+ " 'src/t': 'svn://custom.t/trunk',\n"
+ " }\n} ]\n"
+ ) % (solution_name, self.url)
+
+ deps = (
+ "deps = {\n"
+ " 'src/b': 'svn://original.b/trunk',\n"
+ " 'src/t': 'svn://original.t/trunk',\n"
+ "}\n"
+ )
+
+ entries_content = (
+ "entries = \\\n"
+ "{ 'src/n': 'svn://custom.n/trunk',\n"
+ " 'src/t': 'svn://custom.t/trunk',\n"
+ " '%s': '%s'}\n"
+ ) % (solution_name, self.url)
+
+ scm_wrapper_sol = self.mox.CreateMockAnything()
+ scm_wrapper_t = self.mox.CreateMockAnything()
+ scm_wrapper_n = self.mox.CreateMockAnything()
+
+ options = self.Options()
+
+ checkout_path = gclient.os.path.join(self.root_dir, solution_name)
+ gclient.os.path.exists(
+ gclient.os.path.join(checkout_path, '.git')).AndReturn(False)
+ gclient.os.path.exists(gclient.os.path.join(self.root_dir, 'src/n', '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(gclient.os.path.join(self.root_dir, 'src/t', '.git')
+ ).AndReturn(False)
+
+ # Expect a check for the entries file and we say there is not one.
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, options.entries_filename)
+ ).AndReturn(False)
+
+ # An scm will be requested for the solution.
+ gclient.gclient_scm.CreateSCM(self.url, self.root_dir, solution_name
+ ).AndReturn(scm_wrapper_sol)
+ # Then an update will be performed.
+ scm_wrapper_sol.RunCommand('update', options, self.args, [])
+ # Then an attempt will be made to read its DEPS file.
+ gclient.gclient_utils.FileRead(
+ gclient.os.path.join(checkout_path, gclient.GClient.DEPS_FILE)
+ ).AndReturn(deps)
+
+ # Next we expect an scm to be request for dep src/n even though it does not
+ # exist in the DEPS file.
+ gclient.gclient_scm.CreateSCM('svn://custom.n/trunk',
+ self.root_dir,
+ "src/n").AndReturn(scm_wrapper_n)
+
+ # Next we expect an scm to be request for dep src/t but it should
+ # use the url specified in custom_deps.
+ gclient.gclient_scm.CreateSCM('svn://custom.t/trunk',
+ self.root_dir,
+ "src/t").AndReturn(scm_wrapper_t)
+
+ scm_wrapper_n.RunCommand('update', options, self.args, [])
+ scm_wrapper_t.RunCommand('update', options, self.args, [])
+
+ # NOTE: the dep src/b should not create an scm at all.
+
+ # After everything is done, an attempt is made to write an entries
+ # file.
+ gclient.gclient_utils.FileWrite(
+ gclient.os.path.join(self.root_dir, options.entries_filename),
+ entries_content)
+
+ self.mox.ReplayAll()
+ client = self._gclient_gclient(self.root_dir, options)
+ client.SetConfig(gclient_config)
+ client.RunOnDeps('update', self.args)
+
+ # Regression test for Issue #11.
+ # http://code.google.com/p/gclient/issues/detail?id=11
+ def testRunOnDepsSharedDependency(self):
+ name_a = 'testRunOnDepsSharedDependency_a'
+ name_b = 'testRunOnDepsSharedDependency_b'
+
+ url_a = self.url + '/a'
+ url_b = self.url + '/b'
+
+ # config declares two solutions and each has a dependency to place
+ # http://svn.t/trunk at src/t.
+ gclient_config = (
+ "solutions = [ {\n"
+ " 'name': '%s',\n"
+ " 'url': '%s',\n"
+ " 'custom_deps': {},\n"
+ "}, {\n"
+ " 'name': '%s',\n"
+ " 'url': '%s',\n"
+ " 'custom_deps': {},\n"
+ "}\n]\n") % (name_a, url_a, name_b, url_b)
+
+ deps_b = deps_a = (
+ "deps = {\n"
+ " 'src/t' : 'http://svn.t/trunk',\n"
+ "}\n")
+
+ entries_content = (
+ "entries = \\\n"
+ "{ 'src/t': 'http://svn.t/trunk',\n"
+ " '%s': '%s',\n"
+ " '%s': '%s'}\n"
+ ) % (name_a, url_a, name_b, url_b)
+
+ scm_wrapper_a = self.mox.CreateMockAnything()
+ scm_wrapper_b = self.mox.CreateMockAnything()
+ scm_wrapper_dep = self.mox.CreateMockAnything()
+
+ options = self.Options()
+
+ gclient.os.path.exists(gclient.os.path.join(self.root_dir, name_a, '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(gclient.os.path.join(self.root_dir, name_b, '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(gclient.os.path.join(self.root_dir, 'src/t', '.git')
+ ).AndReturn(False)
+
+ # Expect a check for the entries file and we say there is not one.
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, options.entries_filename)
+ ).AndReturn(False)
+
+ # An scm will be requested for the first solution.
+ gclient.gclient_scm.CreateSCM(url_a, self.root_dir, name_a).AndReturn(
+ scm_wrapper_a)
+ # Then an attempt will be made to read it's DEPS file.
+ gclient.gclient_utils.FileRead(
+ gclient.os.path.join(self.root_dir, name_a, gclient.GClient.DEPS_FILE)
+ ).AndReturn(deps_a)
+ # Then an update will be performed.
+ scm_wrapper_a.RunCommand('update', options, self.args, [])
+
+ # An scm will be requested for the second solution.
+ gclient.gclient_scm.CreateSCM(url_b, self.root_dir, name_b).AndReturn(
+ scm_wrapper_b)
+ # Then an attempt will be made to read its DEPS file.
+ gclient.gclient_utils.FileRead(
+ gclient.os.path.join(self.root_dir, name_b, gclient.GClient.DEPS_FILE)
+ ).AndReturn(deps_b)
+ # Then an update will be performed.
+ scm_wrapper_b.RunCommand('update', options, self.args, [])
+
+ # Finally, an scm is requested for the shared dep.
+ gclient.gclient_scm.CreateSCM('http://svn.t/trunk', self.root_dir, 'src/t'
+ ).AndReturn(scm_wrapper_dep)
+ # And an update is run on it.
+ scm_wrapper_dep.RunCommand('update', options, self.args, [])
+
+ # After everything is done, an attempt is made to write an entries file.
+ gclient.gclient_utils.FileWrite(
+ gclient.os.path.join(self.root_dir, options.entries_filename),
+ entries_content)
+
+ self.mox.ReplayAll()
+ client = self._gclient_gclient(self.root_dir, options)
+ client.SetConfig(gclient_config)
+ client.RunOnDeps('update', self.args)
+
+ def testRunOnDepsSuccess(self):
+ # Fake .gclient file.
+ name = 'testRunOnDepsSuccess_solution_name'
+ gclient_config = """solutions = [ {
+ 'name': '%s',
+ 'url': '%s',
+ 'custom_deps': {},
+}, ]""" % (name, self.url)
+
+ # pprint.pformat() is non-deterministic in this case!!
+ entries_content = (
+ "entries = \\\n"
+ "{ '%s': '%s'}\n"
+ ) % (name, self.url)
+
+ options = self.Options()
+ gclient.os.path.exists(gclient.os.path.join(self.root_dir, name, '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, options.entries_filename)
+ ).AndReturn(False)
+ gclient.gclient_scm.CreateSCM(self.url, self.root_dir, name).AndReturn(
+ gclient.gclient_scm.CreateSCM)
+ gclient.gclient_scm.CreateSCM.RunCommand('update', options, self.args, [])
+ gclient.gclient_utils.FileRead(
+ gclient.os.path.join(self.root_dir, name, gclient.GClient.DEPS_FILE)
+ ).AndReturn("Boo = 'a'")
+ gclient.gclient_utils.FileWrite(
+ gclient.os.path.join(self.root_dir, options.entries_filename),
+ entries_content)
+
+ self.mox.ReplayAll()
+ client = self._gclient_gclient(self.root_dir, options)
+ client.SetConfig(gclient_config)
+ client.RunOnDeps('update', self.args)
+
+ def testRunOnDepsRevisions(self):
+ def OptIsRev(options, rev):
+ if not options.revision == str(rev):
+ print("options.revision = %s" % options.revision)
+ return options.revision == str(rev)
+ def OptIsRevNone(options):
+ if options.revision:
+ print("options.revision = %s" % options.revision)
+ return options.revision == None
+ def OptIsRev42(options):
+ return OptIsRev(options, 42)
+ def OptIsRev123(options):
+ return OptIsRev(options, 123)
+ def OptIsRev333(options):
+ return OptIsRev(options, 333)
+
+ # Fake .gclient file.
+ gclient_config = """solutions = [ {
+ 'name': 'src',
+ 'url': '%s',
+ 'custom_deps': {},
+}, ]""" % self.url
+ # Fake DEPS file.
+ deps_content = """deps = {
+ 'src/breakpad/bar': 'http://google-breakpad.googlecode.com/svn/trunk/src@285',
+ 'foo/third_party/WebKit': '/trunk/deps/third_party/WebKit',
+ 'src/third_party/cygwin': '/trunk/deps/third_party/cygwin@3248',
+}
+deps_os = {
+ 'win': {
+ 'src/foosad/asdf': 'svn://random_server:123/asd/python_24@5580',
+ },
+ 'mac': {
+ 'src/third_party/python_24': 'svn://random_server:123/trunk/python_24@5580',
+ },
+}"""
+
+ cygwin_path = 'dummy path cygwin'
+ webkit_path = 'dummy path webkit'
+
+ entries_content = (
+ "entries = \\\n"
+ "{ 'foo/third_party/WebKit': '%s',\n"
+ " 'src': '%s',\n"
+ " 'src/breakpad/bar':"
+ " 'http://google-breakpad.googlecode.com/svn/trunk/src@285',\n"
+ " 'src/third_party/cygwin': '%s',\n"
+ " 'src/third_party/python_24':"
+ " 'svn://random_server:123/trunk/python_24@5580'}\n"
+ ) % (webkit_path, self.url, cygwin_path)
+
+ scm_wrapper_bleh = self.mox.CreateMockAnything()
+ scm_wrapper_src = self.mox.CreateMockAnything()
+ scm_wrapper_src2 = self.mox.CreateMockAnything()
+ scm_wrapper_webkit = self.mox.CreateMockAnything()
+ scm_wrapper_breakpad = self.mox.CreateMockAnything()
+ scm_wrapper_cygwin = self.mox.CreateMockAnything()
+ scm_wrapper_python = self.mox.CreateMockAnything()
+ options = self.Options()
+ options.revisions = [ 'src@123', 'foo/third_party/WebKit@42',
+ 'src/third_party/cygwin@333' ]
+ options.deps_os = 'mac'
+ # Also, pymox doesn't verify the order of function calling w.r.t. different
+ # mock objects. Pretty lame. So reorder as we wish to make it clearer.
+ gclient.gclient_utils.FileRead(
+ gclient.os.path.join(self.root_dir, 'src', gclient.GClient.DEPS_FILE)
+ ).AndReturn(deps_content)
+ gclient.gclient_utils.FileWrite(
+ gclient.os.path.join(self.root_dir, options.entries_filename),
+ entries_content)
+
+ gclient.os.path.exists(gclient.os.path.join(self.root_dir, 'src', '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, 'foo/third_party/WebKit', '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, 'src/third_party/cygwin', '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, 'src/third_party/python_24', '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, 'src/breakpad/bar', '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, options.entries_filename)
+ ).AndReturn(False)
+
+ gclient.gclient_scm.CreateSCM(self.url, self.root_dir, 'src').AndReturn(
+ scm_wrapper_src)
+ scm_wrapper_src.RunCommand('update', mox.Func(OptIsRev123), self.args, [])
+
+ gclient.gclient_scm.CreateSCM(self.url, self.root_dir,
+ None).AndReturn(scm_wrapper_src2)
+ scm_wrapper_src2.FullUrlForRelativeUrl('/trunk/deps/third_party/cygwin@3248'
+ ).AndReturn(cygwin_path)
+
+ gclient.gclient_scm.CreateSCM(self.url, self.root_dir,
+ None).AndReturn(scm_wrapper_src2)
+ scm_wrapper_src2.FullUrlForRelativeUrl('/trunk/deps/third_party/WebKit'
+ ).AndReturn(webkit_path)
+
+ gclient.gclient_scm.CreateSCM(
+ webkit_path, self.root_dir, 'foo/third_party/WebKit'
+ ).AndReturn(scm_wrapper_webkit)
+ scm_wrapper_webkit.RunCommand('update', mox.Func(OptIsRev42), self.args, [])
+
+ gclient.gclient_scm.CreateSCM(
+ 'http://google-breakpad.googlecode.com/svn/trunk/src@285',
+ self.root_dir, 'src/breakpad/bar').AndReturn(scm_wrapper_breakpad)
+ scm_wrapper_breakpad.RunCommand('update', mox.Func(OptIsRevNone),
+ self.args, [])
+
+ gclient.gclient_scm.CreateSCM(
+ cygwin_path, self.root_dir, 'src/third_party/cygwin'
+ ).AndReturn(scm_wrapper_cygwin)
+ scm_wrapper_cygwin.RunCommand('update', mox.Func(OptIsRev333), self.args,
+ [])
+
+ gclient.gclient_scm.CreateSCM(
+ 'svn://random_server:123/trunk/python_24@5580',
+ self.root_dir,
+ 'src/third_party/python_24'
+ ).AndReturn(scm_wrapper_python)
+ scm_wrapper_python.RunCommand('update', mox.Func(OptIsRevNone), self.args,
+ [])
+
+ self.mox.ReplayAll()
+ client = self._gclient_gclient(self.root_dir, options)
+ client.SetConfig(gclient_config)
+ client.RunOnDeps('update', self.args)
+
+ def testRunOnDepsConflictingRevisions(self):
+ # Fake .gclient file.
+ name = 'testRunOnDepsConflictingRevisions_solution_name'
+ gclient_config = """solutions = [ {
+ 'name': '%s',
+ 'url': '%s',
+ 'custom_deps': {},
+ 'custom_vars': {},
+}, ]""" % (name, self.url)
+ # Fake DEPS file.
+ deps_content = """deps = {
+ 'foo/third_party/WebKit': '/trunk/deps/third_party/WebKit',
+}"""
+
+ options = self.Options()
+ options.revisions = [ 'foo/third_party/WebKit@42',
+ 'foo/third_party/WebKit@43' ]
+ client = self._gclient_gclient(self.root_dir, options)
+ client.SetConfig(gclient_config)
+ exception = "Conflicting revision numbers specified."
+ try:
+ client.RunOnDeps('update', self.args)
+ except gclient.gclient_utils.Error, e:
+ self.assertEquals(e.args[0], exception)
+ else:
+ self.fail('%s not raised' % exception)
+
+ def testRunOnDepsSuccessVars(self):
+ # Fake .gclient file.
+ name = 'testRunOnDepsSuccessVars_solution_name'
+ gclient_config = """solutions = [ {
+ 'name': '%s',
+ 'url': '%s',
+ 'custom_deps': {},
+ 'custom_vars': {},
+}, ]""" % (name, self.url)
+ # Fake DEPS file.
+ deps_content = """vars = {
+ 'webkit': '/trunk/bar/',
+}
+deps = {
+ 'foo/third_party/WebKit': Var('webkit') + 'WebKit',
+}"""
+
+ webkit_path = 'dummy path webkit'
+
+ entries_content = (
+ "entries = \\\n"
+ "{ 'foo/third_party/WebKit': '%s',\n"
+ " '%s': '%s'}\n"
+ ) % (webkit_path, name, self.url)
+
+ scm_wrapper_webkit = self.mox.CreateMockAnything()
+ scm_wrapper_src = self.mox.CreateMockAnything()
+
+ options = self.Options()
+ gclient.gclient_utils.FileRead(
+ gclient.os.path.join(self.root_dir, name,
+ gclient.GClient.DEPS_FILE)
+ ).AndReturn(deps_content)
+ gclient.gclient_utils.FileWrite(
+ gclient.os.path.join(self.root_dir, options.entries_filename),
+ entries_content)
+
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, 'foo/third_party/WebKit', '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, name, '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, options.entries_filename)
+ ).AndReturn(False)
+ gclient.gclient_scm.CreateSCM(self.url, self.root_dir, name).AndReturn(
+ gclient.gclient_scm.CreateSCM)
+ gclient.gclient_scm.CreateSCM.RunCommand('update', options, self.args, [])
+
+ gclient.gclient_scm.CreateSCM(self.url, self.root_dir, None
+ ).AndReturn(scm_wrapper_src)
+ scm_wrapper_src.FullUrlForRelativeUrl('/trunk/bar/WebKit'
+ ).AndReturn(webkit_path)
+
+ gclient.gclient_scm.CreateSCM(
+ webkit_path, self.root_dir, 'foo/third_party/WebKit'
+ ).AndReturn(gclient.gclient_scm.CreateSCM)
+ gclient.gclient_scm.CreateSCM.RunCommand('update', options, self.args, [])
+
+ self.mox.ReplayAll()
+ client = self._gclient_gclient(self.root_dir, options)
+ client.SetConfig(gclient_config)
+ client.RunOnDeps('update', self.args)
+
+ def testRunOnDepsSuccessCustomVars(self):
+ # Fake .gclient file.
+ name = 'testRunOnDepsSuccessCustomVars_solution_name'
+ gclient_config = """solutions = [ {
+ 'name': '%s',
+ 'url': '%s',
+ 'custom_deps': {},
+ 'custom_vars': {'webkit': '/trunk/bar_custom/'},
+}, ]""" % (name, self.url)
+ # Fake DEPS file.
+ deps_content = """vars = {
+ 'webkit': '/trunk/bar/',
+}
+deps = {
+ 'foo/third_party/WebKit': Var('webkit') + 'WebKit',
+}"""
+
+ webkit_path = 'dummy path webkit'
+
+ entries_content = (
+ "entries = \\\n"
+ "{ 'foo/third_party/WebKit': '%s',\n"
+ " '%s': '%s'}\n"
+ ) % (webkit_path, name, self.url)
+
+ scm_wrapper_webkit = self.mox.CreateMockAnything()
+ scm_wrapper_src = self.mox.CreateMockAnything()
+
+ options = self.Options()
+ gclient.gclient_utils.FileRead(
+ gclient.os.path.join(self.root_dir, name, gclient.GClient.DEPS_FILE)
+ ).AndReturn(deps_content)
+ gclient.gclient_utils.FileWrite(
+ gclient.os.path.join(self.root_dir, options.entries_filename),
+ entries_content)
+
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, 'foo/third_party/WebKit', '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, name, '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, options.entries_filename)
+ ).AndReturn(False)
+ gclient.gclient_scm.CreateSCM(self.url, self.root_dir, name).AndReturn(
+ gclient.gclient_scm.CreateSCM)
+ gclient.gclient_scm.CreateSCM.RunCommand('update', options, self.args, [])
+
+ gclient.gclient_scm.CreateSCM(self.url, self.root_dir,
+ None).AndReturn(scm_wrapper_src)
+ scm_wrapper_src.FullUrlForRelativeUrl('/trunk/bar_custom/WebKit'
+ ).AndReturn(webkit_path)
+
+ gclient.gclient_scm.CreateSCM(webkit_path, self.root_dir,
+ 'foo/third_party/WebKit').AndReturn(gclient.gclient_scm.CreateSCM)
+ gclient.gclient_scm.CreateSCM.RunCommand('update', options, self.args, [])
+
+ self.mox.ReplayAll()
+ client = self._gclient_gclient(self.root_dir, options)
+ client.SetConfig(gclient_config)
+ client.RunOnDeps('update', self.args)
+
+ def testRunOnDepsFailureVars(self):
+ # Fake .gclient file.
+ name = 'testRunOnDepsFailureVars_solution_name'
+ gclient_config = """solutions = [ {
+ 'name': '%s',
+ 'url': '%s',
+ 'custom_deps': {},
+ 'custom_vars': {},
+}, ]""" % (name, self.url)
+ # Fake DEPS file.
+ deps_content = """deps = {
+ 'foo/third_party/WebKit': Var('webkit') + 'WebKit',
+}"""
+
+ options = self.Options()
+ gclient.gclient_utils.FileRead(
+ gclient.os.path.join(self.root_dir, name, gclient.GClient.DEPS_FILE)
+ ).AndReturn(deps_content)
+ gclient.gclient_scm.CreateSCM(self.url, self.root_dir, name).AndReturn(
+ gclient.gclient_scm.CreateSCM)
+ gclient.gclient_scm.CreateSCM.RunCommand('update', options, self.args, [])
+
+ self.mox.ReplayAll()
+ client = self._gclient_gclient(self.root_dir, options)
+ client.SetConfig(gclient_config)
+ exception = "Var is not defined: webkit"
+ try:
+ client.RunOnDeps('update', self.args)
+ except gclient.gclient_utils.Error, e:
+ self.assertEquals(e.args[0], exception)
+ else:
+ self.fail('%s not raised' % exception)
+
+ def testRunOnDepsFailureInvalidCommand(self):
+ options = self.Options()
+
+ self.mox.ReplayAll()
+ client = self._gclient_gclient(self.root_dir, options)
+ exception = "'foo' is an unsupported command"
+ self.assertRaisesError(exception, self._gclient_gclient.RunOnDeps, client,
+ 'foo', self.args)
+
+ def testRunOnDepsFailureEmpty(self):
+ options = self.Options()
+
+ self.mox.ReplayAll()
+ client = self._gclient_gclient(self.root_dir, options)
+ exception = "No solution specified"
+ self.assertRaisesError(exception, self._gclient_gclient.RunOnDeps, client,
+ 'update', self.args)
+
+ def testFromImplOne(self):
+ base_url = 'svn://base@123'
+ deps_content = (
+ "deps = {\n"
+ " 'base': '%s',\n"
+ " 'main': From('base'),\n"
+ "}\n" % base_url
+ )
+ main_url = 'svn://main@456'
+ base_deps_content = (
+ "deps = {\n"
+ " 'main': '%s',\n"
+ "}\n" % main_url
+ )
+ # Fake .gclient file.
+ name = 'testFromImplOne_solution_name'
+ gclient_config = (
+ "solutions = [ {\n"
+ "'name': '%s',\n"
+ "'url': '%s',\n"
+ "'custom_deps': {},\n"
+ "}, ]" % (name, self.url))
+
+ options = self.Options()
+ gclient.os.path.exists(gclient.os.path.join(self.root_dir, 'main', '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(gclient.os.path.join(self.root_dir, 'base', '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(gclient.os.path.join(self.root_dir, name, '.git')
+ ).AndReturn(False)
+ gclient.gclient_scm.CreateSCM(self.url, self.root_dir, name).AndReturn(
+ gclient.gclient_scm.CreateSCM)
+ gclient.gclient_scm.CreateSCM.RunCommand('update', options, self.args, [])
+ gclient.gclient_utils.FileRead(
+ gclient.os.path.join(self.root_dir, name, gclient.GClient.DEPS_FILE)
+ ).AndReturn(deps_content)
+
+ # base gets updated.
+ gclient.gclient_scm.CreateSCM(base_url, self.root_dir, 'base').AndReturn(
+ gclient.gclient_scm.CreateSCM)
+ gclient.gclient_scm.CreateSCM.RunCommand('update', options, self.args, [])
+ gclient.gclient_utils.FileRead(
+ gclient.os.path.join(self.root_dir, 'base', gclient.GClient.DEPS_FILE)
+ ).AndReturn(base_deps_content)
+
+ # main gets updated.
+ gclient.gclient_scm.CreateSCM(main_url, self.root_dir, 'main').AndReturn(
+ gclient.gclient_scm.CreateSCM)
+ gclient.gclient_scm.CreateSCM.RunCommand('update', options, self.args, [])
+
+ # Process is done and will write an .gclient_entries.
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, options.entries_filename)
+ ).AndReturn(False)
+ gclient.gclient_utils.FileWrite(
+ gclient.os.path.join(self.root_dir, options.entries_filename),
+ mox.IgnoreArg())
+
+ self.mox.ReplayAll()
+ client = self._gclient_gclient(self.root_dir, options)
+ client.SetConfig(gclient_config)
+ client.RunOnDeps('update', self.args)
+
+ def testFromImplTwo(self):
+ base_url = 'svn://base@123'
+ deps_content = (
+ "deps = {\n"
+ " 'base': '%s',\n"
+ " 'main': From('base', 'src/main'),\n"
+ "}\n" % base_url
+ )
+ main_url = 'svn://main@456'
+ base_deps_content = (
+ "deps = {\n"
+ " 'src/main': '%s',\n"
+ "}\n" % main_url
+ )
+ # Fake .gclient file.
+ name = 'testFromImplTwo_solution_name'
+ gclient_config = (
+ "solutions = [ {\n"
+ "'name': '%s',\n"
+ "'url': '%s',\n"
+ "'custom_deps': {},\n"
+ "}, ]" % (name, self.url))
+
+ options = self.Options()
+ gclient.os.path.exists(gclient.os.path.join(self.root_dir, 'main', '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(gclient.os.path.join(self.root_dir, 'base', '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(gclient.os.path.join(self.root_dir, name, '.git')
+ ).AndReturn(False)
+ gclient.gclient_scm.CreateSCM(self.url, self.root_dir, name).AndReturn(
+ gclient.gclient_scm.CreateSCM)
+ gclient.gclient_scm.CreateSCM.RunCommand('update', options, self.args, [])
+ gclient.gclient_utils.FileRead(
+ gclient.os.path.join(self.root_dir, name, gclient.GClient.DEPS_FILE)
+ ).AndReturn(deps_content)
+
+ # base gets updated.
+ gclient.gclient_scm.CreateSCM(base_url, self.root_dir, 'base').AndReturn(
+ gclient.gclient_scm.CreateSCM)
+ gclient.gclient_scm.CreateSCM.RunCommand('update', options, self.args, [])
+ gclient.gclient_utils.FileRead(
+ gclient.os.path.join(self.root_dir, 'base', gclient.GClient.DEPS_FILE)
+ ).AndReturn(base_deps_content)
+
+ # main gets updated.
+ gclient.gclient_scm.CreateSCM(main_url, self.root_dir, 'main').AndReturn(
+ gclient.gclient_scm.CreateSCM)
+ gclient.gclient_scm.CreateSCM.RunCommand('update', options, self.args, [])
+
+ # Process is done and will write an .gclient_entries.
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, options.entries_filename)
+ ).AndReturn(False)
+ gclient.gclient_utils.FileWrite(
+ gclient.os.path.join(self.root_dir, options.entries_filename),
+ mox.IgnoreArg())
+
+ self.mox.ReplayAll()
+ client = self._gclient_gclient(self.root_dir, options)
+ client.SetConfig(gclient_config)
+ client.RunOnDeps('update', self.args)
+
+ def testFromImplTwoRelatvie(self):
+ base_url = 'svn://base@123'
+ deps_content = (
+ "deps = {\n"
+ " 'base': '%s',\n"
+ " 'main': From('base', 'src/main'),\n"
+ "}\n" % base_url
+ )
+ main_url = '/relative@456'
+ base_deps_content = (
+ "deps = {\n"
+ " 'src/main': '%s',\n"
+ "}\n" % main_url
+ )
+ # Fake .gclient file.
+ name = 'testFromImplTwo_solution_name'
+ gclient_config = (
+ "solutions = [ {\n"
+ "'name': '%s',\n"
+ "'url': '%s',\n"
+ "'custom_deps': {},\n"
+ "}, ]" % (name, self.url))
+
+ options = self.Options()
+ gclient.os.path.exists(gclient.os.path.join(self.root_dir, 'main', '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(gclient.os.path.join(self.root_dir, 'base', '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(gclient.os.path.join(self.root_dir, name, '.git')
+ ).AndReturn(False)
+ gclient.gclient_scm.CreateSCM(self.url, self.root_dir, name).AndReturn(
+ gclient.gclient_scm.CreateSCM)
+ gclient.gclient_scm.CreateSCM.RunCommand('update', options, self.args, [])
+ gclient.gclient_utils.FileRead(
+ gclient.os.path.join(self.root_dir, name, gclient.GClient.DEPS_FILE)
+ ).AndReturn(deps_content)
+
+ # base gets updated.
+ gclient.gclient_scm.CreateSCM(base_url, self.root_dir, 'base').AndReturn(
+ gclient.gclient_scm.CreateSCM)
+ gclient.gclient_scm.CreateSCM.RunCommand('update', options, self.args, [])
+ gclient.gclient_utils.FileRead(
+ gclient.os.path.join(self.root_dir, 'base', gclient.GClient.DEPS_FILE)
+ ).AndReturn(base_deps_content)
+
+ # main gets updated after resolving the relative url.
+ gclient.gclient_scm.CreateSCM(base_url, self.root_dir, None).AndReturn(
+ gclient.gclient_scm.CreateSCM)
+ gclient.gclient_scm.CreateSCM.FullUrlForRelativeUrl(main_url
+ ).AndReturn('svn://base' + main_url)
+ gclient.gclient_scm.CreateSCM('svn://base' + main_url, self.root_dir,
+ 'main').AndReturn(gclient.gclient_scm.CreateSCM)
+ gclient.gclient_scm.CreateSCM.RunCommand('update', options, self.args, [])
+
+ # Process is done and will write an .gclient_entries.
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, options.entries_filename)
+ ).AndReturn(False)
+ gclient.gclient_utils.FileWrite(
+ gclient.os.path.join(self.root_dir, options.entries_filename),
+ mox.IgnoreArg())
+
+ self.mox.ReplayAll()
+ client = self._gclient_gclient(self.root_dir, options)
+ client.SetConfig(gclient_config)
+ client.RunOnDeps('update', self.args)
+
+ def testFileImpl(self):
+ # Fake .gclient file.
+ name = "testFileImpl"
+ gclient_config = (
+ "solutions = [ { 'name': '%s',"
+ "'url': '%s', } ]" % (name, self.url)
+ )
+ # Fake DEPS file.
+ target = "chromium_deps"
+ deps_content = (
+ "deps = {"
+ " '%s': File('%s/DEPS') }" % (target, self.url)
+ )
+
+ gclient.gclient_scm.CreateSCM(self.url, self.root_dir, name).AndReturn(
+ gclient.gclient_scm.CreateSCM)
+ options = self.Options()
+ gclient.gclient_scm.CreateSCM.RunCommand('update', options, self.args, [])
+ gclient.gclient_utils.FileRead(
+ gclient.os.path.join(self.root_dir, name, gclient.GClient.DEPS_FILE)
+ ).AndReturn(deps_content)
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, name, '.git')
+ ).AndReturn(False)
+ gclient.os.path.exists(
+ gclient.os.path.join(self.root_dir, options.entries_filename)
+ ).AndReturn(False)
+
+ # This is where gclient tries to do the initial checkout.
+ gclient.gclient_scm.CreateSCM(self.url, self.root_dir, target).AndReturn(
+ gclient.gclient_scm.CreateSCM)
+ gclient.gclient_scm.CreateSCM.RunCommand('updatesingle', options,
+ self.args + ["DEPS"], [])
+ gclient.gclient_utils.FileWrite(
+ gclient.os.path.join(self.root_dir, options.entries_filename),
+ "entries = \\\n{ '%s': '%s'}\n" % (name, self.url))
+
+ self.mox.ReplayAll()
+ client = self._gclient_gclient(self.root_dir, options)
+ client.SetConfig(gclient_config)
+ client.RunOnDeps('update', self.args)
+
+ def test_PrintRevInfo(self):
+ # TODO(aharper): no test yet for revinfo, lock it down once we've verified
+ # implementation for Pulse plugin
+ pass
+
+ # No test for internal functions.
+ def test_GetAllDeps(self):
+ pass
+ def test_GetDefaultSolutionDeps(self):
+ pass
+ def test_LoadConfig(self):
+ pass
+ def test_ReadEntries(self):
+ pass
+ def test_SaveEntries(self):
+ pass
+ def test_VarImpl(self):
+ pass
+
+
+if __name__ == '__main__':
+ import unittest
+ unittest.main()
+
+# vim: ts=2:sw=2:tw=80:et:
« no previous file with comments | « tests/gclient_smoketest.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698