goirc/client/line_test.go

91 lines
2.5 KiB
Go
Raw Permalink Normal View History

package client
import (
"testing"
2012-06-06 16:12:07 +00:00
"time"
)
func TestLineCopy(t *testing.T) {
l1 := &Line{
Nick: "nick",
Ident: "ident",
Host: "host",
Src: "src",
Cmd: "cmd",
Raw: "raw",
Args: []string{"arg", "text"},
Time: time.Now(),
}
l2 := l1.Copy()
// Ugly. Couldn't be bothered to bust out reflect and actually think.
if l2.Nick != "nick" || l2.Ident != "ident" || l2.Host != "host" ||
l2.Src != "src" || l2.Cmd != "cmd" || l2.Raw != "raw" ||
l2.Args[0] != "arg" || l2.Args[1] != "text" || l2.Time != l1.Time {
t.Errorf("Line not copied correctly")
t.Errorf("l1: %#v\nl2: %#v", l1, l2)
}
// Now, modify l2 and verify l1 not changed
l2.Nick = l2.Nick[1:]
l2.Ident = "foo"
l2.Host = ""
l2.Args[0] = l2.Args[0][1:]
l2.Args[1] = "bar"
l2.Time = time.Now()
if l1.Nick != "nick" || l1.Ident != "ident" || l1.Host != "host" ||
l1.Src != "src" || l1.Cmd != "cmd" || l1.Raw != "raw" ||
l1.Args[0] != "arg" || l1.Args[1] != "text" || l1.Time == l2.Time {
t.Errorf("Original modified when copy changed")
t.Errorf("l1: %#v\nl2: %#v", l1, l2)
}
}
func TestLineText(t *testing.T) {
tests := []struct {
in *Line
out string
}{
{&Line{}, ""},
{&Line{Args: []string{"one thing"}}, "one thing"},
{&Line{Args: []string{"one", "two"}}, "two"},
}
for i, test := range tests {
out := test.in.Text()
if out != test.out {
t.Errorf("test %d: expected: '%s', got '%s'", i, test.out, out)
}
}
}
func TestLineTarget(t *testing.T) {
tests := []struct {
in *Line
out string
}{
{&Line{}, ""},
{&Line{Cmd: JOIN, Args: []string{"#foo"}}, "#foo"},
{&Line{Cmd: PART, Args: []string{"#foo", "bye"}}, "#foo"},
{&Line{Cmd: PRIVMSG, Args: []string{"Me", "la"}, Nick: "Them"}, "Them"},
{&Line{Cmd: NOTICE, Args: []string{"Me", "la"}, Nick: "Them"}, "Them"},
{&Line{Cmd: ACTION, Args: []string{"Me", "la"}, Nick: "Them"}, "Them"},
{&Line{Cmd: CTCP, Args: []string{"PING", "Me", "1"}, Nick: "Them"}, "Them"},
{&Line{Cmd: CTCPREPLY, Args: []string{"PONG", "Me", "2"}, Nick: "Them"}, "Them"},
{&Line{Cmd: PRIVMSG, Args: []string{"#foo", "la"}, Nick: "Them"}, "#foo"},
{&Line{Cmd: NOTICE, Args: []string{"&foo", "la"}, Nick: "Them"}, "&foo"},
{&Line{Cmd: ACTION, Args: []string{"!foo", "la"}, Nick: "Them"}, "!foo"},
{&Line{Cmd: CTCP, Args: []string{"PING", "#foo", "1"}, Nick: "Them"}, "#foo"},
{&Line{Cmd: CTCPREPLY, Args: []string{"PONG", "#foo", "2"}, Nick: "Them"}, "#foo"},
}
for i, test := range tests {
out := test.in.Target()
if out != test.out {
t.Errorf("test %d: expected: '%s', got '%s'", i, test.out, out)
}
}
}