]> granicus.if.org Git - python/commitdiff
Merged revisions 74838-74839 via svnmerge from
authorGeorg Brandl <georg@python.org>
Wed, 16 Sep 2009 16:40:45 +0000 (16:40 +0000)
committerGeorg Brandl <georg@python.org>
Wed, 16 Sep 2009 16:40:45 +0000 (16:40 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r74838 | georg.brandl | 2009-09-16 18:22:12 +0200 (Mi, 16 Sep 2009) | 1 line

  Remove some more boilerplate from the actual tests in test_pdb.
........
  r74839 | georg.brandl | 2009-09-16 18:36:39 +0200 (Mi, 16 Sep 2009) | 1 line

  Make the pdb displayhook compatible with the standard displayhook: do not print Nones. Add a test for that.
........

Lib/pdb.py
Lib/test/test_pdb.py

index 627cd29ba7b6da67493965f104fc6aae84ee6997..22dcff738a1125928fa3242c166c042b2893d575 100755 (executable)
@@ -208,7 +208,9 @@ class Pdb(bdb.Bdb, cmd.Cmd):
         """Custom displayhook for the exec in default(), which prevents
         assignment of the _ variable in the builtins.
         """
-        print(repr(obj))
+        # reproduce the behavior of the standard displayhook, not printing None
+        if obj is not None:
+            print(repr(obj))
 
     def default(self, line):
         if line[:1] == '!': line = line[1:]
index bcd4853d6326f13159c78eb7e180e4bf0aabf8da..5d52707f408345f1499e48cbadb22568e37d5458 100644 (file)
@@ -12,6 +12,49 @@ from test import support
 from test.test_doctest import _FakeInput
 
 
+class PdbTestInput(object):
+    """Context manager that makes testing Pdb in doctests easier."""
+
+    def __init__(self, input):
+        self.input = input
+
+    def __enter__(self):
+        self.real_stdin = sys.stdin
+        sys.stdin = _FakeInput(self.input)
+
+    def __exit__(self, *exc):
+        sys.stdin = self.real_stdin
+
+
+def test_pdb_displayhook():
+    """This tests the custom displayhook for pdb.
+
+    >>> def test_function(foo, bar):
+    ...     import pdb; pdb.Pdb().set_trace()
+    ...     pass
+
+    >>> with PdbTestInput([
+    ...     'foo',
+    ...     'bar',
+    ...     'for i in range(5): print(i)',
+    ...     'continue',
+    ... ]):
+    ...     test_function(1, None)
+    > <doctest test.test_pdb.test_pdb_displayhook[0]>(3)test_function()
+    -> pass
+    (Pdb) foo
+    1
+    (Pdb) bar
+    (Pdb) for i in range(5): print(i)
+    0
+    1
+    2
+    3
+    4
+    (Pdb) continue
+    """
+
+
 def test_pdb_skip_modules():
     """This illustrates the simple case of module skipping.
 
@@ -19,16 +62,12 @@ def test_pdb_skip_modules():
     ...     import string
     ...     import pdb; pdb.Pdb(skip=['stri*']).set_trace()
     ...     string.capwords('FOO')
-    >>> real_stdin = sys.stdin
-    >>> sys.stdin = _FakeInput([
-    ...    'step',
-    ...    'continue',
-    ...    ])
 
-    >>> try:
+    >>> with PdbTestInput([
+    ...     'step',
+    ...     'continue',
+    ... ]):
     ...     skip_module()
-    ... finally:
-    ...     sys.stdin = real_stdin
     > <doctest test.test_pdb.test_pdb_skip_modules[0]>(4)skip_module()
     -> string.capwords('FOO')
     (Pdb) step
@@ -36,7 +75,7 @@ def test_pdb_skip_modules():
     > <doctest test.test_pdb.test_pdb_skip_modules[0]>(4)skip_module()->None
     -> string.capwords('FOO')
     (Pdb) continue
-"""
+    """
 
 
 # Module for testing skipping of module that makes a callback
@@ -50,22 +89,19 @@ def test_pdb_skip_modules_with_callback():
     >>> def skip_module():
     ...     def callback():
     ...         return None
-    ...     import pdb;pdb.Pdb(skip=['module_to_skip*']).set_trace()
+    ...     import pdb; pdb.Pdb(skip=['module_to_skip*']).set_trace()
     ...     mod.foo_pony(callback)
-    >>> real_stdin = sys.stdin
-    >>> sys.stdin = _FakeInput([
-    ...    'step',
-    ...    'step',
-    ...    'step',
-    ...    'step',
-    ...    'step',
-    ...    'continue',
-    ...    ])
-
-    >>> try:
+
+    >>> with PdbTestInput([
+    ...     'step',
+    ...     'step',
+    ...     'step',
+    ...     'step',
+    ...     'step',
+    ...     'continue',
+    ... ]):
     ...     skip_module()
-    ... finally:
-    ...     sys.stdin = real_stdin
+    ...     pass  # provides something to "step" to
     > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(5)skip_module()
     -> mod.foo_pony(callback)
     (Pdb) step
@@ -84,10 +120,10 @@ def test_pdb_skip_modules_with_callback():
     > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[0]>(5)skip_module()->None
     -> mod.foo_pony(callback)
     (Pdb) step
-    > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[3]>(4)<module>()
-    -> sys.stdin = real_stdin
+    > <doctest test.test_pdb.test_pdb_skip_modules_with_callback[1]>(10)<module>()
+    -> pass  # provides something to "step" to
     (Pdb) continue
-"""
+    """
 
 
 def test_main():