#!/bin/bash
cd $(dirname "$0")

source util.sh
PATH=".." source irc.sh

# The MOTD is sent to our nick, so we can use it to figure out what nick we've
# got.
reset_vars
irc_parse $':server 001 botnick :Welcome to FakeNet!\r\n' > /dev/null
assert_equal "$IRC_PREFIX" "server"
assert_equal "$IRC_COMMAND" "$RPL_WELCOME"
assert_equal "$IRC_SENDER" "server"
assert_equal "$IRC_CHANNEL" ""
assert_equal "$IRC_TEXT" "Welcome to FakeNet!"
assert_equal "$IRC_BOTID" ""
assert_equal "$IRC_BOTNICK" "botnick"

# When we find out what our nick is, we can use it to look up our full ID.
output=$(irc_parse $':server 001 botnick :Welcome to FakeNet!\r\n')
assert_equal "$output" "WHOIS botnick"

# If we get a WHOIS response describing ourselves, we can use it to set
# $IRC_BOTID.
reset_vars
irc_parse $':server 311 botnick botnick ~user hostname * :Real Name'
assert_equal "$IRC_SENDER" "server"
assert_equal "$IRC_CHANNEL" ""
assert_equal "$IRC_TEXT" ""
assert_equal "$IRC_BOTID" "botnick!~user@hostname"
assert_equal "$IRC_BOTNICK" "botnick"

# Somebody joined a channel.
reset_vars
irc_parse $':Somebody!~user@host JOIN :#channel\r\n'
assert_equal "$IRC_PREFIX" "Somebody!~user@host"
assert_equal "$IRC_COMMAND" "JOIN"
assert_equal "$IRC_SENDER" "Somebody"
assert_equal "$IRC_CHANNEL" "#channel"
assert_equal "$IRC_TEXT" "#channel"
assert_equal "$IRC_BOTID" ""

# Channel PRIVMSG
reset_vars
irc_parse $':Sender!~user@host PRIVMSG #channel :Channel message.\r\n'
assert_equal "$IRC_PREFIX" "Sender!~user@host"
assert_equal "$IRC_COMMAND" "PRIVMSG"
assert_equal "$IRC_SENDER" "Sender"
assert_equal "$IRC_CHANNEL" "#channel"
assert_equal "$IRC_TEXT" "Channel message."
assert_equal "$IRC_BOTID" ""

# Private PRIVMSG
reset_vars
irc_parse $':Sender!~user@host PRIVMSG botnick :Private message.\r\n'
assert_equal "$IRC_PREFIX" "Sender!~user@host"
assert_equal "$IRC_COMMAND" "PRIVMSG"
assert_equal "$IRC_SENDER" "Sender"
assert_equal "$IRC_CHANNEL" "Sender"
assert_equal "$IRC_TEXT" "Private message."
assert_equal "$IRC_BOTID" ""

# Channel NOTICE
reset_vars
irc_parse $':Sender!~user@host NOTICE #channel :Channel notice.\r\n'
assert_equal "$IRC_PREFIX" "Sender!~user@host"
assert_equal "$IRC_COMMAND" "NOTICE"
assert_equal "$IRC_SENDER" "Sender"
assert_equal "$IRC_CHANNEL" "#channel"
assert_equal "$IRC_TEXT" "Channel notice."
assert_equal "$IRC_BOTID" ""

# Private NOTICE
reset_vars
irc_parse $':Sender!~user@host NOTICE botnick :Private notice.\r\n'
assert_equal "$IRC_PREFIX" "Sender!~user@host"
assert_equal "$IRC_COMMAND" "NOTICE"
assert_equal "$IRC_SENDER" "Sender"
assert_equal "$IRC_CHANNEL" "Sender"
assert_equal "$IRC_TEXT" "Private notice."
assert_equal "$IRC_BOTID" ""

# Somebody changed their nick.
reset_vars
irc_parse $':OldName!~user@host NICK :NewName\r\n'
assert_equal "$IRC_PREFIX" "OldName!~user@host"
assert_equal "$IRC_COMMAND" "NICK"
assert_equal "$IRC_SENDER" "OldName"
assert_equal "$IRC_CHANNEL" ""
assert_equal "$IRC_TEXT" "NewName"
assert_equal "$IRC_BOTID" ""

# Our nick changed. We need to make sure we update $IRC_BOTID to match our new
# ID.
reset_vars
IRC_BOTID="botnick!~user@host"
irc_parse $':botnick!~user@host NICK :newnick\r\n'
assert_equal "$IRC_PREFIX" "botnick!~user@host"
assert_equal "$IRC_COMMAND" "NICK"
assert_equal "$IRC_SENDER" "botnick"
assert_equal "$IRC_CHANNEL" ""
assert_equal "$IRC_TEXT" "newnick"
assert_equal "$IRC_BOTID" "newnick!~user@host"

# Somebody got op'd.
reset_vars
irc_parse $':ChanServ!user@host MODE #channel +o Somebody\r\n'
assert_equal "$IRC_PREFIX" "ChanServ!user@host"
assert_equal "$IRC_COMMAND" "MODE"
assert_equal "$IRC_SENDER" "ChanServ"
assert_equal "$IRC_CHANNEL" "#channel"
assert_equal "$IRC_TEXT" "+o Somebody"
assert_equal "$IRC_BOTID" ""

# Somebody left the channel.
reset_vars
irc_parse $':Somebody!~user@host PART #channel\r\n'
assert_equal "$IRC_PREFIX" "Somebody!~user@host"
assert_equal "$IRC_COMMAND" "PART"
assert_equal "$IRC_SENDER" "Somebody"
assert_equal "$IRC_CHANNEL" "#channel"
assert_equal "$IRC_TEXT" ""
assert_equal "$IRC_BOTID" ""

# Somebody changed the topic.
reset_vars
irc_parse $':Somebody!~user@host TOPIC #channel :New topic\r\n'
assert_equal "$IRC_PREFIX" "Somebody!~user@host"
assert_equal "$IRC_COMMAND" "TOPIC"
assert_equal "$IRC_SENDER" "Somebody"
assert_equal "$IRC_CHANNEL" "#channel"
assert_equal "$IRC_TEXT" "New topic"
assert_equal "$IRC_BOTID" ""

