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

Side by Side Diff: tests/gclient_test.py

Issue 393001: Split scm-specific functions out of gclient_scm.py to scm.py. (Closed)
Patch Set: Created 11 years, 1 month 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
« no previous file with comments | « tests/gclient_scm_test.py ('k') | tests/gclient_utils_test.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/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 #
11 # Unless required by applicable law or agreed to in writing, software 11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS, 12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and 14 # See the License for the specific language governing permissions and
15 # limitations under the License. 15 # limitations under the License.
16 16
17 """Unit tests for gclient.py.""" 17 """Unit tests for gclient.py."""
18 18
19 __author__ = 'stephen5.ng@gmail.com (Stephen Ng)' 19 __author__ = 'stephen5.ng@gmail.com (Stephen Ng)'
20 20
21 import __builtin__ 21 import __builtin__
22 import StringIO 22 import StringIO
23 23
24 import gclient 24 import gclient
25 # Temporary due to the "from scm import *" in gclient_scm.
26 import scm
25 from super_mox import mox, IsOneOf, SuperMoxTestBase 27 from super_mox import mox, IsOneOf, SuperMoxTestBase
26 28
27 29
28 class BaseTestCase(SuperMoxTestBase): 30 class BaseTestCase(SuperMoxTestBase):
29 # Like unittest's assertRaises, but checks for Gclient.Error. 31 # Like unittest's assertRaises, but checks for Gclient.Error.
30 def assertRaisesError(self, msg, fn, *args, **kwargs): 32 def assertRaisesError(self, msg, fn, *args, **kwargs):
31 try: 33 try:
32 fn(*args, **kwargs) 34 fn(*args, **kwargs)
33 except gclient.gclient_utils.Error, e: 35 except gclient.gclient_utils.Error, e:
34 self.assertEquals(e.args[0], msg) 36 self.assertEquals(e.args[0], msg)
(...skipping 11 matching lines...) Expand all
46 self.mox.StubOutWithMock(gclient.gclient_utils, 'FileRead') 48 self.mox.StubOutWithMock(gclient.gclient_utils, 'FileRead')
47 self.mox.StubOutWithMock(gclient.gclient_utils, 'FileWrite') 49 self.mox.StubOutWithMock(gclient.gclient_utils, 'FileWrite')
48 self.mox.StubOutWithMock(gclient.gclient_utils, 'SubprocessCall') 50 self.mox.StubOutWithMock(gclient.gclient_utils, 'SubprocessCall')
49 self.mox.StubOutWithMock(gclient.gclient_utils, 'RemoveDirectory') 51 self.mox.StubOutWithMock(gclient.gclient_utils, 'RemoveDirectory')
50 # Mock them to be sure nothing bad happens. 52 # Mock them to be sure nothing bad happens.
51 self.mox.StubOutWithMock(gclient.gclient_scm, 'CaptureSVN') 53 self.mox.StubOutWithMock(gclient.gclient_scm, 'CaptureSVN')
52 self.mox.StubOutWithMock(gclient.gclient_scm, 'CaptureSVNInfo') 54 self.mox.StubOutWithMock(gclient.gclient_scm, 'CaptureSVNInfo')
53 self.mox.StubOutWithMock(gclient.gclient_scm, 'CaptureSVNStatus') 55 self.mox.StubOutWithMock(gclient.gclient_scm, 'CaptureSVNStatus')
54 self.mox.StubOutWithMock(gclient.gclient_scm, 'RunSVN') 56 self.mox.StubOutWithMock(gclient.gclient_scm, 'RunSVN')
55 self.mox.StubOutWithMock(gclient.gclient_scm, 'RunSVNAndGetFileList') 57 self.mox.StubOutWithMock(gclient.gclient_scm, 'RunSVNAndGetFileList')
58 self.mox.StubOutWithMock(scm, 'CaptureSVN')
59 self.mox.StubOutWithMock(scm, 'CaptureSVNInfo')
60 self.mox.StubOutWithMock(scm, 'CaptureSVNStatus')
61 self.mox.StubOutWithMock(scm, 'RunSVN')
62 self.mox.StubOutWithMock(scm, 'RunSVNAndGetFileList')
56 self._gclient_gclient = gclient.GClient 63 self._gclient_gclient = gclient.GClient
57 gclient.GClient = self.mox.CreateMockAnything() 64 gclient.GClient = self.mox.CreateMockAnything()
58 self._scm_wrapper = gclient.gclient_scm.CreateSCM 65 self._scm_wrapper = gclient.gclient_scm.CreateSCM
59 gclient.gclient_scm.CreateSCM = self.mox.CreateMockAnything() 66 gclient.gclient_scm.CreateSCM = self.mox.CreateMockAnything()
60 67
61 def tearDown(self): 68 def tearDown(self):
62 gclient.GClient = self._gclient_gclient 69 gclient.GClient = self._gclient_gclient
63 gclient.gclient_scm.CreateSCM = self._scm_wrapper 70 gclient.gclient_scm.CreateSCM = self._scm_wrapper
64 BaseTestCase.tearDown(self) 71 BaseTestCase.tearDown(self)
65 72
(...skipping 993 matching lines...) Expand 10 before | Expand all | Expand 10 after
1059 def test_LoadConfig(self): 1066 def test_LoadConfig(self):
1060 pass 1067 pass
1061 def test_ReadEntries(self): 1068 def test_ReadEntries(self):
1062 pass 1069 pass
1063 def test_SaveEntries(self): 1070 def test_SaveEntries(self):
1064 pass 1071 pass
1065 def test_VarImpl(self): 1072 def test_VarImpl(self):
1066 pass 1073 pass
1067 1074
1068 1075
1069 class SubprocessCallAndFilterTestCase(BaseTestCase):
1070 def setUp(self):
1071 BaseTestCase.setUp(self)
1072 self.mox.StubOutWithMock(gclient.gclient_scm, 'CaptureSVN')
1073
1074 def testSubprocessCallAndFilter(self):
1075 command = ['boo', 'foo', 'bar']
1076 in_directory = 'bleh'
1077 fail_status = None
1078 pattern = 'a(.*)b'
1079 test_string = 'ahah\naccb\nallo\naddb\n'
1080 class Mock(object):
1081 stdout = StringIO.StringIO(test_string)
1082 def wait(self):
1083 pass
1084 kid = Mock()
1085 print("\n________ running 'boo foo bar' in 'bleh'")
1086 for i in test_string:
1087 gclient.sys.stdout.write(i)
1088 gclient.gclient_utils.subprocess.Popen(
1089 command, bufsize=0, cwd=in_directory,
1090 shell=(gclient.sys.platform == 'win32'),
1091 stdout=gclient.gclient_utils.subprocess.PIPE,
1092 stderr=gclient.gclient_utils.subprocess.STDOUT).AndReturn(kid)
1093 self.mox.ReplayAll()
1094 compiled_pattern = gclient.re.compile(pattern)
1095 line_list = []
1096 capture_list = []
1097 def FilterLines(line):
1098 line_list.append(line)
1099 match = compiled_pattern.search(line)
1100 if match:
1101 capture_list.append(match.group(1))
1102 gclient.gclient_utils.SubprocessCallAndFilter(
1103 command, in_directory,
1104 True, True,
1105 fail_status, FilterLines)
1106 self.assertEquals(line_list, ['ahah', 'accb', 'allo', 'addb'])
1107 self.assertEquals(capture_list, ['cc', 'dd'])
1108
1109 def testCaptureSVNStatus(self):
1110 gclient.gclient_scm.CaptureSVN(
1111 ['status', '--xml', '.']
1112 ).AndReturn(r"""<?xml version="1.0"?>
1113 <status>
1114 <target path=".">
1115 <entry path="unversionned_file.txt">
1116 <wc-status props="none" item="unversioned"></wc-status>
1117 </entry>
1118 <entry path="build\internal\essential.vsprops">
1119 <wc-status props="normal" item="modified" revision="14628">
1120 <commit revision="13818">
1121 <author>ajwong@chromium.org</author>
1122 <date>2009-04-16T00:42:06.872358Z</date>
1123 </commit>
1124 </wc-status>
1125 </entry>
1126 <entry path="chrome\app\d">
1127 <wc-status props="none" copied="true" tree-conflicted="true" item="added">
1128 </wc-status>
1129 </entry>
1130 <entry path="chrome\app\DEPS">
1131 <wc-status props="modified" item="modified" revision="14628">
1132 <commit revision="1279">
1133 <author>brettw@google.com</author>
1134 <date>2008-08-23T17:16:42.090152Z</date>
1135 </commit>
1136 </wc-status>
1137 </entry>
1138 <entry path="scripts\master\factory\gclient_factory.py">
1139 <wc-status props="normal" item="conflicted" revision="14725">
1140 <commit revision="14633">
1141 <author>nsylvain@chromium.org</author>
1142 <date>2009-04-27T19:37:17.977400Z</date>
1143 </commit>
1144 </wc-status>
1145 </entry>
1146 </target>
1147 </status>
1148 """)
1149 self.mox.ReplayAll()
1150 info = gclient.gclient_scm.CaptureSVNStatus('.')
1151 expected = [
1152 ('? ', 'unversionned_file.txt'),
1153 ('M ', 'build\\internal\\essential.vsprops'),
1154 ('A + ', 'chrome\\app\\d'),
1155 ('MM ', 'chrome\\app\\DEPS'),
1156 ('C ', 'scripts\\master\\factory\\gclient_factory.py'),
1157 ]
1158 self.assertEquals(sorted(info), sorted(expected))
1159
1160 def testCaptureSVNStatusEmpty(self):
1161 gclient.gclient_scm.CaptureSVN(
1162 ['status', '--xml']
1163 ).AndReturn(r"""<?xml version="1.0"?>
1164 <status>
1165 <target
1166 path="perf">
1167 </target>
1168 </status>
1169 """)
1170 self.mox.ReplayAll()
1171 info = gclient.gclient_scm.CaptureSVNStatus(None)
1172 self.assertEquals(info, [])
1173
1174
1175 if __name__ == '__main__': 1076 if __name__ == '__main__':
1176 import unittest 1077 import unittest
1177 unittest.main() 1078 unittest.main()
1178 1079
1179 # vim: ts=2:sw=2:tw=80:et: 1080 # vim: ts=2:sw=2:tw=80:et:
OLDNEW
« no previous file with comments | « tests/gclient_scm_test.py ('k') | tests/gclient_utils_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698