From 64402a60ed36c1f148d0bf1c1f7bcc8de99b3923 Mon Sep 17 00:00:00 2001 From: Michael Forbes Date: Sun, 12 Feb 2012 16:25:37 +0100 Subject: [PATCH] Doctest configuration optionflags. Patch from google code - closes GH issue #7 --- nose/plugins/doctests.py | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/nose/plugins/doctests.py b/nose/plugins/doctests.py index f07f6412..23772d6e 100644 --- a/nose/plugins/doctests.py +++ b/nose/plugins/doctests.py @@ -170,6 +170,11 @@ def options(self, parser, env): help="Find fixtures for a doctest file in module " "with this name appended to the base name " "of the doctest file") + parser.add_option('--doctest-options', action="append", + dest="doctestOptions", + metavar="OPTIONS", + help="Specify options to pass to doctest. " + + "Eg. '+ELLIPSIS,+NORMALIZE_WHITESPACE'") # Set the default as a list, if given in env; otherwise # an additional value set on the command line will cause # an error. @@ -186,7 +191,23 @@ def configure(self, options, config): self.extension = tolist(options.doctestExtension) self.fixtures = options.doctestFixtures self.finder = doctest.DocTestFinder() - + self.optionflags = 0 + if options.doctestOptions: + flags = ",".join(options.doctestOptions).split(',') + for flag in flags: + try: + if flag.startswith('+'): + self.optionflags |= getattr(doctest, flag[1:]) + elif flag.startswith('-'): + self.optionflags &= ~getattr(doctest, flag[1:]) + else: + raise ValueError( + "Must specify doctest options with starting " + + "'+' or '-'. Got %s" % (flag,)) + except AttributeError: + raise ValueError("Unknown doctest option %s" % + (flag[1:],)) + def prepareTestLoader(self, loader): """Capture loader's suiteClass. @@ -222,7 +243,9 @@ def loadTestsFromModule(self, module): continue if not test.filename: test.filename = module_file - cases.append(DocTestCase(test, result_var=self.doctest_result_var)) + cases.append(DocTestCase(test, + optionflags=self.optionflags, + result_var=self.doctest_result_var)) if cases: yield self.suiteClass(cases, context=module, can_split=False) @@ -265,6 +288,7 @@ def loadTestsFromFile(self, filename): if test.examples: case = DocFileCase( test, + optionflags=self.optionflags, setUp=getattr(fixture_context, 'setup_test', None), tearDown=getattr(fixture_context, 'teardown_test', None), result_var=self.doctest_result_var) @@ -285,7 +309,7 @@ def makeTest(self, obj, parent): for test in doctests: if len(test.examples) == 0: continue - yield DocTestCase(test, obj=obj, + yield DocTestCase(test, obj=obj, optionflags=self.optionflags, result_var=self.doctest_result_var) def matches(self, name):