diff --git a/pop3proto_test.go b/pop3proto_test.go new file mode 100644 index 0000000..65d2ae2 --- /dev/null +++ b/pop3proto_test.go @@ -0,0 +1,95 @@ +package pop3 + +import ( + "bufio" + "bytes" + "io" + "strings" + "testing" +) + +func TestReadLine(t *testing.T) { + // This function calls textproto.Reader.ReadLine only. + // so no need for test. +} + +func TestReadLines(t *testing.T) { + r := reader("line1\nline2\n.\n") + + s, err := r.ReadLines() + + if len(s) != 2 || s[0] != "line1" || s[1] != "line2" || err != nil { + t.Fatalf("%v, %v", s, err) + } + + s, err = r.ReadLines() + + if s != nil || err != io.EOF { + t.Fatalf("EOF: %s, %v", s, err) + } +} + +func TestReadToPeriod(t *testing.T) { + r := reader("line1\nline2\n.\n") + + s, err := r.ReadToPeriod() + + expected := strings.Replace(`line1 +line2`, "\n", "\r\n", -1) + + if s != expected || err != nil { + t.Fatalf("%v, %v", s, err) + } + + s, err = r.ReadToPeriod() + + if s != "" || err != io.EOF { + t.Fatalf("EOF: %s, %v", s, err) + } +} + +func TestReadResponse(t *testing.T) { + var r *Reader + var s string + var err error + + r = reader("+OK message\n") + s, err = r.ReadResponse() + if s != "message" || err != nil { + t.Fatalf("%v, %v", s, err) + } + + r = reader("-ERR message\n") + s, err = r.ReadResponse() + if s != "" || err == nil || err.Error() != "message" { + t.Fatalf("%v, %v", s, err) + } + + r = reader("message\n") + s, err = r.ReadResponse() + if s != "" || err == nil || err.Error() != "レスポンスのフォーマットが不正です。: message" { + t.Fatalf("%v, %v", s, err) + } + + r = reader("* message\n") + s, err = r.ReadResponse() + if s != "" || err == nil || err.Error() != "レスポンスの内容が不明です。: * message" { + t.Fatalf("%v, %v", s, err) + } +} + +func TestWriteLine(t *testing.T) { + var buf bytes.Buffer + + w := NewWriter(bufio.NewWriter(&buf)) + + err := w.WriteLine("foo %d", 123) + + if s := buf.String(); s != "foo 123\r\n" || err != nil { + t.Fatalf("s=%q; err=%s", s, err) + } +} + +func reader(s string) *Reader { + return NewReader(bufio.NewReader(strings.NewReader(s))) +}