[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