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

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

# irc_tokenise handles a command with no prefix or parameters
reset_vars
irc_tokenise $'FOO\r\n'
assert_equal "$IRC_PREFIX" ""
assert_equal "$IRC_COMMAND" "FOO"
assert_equal "${#IRC_PARAMS[*]}" "0"

# irc_tokenise automatically converts the command to upper case.
reset_vars
irc_tokenise $'foo\r\n'
assert_equal "$IRC_PREFIX" ""
assert_equal "$IRC_COMMAND" "FOO"
assert_equal "${#IRC_PARAMS[*]}" "0"

# irc_tokenise handles a command with only a \r line terminator.
# This is shell, we're bound to lose newlines occasionally.
reset_vars
irc_tokenise $'FOO\r'
assert_equal "$IRC_PREFIX" ""
assert_equal "$IRC_COMMAND" "FOO"
assert_equal "${#IRC_PARAMS[*]}" "0"

# irc_tokenise notices and parses a prefix.
reset_vars
irc_tokenise $':prefix FOO\r\n'
assert_equal "$IRC_PREFIX" "prefix"
assert_equal "$IRC_COMMAND" "FOO"
assert_equal "${#IRC_PARAMS[*]}" "0"

# irc_tokenise handles a command with one parameter.
reset_vars
irc_tokenise $':prefix FOO bar\r\n'
assert_equal "$IRC_PREFIX" "prefix"
assert_equal "$IRC_COMMAND" "FOO"
assert_equal "${#IRC_PARAMS[*]}" "1"
assert_equal "${IRC_PARAMS[0]}" "bar"

# irc_tokenise handles multiple parameter tokens.
reset_vars
irc_tokenise $':prefix FOO bar qux\r\n'
assert_equal "$IRC_PREFIX" "prefix"
assert_equal "$IRC_COMMAND" "FOO"
assert_equal "${#IRC_PARAMS[*]}" "2"
assert_equal "${IRC_PARAMS[0]}" "bar"
assert_equal "${IRC_PARAMS[1]}" "qux"

# irc_tokenise recognises the ":" parameter delimiter.
reset_vars
irc_tokenise $':prefix FOO bar qux :parameter with spaces\r\n'
assert_equal "$IRC_PREFIX" "prefix"
assert_equal "$IRC_COMMAND" "FOO"
assert_equal "${#IRC_PARAMS[*]}" "3"
assert_equal "${IRC_PARAMS[0]}" "bar"
assert_equal "${IRC_PARAMS[1]}" "qux"
assert_equal "${IRC_PARAMS[2]}" "parameter with spaces"

# irc_tokenise recognises the ":" parameter delimiter even without spaces.
irc_tokenise $':prefix FOO bar qux :parameter\r\n'
assert_equal "$IRC_PREFIX" "prefix"
assert_equal "$IRC_COMMAND" "FOO"
assert_equal "${#IRC_PARAMS[*]}" "3"
assert_equal "${IRC_PARAMS[0]}" "bar"
assert_equal "${IRC_PARAMS[1]}" "qux"
assert_equal "${IRC_PARAMS[2]}" "parameter"
