Show More
@@ -57,6 +57,7 b' import re' | |||||
57 | import threading |
|
57 | import threading | |
58 | import killdaemons as killmod |
|
58 | import killdaemons as killmod | |
59 | import Queue as queue |
|
59 | import Queue as queue | |
|
60 | import unittest | |||
60 |
|
61 | |||
61 | processlock = threading.Lock() |
|
62 | processlock = threading.Lock() | |
62 |
|
63 | |||
@@ -187,6 +188,9 b' def getparser():' | |||||
187 | parser.add_option("--tmpdir", type="string", |
|
188 | parser.add_option("--tmpdir", type="string", | |
188 | help="run tests in the given temporary directory" |
|
189 | help="run tests in the given temporary directory" | |
189 | " (implies --keep-tmpdir)") |
|
190 | " (implies --keep-tmpdir)") | |
|
191 | parser.add_option("--unittest", action="store_true", | |||
|
192 | help="run tests with Python's unittest package" | |||
|
193 | " (this is an experimental feature)") | |||
190 | parser.add_option("-v", "--verbose", action="store_true", |
|
194 | parser.add_option("-v", "--verbose", action="store_true", | |
191 | help="output verbose messages") |
|
195 | help="output verbose messages") | |
192 | parser.add_option("--view", type="string", |
|
196 | parser.add_option("--view", type="string", | |
@@ -255,6 +259,13 b' def parseargs(args, parser):' | |||||
255 |
|
259 | |||
256 | if options.jobs < 1: |
|
260 | if options.jobs < 1: | |
257 | parser.error('--jobs must be positive') |
|
261 | parser.error('--jobs must be positive') | |
|
262 | if options.unittest: | |||
|
263 | if options.jobs > 1: | |||
|
264 | sys.stderr.write( | |||
|
265 | 'warning: --jobs has no effect with --unittest') | |||
|
266 | if options.loop: | |||
|
267 | sys.stderr.write( | |||
|
268 | 'warning: --loop has no effect with --unittest') | |||
258 | if options.interactive and options.debug: |
|
269 | if options.interactive and options.debug: | |
259 | parser.error("-i/--interactive and -d/--debug are incompatible") |
|
270 | parser.error("-i/--interactive and -d/--debug are incompatible") | |
260 | if options.debug: |
|
271 | if options.debug: | |
@@ -1172,7 +1183,18 b' class TestRunner(object):' | |||||
1172 | print "running all tests" |
|
1183 | print "running all tests" | |
1173 | tests = orig |
|
1184 | tests = orig | |
1174 |
|
1185 | |||
1175 |
self. |
|
1186 | if self.options.unittest: | |
|
1187 | suite = unittest.TestSuite() | |||
|
1188 | for count, testpath in enumerate(tests): | |||
|
1189 | suite.addTest(self._gettest(testpath, count, asunit=True)) | |||
|
1190 | ||||
|
1191 | verbosity = 1 | |||
|
1192 | if self.options.verbose: | |||
|
1193 | verbosity = 2 | |||
|
1194 | runner = unittest.TextTestRunner(verbosity=verbosity) | |||
|
1195 | runner.run(suite) | |||
|
1196 | else: | |||
|
1197 | self._executetests(tests) | |||
1176 |
|
1198 | |||
1177 | failed = len(self.results['!']) |
|
1199 | failed = len(self.results['!']) | |
1178 | warned = len(self.results['~']) |
|
1200 | warned = len(self.results['~']) | |
@@ -1207,7 +1229,7 b' class TestRunner(object):' | |||||
1207 | if warned: |
|
1229 | if warned: | |
1208 | return 80 |
|
1230 | return 80 | |
1209 |
|
1231 | |||
1210 | def _gettest(self, test, count): |
|
1232 | def _gettest(self, test, count, asunit=False): | |
1211 | """Obtain a Test by looking at its filename. |
|
1233 | """Obtain a Test by looking at its filename. | |
1212 |
|
1234 | |||
1213 | Returns a Test instance. The Test may not be runnable if it doesn't |
|
1235 | Returns a Test instance. The Test may not be runnable if it doesn't | |
@@ -1224,7 +1246,17 b' class TestRunner(object):' | |||||
1224 | refpath = os.path.join(self.testdir, test + out) |
|
1246 | refpath = os.path.join(self.testdir, test + out) | |
1225 | break |
|
1247 | break | |
1226 |
|
1248 | |||
1227 |
|
|
1249 | t = testcls(self, test, count, refpath) | |
|
1250 | ||||
|
1251 | if not asunit: | |||
|
1252 | return t | |||
|
1253 | ||||
|
1254 | # If we want a unittest compatible object, we wrap our Test. | |||
|
1255 | class MercurialTest(unittest.TestCase): | |||
|
1256 | def runTest(self): | |||
|
1257 | t.run() | |||
|
1258 | ||||
|
1259 | return MercurialTest() | |||
1228 |
|
1260 | |||
1229 | def _cleanup(self): |
|
1261 | def _cleanup(self): | |
1230 | """Clean up state from this test invocation.""" |
|
1262 | """Clean up state from this test invocation.""" |
General Comments 0
You need to be logged in to leave comments.
Login now