# Path: fuocore/dispatch.py
# class Signal(object):
#     """provider signal/slot design pattern
# 
#     similar as pyqt signal/slot
#     """
#     def __init__(self, name='', *sig):
#         self.sig = sig
#         self.receivers = set()
# 
#     def emit(self, *args):
#         for receiver in self.receivers:
#             try:
#                 receiver()(*args)
#             except Exception:
#                 logger.exception('receiver %s run error' % receiver())
# 
#     def _ref(self, receiver):
#         ref = weakref.ref
#         if hasattr(receiver, '__self__') and hasattr(receiver, '__func__'):
#             ref = WeakMethod
#         return ref(receiver)
# 
#     def connect(self, receiver):
#         self.receivers.add(self._ref(receiver))
# 
#     def disconnect(self, receiver):
#         receiver = self._ref(receiver)
#         if receiver in self.receivers:
#             self.receivers.remove(receiver)
#             return True
#         return False
# 
# Path: fuocore/dispatch.py
# def receiver(signal):
#     def _decorator(func):
#         if isinstance(signal, (list, tuple)):
#             for s in signal:
#                 s.connect(func)
#         else:
#             signal.connect(func)
#         return func
#     return _decorator
# 
# Path: tests/helpers.py



from unittest import TestCase
from fuocore.dispatch import Signal
from fuocore.dispatch import receiver
from .helpers import mock




class A(object):
    def f(self, *args, **kwargs):
        print('a.f called')


def f(*args, **kwargs):
    print('f called')


class SignalTest(TestCase):

# Path: fuocore/dispatch.py
# class Signal(object):
#     """provider signal/slot design pattern
# 
#     similar as pyqt signal/slot
#     """
#     def __init__(self, name='', *sig):
#         self.sig = sig
#         self.receivers = set()
# 
#     def emit(self, *args):
#         for receiver in self.receivers:
#             try:
#                 receiver()(*args)
#             except Exception:
#                 logger.exception('receiver %s run error' % receiver())
# 
#     def _ref(self, receiver):
#         ref = weakref.ref
#         if hasattr(receiver, '__self__') and hasattr(receiver, '__func__'):
#             ref = WeakMethod
#         return ref(receiver)
# 
#     def connect(self, receiver):
#         self.receivers.add(self._ref(receiver))
# 
#     def disconnect(self, receiver):
#         receiver = self._ref(receiver)
#         if receiver in self.receivers:
#             self.receivers.remove(receiver)
#             return True
#         return False
# 
# Path: fuocore/dispatch.py
# def receiver(signal):
#     def _decorator(func):
#         if isinstance(signal, (list, tuple)):
#             for s in signal:
#                 s.connect(func)
#         else:
#             signal.connect(func)
#         return func
#     return _decorator
# 
# Path: tests/helpers.py



# Path: tests/test_signal.py
from unittest import TestCase
from fuocore.dispatch import Signal
from fuocore.dispatch import receiver
from .helpers import mock





class A(object):
    def f(self, *args, **kwargs):
        print('a.f called')


def f(*args, **kwargs):
    print('f called')


class SignalTest(TestCase):

    def setUp(self):