| 4113 | class TestHelpFormattingMetaclass(type): |
| 4114 | |
| 4115 | def __init__(cls, name, bases, bodydict): |
| 4116 | if name == 'HelpTestCase': |
| 4117 | return |
| 4118 | |
| 4119 | class AddTests(object): |
| 4120 | |
| 4121 | def __init__(self, test_class, func_suffix, std_name): |
| 4122 | self.func_suffix = func_suffix |
| 4123 | self.std_name = std_name |
| 4124 | |
| 4125 | for test_func in [self.test_format, |
| 4126 | self.test_print, |
| 4127 | self.test_print_file]: |
| 4128 | test_name = '%s_%s' % (test_func.__name__, func_suffix) |
| 4129 | |
| 4130 | def test_wrapper(self, test_func=test_func): |
| 4131 | test_func(self) |
| 4132 | try: |
| 4133 | test_wrapper.__name__ = test_name |
| 4134 | except TypeError: |
| 4135 | pass |
| 4136 | setattr(test_class, test_name, test_wrapper) |
| 4137 | |
| 4138 | def _get_parser(self, tester): |
| 4139 | parser = argparse.ArgumentParser( |
| 4140 | *tester.parser_signature.args, |
| 4141 | **tester.parser_signature.kwargs) |
| 4142 | for argument_sig in getattr(tester, 'argument_signatures', []): |
| 4143 | parser.add_argument(*argument_sig.args, |
| 4144 | **argument_sig.kwargs) |
| 4145 | group_sigs = getattr(tester, 'argument_group_signatures', []) |
| 4146 | for group_sig, argument_sigs in group_sigs: |
| 4147 | group = parser.add_argument_group(*group_sig.args, |
| 4148 | **group_sig.kwargs) |
| 4149 | for argument_sig in argument_sigs: |
| 4150 | group.add_argument(*argument_sig.args, |
| 4151 | **argument_sig.kwargs) |
| 4152 | subparsers_sigs = getattr(tester, 'subparsers_signatures', []) |
| 4153 | if subparsers_sigs: |
| 4154 | subparsers = parser.add_subparsers() |
| 4155 | for subparser_sig in subparsers_sigs: |
| 4156 | subparsers.add_parser(*subparser_sig.args, |
| 4157 | **subparser_sig.kwargs) |
| 4158 | return parser |
| 4159 | |
| 4160 | def _test(self, tester, parser_text): |
| 4161 | expected_text = getattr(tester, self.func_suffix) |
| 4162 | expected_text = textwrap.dedent(expected_text) |
| 4163 | tester.maxDiff = None |
| 4164 | tester.assertEqual(expected_text, parser_text) |
| 4165 | |
| 4166 | @force_not_colorized |
| 4167 | def test_format(self, tester): |
| 4168 | parser = self._get_parser(tester) |
| 4169 | format = getattr(parser, 'format_%s' % self.func_suffix) |
| 4170 | self._test(tester, format()) |
| 4171 | |
| 4172 | @force_not_colorized |