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

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

# A command that's not a PRIVMSG or NOTICE shouldn't be parsed.
reset_vars
IRC_COMMAND="TOPIC"
IRC_TEXT=$'\001ACTION waves\001'
irc_ctcpparse
assert_equal "$IRC_COMMAND" "TOPIC"
assert_equal "$IRC_TEXT" $'\001ACTION waves\001'

# A PRIVMSG that doesn't start with ^A shouldn't be parsed.
reset_vars
IRC_COMMAND="PRIVMSG"
IRC_TEXT=$'ACTION waves\001'
irc_ctcpparse
assert_equal "$IRC_COMMAND" "PRIVMSG"
assert_equal "$IRC_TEXT" $'ACTION waves\001'

# A PRIVMSG that doesn't end with ^A shouldn't be parsed.
reset_vars
IRC_COMMAND="PRIVMSG"
IRC_TEXT=$'\001ACTION waves'
irc_ctcpparse
assert_equal "$IRC_COMMAND" "PRIVMSG"
assert_equal "$IRC_TEXT" $'\001ACTION waves'

# As above, but for NOTICEs.
reset_vars
IRC_COMMAND="NOTICE"
IRC_TEXT=$'ACTION waves\001'
irc_ctcpparse
assert_equal "$IRC_COMMAND" "NOTICE"
assert_equal "$IRC_TEXT" $'ACTION waves\001'

reset_vars
IRC_COMMAND="NOTICE"
IRC_TEXT=$'\001ACTION waves'
irc_ctcpparse
assert_equal "$IRC_COMMAND" "NOTICE"
assert_equal "$IRC_TEXT" $'\001ACTION waves'

# A PRIVMSG that starts and ends with ^A should be parsed as a request.
reset_vars
IRC_COMMAND="PRIVMSG"
IRC_TEXT=$'\001ACTION waves\001'
irc_ctcpparse
assert_equal "$IRC_COMMAND" "ACTION_REQ"
assert_equal "$IRC_TEXT" "waves"

# A NOTICE that starts and ends with ^A should be parsed as a response.
reset_vars
IRC_COMMAND="NOTICE"
IRC_TEXT=$'\001ACTION waves\001'
irc_ctcpparse
assert_equal "$IRC_COMMAND" "ACTION_RSP"
assert_equal "$IRC_TEXT" "waves"

# Make sure we correctly parse CTCP commands with no payload.
IRC_COMMAND="NOTICE"
IRC_TEXT=$'\001FOO \001'
irc_ctcpparse
assert_equal "$IRC_COMMAND" "FOO_RSP"
assert_equal "$IRC_TEXT" ""

IRC_COMMAND="NOTICE"
IRC_TEXT=$'\001FOO\001'
irc_ctcpparse
assert_equal "$IRC_COMMAND" "FOO_RSP"
assert_equal "$IRC_TEXT" ""

# When parsing, "\a" should be replaced with "^A".
reset_vars
IRC_COMMAND="NOTICE"
IRC_TEXT=$'\001FOO hello\\aworld\001'
irc_ctcpparse
assert_equal "$IRC_COMMAND" "FOO_RSP"
assert_equal "$IRC_TEXT" $'hello\001world'

# When parsing, "\\" should be replaced with "\".
reset_vars
IRC_COMMAND="NOTICE"
IRC_TEXT=$'\001FOO hello\\\\world\001'
irc_ctcpparse
assert_equal "$IRC_COMMAND" "FOO_RSP"
assert_equal "$IRC_TEXT" $'hello\\world'

# Any other character is dequoted to itself.
reset_vars
IRC_COMMAND="NOTICE"
IRC_TEXT=$'\001FOO hello\\bworld\001'
irc_ctcpparse
assert_equal "$IRC_COMMAND" "FOO_RSP"
assert_equal "$IRC_TEXT" $'hellobworld'

# Although this text includes "\a", there should be no ^A in the output.
reset_vars
IRC_COMMAND="NOTICE"
IRC_TEXT=$'\001FOO hello\\\\aworld\001'
irc_ctcpparse
assert_equal "$IRC_COMMAND" "FOO_RSP"
assert_equal "$IRC_TEXT" $'hello\\aworld'

