| 236 | """ |
| 237 | |
| 238 | def __init__(cls, name, bases, bodydict): |
| 239 | if name == 'ParserTestCase': |
| 240 | return |
| 241 | |
| 242 | # default parser signature is empty |
| 243 | if not hasattr(cls, 'parser_signature'): |
| 244 | cls.parser_signature = Sig() |
| 245 | if not hasattr(cls, 'parser_class'): |
| 246 | cls.parser_class = ErrorRaisingArgumentParser |
| 247 | |
| 248 | # --------------------------------------- |
| 249 | # functions for adding optional arguments |
| 250 | # --------------------------------------- |
| 251 | def no_groups(parser, argument_signatures): |
| 252 | """Add all arguments directly to the parser""" |
| 253 | for sig in argument_signatures: |
| 254 | parser.add_argument(*sig.args, **sig.kwargs) |
| 255 | |
| 256 | def one_group(parser, argument_signatures): |
| 257 | """Add all arguments under a single group in the parser""" |
| 258 | group = parser.add_argument_group('foo') |
| 259 | for sig in argument_signatures: |
| 260 | group.add_argument(*sig.args, **sig.kwargs) |
| 261 | |
| 262 | def many_groups(parser, argument_signatures): |
| 263 | """Add each argument in its own group to the parser""" |
| 264 | for i, sig in enumerate(argument_signatures): |
| 265 | group = parser.add_argument_group('foo:%i' % i) |
| 266 | group.add_argument(*sig.args, **sig.kwargs) |
| 267 | |
| 268 | # -------------------------- |
| 269 | # functions for parsing args |
| 270 | # -------------------------- |
| 271 | def listargs(parser, args): |
| 272 | """Parse the args by passing in a list""" |
| 273 | return parser.parse_args(args) |
| 274 | |
| 275 | def sysargs(parser, args): |
| 276 | """Parse the args by defaulting to sys.argv""" |
| 277 | old_sys_argv = sys.argv |
| 278 | sys.argv = [old_sys_argv[0]] + args |
| 279 | try: |
| 280 | return parser.parse_args() |
| 281 | finally: |
| 282 | sys.argv = old_sys_argv |
| 283 | |
| 284 | # class that holds the combination of one optional argument |
| 285 | # addition method and one arg parsing method |
| 286 | class AddTests(object): |
| 287 | |
| 288 | def __init__(self, tester_cls, add_arguments, parse_args): |
| 289 | self._add_arguments = add_arguments |
| 290 | self._parse_args = parse_args |
| 291 | |
| 292 | add_arguments_name = self._add_arguments.__name__ |
| 293 | parse_args_name = self._parse_args.__name__ |
| 294 | for test_func in [self.test_failures, self.test_successes]: |
| 295 | func_name = test_func.__name__ |