瀏覽代碼

pythonlib/pydispatch: doc test for signal, fixing disconnect (i.e. g.gui.iclass)

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@55331 15284696-431f-4ddb-bdfa-cd5b030d7da7
Vaclav Petras 12 年之前
父節點
當前提交
029be0fa7e
共有 1 個文件被更改,包括 60 次插入31 次删除
  1. 60 31
      lib/python/pydispatch/signal.py

+ 60 - 31
lib/python/pydispatch/signal.py

@@ -19,10 +19,66 @@ def _islambda(function):
 
 
 class Signal(object):
+    """
+    >>> signal1 = Signal('signal1')
+    >>> def handler1():
+    ...     print "from handler1"
+    >>> signal1.connect(handler1)
+
+    >>> signal2 = Signal('signal2')
+    >>> def handler2(text):
+    ...     print "handler2: %s" % text
+    >>> signal2.connect(handler2)
+
+    >>> signal1.emit()
+    from handler1
+
+    >>> signal2.emit(text="Hello")
+    handler2: Hello
+
+    >>> import sys
+    >>> signal2.connect(lambda text: sys.stdout.write('lambda handler: %s\\n' % text))
+    >>> signal2.emit(text="Hi")
+    handler2: Hi
+    lambda handler: Hi
+
+    >>> def handler3():
+    ...     print "from handler3"
+    >>> signal2.connect(handler3)
+    >>> signal2.emit(text="Ciao")
+    handler2: Ciao
+    lambda handler: Ciao
+    from handler3
+
+    >>> signal3 = Signal('signal3')
+    >>> signal3.connect(handler3)
+    >>> signal1.connect(signal3)
+    >>> signal1.emit()
+    from handler1
+    from handler3
+
+    >>> signal3.disconnect(handler3)
+    >>> signal1.emit()
+    from handler1
+    >>> signal2.disconnect(handler2)
+    >>> signal2.disconnect(handler3)
+    >>> signal2.emit(text='Hello')
+    lambda handler: Hello
+    """
     def __init__(self, name):
         self._name = name
 
     def connect(self, handler, weak=None):
+        """
+        >>> signal1 = Signal('signal1')
+        >>> import sys
+        >>> signal1.connect(lambda: sys.stdout.write('will print\\n'))
+        >>> signal1.connect(lambda: sys.stdout.write('will print\\n'), weak=False)
+        >>> signal1.connect(lambda: sys.stdout.write('will not print'), weak=True)
+        >>> signal1.emit()
+        will print
+        will print
+        """
         if weak is None:
             if _islambda(handler):
                 weak = False
@@ -30,8 +86,8 @@ class Signal(object):
                 weak = True
         dispatcher.connect(receiver=handler, signal=self, weak=weak)
 
-    def disconnect(self, handler):
-        dispatcher.disconnect(receiver=handler, signal=self, weak=None)
+    def disconnect(self, handler, weak=True):
+        dispatcher.disconnect(receiver=handler, signal=self, weak=weak)
 
     def emit(self, *args, **kwargs):
         dispatcher.send(signal=self, *args, **kwargs)
@@ -43,32 +99,5 @@ class Signal(object):
 
 
 if __name__ == '__main__':
-    def handler1():
-        print "handler1"
-    def handler2(text):
-        print "handler2: %s" % text
-    class A(object):
-        def showText(self, text):
-            print "showing text:", text
-        def showMessage(self):
-            print "showing message"
-
-    def test():
-        import sys
-        signal1 = Signal('signal1')
-        signal2 = Signal('signal2')
-        signal3 = Signal('signal3')
-        signal1.connect(handler1)
-        signal2.connect(handler2)
-        signal2.connect(lambda text: sys.stdout.write('lambda handler 1: %s\n' % text))
-        signal2.connect(signal3)
-        signal3.connect(handler2)
-
-        a = A()
-        signal2.connect(a.showText)
-        signal2.connect(a.showMessage)
-
-        signal1.emit()
-        signal2.emit(text="Hello")
-
-    test()
+    import doctest
+    doctest.testmod()