mirror of https://github.com/fluffle/goirc
180 lines
4.5 KiB
Go
180 lines
4.5 KiB
Go
package client
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestCutNewLines(t *testing.T) {
|
|
tests := []struct{ in, out string }{
|
|
{"", ""},
|
|
{"foo bar", "foo bar"},
|
|
{"foo bar\rbaz", "foo bar"},
|
|
{"foo bar\nbaz", "foo bar"},
|
|
{"blorp\r\n\r\nbloop", "blorp"},
|
|
{"\n\rblaap", ""},
|
|
{"\r\n", ""},
|
|
{"boo\\r\\n\\n\r", "boo\\r\\n\\n"},
|
|
}
|
|
for i, test := range tests {
|
|
out := cutNewLines(test.in)
|
|
if test.out != out {
|
|
t.Errorf("test %d: expected %q, got %q", i, test.out, out)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestIndexFragment(t *testing.T) {
|
|
tests := []struct {
|
|
in string
|
|
out int
|
|
}{
|
|
{"", -1},
|
|
{"foobarbaz", -1},
|
|
{"foo bar baz", 8},
|
|
{"foo. bar baz", 5},
|
|
{"foo: bar baz", 5},
|
|
{"foo; bar baz", 5},
|
|
{"foo, bar baz", 5},
|
|
{"foo! bar baz", 5},
|
|
{"foo? bar baz", 5},
|
|
{"foo\" bar baz", 5},
|
|
{"foo' bar baz", 5},
|
|
{"foo. bar. baz beep", 10},
|
|
{"foo. bar, baz beep", 10},
|
|
}
|
|
for i, test := range tests {
|
|
out := indexFragment(test.in)
|
|
if test.out != out {
|
|
t.Errorf("test %d: expected %d, got %d", i, test.out, out)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestSplitMessage(t *testing.T) {
|
|
tests := []struct {
|
|
in string
|
|
sp int
|
|
out []string
|
|
}{
|
|
{"", 0, []string{""}},
|
|
{"foo", 0, []string{"foo"}},
|
|
{"foo bar baz beep", 0, []string{"foo bar ...", "baz beep"}},
|
|
{"foo bar baz beep", 13, []string{"foo bar baz ...", "beep"}},
|
|
{"foo. bar baz beep", 0, []string{"foo. ...", "bar baz ...", "beep"}},
|
|
{"foo bar, baz beep", 13, []string{"foo bar, ...", "baz beep"}},
|
|
{"0123456789012345", 0, []string{"0123456789...", "012345"}},
|
|
{"0123456789012345", 13, []string{"0123456789012...", "345"}},
|
|
{"0123456789012345", 20, []string{"0123456789012345"}},
|
|
}
|
|
for i, test := range tests {
|
|
out := splitMessage(test.in, test.sp)
|
|
if !reflect.DeepEqual(test.out, out) {
|
|
t.Errorf("test %d: expected %q, got %q", i, test.out, out)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestClientCommands(t *testing.T) {
|
|
c, s := setUp(t)
|
|
defer s.tearDown()
|
|
|
|
// Avoid having to type ridiculously long lines to test that
|
|
// messages longer than SplitLen are correctly sent to the server.
|
|
c.cfg.SplitLen = 20
|
|
|
|
c.Pass("password")
|
|
s.nc.Expect("PASS password")
|
|
|
|
c.Nick("test")
|
|
s.nc.Expect("NICK test")
|
|
|
|
c.User("test", "Testing IRC")
|
|
s.nc.Expect("USER test 12 * :Testing IRC")
|
|
|
|
c.Raw("JUST a raw :line")
|
|
s.nc.Expect("JUST a raw :line")
|
|
|
|
c.Join("#foo")
|
|
s.nc.Expect("JOIN #foo")
|
|
|
|
c.JoinWithKey("#foo", "bar")
|
|
s.nc.Expect("JOIN #foo bar")
|
|
|
|
c.Part("#foo")
|
|
s.nc.Expect("PART #foo")
|
|
c.Part("#foo", "Screw you guys...")
|
|
s.nc.Expect("PART #foo :Screw you guys...")
|
|
|
|
c.Quit()
|
|
s.nc.Expect("QUIT :GoBye!")
|
|
c.Quit("I'm going home.")
|
|
s.nc.Expect("QUIT :I'm going home.")
|
|
|
|
c.Whois("somebody")
|
|
s.nc.Expect("WHOIS somebody")
|
|
|
|
c.Who("*@some.host.com")
|
|
s.nc.Expect("WHO *@some.host.com")
|
|
|
|
c.Privmsg("#foo", "bar")
|
|
s.nc.Expect("PRIVMSG #foo :bar")
|
|
|
|
// 0123456789012345678901234567890123
|
|
c.Privmsg("#foo", "foo bar baz blorp. woo woobly woo.")
|
|
s.nc.Expect("PRIVMSG #foo :foo bar baz blorp. ...")
|
|
s.nc.Expect("PRIVMSG #foo :woo woobly woo.")
|
|
|
|
c.Notice("somebody", "something")
|
|
s.nc.Expect("NOTICE somebody :something")
|
|
|
|
// 01234567890123456789012345678901234567
|
|
c.Notice("somebody", "something much much longer that splits")
|
|
s.nc.Expect("NOTICE somebody :something much much ...")
|
|
s.nc.Expect("NOTICE somebody :longer that splits")
|
|
|
|
c.Ctcp("somebody", "ping", "123456789")
|
|
s.nc.Expect("PRIVMSG somebody :\001PING 123456789\001")
|
|
|
|
c.Ctcp("somebody", "ping", "123456789012345678901234567890")
|
|
s.nc.Expect("PRIVMSG somebody :\001PING 12345678901234567890...\001")
|
|
s.nc.Expect("PRIVMSG somebody :\001PING 1234567890\001")
|
|
|
|
c.CtcpReply("somebody", "pong", "123456789012345678901234567890")
|
|
s.nc.Expect("NOTICE somebody :\001PONG 12345678901234567890...\001")
|
|
s.nc.Expect("NOTICE somebody :\001PONG 1234567890\001")
|
|
|
|
c.CtcpReply("somebody", "pong", "123456789")
|
|
s.nc.Expect("NOTICE somebody :\001PONG 123456789\001")
|
|
|
|
c.Version("somebody")
|
|
s.nc.Expect("PRIVMSG somebody :\001VERSION\001")
|
|
|
|
c.Action("#foo", "pokes somebody")
|
|
s.nc.Expect("PRIVMSG #foo :\001ACTION pokes somebody\001")
|
|
|
|
c.Topic("#foo")
|
|
s.nc.Expect("TOPIC #foo")
|
|
c.Topic("#foo", "la la la")
|
|
s.nc.Expect("TOPIC #foo :la la la")
|
|
|
|
c.Mode("#foo")
|
|
s.nc.Expect("MODE #foo")
|
|
c.Mode("#foo", "+o somebody")
|
|
s.nc.Expect("MODE #foo +o somebody")
|
|
|
|
c.Away()
|
|
s.nc.Expect("AWAY")
|
|
c.Away("Dave's not here, man.")
|
|
s.nc.Expect("AWAY :Dave's not here, man.")
|
|
|
|
c.Invite("somebody", "#foo")
|
|
s.nc.Expect("INVITE somebody #foo")
|
|
|
|
c.Oper("user", "pass")
|
|
s.nc.Expect("OPER user pass")
|
|
|
|
c.VHost("user", "pass")
|
|
s.nc.Expect("VHOST user pass")
|
|
}
|