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)