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

Side by Side Diff: tests/scm_unittest.py

Issue 8771042: Enforces using cwd in all svn calls. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Address comments Created 9 years 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tests/presubmit_unittest.py ('k') | trychange.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Unit tests for scm.py.""" 6 """Unit tests for scm.py."""
7 7
8 from __future__ import with_statement 8 from __future__ import with_statement
9 import logging 9 import logging
10 import os 10 import os
11 import sys 11 import sys
12 import unittest 12 import unittest
13 13
14 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) 14 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
15 15
16 from testing_support import fake_repos 16 from testing_support import fake_repos
17 from testing_support.super_mox import SuperMoxTestBase 17 from testing_support.super_mox import SuperMoxTestBase
18 18
19 import scm 19 import scm
20 import subprocess2 20 import subprocess2
21 21
22 22
23 # Access to a protected member XXX of a client class
24 # pylint: disable=W0212
25
26
23 class BaseTestCase(SuperMoxTestBase): 27 class BaseTestCase(SuperMoxTestBase):
24 # Like unittest's assertRaises, but checks for Gclient.Error. 28 # Like unittest's assertRaises, but checks for Gclient.Error.
25 def assertRaisesError(self, msg, fn, *args, **kwargs): 29 def assertRaisesError(self, msg, fn, *args, **kwargs):
26 try: 30 try:
27 fn(*args, **kwargs) 31 fn(*args, **kwargs)
28 except scm.gclient_utils.Error, e: 32 except scm.gclient_utils.Error, e:
29 self.assertEquals(e.args[0], msg) 33 self.assertEquals(e.args[0], msg)
30 else: 34 else:
31 self.fail('%s not raised' % msg) 35 self.fail('%s not raised' % msg)
32 36
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 91
88 class SVNTestCase(BaseSCMTestCase): 92 class SVNTestCase(BaseSCMTestCase):
89 def setUp(self): 93 def setUp(self):
90 BaseSCMTestCase.setUp(self) 94 BaseSCMTestCase.setUp(self)
91 self.mox.StubOutWithMock(scm.SVN, 'Capture') 95 self.mox.StubOutWithMock(scm.SVN, 'Capture')
92 self.url = self.SvnUrl() 96 self.url = self.SvnUrl()
93 97
94 def testMembersChanged(self): 98 def testMembersChanged(self):
95 self.mox.ReplayAll() 99 self.mox.ReplayAll()
96 members = [ 100 members = [
97 'AssertVersion', 'Capture', 'CaptureRevision', 'CaptureInfo', 101 'AssertVersion', 'Capture', 'CaptureRevision', 'CaptureLocalInfo',
102 'CaptureRemoteInfo',
98 'CaptureStatus', 'current_version', 'DiffItem', 'GenerateDiff', 103 'CaptureStatus', 'current_version', 'DiffItem', 'GenerateDiff',
99 'GetCheckoutRoot', 'GetEmail', 'GetFileProperty', 'IsMoved', 104 'GetCheckoutRoot', 'GetEmail', 'GetFileProperty', 'IsMoved',
100 'IsMovedInfo', 'ReadSimpleAuth', 'Revert', 'RunAndGetFileList', 105 'IsMovedInfo', 'ReadSimpleAuth', 'Revert', 'RunAndGetFileList',
101 ] 106 ]
102 # If this test fails, you should add the relevant test. 107 # If this test fails, you should add the relevant test.
103 self.compareMembers(scm.SVN, members) 108 self.compareMembers(scm.SVN, members)
104 109
105 def testGetCheckoutRoot(self): 110 def testGetCheckoutRoot(self):
106 # pylint: disable=E1103 111 # pylint: disable=E1103
107 self.mox.StubOutWithMock(scm.SVN, 'CaptureInfo') 112 self.mox.StubOutWithMock(scm.SVN, '_CaptureInfo')
108 self.mox.StubOutWithMock(scm, 'GetCasedPath') 113 self.mox.StubOutWithMock(scm, 'GetCasedPath')
109 scm.os.path.abspath = lambda x: x 114 scm.os.path.abspath = lambda x: x
110 scm.GetCasedPath = lambda x: x 115 scm.GetCasedPath = lambda x: x
111 scm.SVN.CaptureInfo(self.root_dir + '/foo/bar').AndReturn({ 116 scm.SVN._CaptureInfo([], self.root_dir + '/foo/bar').AndReturn({
112 'Repository Root': 'svn://svn.chromium.org/chrome', 117 'Repository Root': 'svn://svn.chromium.org/chrome',
113 'URL': 'svn://svn.chromium.org/chrome/trunk/src', 118 'URL': 'svn://svn.chromium.org/chrome/trunk/src',
114 }) 119 })
115 scm.SVN.CaptureInfo(self.root_dir + '/foo').AndReturn({ 120 scm.SVN._CaptureInfo([], self.root_dir + '/foo').AndReturn({
116 'Repository Root': 'svn://svn.chromium.org/chrome', 121 'Repository Root': 'svn://svn.chromium.org/chrome',
117 'URL': 'svn://svn.chromium.org/chrome/trunk', 122 'URL': 'svn://svn.chromium.org/chrome/trunk',
118 }) 123 })
119 scm.SVN.CaptureInfo(self.root_dir).AndReturn({ 124 scm.SVN._CaptureInfo([], self.root_dir).AndReturn({
120 'Repository Root': 'svn://svn.chromium.org/chrome', 125 'Repository Root': 'svn://svn.chromium.org/chrome',
121 'URL': 'svn://svn.chromium.org/chrome/trunk/tools/commit-queue/workdir', 126 'URL': 'svn://svn.chromium.org/chrome/trunk/tools/commit-queue/workdir',
122 }) 127 })
123 self.mox.ReplayAll() 128 self.mox.ReplayAll()
124 self.assertEquals(scm.SVN.GetCheckoutRoot(self.root_dir + '/foo/bar'), 129 self.assertEquals(scm.SVN.GetCheckoutRoot(self.root_dir + '/foo/bar'),
125 self.root_dir + '/foo') 130 self.root_dir + '/foo')
126 131
127 def testGetFileInfo(self): 132 def testGetFileInfo(self):
128 xml_text = r"""<?xml version="1.0"?> 133 xml_text = r"""<?xml version="1.0"?>
129 <info> 134 <info>
130 <entry kind="file" path="%s" revision="14628"> 135 <entry kind="file" path="%s" revision="14628">
131 <url>http://src.chromium.org/svn/trunk/src/chrome/app/d</url> 136 <url>http://src.chromium.org/svn/trunk/src/chrome/app/d</url>
132 <repository><root>http://src.chromium.org/svn</root></repository> 137 <repository><root>http://src.chromium.org/svn</root></repository>
133 <wc-info> 138 <wc-info>
134 <schedule>add</schedule> 139 <schedule>add</schedule>
135 <depth>infinity</depth> 140 <depth>infinity</depth>
136 <copy-from-url>http://src.chromium.org/svn/trunk/src/chrome/app/DEPS</copy-from- url> 141 <copy-from-url>http://src.chromium.org/svn/trunk/src/chrome/app/DEPS</copy-from- url>
137 <copy-from-rev>14628</copy-from-rev> 142 <copy-from-rev>14628</copy-from-rev>
138 <checksum>369f59057ba0e6d9017e28f8bdfb1f43</checksum> 143 <checksum>369f59057ba0e6d9017e28f8bdfb1f43</checksum>
139 </wc-info> 144 </wc-info>
140 </entry> 145 </entry>
141 </info> 146 </info>
142 """ % self.url 147 """ % self.url
143 scm.SVN.Capture(['info', '--xml', self.url]).AndReturn(xml_text) 148 scm.SVN.Capture(['info', '--xml', self.url], None).AndReturn(xml_text)
144 expected = { 149 expected = {
145 'URL': 'http://src.chromium.org/svn/trunk/src/chrome/app/d', 150 'URL': 'http://src.chromium.org/svn/trunk/src/chrome/app/d',
146 'UUID': None, 151 'UUID': None,
147 'Repository Root': 'http://src.chromium.org/svn', 152 'Repository Root': 'http://src.chromium.org/svn',
148 'Schedule': 'add', 153 'Schedule': 'add',
149 'Copied From URL': 154 'Copied From URL':
150 'http://src.chromium.org/svn/trunk/src/chrome/app/DEPS', 155 'http://src.chromium.org/svn/trunk/src/chrome/app/DEPS',
151 'Copied From Rev': '14628', 156 'Copied From Rev': '14628',
152 'Path': self.url, 157 'Path': self.url,
153 'Revision': 14628, 158 'Revision': 14628,
154 'Node Kind': 'file', 159 'Node Kind': 'file',
155 } 160 }
156 self.mox.ReplayAll() 161 self.mox.ReplayAll()
157 file_info = scm.SVN.CaptureInfo(self.url) 162 file_info = scm.SVN._CaptureInfo([self.url], None)
158 self.assertEquals(sorted(file_info.items()), sorted(expected.items())) 163 self.assertEquals(sorted(file_info.items()), sorted(expected.items()))
159 164
160 def testCaptureInfo(self): 165 def testCaptureInfo(self):
161 xml_text = """<?xml version="1.0"?> 166 xml_text = """<?xml version="1.0"?>
162 <info> 167 <info>
163 <entry 168 <entry
164 kind="dir" 169 kind="dir"
165 path="." 170 path="."
166 revision="35"> 171 revision="35">
167 <url>%s</url> 172 <url>%s</url>
168 <repository> 173 <repository>
169 <root>%s</root> 174 <root>%s</root>
170 <uuid>7b9385f5-0452-0410-af26-ad4892b7a1fb</uuid> 175 <uuid>7b9385f5-0452-0410-af26-ad4892b7a1fb</uuid>
171 </repository> 176 </repository>
172 <wc-info> 177 <wc-info>
173 <schedule>normal</schedule> 178 <schedule>normal</schedule>
174 <depth>infinity</depth> 179 <depth>infinity</depth>
175 </wc-info> 180 </wc-info>
176 <commit 181 <commit
177 revision="35"> 182 revision="35">
178 <author>maruel</author> 183 <author>maruel</author>
179 <date>2008-12-04T20:12:19.685120Z</date> 184 <date>2008-12-04T20:12:19.685120Z</date>
180 </commit> 185 </commit>
181 </entry> 186 </entry>
182 </info> 187 </info>
183 """ % (self.url, self.root_dir) 188 """ % (self.url, self.root_dir)
184 scm.SVN.Capture(['info', '--xml', self.url]).AndReturn(xml_text) 189 scm.SVN.Capture(['info', '--xml', self.url], None).AndReturn(xml_text)
185 self.mox.ReplayAll() 190 self.mox.ReplayAll()
186 file_info = scm.SVN.CaptureInfo(self.url) 191 file_info = scm.SVN._CaptureInfo([self.url], None)
187 expected = { 192 expected = {
188 'URL': self.url, 193 'URL': self.url,
189 'UUID': '7b9385f5-0452-0410-af26-ad4892b7a1fb', 194 'UUID': '7b9385f5-0452-0410-af26-ad4892b7a1fb',
190 'Revision': 35, 195 'Revision': 35,
191 'Repository Root': self.root_dir, 196 'Repository Root': self.root_dir,
192 'Schedule': 'normal', 197 'Schedule': 'normal',
193 'Copied From URL': None, 198 'Copied From URL': None,
194 'Copied From Rev': None, 199 'Copied From Rev': None,
195 'Path': '.', 200 'Path': '.',
196 'Node Kind': 'directory', 201 'Node Kind': 'directory',
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 <wc-status props="normal" item="conflicted" revision="14725"> 233 <wc-status props="normal" item="conflicted" revision="14725">
229 <commit revision="14633"> 234 <commit revision="14633">
230 <author>nsylvain@chromium.org</author> 235 <author>nsylvain@chromium.org</author>
231 <date>2009-04-27T19:37:17.977400Z</date> 236 <date>2009-04-27T19:37:17.977400Z</date>
232 </commit> 237 </commit>
233 </wc-status> 238 </wc-status>
234 </entry> 239 </entry>
235 </target> 240 </target>
236 </status> 241 </status>
237 """ 242 """
238 scm.SVN.Capture(['status', '--xml', '.']).AndReturn(text) 243 scm.SVN.Capture(['status', '--xml'], '.').AndReturn(text)
239 244
240 self.mox.ReplayAll() 245 self.mox.ReplayAll()
241 info = scm.SVN.CaptureStatus('.') 246 info = scm.SVN.CaptureStatus(None, '.')
242 expected = [ 247 expected = [
243 ('? ', 'unversionned_file.txt'), 248 ('? ', 'unversionned_file.txt'),
244 ('M ', 'build\\internal\\essential.vsprops'), 249 ('M ', 'build\\internal\\essential.vsprops'),
245 ('A + ', 'chrome\\app\\d'), 250 ('A + ', 'chrome\\app\\d'),
246 ('MM ', 'chrome\\app\\DEPS'), 251 ('MM ', 'chrome\\app\\DEPS'),
247 ('C ', 'scripts\\master\\factory\\gclient_factory.py'), 252 ('C ', 'scripts\\master\\factory\\gclient_factory.py'),
248 ] 253 ]
249 self.assertEquals(sorted(info), sorted(expected)) 254 self.assertEquals(sorted(info), sorted(expected))
250 255
251 def testCaptureStatusEmpty(self): 256 def testCaptureStatusEmpty(self):
252 text = r"""<?xml version="1.0"?> 257 text = r"""<?xml version="1.0"?>
253 <status> 258 <status>
254 <target 259 <target
255 path="perf"> 260 path="perf">
256 </target> 261 </target>
257 </status>""" 262 </status>"""
258 scm.SVN.Capture(['status', '--xml']).AndReturn(text) 263 scm.SVN.Capture(['status', '--xml'], None).AndReturn(text)
259 self.mox.ReplayAll() 264 self.mox.ReplayAll()
260 info = scm.SVN.CaptureStatus(None) 265 info = scm.SVN.CaptureStatus(None, None)
261 self.assertEquals(info, []) 266 self.assertEquals(info, [])
262 267
263 268
264 class RealSvnTest(fake_repos.FakeReposTestBase): 269 class RealSvnTest(fake_repos.FakeReposTestBase):
265 # Tests that work with a checkout. 270 # Tests that work with a checkout.
266 def setUp(self): 271 def setUp(self):
267 super(RealSvnTest, self).setUp() 272 super(RealSvnTest, self).setUp()
268 self.enabled = self.FAKE_REPOS.set_up_svn() 273 self.enabled = self.FAKE_REPOS.set_up_svn()
269 if self.enabled: 274 if self.enabled:
270 self.svn_root = scm.os.path.join(self.root_dir, 'base') 275 self.svn_root = scm.os.path.join(self.root_dir, 'base')
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 # Asserting the tree is not sufficient, svn status must come out clear too. 342 # Asserting the tree is not sufficient, svn status must come out clear too.
338 self.assertEquals('', self._capture(['status'])) 343 self.assertEquals('', self._capture(['status']))
339 344
340 345
341 if __name__ == '__main__': 346 if __name__ == '__main__':
342 if '-v' in sys.argv: 347 if '-v' in sys.argv:
343 logging.basicConfig(level=logging.DEBUG) 348 logging.basicConfig(level=logging.DEBUG)
344 unittest.main() 349 unittest.main()
345 350
346 # vim: ts=2:sw=2:tw=80:et: 351 # vim: ts=2:sw=2:tw=80:et:
OLDNEW
« no previous file with comments | « tests/presubmit_unittest.py ('k') | trychange.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698