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

Unified Diff: tests/gclient_test.py

Issue 113278: Simplify some functions by removing the options.stdout mock. Fix the unit tes... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools/
Patch Set: Created 11 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 | « gclient.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
===================================================================
--- tests/gclient_test.py (revision 15862)
+++ tests/gclient_test.py (working copy)
@@ -23,6 +23,7 @@
import os
import random
import string
+import StringIO
import subprocess
import sys
import unittest
@@ -77,6 +78,21 @@
else:
self.fail('%s not raised' % msg)
+ def compareMembers(self, object, members):
+ """If you add a member, be sure to add the relevant test!"""
+ # Skip over members starting with '_' since they are usually not meant to
+ # be for public use.
+ actual_members = [x for x in sorted(dir(object))
+ if not x.startswith('_')]
+ expected_members = sorted(members)
+ if actual_members != expected_members:
+ diff = ([i for i in actual_members if i not in expected_members] +
+ [i for i in expected_members if i not in actual_members])
+ print diff
+ self.assertEqual(actual_members, expected_members)
+
+
+class GClientBaseTestCase(BaseTestCase):
def Options(self, *args, **kwargs):
return self.OptionsObject(self, *args, **kwargs)
@@ -99,13 +115,10 @@
gclient.RunSVN = self.mox.CreateMockAnything()
self._RunSVNAndGetFileList = gclient.RunSVNAndGetFileList
gclient.RunSVNAndGetFileList = self.mox.CreateMockAnything()
- # Doesn't seem to work very well:
- self._os = gclient.os
- gclient.os = self.mox.CreateMock(os)
- self._sys = gclient.sys
- gclient.sys = self.mox.CreateMock(sys)
+ self._sys_stdout = gclient.sys.stdout
+ gclient.sys.stdout = self.mox.CreateMock(self._sys_stdout)
self._subprocess = gclient.subprocess
- gclient.subprocess = self.mox.CreateMock(subprocess)
+ gclient.subprocess = self.mox.CreateMock(self._subprocess)
def tearDown(self):
gclient.CaptureSVN = self._CaptureSVN
@@ -116,13 +129,11 @@
gclient.RemoveDirectory = self._RemoveDirectory
gclient.RunSVN = self._RunSVN
gclient.RunSVNAndGetFileList = self._RunSVNAndGetFileList
- # Doesn't seem to work very well:
- gclient.os = self._os
- gclient.sys = self._sys
+ gclient.sys.stdout = self._sys_stdout
gclient.subprocess = self._subprocess
-class GclientTestCase(BaseTestCase):
+class GclientTestCase(GClientBaseTestCase):
class OptionsObject(object):
def __init__(self, test_case, verbose=False, spec=None,
config_filename='a_file_name',
@@ -140,19 +151,16 @@
self.head = False
# Mox
- self.stdout = test_case.stdout
self.path_exists = test_case.path_exists
self.platform = test_case.platform
self.gclient = test_case.gclient
self.scm_wrapper = test_case.scm_wrapper
def setUp(self):
- BaseTestCase.setUp(self)
- self.stdout = self.mox.CreateMock(sys.stdout)
+ GClientBaseTestCase.setUp(self)
#self.subprocess = self.mox.CreateMock(subprocess)
# Stub os.path.exists.
self.path_exists = self.mox.CreateMockAnything()
- self.sys = self.mox.CreateMock(sys)
self.platform = 'darwin'
self.gclient = self.mox.CreateMock(gclient.GClient)
@@ -163,7 +171,7 @@
self.url = Url()
-class GClientCommandsTestCase(BaseTestCase):
+class GClientCommandsTestCase(GClientBaseTestCase):
def testCommands(self):
known_commands = [gclient.DoCleanup, gclient.DoConfig, gclient.DoDiff,
gclient.DoHelp, gclient.DoStatus, gclient.DoUpdate,
@@ -224,24 +232,23 @@
class TestDoHelp(GclientTestCase):
def testGetUsage(self):
+ print(gclient.COMMAND_USAGE_TEXT['config'])
+ self.mox.ReplayAll()
options = self.Options()
- print >> options.stdout, gclient.COMMAND_USAGE_TEXT['config']
-
- self.mox.ReplayAll()
gclient.DoHelp(options, ('config',))
self.mox.VerifyAll()
def testTooManyArgs(self):
+ self.mox.ReplayAll()
options = self.Options()
- self.mox.ReplayAll()
self.assertRaisesError("unknown subcommand 'config'; see 'gclient help'",
gclient.DoHelp, options, ('config',
'another argument'))
self.mox.VerifyAll()
def testUnknownSubcommand(self):
+ self.mox.ReplayAll()
options = self.Options()
- self.mox.ReplayAll()
self.assertRaisesError("unknown subcommand 'xyzzy'; see 'gclient help'",
gclient.DoHelp, options, ('xyzzy',))
self.mox.VerifyAll()
@@ -273,7 +280,7 @@
self.gclient.LoadCurrentConfig(options).AndReturn(self.gclient)
text = "# Dummy content\nclient = 'my client'"
self.gclient.ConfigContent().AndReturn(text)
- print >>self.stdout, text
+ print(text)
self.gclient.RunOnDeps(command, self.args).AndReturn(0)
self.mox.ReplayAll()
@@ -331,7 +338,7 @@
self.gclient.GetVar("solutions")
text = "# Dummy content\nclient = 'my client'"
self.gclient.ConfigContent().AndReturn(text)
- print >>self.stdout, text
+ print(text)
self.gclient.RunOnDeps(command, self.args).AndReturn(0)
self.mox.ReplayAll()
@@ -377,18 +384,14 @@
class GClientClassTestCase(GclientTestCase):
def testDir(self):
- members = ['ConfigContent', 'FromImpl', '_VarImpl', '_ParseAllDeps',
- '_ParseSolutionDeps', 'GetVar', '_LoadConfig', 'LoadCurrentConfig',
- '_ReadEntries', '_RunHookAction', '_RunHooks', 'RunOnDeps', 'SaveConfig',
- '_SaveEntries', 'SetConfig', 'SetDefaultConfig', 'supported_commands',
- 'PrintRevInfo']
+ members = [
+ 'ConfigContent', 'FromImpl', 'GetVar', 'LoadCurrentConfig',
+ 'RunOnDeps', 'SaveConfig', 'SetConfig', 'SetDefaultConfig',
+ 'supported_commands', 'PrintRevInfo',
+ ]
# If you add a member, be sure to add the relevant test!
- actual_members = [x for x in sorted(dir(gclient.GClient))
- if not x.startswith('__')]
- self.assertEqual(actual_members, sorted(members))
- self.mox.ReplayAll()
- self.mox.VerifyAll()
+ self.compareMembers(gclient.GClient('root_dir', 'options'), members)
def testSetConfig_ConfigContent_GetVar_SaveConfig_SetDefaultConfig(self):
options = self.Options()
@@ -731,11 +734,11 @@
def testRunOnDepsRevisions(self):
def OptIsRev(options, rev):
if not options.revision == str(rev):
- print "options.revision = %s" % options.revision
+ print("options.revision = %s" % options.revision)
return options.revision == str(rev)
def OptIsRevNone(options):
if options.revision:
- print "options.revision = %s" % options.revision
+ print("options.revision = %s" % options.revision)
return options.revision == None
def OptIsRev42(options):
return OptIsRev(options, 42)
@@ -1058,7 +1061,7 @@
pass
-class SCMWrapperTestCase(BaseTestCase):
+class SCMWrapperTestCase(GClientBaseTestCase):
class OptionsObject(object):
def __init__(self, test_case, verbose=False, revision=None):
self.verbose = verbose
@@ -1068,29 +1071,25 @@
self.force = False
# Mox
- self.stdout = test_case.stdout
self.path_exists = test_case.path_exists
def setUp(self):
- BaseTestCase.setUp(self)
+ GClientBaseTestCase.setUp(self)
self.root_dir = Dir()
self.args = Args()
self.url = Url()
self.relpath = 'asf'
- self.stdout = self.mox.CreateMock(sys.stdout)
# Stub os.path.exists.
self.path_exists = self.mox.CreateMockAnything()
def testDir(self):
- members = ['FullUrlForRelativeUrl', 'RunCommand',
- 'cleanup', 'diff', 'revert', 'status', 'update']
+ members = [
+ 'FullUrlForRelativeUrl', 'RunCommand', 'cleanup', 'diff', 'relpath',
+ 'revert', 'scm_name', 'status', 'update', 'url',
+ ]
# If you add a member, be sure to add the relevant test!
- actual_members = [x for x in sorted(dir(gclient.SCMWrapper))
- if not x.startswith('__')]
- self.assertEqual(actual_members, sorted(members))
- self.mox.ReplayAll()
- self.mox.VerifyAll()
+ self.compareMembers(gclient.SCMWrapper(), members)
def testFullUrlForRelativeUrl(self):
self.url = 'svn://a/b/c/d'
@@ -1125,12 +1124,11 @@
gclient.os.path.isdir(base_path).AndReturn(False)
# It'll to a checkout instead.
options.path_exists(os.path.join(base_path, '.git')).AndReturn(False)
- print >>options.stdout, ("\n_____ %s is missing, synching instead" %
- self.relpath)
+ print("\n_____ %s is missing, synching instead" % self.relpath)
# Checkout.
options.path_exists(base_path).AndReturn(False)
files_list = self.mox.CreateMockAnything()
- gclient.RunSVNAndGetFileList(options, ['checkout', self.url, base_path],
+ gclient.RunSVNAndGetFileList(['checkout', self.url, base_path],
self.root_dir, files_list)
self.mox.ReplayAll()
@@ -1145,7 +1143,7 @@
base_path = os.path.join(self.root_dir, self.relpath)
gclient.os.path.isdir = self.mox.CreateMockAnything()
gclient.os.path.isdir(base_path).AndReturn(True)
- gclient.CaptureSVNStatus(options, base_path).AndReturn([])
+ gclient.CaptureSVNStatus(base_path).AndReturn([])
self.mox.ReplayAll()
scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir,
@@ -1164,11 +1162,11 @@
gclient.FileStatus('a', 'M', ' ', ' ', ' '),
gclient.FileStatus('b', 'A', ' ', ' ', ' '),
]
- gclient.CaptureSVNStatus(options, base_path).AndReturn(items)
+ gclient.CaptureSVNStatus(base_path).AndReturn(items)
- print >>options.stdout, os.path.join(base_path, 'a')
- print >>options.stdout, os.path.join(base_path, 'b')
- gclient.RunSVN(options, ['revert', 'a', 'b'], base_path)
+ print(os.path.join(base_path, 'a'))
+ print(os.path.join(base_path, 'b'))
+ gclient.RunSVN(['revert', 'a', 'b'], base_path)
self.mox.ReplayAll()
scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir,
@@ -1183,7 +1181,7 @@
base_path = os.path.join(self.root_dir, self.relpath)
gclient.os.path.isdir = self.mox.CreateMockAnything()
gclient.os.path.isdir(base_path).AndReturn(True)
- gclient.RunSVNAndGetFileList(options, ['status'] + self.args, base_path,
+ gclient.RunSVNAndGetFileList(['status'] + self.args, base_path,
[]).AndReturn(None)
self.mox.ReplayAll()
@@ -1208,7 +1206,7 @@
# Checkout.
options.path_exists(base_path).AndReturn(False)
files_list = self.mox.CreateMockAnything()
- gclient.RunSVNAndGetFileList(options, ['checkout', self.url, base_path],
+ gclient.RunSVNAndGetFileList(['checkout', self.url, base_path],
self.root_dir, files_list)
self.mox.ReplayAll()
scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir,
@@ -1229,15 +1227,15 @@
options.path_exists(os.path.join(base_path, '.git')).AndReturn(False)
# Checkout or update.
options.path_exists(base_path).AndReturn(True)
- gclient.CaptureSVNInfo(options, os.path.join(base_path, "."), '.'
+ gclient.CaptureSVNInfo(os.path.join(base_path, "."), '.'
).AndReturn(file_info)
# Cheat a bit here.
- gclient.CaptureSVNInfo(options, file_info['URL'], '.').AndReturn(file_info)
+ gclient.CaptureSVNInfo(file_info['URL'], '.').AndReturn(file_info)
additional_args = []
if options.manually_grab_svn_rev:
additional_args = ['--revision', str(file_info['Revision'])]
files_list = []
- gclient.RunSVNAndGetFileList(options, ['update', base_path] + additional_args,
+ gclient.RunSVNAndGetFileList(['update', base_path] + additional_args,
self.root_dir, files_list)
self.mox.ReplayAll()
@@ -1250,8 +1248,7 @@
options = self.Options(verbose=True)
options.path_exists(os.path.join(self.root_dir, self.relpath, '.git')
).AndReturn(True)
- print >> options.stdout, (
- "________ found .git directory; skipping %s" % self.relpath)
+ print("________ found .git directory; skipping %s" % self.relpath)
self.mox.ReplayAll()
scm = gclient.SCMWrapper(url=self.url, root_dir=self.root_dir,
@@ -1276,9 +1273,7 @@
</entry>
</info>
""" % self.url
- options = self.Options(verbose=True)
- gclient.CaptureSVN(options, ['info', '--xml', self.url],
- '.').AndReturn(xml_text)
+ gclient.CaptureSVN(['info', '--xml', self.url], '.').AndReturn(xml_text)
expected = {
'URL': 'http://src.chromium.org/svn/trunk/src/chrome/app/d',
'UUID': None,
@@ -1291,7 +1286,7 @@
'Node Kind': 'file',
}
self.mox.ReplayAll()
- file_info = self._CaptureSVNInfo(options, self.url, '.')
+ file_info = self._CaptureSVNInfo(self.url, '.')
self.assertEquals(sorted(file_info.items()), sorted(expected.items()))
self.mox.VerifyAll()
@@ -1319,11 +1314,9 @@
</entry>
</info>
""" % (self.url, self.root_dir)
- options = self.Options(verbose=True)
- gclient.CaptureSVN(options, ['info', '--xml', self.url],
- '.').AndReturn(xml_text)
+ gclient.CaptureSVN(['info', '--xml', self.url], '.').AndReturn(xml_text)
self.mox.ReplayAll()
- file_info = self._CaptureSVNInfo(options, self.url, '.')
+ file_info = self._CaptureSVNInfo(self.url, '.')
expected = {
'URL': self.url,
'UUID': '7b9385f5-0452-0410-af26-ad4892b7a1fb',
@@ -1339,6 +1332,60 @@
self.mox.VerifyAll()
+class RunSVNTestCase(BaseTestCase):
+ def setUp(self):
+ self.mox = mox.Mox()
+ self._OldSubprocessCall = gclient.SubprocessCall
+ gclient.SubprocessCall = self.mox.CreateMockAnything()
+
+ def tearDown(self):
+ gclient.SubprocessCall = self._OldSubprocessCall
+
+ def testRunSVN(self):
+ param2 = 'bleh'
+ gclient.SubprocessCall(['svn', 'foo', 'bar'], param2).AndReturn(None)
+ self.mox.ReplayAll()
+ gclient.RunSVN(['foo', 'bar'], param2)
+ self.mox.VerifyAll()
+
+
+class SubprocessCallAndCaptureTestCase(BaseTestCase):
+ def setUp(self):
+ self.mox = mox.Mox()
+ self._sys_stdout = gclient.sys.stdout
+ gclient.sys.stdout = self.mox.CreateMock(self._sys_stdout)
+ self._subprocess_Popen = gclient.subprocess.Popen
+ gclient.subprocess.Popen = self.mox.CreateMockAnything()
+
+ def tearDown(self):
+ gclient.sys.stdout = self._sys_stdout
+ gclient.subprocess.Popen = self._subprocess_Popen
+
+ def testSubprocessCallAndCapture(self):
+ command = ['boo', 'foo', 'bar']
+ in_directory = 'bleh'
+ fail_status = None
+ pattern = 'a(.*)b'
+ test_string = 'ahah\naccb\nallo\naddb\n'
+ class Mock(object):
+ stdout = StringIO.StringIO(test_string)
+ def wait(self):
+ pass
+ kid = Mock()
+ print("\n________ running 'boo foo bar' in 'bleh'")
+ for i in test_string:
+ sys.stdout.write(i)
+ gclient.subprocess.Popen(command, bufsize=0, cwd=in_directory,
+ shell=(sys.platform == 'win32'),
+ stdout=gclient.subprocess.PIPE).AndReturn(kid)
+ self.mox.ReplayAll()
+ capture_list = []
+ gclient.SubprocessCallAndCapture(command, in_directory, fail_status,
+ pattern, capture_list)
+ self.assertEquals(capture_list, ['cc', 'dd'])
+ self.mox.VerifyAll()
+
+
if __name__ == '__main__':
unittest.main()
« no previous file with comments | « gclient.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698