def setUp(self): self.f = StringIO() self.t = FileWrapper(self.f) self.vb = VumiBotProtocol(self.nick, [self.channel], self) self.vb.makeConnection(self.t) self.recvd_messages = []
class TestVumiBotProtocol(VumiTestCase): nick = "testnick" channel = "#test1" def setUp(self): self.f = StringIO() self.t = FileWrapper(self.f) self.vb = VumiBotProtocol(self.nick, [self.channel], self) self.vb.makeConnection(self.t) self.recvd_messages = [] def handle_inbound_irc_message(self, irc_msg): self.recvd_messages.append(irc_msg) def check(self, lines): connect_lines = [ "NICK %s" % self.nick, # foo and bar are twisted's mis-implementation of RFC 2812 # Compare http://tools.ietf.org/html/rfc2812#section-3.1.3 # and http://twistedmatrix.com/trac/browser/tags/releases/ # twisted-11.0.0/twisted/words/protocols/irc.py#L1552 "USER %s foo bar :None" % self.nick, ] expected_lines = connect_lines + lines self.assertEqual(self.f.getvalue().splitlines(), expected_lines) def test_publish_message(self): msg = IrcMessage('[email protected]', 'PRIVMSG', '#bar', 'hello?') self.vb.publish_message(msg) self.check([]) [recvd_msg] = self.recvd_messages self.assertEqual(recvd_msg, msg) def test_consume_message_privmsg(self): self.vb.consume_message( IrcMessage('[email protected]', 'PRIVMSG', '#bar', 'hello?')) self.check(["PRIVMSG #bar :hello?"]) def test_consume_message_action(self): self.vb.consume_message( IrcMessage('[email protected]', 'ACTION', '#bar', 'hello?')) self.check(["PRIVMSG #bar :\x01ACTION hello?\x01"]) def test_connection_made(self): # just check that the connect messages made it through self.check([]) def test_connection_lost(self): with LogCatcher() as logger: self.vb.connectionLost("test loss of connection") [logmsg] = logger.messages() self.assertEqual(logmsg, 'Disconnected (nickname was: %s).' % self.nick) self.assertEqual(logger.errors, []) def test_signed_on(self): self.vb.signedOn() self.check(['JOIN %s' % self.channel]) def test_joined(self): with LogCatcher() as logger: self.vb.joined(self.channel) [logmsg] = logger.messages() self.assertEqual(logmsg, 'Joined %r' % self.channel) def test_privmsg(self): sender, command, recipient, text = (self.nick, 'PRIVMSG', "#zoo", "Hello zooites") self.vb.privmsg(sender, recipient, text) [recvd_msg] = self.recvd_messages self.assertEqual( recvd_msg, IrcMessage(sender, command, recipient, text, self.vb.nickname)) def test_action(self): sender, command, recipient, text = (self.nick, 'ACTION', "#zoo", "waves at zooites") self.vb.action(sender, recipient, text) [recvd_msg] = self.recvd_messages self.assertEqual( recvd_msg, IrcMessage(sender, command, recipient, text, self.vb.nickname)) def test_irc_nick(self): with LogCatcher() as logger: self.vb.irc_NICK("oldnick!host", ["newnick"]) [logmsg] = logger.messages() self.assertEqual(logmsg, "Nick changed from 'oldnick' to 'newnick'") def test_alter_collided_nick(self): collided_nick = "commonnick" new_nick = self.vb.alterCollidedNick(collided_nick) self.assertEqual(new_nick, collided_nick + '^')
class TestVumiBotProtocol(unittest.TestCase): nick = "testnick" channel = "#test1" def setUp(self): self.f = StringIO() self.t = FileWrapper(self.f) self.vb = VumiBotProtocol(self.nick, [self.channel], self) self.vb.makeConnection(self.t) self.recvd_messages = [] def handle_inbound_irc_message(self, irc_msg): self.recvd_messages.append(irc_msg) def check(self, lines): connect_lines = [ "NICK %s" % self.nick, # foo and bar are twisted's mis-implementation of RFC 2812 # Compare http://tools.ietf.org/html/rfc2812#section-3.1.3 # and http://twistedmatrix.com/trac/browser/tags/releases/ # twisted-11.0.0/twisted/words/protocols/irc.py#L1552 "USER %s foo bar :None" % self.nick, ] expected_lines = connect_lines + lines self.assertEqual(self.f.getvalue().splitlines(), expected_lines) def test_publish_message(self): msg = IrcMessage('[email protected]', 'PRIVMSG', '#bar', 'hello?') self.vb.publish_message(msg) self.check([]) [recvd_msg] = self.recvd_messages self.assertEqual(recvd_msg, msg) def test_consume_message_privmsg(self): self.vb.consume_message(IrcMessage('[email protected]', 'PRIVMSG', '#bar', 'hello?')) self.check(["PRIVMSG #bar :hello?"]) def test_consume_message_action(self): self.vb.consume_message(IrcMessage('[email protected]', 'ACTION', '#bar', 'hello?')) self.check(["PRIVMSG #bar :\x01ACTION hello?\x01"]) def test_connection_made(self): # just check that the connect messages made it through self.check([]) def test_connection_lost(self): with LogCatcher() as logger: self.vb.connectionLost("test loss of connection") [log] = logger.logs self.assertEqual(log['message'][0], 'Disconnected (nickname was: %s).' % self.nick) self.assertEqual(logger.errors, []) def test_signed_on(self): self.vb.signedOn() self.check(['JOIN %s' % self.channel]) def test_joined(self): with LogCatcher() as logger: self.vb.joined(self.channel) [log] = logger.logs self.assertEqual(log['message'][0], 'Joined %r' % self.channel) def test_privmsg(self): sender, command, recipient, text = (self.nick, 'PRIVMSG', "#zoo", "Hello zooites") self.vb.privmsg(sender, recipient, text) [recvd_msg] = self.recvd_messages self.assertEqual(recvd_msg, IrcMessage(sender, command, recipient, text, self.vb.nickname)) def test_action(self): sender, command, recipient, text = (self.nick, 'ACTION', "#zoo", "waves at zooites") self.vb.action(sender, recipient, text) [recvd_msg] = self.recvd_messages self.assertEqual(recvd_msg, IrcMessage(sender, command, recipient, text, self.vb.nickname)) def test_irc_nick(self): with LogCatcher() as logger: self.vb.irc_NICK("oldnick!host", ["newnick"]) [log] = logger.logs self.assertEqual(log['message'][0], "Nick changed from 'oldnick' to 'newnick'") def test_alter_collided_nick(self): collided_nick = "commonnick" new_nick = self.vb.alterCollidedNick(collided_nick) self.assertEqual(new_nick, collided_nick + '^')