Skip to content
This repository has been archived by the owner on Jan 30, 2023. It is now read-only.

Commit

Permalink
Fix doctests
Browse files Browse the repository at this point in the history
  • Loading branch information
vbraun committed Jul 23, 2016
1 parent 5d7291f commit 9314230
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 17 deletions.
25 changes: 10 additions & 15 deletions src/sage/doctest/forker.py
Expand Up @@ -115,10 +115,6 @@ def init_sage():
from sage.structure.debug_options import debug
debug.refine_category_hash_check = True

# Disable IPython colors during doctests
from sage.repl.interpreter import DEFAULT_SAGE_CONFIG
DEFAULT_SAGE_CONFIG.TerminalInteractiveShell.colors = 'NoColor'

# We import readline before forking, otherwise Pdb doesn't work
# os OS X: http://trac.sagemath.org/14289
import readline
Expand Down Expand Up @@ -1087,15 +1083,13 @@ def report_failure(self, out, test, example, got, globs):
sage: _ = sage0.eval("import doctest, sys, os, multiprocessing, subprocess")
sage: _ = sage0.eval("from sage.doctest.parsing import SageOutputChecker")
sage: _ = sage0.eval("import sage.doctest.forker as sdf")
sage: _ = sage0.eval("sdf.init_sage()")
sage: _ = sage0.eval("from sage.doctest.control import DocTestDefaults")
sage: _ = sage0.eval("DD = DocTestDefaults(debug=True)")
sage: _ = sage0.eval("ex1 = doctest.Example('a = 17', '')")
sage: _ = sage0.eval("ex2 = doctest.Example('2*a', '1')")
sage: _ = sage0.eval("DT = doctest.DocTest([ex1,ex2], globals(), 'doubling', None, 0, None)")
sage: _ = sage0.eval("DTR = sdf.SageDocTestRunner(SageOutputChecker(), verbose=False, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)")
sage: sage0._prompt = r"debug: "
sage: print(sage0.eval("DTR.run(DT, clear_globs=False)")) # indirect doctest
sage: print(sage0.eval("sdf.init_sage(); DTR.run(DT, clear_globs=False)")) # indirect doctest
**********************************************************************
Line 1, in doubling
Failed example:
Expand All @@ -1109,7 +1103,6 @@ def report_failure(self, out, test, example, got, globs):
...
sage: sage0.eval("a")
'...17'
sage: sage0._prompt = "sage: "
sage: sage0.eval("quit")
'Returning to doctests...TestResults(failed=1, attempted=2)'
"""
Expand Down Expand Up @@ -1143,13 +1136,14 @@ def report_failure(self, out, test, example, got, globs):
print(src)
if ex.want:
print(doctest._indent(ex.want[:-1]))
from sage.repl.interpreter import DEFAULT_SAGE_CONFIG
from sage.repl.configuration import sage_ipython_config
from sage.repl.prompts import DebugPrompts
from IPython.terminal.embed import InteractiveShellEmbed
import copy
cfg = copy.deepcopy(DEFAULT_SAGE_CONFIG)
prompt_config = cfg.PromptManager
prompt_config.in_template = 'debug: '
prompt_config.in2_template = '.....: '
cfg = sage_ipython_config.default()
# Currently this doesn't work: prompts only work in pty
# We keep simple_prompt=True, prompts will be "In [0]:"
# cfg.InteractiveShell.prompts_class = DebugPrompts
# cfg.InteractiveShell.simple_prompt = False
shell = InteractiveShellEmbed(config=cfg, banner1='', user_ns=dict(globs))
shell(header='', stack_depth=2)
except KeyboardInterrupt:
Expand Down Expand Up @@ -1247,6 +1241,7 @@ def report_unexpected_exception(self, out, test, example, exc_info):
sage: _ = sage0.eval("ex = doctest.Example('E = EllipticCurve([0,0]); E', 'A singular Elliptic Curve')")
sage: _ = sage0.eval("DT = doctest.DocTest([ex], globals(), 'singular_curve', None, 0, None)")
sage: _ = sage0.eval("DTR = sdf.SageDocTestRunner(SageOutputChecker(), verbose=False, sage_options=DD, optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)")
sage: old_prompt = sage0._prompt
sage: sage0._prompt = r"\(Pdb\) "
sage: sage0.eval("DTR.run(DT, clear_globs=False)") # indirect doctest
'... ArithmeticError("invariants " + str(ainvs) + " define a singular curve")'
Expand All @@ -1256,7 +1251,7 @@ def report_unexpected_exception(self, out, test, example, exc_info):
'...EllipticCurve_field.__init__(self, K, ainvs)'
sage: sage0.eval("p ainvs")
'(0, 0, 0, 0, 0)'
sage: sage0._prompt = "sage: "
sage: sage0._prompt = old_prompt
sage: sage0.eval("quit")
'TestResults(failed=1, attempted=1)'
"""
Expand Down
2 changes: 1 addition & 1 deletion src/sage/doctest/test.py
Expand Up @@ -360,7 +360,7 @@
s...: b = 5
s...: a + b
8
debug:
In [1]:
<BLANKLINE>
Returning to doctests...
**********************************************************************
Expand Down
1 change: 1 addition & 0 deletions src/sage/misc/trace.py
Expand Up @@ -54,6 +54,7 @@ def trace(code, preparse=True):
sage: import pexpect
sage: s = pexpect.spawn('sage')
sage: _ = s.sendline("trace('print(factor(10))'); print(3+97)")
sage: _ = s.expect('ipdb>', timeout=90)
sage: _ = s.sendline("s"); _ = s.sendline("c");
sage: _ = s.expect('100', timeout=90)
Expand Down
25 changes: 25 additions & 0 deletions src/sage/repl/prompts.py
Expand Up @@ -65,3 +65,28 @@ def out_prompt_tokens(self):
(Token.OutPrompt, ''),
]


class DebugPrompts(Prompts):

def in_prompt_tokens(self, cli=None):
return [
(Token.Prompt, 'debug: '),
]

def continuation_prompt_tokens(self, cli=None, width=None):
return [
(Token.Prompt, '.....: '),
]

def rewrite_prompt_tokens(self):
return [
(Token.Prompt, '-----> '),
]

def out_prompt_tokens(self):
return [
(Token.OutPrompt, ''),
]



2 changes: 1 addition & 1 deletion src/sage/tests/cmdline.py
Expand Up @@ -385,7 +385,7 @@ def test_executable(args, input="", timeout=100.0, **kwds):
**********************************************************************
Previously executed commands:
s...: assert True == False
debug:
In [1]:
<BLANKLINE>
Returning to doctests...
**********************************************************************
Expand Down

0 comments on commit 9314230

Please sign in to comment.