[TASK] Add lots of tests, more to come.
This commit is contained in:
parent
7dd600d1b3
commit
b8e65a8e71
|
@ -2,20 +2,22 @@
|
||||||
|
|
||||||
def parse(line):
|
def parse(line):
|
||||||
prefix = ""
|
prefix = ""
|
||||||
|
subject = ""
|
||||||
|
trailing = ""
|
||||||
|
command = ""
|
||||||
|
params = ""
|
||||||
if line[0:1] == ":":
|
if line[0:1] == ":":
|
||||||
prefix = ":"
|
prefix = ":"
|
||||||
subject, line = line.split(" ", 1)
|
line = line[1:]
|
||||||
subject = subject[1:]
|
if " " in line:
|
||||||
else:
|
subject, line = line.split(" ", 1)
|
||||||
subject = ""
|
|
||||||
if " :" in line:
|
if " :" in line:
|
||||||
tmp_str, trailing = line.split(" :", 1)
|
line, trailing = line.split(" :", 1)
|
||||||
tmp_args = tmp_str.split()
|
if " " in line:
|
||||||
|
command, *middle = line.split()
|
||||||
|
params = middle[:]
|
||||||
else:
|
else:
|
||||||
trailing = ""
|
command = line
|
||||||
tmp_args = line.split()
|
|
||||||
command, *middle = tmp_args
|
|
||||||
params = middle[:]
|
|
||||||
# Now prepare parsing the subject if possible.
|
# Now prepare parsing the subject if possible.
|
||||||
if subject != "" and "!" in subject:
|
if subject != "" and "!" in subject:
|
||||||
s_nick, s_identname = subject.split("!", 1)
|
s_nick, s_identname = subject.split("!", 1)
|
||||||
|
@ -24,7 +26,7 @@ def parse(line):
|
||||||
s_identname = s_identname.strip("~")
|
s_identname = s_identname.strip("~")
|
||||||
else:
|
else:
|
||||||
s_nick = s_identname = s_host = subject
|
s_nick = s_identname = s_host = subject
|
||||||
return {
|
result = {
|
||||||
"prefix": prefix,
|
"prefix": prefix,
|
||||||
"subject": subject,
|
"subject": subject,
|
||||||
"command": command,
|
"command": command,
|
||||||
|
@ -34,6 +36,7 @@ def parse(line):
|
||||||
"ident": s_identname,
|
"ident": s_identname,
|
||||||
"host": s_host
|
"host": s_host
|
||||||
}
|
}
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
class Message(object):
|
class Message(object):
|
||||||
|
@ -88,7 +91,7 @@ class Message(object):
|
||||||
e.append(":{}".format(data["trailing"]))
|
e.append(":{}".format(data["trailing"]))
|
||||||
result = " ".join(e)
|
result = " ".join(e)
|
||||||
if data["prefix"]:
|
if data["prefix"]:
|
||||||
result = "".join([data["prefix"], result])
|
result = data["prefix"] + result
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def get(self, attr):
|
def get(self, attr):
|
||||||
|
@ -142,16 +145,24 @@ class Nick(Message, metaclass=register_derivative):
|
||||||
self.nick = self.get("trailing")
|
self.nick = self.get("trailing")
|
||||||
|
|
||||||
class Ping(Message, metaclass=register_derivative):
|
class Ping(Message, metaclass=register_derivative):
|
||||||
|
def __init__(self, payload="", *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
if "data" not in kwargs:
|
||||||
|
self.update({
|
||||||
|
"command": "PING",
|
||||||
|
"trailing": payload
|
||||||
|
})
|
||||||
def parse(self):
|
def parse(self):
|
||||||
self.payload = self.get("trailing")
|
self.payload = self.get("trailing")
|
||||||
|
|
||||||
class Pong(Message, metaclass=register_derivative):
|
class Pong(Message, metaclass=register_derivative):
|
||||||
def __init__(self, ping="", *args, **kwargs):
|
def __init__(self, ping="", payload="", *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
if "data" not in kwargs:
|
if "data" not in kwargs:
|
||||||
|
if ping: payload = ping.data["trailing"]
|
||||||
self.update({
|
self.update({
|
||||||
"command": "PONG",
|
"command": "PONG",
|
||||||
"trailing": ping.data["trailing"]
|
"trailing": payload
|
||||||
})
|
})
|
||||||
def parse(self):
|
def parse(self):
|
||||||
self.payload = self.get("trailing")
|
self.payload = self.get("trailing")
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
from piebot import irc
|
||||||
|
|
||||||
|
|
||||||
|
class Message(unittest.TestCase):
|
||||||
|
|
||||||
|
def test_parse_user(self):
|
||||||
|
raw = "USER ident * * :real name"
|
||||||
|
msg = irc.Message.from_string(raw)
|
||||||
|
self.assertIsInstance(msg, irc.User, msg="Not a User!")
|
||||||
|
self.assertEqual(msg.ident, "ident")
|
||||||
|
self.assertEqual(msg.realname, "real name")
|
||||||
|
|
||||||
|
def test_construct_user(self):
|
||||||
|
msg = irc.User(ident="hans", realname="peter blubber")
|
||||||
|
self.assertEqual(str(msg), "USER hans * * :peter blubber")
|
||||||
|
|
||||||
|
|
||||||
|
def test_parse_nick(self):
|
||||||
|
raw = ":oldnick!~somebody@internet.org NICK :newnick"
|
||||||
|
msg = irc.Message.from_string(raw)
|
||||||
|
self.assertIsInstance(msg, irc.Nick, msg="Not a Nick!")
|
||||||
|
self.assertEqual(msg.old_nick, "oldnick")
|
||||||
|
self.assertEqual(msg.nick, "newnick")
|
||||||
|
|
||||||
|
def test_construct_nick(self):
|
||||||
|
msg = irc.Nick(nick="foobar")
|
||||||
|
self.assertEqual(str(msg), "NICK :foobar")
|
||||||
|
|
||||||
|
|
||||||
|
def test_parse_ping(self):
|
||||||
|
raw = "PING :payload"
|
||||||
|
msg = irc.Message.from_string(raw)
|
||||||
|
self.assertIsInstance(msg, irc.Ping, msg="Not a Ping!")
|
||||||
|
self.assertEqual(msg.payload, "payload")
|
||||||
|
|
||||||
|
def test_construct_ping(self):
|
||||||
|
msg = irc.Ping("payload")
|
||||||
|
self.assertEqual(str(msg), "PING :payload")
|
||||||
|
|
||||||
|
|
||||||
|
def test_parse_pong(self):
|
||||||
|
raw = "PONG :doalyap"
|
||||||
|
msg = irc.Message.from_string(raw)
|
||||||
|
self.assertIsInstance(msg, irc.Pong, msg="Not a Pong!")
|
||||||
|
self.assertEqual(msg.payload, "doalyap")
|
||||||
|
|
||||||
|
def test_construct_pong(self):
|
||||||
|
msg = irc.Pong(payload="payload")
|
||||||
|
self.assertEqual(str(msg), "PONG :payload")
|
||||||
|
|
||||||
|
|
||||||
|
def test_parse_privmsg(self):
|
||||||
|
raw = ":this!~is@spart.aaa PRIVMSG #target :whoop dee doo!"
|
||||||
|
msg = irc.Message.from_string(raw)
|
||||||
|
self.assertIsInstance(msg, irc.Privmsg, msg="Not a Privmsg!")
|
||||||
|
self.assertEqual(msg.source, "this")
|
||||||
|
self.assertEqual(msg.target, "#target")
|
||||||
|
self.assertEqual(msg.message, "whoop dee doo!")
|
||||||
|
|
||||||
|
def test_construct_privmsg(self):
|
||||||
|
msg = irc.Privmsg(target="#example", message="How dee ho!")
|
||||||
|
self.assertEqual(str(msg), "PRIVMSG #example :How dee ho!")
|
||||||
|
|
||||||
|
|
||||||
|
def test_parse_notice(self):
|
||||||
|
raw = ":john!~secret@agents.de NOTICE this_is_you :bleep bleep!"
|
||||||
|
msg = irc.Message.from_string(raw)
|
||||||
|
self.assertIsInstance(msg, irc.Notice, msg="Not a Notice!")
|
||||||
|
self.assertEqual(msg.source, "john")
|
||||||
|
self.assertEqual(msg.target, "this_is_you")
|
||||||
|
self.assertEqual(msg.message, "bleep bleep!")
|
||||||
|
|
||||||
|
def test_construct_notice(self):
|
||||||
|
msg = irc.Notice(target="#somewhere", message="wheee eee!")
|
||||||
|
self.assertEqual(str(msg), "NOTICE #somewhere :wheee eee!")
|
||||||
|
|
|
@ -1,10 +1,46 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import unittest
|
import unittest
|
||||||
from piebot import irc
|
from piebot import irc
|
||||||
|
|
||||||
class TestParser(unittest.TestCase):
|
|
||||||
|
|
||||||
def test_test(self):
|
class Parser(unittest.TestCase):
|
||||||
source = ":irc.inn.at.euirc.net 001 JPT|NC :Welcome to the euIRCnet IRC Network JPT|NC!~AS@dslc-082-082-091-237.pools.arcor-ip.net"
|
|
||||||
msg = irc.Message.from_string(source)
|
def test_parse_generic_message_one(self):
|
||||||
created = str(msg)
|
raw = ":someserver.net 123 one two three :Let's parse a generic formatted msg!"
|
||||||
self.assertEqual(source, created)
|
msg = irc.Message.from_string(raw)
|
||||||
|
self.assertEqual(str(msg), raw, msg="String representation does not match!")
|
||||||
|
self.assertEqual(msg.get("prefix"), ":", msg="Incorrect prefix!")
|
||||||
|
self.assertEqual(msg.get("subject"), "someserver.net", msg="Incorrect subject!")
|
||||||
|
self.assertEqual(msg.get("command"), "123", msg="Incorrect command!")
|
||||||
|
self.assertEqual(msg.get("params"), ["one", "two", "three"], msg="Incorrect params!")
|
||||||
|
self.assertEqual(msg.get("trailing"), "Let's parse a generic formatted msg!", msg="Incorrect trailing!")
|
||||||
|
self.assertEqual(msg.get("nick"), "someserver.net", msg="Incorrect nick!")
|
||||||
|
self.assertEqual(msg.get("ident"), "someserver.net", msg="Incorrect ident!")
|
||||||
|
self.assertEqual(msg.get("host"), "someserver.net", msg="Incorrect host!")
|
||||||
|
|
||||||
|
def test_parse_generic_message_two(self):
|
||||||
|
raw = ":ralf!~wiggum@simpsons.net PRIVMSG #channel :duck duck duck duck"
|
||||||
|
msg = irc.Message.from_string(raw)
|
||||||
|
self.assertEqual(str(msg), raw, msg="String representation does not match!")
|
||||||
|
self.assertEqual(msg.get("prefix"), ":", msg="Incorrect prefix!")
|
||||||
|
self.assertEqual(msg.get("subject"), "ralf!~wiggum@simpsons.net", msg="Incorrect subject!")
|
||||||
|
self.assertEqual(msg.get("command"), "PRIVMSG", msg="Incorrect command!")
|
||||||
|
self.assertEqual(msg.get("params"), ["#channel"], msg="Incorrect params!")
|
||||||
|
self.assertEqual(msg.get("trailing"), "duck duck duck duck", msg="Incorrect trailing!")
|
||||||
|
self.assertEqual(msg.get("nick"), "ralf", msg="Incorrect nick!")
|
||||||
|
self.assertEqual(msg.get("ident"), "wiggum", msg="Incorrect ident!")
|
||||||
|
self.assertEqual(msg.get("host"), "simpsons.net", msg="Incorrect host!")
|
||||||
|
|
||||||
|
def test_parse_generic_message_three(self):
|
||||||
|
raw = ":peter!~per@griffin.com MODE peter +ix"
|
||||||
|
msg = irc.Message.from_string(raw)
|
||||||
|
self.assertEqual(str(msg), raw, msg="String representation does not match!")
|
||||||
|
self.assertEqual(msg.get("prefix"), ":", msg="Incorrect prefix!")
|
||||||
|
self.assertEqual(msg.get("subject"), "peter!~per@griffin.com", msg="Incorrect subject!")
|
||||||
|
self.assertEqual(msg.get("command"), "MODE", msg="Incorrect command!")
|
||||||
|
self.assertEqual(msg.get("params"), ["peter", "+ix"], msg="Incorrect params!")
|
||||||
|
self.assertEqual(msg.get("trailing"), "", msg="Incorrect trailing!")
|
||||||
|
self.assertEqual(msg.get("nick"), "peter", msg="Incorrect nick!")
|
||||||
|
self.assertEqual(msg.get("ident"), "per", msg="Incorrect ident!")
|
||||||
|
self.assertEqual(msg.get("host"), "griffin.com", msg="Incorrect host!")
|
||||||
|
|
Loading…
Reference in New Issue