[Checkins] SVN: zc.monitorpdb/trunk/src/zc/monitorpdb/ add tests

Benji York benji at zope.com
Thu Oct 29 16:46:20 EDT 2009


Log message for revision 105375:
  add tests
  

Changed:
  U   zc.monitorpdb/trunk/src/zc/monitorpdb/README.txt
  U   zc.monitorpdb/trunk/src/zc/monitorpdb/tests.py

-=-
Modified: zc.monitorpdb/trunk/src/zc/monitorpdb/README.txt
===================================================================
--- zc.monitorpdb/trunk/src/zc/monitorpdb/README.txt	2009-10-29 18:28:12 UTC (rev 105374)
+++ zc.monitorpdb/trunk/src/zc/monitorpdb/README.txt	2009-10-29 20:46:20 UTC (rev 105375)
@@ -1,3 +1,92 @@
-zc.z3monitor plugin to start a PDB in a running process
-=======================================================
+zc.monitorpdb
+=============
 
+zc.montorpdb is a small plugin for the (very) lightweight zc.monitor
+system.  It allows a user to telnet to a monitor port and invoke a
+Python debugger (PDB) prompt.
+
+To use it, one must first register the command so zc.monitor is aware of
+it.
+
+    >>> import zc.monitorpdb
+    >>> import zope.component
+    >>> import zc.monitor.interfaces
+    >>> zope.component.provideUtility(zc.monitorpdb.command,
+    ...     zc.monitor.interfaces.IMonitorPlugin, 'pdb')
+
+Since zc.monitor is implemented with zc.ngi, we can use zc.ngi's testing
+helpers.
+
+    >>> import zc.ngi.testing
+    >>> connection = zc.ngi.testing.TextConnection()
+    >>> server = zc.monitor.Server(connection)
+
+If we invoke the command, we'll get the appropriate prompt.
+
+    >>> connection.test_input('pdb\n')
+    (Pdb)
+
+Now we can do normal pdb things like list the code being executed.
+
+    >>> connection.test_input('l\n')
+     34             global fakeout
+     35
+     36             fakeout = FakeStdout(connection.connection)
+     37             debugger = pdb.Pdb(stdin=None, stdout=fakeout)
+     38             debugger.reset()
+     39  ->         debugger.setup(sys._getframe(), None)
+     40
+     41
+     42         def command(connection, *args):
+     43             global debugger
+     44             global fakeout
+    (Pdb)
+
+As well as go "up" in the function call stack.
+
+    >>> connection.test_input('u\n')
+    >   /graphted-storage/workspace/zc.monitorpdb/src/zc/monitorpdb/__init__.py(48)command()
+    -> reset(connection)
+    (Pdb)
+
+There is a "reset" command that gives us a fresh debugger (just in case
+something bad happend to ours and we don't want to restart the host
+process).  Here we go from the current location being one thing (the
+result of the previous "u" command) to another.
+
+    >>> connection.test_input('l\n')
+     57                 return zc.monitor.QUIT_MARKER
+     58             else:
+     59                 debugger.onecmd(' '.join(args))
+     60
+     61             connection.write(debugger.prompt)
+     62  ->         return zc.monitor.MORE_MARKER
+    [EOF]
+    (Pdb)
+    >>> connection.test_input('reset\n')
+    (Pdb)
+    >>> connection.test_input('l\n')
+     34             global fakeout
+     35
+     36             fakeout = FakeStdout(connection.connection)
+     37             debugger = pdb.Pdb(stdin=None, stdout=fakeout)
+     38             debugger.reset()
+     39  ->         debugger.setup(sys._getframe(), None)
+     40
+     41
+     42         def command(connection, *args):
+     43             global debugger
+     44             global fakeout
+    (Pdb)
+
+
+Some features don't work, however.
+
+    >>> connection.test_input('debug 1+1\n')
+    the "debug" command is not supported
+    (Pdb)
+
+Once we're done, we ask to be let go.
+
+    >>> connection.test_input('quit\n')
+    -> CLOSE

Modified: zc.monitorpdb/trunk/src/zc/monitorpdb/tests.py
===================================================================
--- zc.monitorpdb/trunk/src/zc/monitorpdb/tests.py	2009-10-29 18:28:12 UTC (rev 105374)
+++ zc.monitorpdb/trunk/src/zc/monitorpdb/tests.py	2009-10-29 20:46:20 UTC (rev 105375)
@@ -35,9 +35,8 @@
     datetime.datetime = FauxDateTime
 
 def test_suite():
-    return unittest.TestSuite((
-        doctest.DocFileSuite(
-            'README.txt',
-            setUp=setUp, tearDown=setupstack.tearDown),
-        ))
-
+    return doctest.DocFileSuite(
+        'README.txt',
+        setUp=setUp,
+        tearDown=setupstack.tearDown,
+        optionflags=doctest.NORMALIZE_WHITESPACE)



More information about the checkins mailing list