ircstates/test/mode.py

191 lines
8.3 KiB
Python

import unittest
import ircstates, irctokens
class ModeTestUMode(unittest.TestCase):
def test_add(self):
server = ircstates.Server("test")
server.parse_tokens(irctokens.tokenise("001 nickname *"))
server.parse_tokens(irctokens.tokenise("MODE nickname +i"))
self.assertEqual(server.modes, {"i"})
def test_remove(self):
server = ircstates.Server("test")
server.parse_tokens(irctokens.tokenise("001 nickname *"))
server.parse_tokens(irctokens.tokenise("MODE nickname +i"))
server.parse_tokens(irctokens.tokenise("MODE nickname -i"))
self.assertEqual(server.modes, set())
class ModeTestChannelPrefix(unittest.TestCase):
def test_add(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("MODE #chan +ov nickname nickname"))
user = server.users["nickname"]
channel = server.channels["#chan"]
channel_user = channel.users[user.nickname_lower]
self.assertEqual(channel_user.modes, {"o", "v"})
def test_remove(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("MODE #chan +ov nickname nickname"))
server.parse_tokens(
irctokens.tokenise("MODE #chan -ov nickname nickname"))
user = server.users["nickname"]
channel = server.channels["#chan"]
channel_user = channel.users[user.nickname_lower]
self.assertEqual(channel_user.modes, set())
class ModeTestChannelList(unittest.TestCase):
def test_add(self):
server = ircstates.Server("test")
server.parse_tokens(irctokens.tokenise("001 nickname *"))
server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan"))
channel = server.channels["#chan"]
self.assertEqual(channel.list_modes, {"b": []})
server.parse_tokens(irctokens.tokenise("MODE #chan +b asd!*@*"))
self.assertEqual(channel.list_modes, {"b": ["asd!*@*"]})
server.parse_tokens(irctokens.tokenise("MODE #chan -b asd!*@*"))
self.assertEqual(channel.list_modes, {"b": []})
def test_remove(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("MODE #chan +b asd!*@*"))
server.parse_tokens(irctokens.tokenise("MODE #chan +b dsa!*@*"))
server.parse_tokens(irctokens.tokenise("MODE #chan -b asd!*@*"))
channel = server.channels["#chan"]
self.assertEqual(channel.list_modes, {"b": ["dsa!*@*"]})
def test_banlist(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("367 * #chan *!*@host setby 1594477713"))
server.parse_tokens(
irctokens.tokenise("367 * #chan $a:account setby 1594477713"))
server.parse_tokens(
irctokens.tokenise("367 * #chan r:my*gecos"))
server.parse_tokens(irctokens.tokenise("368 * #chan *"))
channel = server.channels["#chan"]
self.assertEqual(
channel.list_modes["b"],
["*!*@host", "$a:account", "r:my*gecos"]
)
def test_quietlist(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("728 * #chan q q!*@host setby 1594477713"))
server.parse_tokens(
irctokens.tokenise("728 * #chan q $a:qaccount setby 1594477713"))
server.parse_tokens(
irctokens.tokenise("728 * #chan q r:q*my*gecos setby 1594477713"))
server.parse_tokens(irctokens.tokenise("729 * #chan q *"))
channel = server.channels["#chan"]
self.assertEqual(
channel.list_modes["q"],
["q!*@host", "$a:qaccount", "r:q*my*gecos"]
)
class ModeTestChannelTypeB(unittest.TestCase):
def test_add(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("MODE #chan +k password"))
channel = server.channels["#chan"]
self.assertEqual(channel.modes, {"k": "password"})
def test_remove(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("MODE #chan +k password"))
server.parse_tokens(irctokens.tokenise("MODE #chan -k *"))
channel = server.channels["#chan"]
self.assertEqual(channel.modes, {})
class ModeTestChannelTypeC(unittest.TestCase):
def test_add(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("MODE #chan +l 100"))
channel = server.channels["#chan"]
self.assertEqual(channel.modes, {"l": "100"})
def test_remove(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("MODE #chan +l 100"))
server.parse_tokens(irctokens.tokenise("MODE #chan -l"))
channel = server.channels["#chan"]
self.assertEqual(channel.modes, {})
class ModeTestChannelTypeD(unittest.TestCase):
def test_add(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("MODE #chan +i"))
channel = server.channels["#chan"]
self.assertEqual(channel.modes, {"i": None})
def test_remove(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("MODE #chan +i"))
server.parse_tokens(irctokens.tokenise("MODE #chan -i"))
channel = server.channels["#chan"]
self.assertEqual(channel.modes, {})
class ModeTestChannelNumeric(unittest.TestCase):
def test(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("324 * #chan +bkli *!*@* pass 10"))
channel = server.channels["#chan"]
self.assertEqual(channel.modes, {"k": "pass", "l": "10", "i": None})
self.assertEqual(channel.list_modes, {"b": ["*!*@*"]})
def test_without_plus(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("324 * #chan il 10"))
channel = server.channels["#chan"]
self.assertEqual(channel.modes, {"i": None, "l": "10"})
class ModeTestUserNumeric(unittest.TestCase):
def test(self):
server = ircstates.Server("test")
server.parse_tokens(irctokens.tokenise("001 nickname *"))
server.parse_tokens(irctokens.tokenise("221 * +iw"))
self.assertEqual(server.modes, {"i", "w"})
def test_without_plus(self):
server = ircstates.Server("test")
server.parse_tokens(irctokens.tokenise("001 nickname *"))
server.parse_tokens(irctokens.tokenise("221 * iw"))
self.assertEqual(server.modes, {"i", "w"})