OLD | NEW |
1 """Unittest main program""" | 1 """Unittest main program""" |
2 | 2 |
3 import sys | 3 import sys |
4 import os | 4 import os |
5 import types | 5 import types |
6 | 6 |
7 from unittest2 import loader, runner | 7 from unittest2 import loader, runner |
8 try: | 8 try: |
9 from unittest2.signals import installHandler | 9 from unittest2.signals import installHandler |
10 except ImportError: | 10 except ImportError: |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 %(progName)s MyTestCase - run all 'test*' test methods | 61 %(progName)s MyTestCase - run all 'test*' test methods |
62 in MyTestCase | 62 in MyTestCase |
63 """ | 63 """ |
64 | 64 |
65 | 65 |
66 class TestProgram(object): | 66 class TestProgram(object): |
67 """A command-line program that runs a set of tests; this is primarily | 67 """A command-line program that runs a set of tests; this is primarily |
68 for making test modules conveniently executable. | 68 for making test modules conveniently executable. |
69 """ | 69 """ |
70 USAGE = USAGE_FROM_MODULE | 70 USAGE = USAGE_FROM_MODULE |
71 | 71 |
72 # defaults for testing | 72 # defaults for testing |
73 failfast = catchbreak = buffer = progName = None | 73 failfast = catchbreak = buffer = progName = None |
74 | 74 |
75 def __init__(self, module='__main__', defaultTest=None, | 75 def __init__(self, module='__main__', defaultTest=None, |
76 argv=None, testRunner=None, | 76 argv=None, testRunner=None, |
77 testLoader=loader.defaultTestLoader, exit=True, | 77 testLoader=loader.defaultTestLoader, exit=True, |
78 verbosity=1, failfast=None, catchbreak=None, buffer=None): | 78 verbosity=1, failfast=None, catchbreak=None, buffer=None): |
79 if isinstance(module, basestring): | 79 if isinstance(module, basestring): |
80 self.module = __import__(module) | 80 self.module = __import__(module) |
81 for part in module.split('.')[1:]: | 81 for part in module.split('.')[1:]: |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 def _do_discovery(self, argv, Loader=loader.TestLoader): | 163 def _do_discovery(self, argv, Loader=loader.TestLoader): |
164 # handle command line args for test discovery | 164 # handle command line args for test discovery |
165 self.progName = '%s discover' % self.progName | 165 self.progName = '%s discover' % self.progName |
166 import optparse | 166 import optparse |
167 parser = optparse.OptionParser() | 167 parser = optparse.OptionParser() |
168 parser.prog = self.progName | 168 parser.prog = self.progName |
169 parser.add_option('-v', '--verbose', dest='verbose', default=False, | 169 parser.add_option('-v', '--verbose', dest='verbose', default=False, |
170 help='Verbose output', action='store_true') | 170 help='Verbose output', action='store_true') |
171 if self.failfast != False: | 171 if self.failfast != False: |
172 parser.add_option('-f', '--failfast', dest='failfast', default=False
, | 172 parser.add_option('-f', '--failfast', dest='failfast', default=False
, |
173 help='Stop on first fail or error', | 173 help='Stop on first fail or error', |
174 action='store_true') | 174 action='store_true') |
175 if self.catchbreak != False and installHandler is not None: | 175 if self.catchbreak != False and installHandler is not None: |
176 parser.add_option('-c', '--catch', dest='catchbreak', default=False, | 176 parser.add_option('-c', '--catch', dest='catchbreak', default=False, |
177 help='Catch ctrl-C and display results so far', | 177 help='Catch ctrl-C and display results so far', |
178 action='store_true') | 178 action='store_true') |
179 if self.buffer != False: | 179 if self.buffer != False: |
180 parser.add_option('-b', '--buffer', dest='buffer', default=False, | 180 parser.add_option('-b', '--buffer', dest='buffer', default=False, |
181 help='Buffer stdout and stderr during tests', | 181 help='Buffer stdout and stderr during tests', |
182 action='store_true') | 182 action='store_true') |
183 parser.add_option('-s', '--start-directory', dest='start', default='.', | 183 parser.add_option('-s', '--start-directory', dest='start', default='.', |
184 help="Directory to start discovery ('.' default)") | 184 help="Directory to start discovery ('.' default)") |
185 parser.add_option('-p', '--pattern', dest='pattern', default='test*.py', | 185 parser.add_option('-p', '--pattern', dest='pattern', default='test*.py', |
186 help="Pattern to match tests ('test*.py' default)") | 186 help="Pattern to match tests ('test*.py' default)") |
187 parser.add_option('-t', '--top-level-directory', dest='top', default=Non
e, | 187 parser.add_option('-t', '--top-level-directory', dest='top', default=Non
e, |
188 help='Top level directory of project (defaults to star
t directory)') | 188 help='Top level directory of project (defaults to star
t directory)') |
189 | 189 |
190 options, args = parser.parse_args(argv) | 190 options, args = parser.parse_args(argv) |
191 if len(args) > 3: | 191 if len(args) > 3: |
192 self.usageExit() | 192 self.usageExit() |
193 | 193 |
194 for name, value in zip(('start', 'pattern', 'top'), args): | 194 for name, value in zip(('start', 'pattern', 'top'), args): |
195 setattr(options, name, value) | 195 setattr(options, name, value) |
196 | 196 |
197 # only set options from the parsing here | 197 # only set options from the parsing here |
198 # if they weren't set explicitly in the constructor | 198 # if they weren't set explicitly in the constructor |
199 if self.failfast is None: | 199 if self.failfast is None: |
200 self.failfast = options.failfast | 200 self.failfast = options.failfast |
201 if self.catchbreak is None and installHandler is not None: | 201 if self.catchbreak is None and installHandler is not None: |
202 self.catchbreak = options.catchbreak | 202 self.catchbreak = options.catchbreak |
203 if self.buffer is None: | 203 if self.buffer is None: |
204 self.buffer = options.buffer | 204 self.buffer = options.buffer |
205 | 205 |
206 if options.verbose: | 206 if options.verbose: |
207 self.verbosity = 2 | 207 self.verbosity = 2 |
208 | 208 |
209 start_dir = options.start | 209 start_dir = options.start |
210 pattern = options.pattern | 210 pattern = options.pattern |
211 top_level_dir = options.top | 211 top_level_dir = options.top |
212 | 212 |
213 loader = Loader() | 213 loader = Loader() |
214 self.test = loader.discover(start_dir, pattern, top_level_dir) | 214 self.test = loader.discover(start_dir, pattern, top_level_dir) |
215 | 215 |
(...skipping 16 matching lines...) Expand all Loading... |
232 self.result = testRunner.run(self.test) | 232 self.result = testRunner.run(self.test) |
233 if self.exit: | 233 if self.exit: |
234 sys.exit(not self.result.wasSuccessful()) | 234 sys.exit(not self.result.wasSuccessful()) |
235 | 235 |
236 main = TestProgram | 236 main = TestProgram |
237 | 237 |
238 def main_(): | 238 def main_(): |
239 TestProgram.USAGE = USAGE_AS_MAIN | 239 TestProgram.USAGE = USAGE_AS_MAIN |
240 main(module=None) | 240 main(module=None) |
241 | 241 |
OLD | NEW |