def test(self): dt = pendulum.datetime(2020, 3, 12, 19, 38, 9) server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan")) server.parse_tokens(irctokens.tokenise("329 * #chan 1584041889")) self.assertEqual(server.channels["#chan"].created, dt)
def test_set_time(self): dt = datetime(2020, 3, 12, 14, 27, 57) server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname")) server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan")) server.parse_tokens(irctokens.tokenise("333 * #chan other 1584023277")) self.assertEqual(server.channels["#chan"].topic_time, dt)
def test_self_part(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan")) server.parse_tokens(irctokens.tokenise(":nickname PART #chan")) self.assertEqual(len(server.users), 0) self.assertEqual(len(server.channels), 0)
def test_two_del(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("CAP * LS :a b")) server.parse_tokens(irctokens.tokenise("CAP * ACK :a b")) server.parse_tokens(irctokens.tokenise("CAP * DEL :a b")) self.assertEqual(server.available_caps, {}) self.assertEqual(server.agreed_caps, [])
def test_monitor(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) self.assertIsNone(server.isupport.monitor) server.parse_tokens(irctokens.tokenise("005 * MONITOR=123 *")) self.assertEqual(server.isupport.monitor, 123) server.parse_tokens(irctokens.tokenise("005 * MONITOR *")) self.assertEqual(server.isupport.monitor, -1)
def test_excepts(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) self.assertIsNone(server.isupport.excepts) server.parse_tokens(irctokens.tokenise("005 * EXCEPTS=U *")) self.assertEqual(server.isupport.excepts, "U") server.parse_tokens(irctokens.tokenise("005 * EXCEPTS *")) self.assertEqual(server.isupport.excepts, "e")
def test_watch(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) self.assertIsNone(server.isupport.watch) server.parse_tokens(irctokens.tokenise("005 * WATCH=123 *")) self.assertEqual(server.isupport.watch, 123) server.parse_tokens(irctokens.tokenise("005 * WATCH *")) self.assertEqual(server.isupport.watch, -1)
def test_modes(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) self.assertEqual(server.isupport.modes, 3) server.parse_tokens(irctokens.tokenise("005 * MODES *")) self.assertEqual(server.isupport.modes, -1) server.parse_tokens(irctokens.tokenise("005 * MODES=5 *")) self.assertEqual(server.isupport.modes, 5)
def test_invex(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) self.assertIsNone(server.isupport.invex) server.parse_tokens(irctokens.tokenise("005 * INVEX=U *")) self.assertEqual(server.isupport.invex, "U") server.parse_tokens(irctokens.tokenise("005 * INVEX *")) self.assertEqual(server.isupport.invex, "I")
def test_callerid(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) self.assertIsNone(server.isupport.callerid) server.parse_tokens(irctokens.tokenise("005 * CALLERID=U *")) self.assertEqual(server.isupport.callerid, "U") server.parse_tokens(irctokens.tokenise("005 * CALLERID *")) self.assertEqual(server.isupport.callerid, "g")
def test(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) server.parse_tokens(irctokens.tokenise("375 * :start of motd")) server.parse_tokens(irctokens.tokenise("372 * :first line of motd")) server.parse_tokens(irctokens.tokenise("372 * :second line of motd")) self.assertEqual( server.motd, ["start of motd", "first line of motd", "second line of motd"])
def test_set_by_at(self): dt = pendulum.datetime(2020, 3, 12, 14, 27, 57) server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan")) server.parse_tokens(irctokens.tokenise("333 * #chan other 1584023277")) channel = server.channels["#chan"] self.assertEqual(channel.topic_setter, "other") self.assertEqual(channel.topic_time, dt)
def test_other_join(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname")) server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan")) server.parse_tokens(irctokens.tokenise(":other JOIN #chan")) self.assertEqual(len(server.users), 2) self.assertIn("other", server.users) self.assertEqual(len(server.user_channels), 2) self.assertEqual(len(server.channel_users), 1)
def test_without_extended_join(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan")) self.assertIsNone(server.account) self.assertIsNone(server.realname) server.parse_tokens(irctokens.tokenise(":other JOIN #chan")) user = server.users["other"] self.assertIsNone(user.account) self.assertIsNone(user.realname)
def test_loggedout(self): server = ircstates.Server("test") server.parse_tokens( irctokens.tokenise("900 * nick!user@host account *")) server.parse_tokens(irctokens.tokenise("901 * nick1!user1@host1 *")) self.assertEqual(server.nickname, "nick1") self.assertEqual(server.username, "user1") self.assertEqual(server.hostname, "host1") self.assertEqual(server.account, None)
def test_other_change(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname")) server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan")) server.parse_tokens(irctokens.tokenise(":other JOIN #chan")) self.assertIn("other", server.users) server.parse_tokens(irctokens.tokenise(":other NICK other2")) self.assertNotIn("other", server.users) self.assertIn("other2", server.users)
def test_without_account(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan")) server.parse_tokens(irctokens.tokenise(":nickname ACCOUNT *")) self.assertEqual(server.account, "") server.parse_tokens(irctokens.tokenise(":other JOIN #chan")) server.parse_tokens(irctokens.tokenise(":other ACCOUNT *")) user = server.users["other"] self.assertEqual(user.account, "")
def test(self): d = irctokens.StatefulDecoder() lines = d.push(b"PRIVMSG #channel1 hello\r\n" b"PRIVMSG #channel2 hello\r\n") self.assertEqual(len(lines), 2) line1 = irctokens.tokenise("PRIVMSG #channel1 hello") line2 = irctokens.tokenise("PRIVMSG #channel2 hello") self.assertEqual(lines[0], line1) self.assertEqual(lines[1], line2)
def test_mode_self(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) emit = server.parse_tokens( irctokens.tokenise("MODE nickname x+i-i+wi-wi")) self.assertIsNotNone(emit) self.assertEqual(emit.command, "MODE") self.assertTrue(emit.self_target) self.assertEqual(emit.tokens, ["+x", "+i", "-i", "+w", "+i", "-w", "-i"])
def test_nick(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan")) user = server.users["nickname"] server.parse_tokens(irctokens.tokenise(":nickname NICK NewNickname")) self.assertEqual(len(server.users), 1) self.assertIn("newnickname", server.users) self.assertEqual(user.nickname, "NewNickname") self.assertEqual(user.nickname_lower, "newnickname") self.assertEqual(server.nickname, "NewNickname") self.assertEqual(server.nickname_lower, "newnickname")
def test_other_join(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan")) server.parse_tokens(irctokens.tokenise(":other JOIN #chan")) self.assertEqual(len(server.users), 2) self.assertIn("other", server.users) channel = server.channels["#chan"] self.assertEqual(len(channel.users), 2) user = server.users["other"] self.assertEqual(user.channels, set([channel.name_lower]))
def test_userhost_in_names(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan")) server.parse_tokens( irctokens.tokenise( "353 * * #chan :nickname!user@host other!user2@host2")) self.assertEqual(server.username, "user") self.assertEqual(server.hostname, "host") user = server.users["other"] self.assertEqual(user.username, "user2") self.assertEqual(user.hostname, "host2")
def test_with_account(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) server.parse_tokens( irctokens.tokenise(":nickname JOIN #chan acc :realname")) self.assertEqual(server.account, "acc") self.assertEqual(server.realname, "realname") server.parse_tokens( irctokens.tokenise(":other JOIN #chan acc2 :realname2")) user = server.users["other"] self.assertEqual(user.account, "acc2") self.assertEqual(user.realname, "realname2")
def test_verb_unset(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan")) user = server.users["nickname"] server.parse_tokens( irctokens.tokenise( ":nickname AWAY :let's blow this popsicle stand")) server.parse_tokens(irctokens.tokenise(":nickname AWAY")) self.assertIsNone(server.away) self.assertIsNone(user.away)
def test_verb_set(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan")) user = server.users["nickname"] self.assertIsNone(server.away) self.assertIsNone(user.away) server.parse_tokens(irctokens.tokenise(":nickname AWAY :ik ga weg")) self.assertEqual(server.away, "ik ga weg") self.assertEqual(user.away, "ik ga weg")
def test_chanmodes(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) self.assertEqual(server.isupport.chanmodes.a_modes, ["b"]) self.assertEqual(server.isupport.chanmodes.b_modes, ["k"]) self.assertEqual(server.isupport.chanmodes.c_modes, ["l"]) self.assertEqual(server.isupport.chanmodes.d_modes, ["i", "m", "n", "p", "s", "t"]) server.parse_tokens(irctokens.tokenise("005 * CHANMODES=a,b,c,d *")) self.assertEqual(server.isupport.chanmodes.a_modes, ["a"]) self.assertEqual(server.isupport.chanmodes.b_modes, ["b"]) self.assertEqual(server.isupport.chanmodes.c_modes, ["c"]) self.assertEqual(server.isupport.chanmodes.d_modes, ["d"])
def test(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan")) user = server.users["nickname"] channel = server.channels["#chan"] channel_user = channel.users[user.nickname_lower] server.parse_tokens(irctokens.tokenise(":nickname NICK Nickname2")) self.assertEqual(channel.users, {user.nickname_lower: channel_user}) self.assertEqual(channel_user.nickname, "Nickname2") self.assertEqual(channel_user.nickname_lower, "nickname2")
def test_mode_channel(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan")) channel = server.channels["#chan"] emit = server.parse_tokens( irctokens.tokenise(":server MODE #chan +im-m+b-k asd!*@* key")) self.assertIsNotNone(emit) self.assertEqual(emit.command, "MODE") self.assertEqual(emit.channel, channel) self.assertEqual(emit.tokens, ["+i", "+m", "-m", "+b asd!*@*", "-k key"])
def test_host(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) server.parse_tokens(irctokens.tokenise(":nickname@host JOIN #chan")) self.assertIsNone(server.username) self.assertEqual(server.hostname, "host") server.parse_tokens(irctokens.tokenise(":other@host JOIN #chan")) user = server.users["other"] self.assertIsNone(user.username) self.assertEqual(user.hostname, "host") self.assertIsNone(user.userhost()) self.assertEqual(user.hostmask(), "other@host")
def test_numeric(self): server = ircstates.Server("test") server.parse_tokens(irctokens.tokenise("001 nickname *")) server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan")) user = server.users["nickname"] self.assertIsNone(server.away) self.assertIsNone(user.away) server.parse_tokens( irctokens.tokenise("301 * nickname :i saw something shiny")) self.assertEqual(server.away, "i saw something shiny") self.assertEqual(user.away, "i saw something shiny")