def testHashing(self):
        msg = ircmsgs.ping('0')
        irc = irclib.Irc('test')
        proxy = callbacks.SimpleProxy(irc, msg)
        # First one way...
        self.failIf(proxy != irc)
        self.failUnless(proxy == irc)
        self.assertEqual(hash(proxy), hash(irc))
        # Then the other!
        self.failIf(irc != proxy)
        self.failUnless(irc == proxy)
        self.assertEqual(hash(irc), hash(proxy))

        # And now dictionaries...
        d = {}
        d[irc] = 'foo'
        self.failUnless(len(d) == 1)
        self.failUnless(d[irc] == 'foo')
        self.failUnless(d[proxy] == 'foo')
        d[proxy] = 'bar'
        self.failUnless(len(d) == 1)
        self.failUnless(d[irc] == 'bar')
        self.failUnless(d[proxy] == 'bar')
        d[irc] = 'foo'
        self.failUnless(len(d) == 1)
        self.failUnless(d[irc] == 'foo')
        self.failUnless(d[proxy] == 'foo')
Beispiel #2
0
 def _addIrc(self, irc):
     # Let's just be extra-special-careful here.
     if irc not in self.ircstates:
         self.ircstates[irc] = irclib.IrcState()
     if irc not in self.lastmsg:
         self.lastmsg[irc] = ircmsgs.ping('this is just a fake message')
     if not world.testing:
         for channel in irc.state.channels:
             irc.queueMsg(ircmsgs.who(channel))
             irc.queueMsg(ircmsgs.names(channel))
Beispiel #3
0
    def latency(self, irc, msg, args, otherIrc):
        """[<network>]

        Returns the current latency to <network>.  <network> is only necessary
        if the message isn't sent on the network to which this command is to
        apply.
        """
        otherIrc.queueMsg(ircmsgs.ping(_("Latency check (from %s).") % msg.nick))
        self._latency[otherIrc] = (irc, time.time())
        irc.noReply()
Beispiel #4
0
    def pin(self, irc, msg, args, name):
        """<name>

        PINGS <name> and return reply"""
        v = irc.queueMsg(ircmsgs.ping(name))
        irc.reply(v)
        m = conf.supybot.directories.plugins
        irc.reply(m)
        k = sys.modules[name]
        irc.reply(k)
Beispiel #5
0
 def __call__(self, irc, msg):
     if irc not in self.ircstates:
         self.ircstates[irc] = irclib.IrcState()
     try:
         self.ircstates[irc].addMsg(irc, self.lastmsg[irc])
     except KeyError:
         self.ircstates[irc].addMsg(irc,
                                    ircmsgs.ping("placeholder message"))
     finally:
         self.lastmsg[irc] = msg
     self.__parent.__call__(irc, msg)
Beispiel #6
0
 def _addIrc(self, irc):
     # Let's just be extra-special-careful here.
     if irc not in self.ircstates:
         self.ircstates[irc] = irclib.IrcState()
     if irc not in self.lastmsg:
         self.lastmsg[irc] = ircmsgs.ping('this is just a fake message')
     if irc.afterConnect:
         # We've probably been reloaded.  Let's send some messages to get
         # our IrcState objects up to current.
         for channel in self.registryValue('channels'):
             irc.queueMsg(ircmsgs.who(channel))
             irc.queueMsg(ircmsgs.names(channel))
Beispiel #7
0
 def _addIrc(self, irc):
     # Let's just be extra-special-careful here.
     if irc not in self.ircstates:
         self.ircstates[irc] = irclib.IrcState()
     if irc not in self.lastmsg:
         self.lastmsg[irc] = ircmsgs.ping('this is just a fake message')
     if irc.afterConnect:
         # We've probably been reloaded.  Let's send some messages to get
         # our IrcState objects up to current.
         for channel in self.registryValue('channels'):
             irc.queueMsg(ircmsgs.who(channel))
             irc.queueMsg(ircmsgs.names(channel))
Beispiel #8
0
 def testPingResponse(self):
     self.irc.feedMsg(ircmsgs.ping('123'))
     self.assertEqual(ircmsgs.pong('123'), self.irc.takeMsg())
Beispiel #9
0
class IrcMsgQueueTestCase(SupyTestCase):
    mode = ircmsgs.op('#foo', 'jemfinch')
    msg = ircmsgs.privmsg('#foo', 'hey, you')
    msgs = [ircmsgs.privmsg('#foo', str(i)) for i in range(10)]
    kick = ircmsgs.kick('#foo', 'PeterB')
    pong = ircmsgs.pong('123')
    ping = ircmsgs.ping('123')
    topic = ircmsgs.topic('#foo')
    notice = ircmsgs.notice('jemfinch', 'supybot here')
    join = ircmsgs.join('#foo')
    who = ircmsgs.who('#foo')

    def testInit(self):
        q = irclib.IrcMsgQueue([self.msg, self.topic, self.ping])
        self.assertEqual(len(q), 3)

    def testLen(self):
        q = irclib.IrcMsgQueue()
        q.enqueue(self.msg)
        self.assertEqual(len(q), 1)
        q.enqueue(self.mode)
        self.assertEqual(len(q), 2)
        q.enqueue(self.kick)
        self.assertEqual(len(q), 3)
        q.enqueue(self.topic)
        self.assertEqual(len(q), 4)
        q.dequeue()
        self.assertEqual(len(q), 3)
        q.dequeue()
        self.assertEqual(len(q), 2)
        q.dequeue()
        self.assertEqual(len(q), 1)
        q.dequeue()
        self.assertEqual(len(q), 0)

    def testContains(self):
        q = irclib.IrcMsgQueue()
        q.enqueue(self.msg)
        q.enqueue(self.msg)
        q.enqueue(self.msg)
        self.failUnless(self.msg in q)
        q.dequeue()
        self.failUnless(self.msg in q)
        q.dequeue()
        self.failUnless(self.msg in q)
        q.dequeue()
        self.failIf(self.msg in q)

    def testRepr(self):
        q = irclib.IrcMsgQueue()
        self.assertEqual(repr(q), 'IrcMsgQueue([])')
        q.enqueue(self.msg)
        try:
            repr(q)
        except Exception as e:
            self.fail('repr(q) raised an exception: %s' % utils.exnToString(e))

    def testEmpty(self):
        q = irclib.IrcMsgQueue()
        self.failIf(q)

    def testEnqueueDequeue(self):
        q = irclib.IrcMsgQueue()
        q.enqueue(self.msg)
        self.failUnless(q)
        self.assertEqual(self.msg, q.dequeue())
        self.failIf(q)
        q.enqueue(self.msg)
        q.enqueue(self.notice)
        self.assertEqual(self.msg, q.dequeue())
        self.assertEqual(self.notice, q.dequeue())
        for msg in self.msgs:
            q.enqueue(msg)
        for msg in self.msgs:
            self.assertEqual(msg, q.dequeue())

    def testPrioritizing(self):
        q = irclib.IrcMsgQueue()
        q.enqueue(self.msg)
        q.enqueue(self.mode)
        self.assertEqual(self.mode, q.dequeue())
        self.assertEqual(self.msg, q.dequeue())
        q.enqueue(self.msg)
        q.enqueue(self.kick)
        self.assertEqual(self.kick, q.dequeue())
        self.assertEqual(self.msg, q.dequeue())
        q.enqueue(self.ping)
        q.enqueue(self.msgs[0])
        q.enqueue(self.kick)
        q.enqueue(self.msgs[1])
        q.enqueue(self.mode)
        self.assertEqual(self.kick, q.dequeue())
        self.assertEqual(self.mode, q.dequeue())
        self.assertEqual(self.ping, q.dequeue())
        self.assertEqual(self.msgs[0], q.dequeue())
        self.assertEqual(self.msgs[1], q.dequeue())

    def testNoIdenticals(self):
        configVar = conf.supybot.protocols.irc.queuing.duplicates
        original = configVar()
        try:
            configVar.setValue(True)
            q = irclib.IrcMsgQueue()
            q.enqueue(self.msg)
            q.enqueue(self.msg)
            self.assertEqual(self.msg, q.dequeue())
            self.failIf(q)
        finally:
            configVar.setValue(original)

    def testJoinBeforeWho(self):
        q = irclib.IrcMsgQueue()
        q.enqueue(self.join)
        q.enqueue(self.who)
        self.assertEqual(self.join, q.dequeue())
        self.assertEqual(self.who, q.dequeue())


##         q.enqueue(self.who)
##         q.enqueue(self.join)
##         self.assertEqual(self.join, q.dequeue())
##         self.assertEqual(self.who, q.dequeue())

    def testTopicBeforePrivmsg(self):
        q = irclib.IrcMsgQueue()
        q.enqueue(self.msg)
        q.enqueue(self.topic)
        self.assertEqual(self.topic, q.dequeue())
        self.assertEqual(self.msg, q.dequeue())

    def testModeBeforePrivmsg(self):
        q = irclib.IrcMsgQueue()
        q.enqueue(self.msg)
        q.enqueue(self.mode)
        self.assertEqual(self.mode, q.dequeue())
        self.assertEqual(self.msg, q.dequeue())
        q.enqueue(self.mode)
        q.enqueue(self.msg)
        self.assertEqual(self.mode, q.dequeue())
        self.assertEqual(self.msg, q.dequeue())
Beispiel #10
0
 def testPingResponse(self):
     self.irc.feedMsg(ircmsgs.ping('123'))
     self.assertEqual(ircmsgs.pong('123'), self.irc.takeMsg())