def testUnexpectedType(self): #{{{
     '''Trying to subscribe an unknown type is illegal'''
     try:
         subscribe('stranger', dummy, ftype='wacky')
         self.assert_(False)
     except ValueError, err:
         e = str(err).strip()
         self.assertEqual(e, 'detected unexpected type argument; must be one of the following: after, before, around, onreturn, choose')
 def testNoneIssue(self): #{{{
     '''Trying to subscribe None issue is illegal'''
     try:
         subscribe(None, dummy)
         self.assert_(False)
     except TypeError, err:
         e = str(err).strip()
         self.assertEqual(e, 'issue can not be None')
 def testTargetUncallable(self): #{{{
     '''Passing in a non-callable target is illegal'''
     try:
         subscribe('noncallable target', 1)
         self.assert_(False)
     except TypeError, err:
         e = str(err).strip()
         self.assertEqual(e, 'target must be callable')
 def testNonCallableChooseFunc(self): #{{{
     '''Passing in a non-callable choosefunc is illegal'''
     subscribe('stranger', dummy)
     try:
         subscribe('stranger', dummy2, ftype='choose', choosefunc=1)
         self.assert_(False)
     except TypeError, err:
         e = str(err).strip()
         self.assertEqual(e, 'choosefunc argument must be callable')
 def testNoChooseFunc(self): #{{{
     '''choose type must have an accompanying choosefunc'''
     subscribe('stranger', dummy)
     try:
         subscribe('stranger', dummy2, ftype='choose')
         self.assert_(False)
     except ValueError, err:
         e = str(err).strip()
         self.assertEqual(e, "an ftype of 'choose' must be accompanied with an appropriate 'choosefunc'")
 def testCancelOne(self):  # {{{
     """Cancel a single subscription"""
     s = "cancel one"
     self.assertEqual(len(_siglist), 0)
     subscribe(s, dummy)
     subscribe(s, dummy2)
     self.assertEqual(len(_siglist), 1)
     cancel(s)
     self.assertEqual(len(_siglist), 0)
 def testWrapNonIssue(self): #{{{
     '''Attempting to wrap an unsubscribed issue raises an error'''
     def me():
         pass
     try:
         subscribe('not exist', me, ftype='after')
         self.assert_(False)
     except TypeError, err:
         e = str(err).strip()
         self.assertEqual(e, 'Please subscribe an issue first.')
 def testSubscribeBefore(self): #{{{
     '''Subscribing before types'''
     self.assertEqual(len(_siglist), 0)
     subscribe('before', dummy)
     self.assertEqual(len(_siglist), 1)
     subscribe('before', dummy2, ftype='before')
     self.assertEqual(len(_siglist), 1)
     io, signal = _siglist[0]
     var = []
     signal(0, var)
     self.assertEqual(var, [2, 1])
 def testSubscribeAfter(self): #{{{
     '''Subscribing after types'''
     self.assertEqual(len(_siglist), 0)
     subscribe('after', dummy)
     self.assertEqual(len(_siglist), 1)
     subscribe('after', dummy2)
     self.assertEqual(len(_siglist), 1)
     io, signal = _siglist[0]
     var = []
     signal(0, var)
     self.assertEqual(var, [1, 2])
    def testSubscribeOnReturn(self): #{{{
        '''Subscribing onreturn types'''
        def dummyr(ret):
            ret.append(42)

        self.assertEqual(len(_siglist), 0)
        subscribe('onreturn', dummy)
        self.assertEqual(len(_siglist), 1)
        subscribe('onreturn', dummyr, ftype='onreturn')
        self.assertEqual(len(_siglist), 1)
        io, signal = _siglist[0]
        var = []
        signal(0, var)
        self.assertEqual(var, [1, 42])
    def testSubscribeChoose(self): #{{{
        '''Subscribing choose types'''
        def rep(a, var):
            var.append(a + 100)
            return var
        def crep(a, var):
            return True

        self.assertEqual(len(_siglist), 0)
        subscribe('choose', dummy)
        self.assertEqual(len(_siglist), 1)
        subscribe('choose', rep, 'choose', crep)
        self.assertEqual(len(_siglist), 1)
        io, signal = _siglist[0]
        var = []
        signal(0, var)
        self.assertEqual(var, [100])
    def testSubscribeAround(self): #{{{
        '''Subscribing around types'''
        def wrapper(func):
            def newcall(self, a, var):
                var.append(a + 200)
                ret = func(a, var)
                ret.append(a + 300)
                return ret
            return newcall

        self.assertEqual(len(_siglist), 0)
        subscribe('around', dummy)
        self.assertEqual(len(_siglist), 1)
        subscribe('around', wrapper, 'around')
        self.assertEqual(len(_siglist), 1)
        io, signal = _siglist[0]
        var = []
        signal(0, var)
        self.assertEqual(var, [200, 1, 300])
    def testPublish(self): #{{{
        '''Publish sends to the correct issue'''
        def dummy3(a, var):
            var.append(a + 3)
        subscribe('first', dummy)
        subscribe('first', dummy2)

        subscribe('second', dummy)
        subscribe('second', dummy3)
        self.assertEqual(len(_siglist), 2)
        var = []
        publish('first', 0, var)
        self.assertEqual(var, [1, 2])

        var = []
        publish('second', 2, var)
        self.assertEqual(var, [3, 5])
 def testCancelAll(self):  # {{{
     """Cancel all subscriptions"""
     s = "cancel all"
     self.assertEqual(len(_siglist), 0)
     subscribe(s, dummy)
     subscribe(s, dummy2)
     for s in xrange(5):
         subscribe(s, dummy)
     self.assertEqual(len(_siglist), 6)
     cancel()
     self.assertEqual(len(_siglist), 0)
 def testCancelOneOfMany(self):  # {{{
     """Cancel a single subscription from many"""
     self.assertEqual(len(_siglist), 0)
     for s in xrange(5):
         subscribe(s, dummy)
     subscribe("special", dummy)
     for s in xrange(6, 10):
         subscribe(s, dummy)
     self.assertEqual(len(_siglist), 10)
     cancel("special")
     self.assertEqual(len(_siglist), 9)
     for io, signal in _siglist:
         self.assertNotEqual(io, "special")
 def testFirstSubscription(self): #{{{
     '''Adding the first subscription'''
     self.assertEqual(len(_siglist), 0)
     subscribe('/first', dummy)
     self.assertEqual(len(_siglist), 1)
     self.assert_(True)