Merge branch 'bug/#1'
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -21,3 +21,6 @@ _testmain.go
|
||||
|
||||
*.exe
|
||||
*.test
|
||||
|
||||
#
|
||||
*.out
|
||||
|
||||
21
pop3proto.go
21
pop3proto.go
@@ -110,18 +110,17 @@ func (r *Reader) ReadResponse() (string, error) {
|
||||
}
|
||||
|
||||
func (r *Reader) parseResponse(line string) (string, error) {
|
||||
var index int
|
||||
s := strings.ToUpper(line)
|
||||
|
||||
if index = strings.Index(line, " "); index < 0 {
|
||||
return "", ResponseError(fmt.Sprintf("invalid response format: %s", line))
|
||||
}
|
||||
|
||||
switch strings.ToUpper(line[:index]) {
|
||||
case "+OK":
|
||||
return line[index+1:], nil
|
||||
case "-ERR":
|
||||
return "", ResponseError(line[index+1:])
|
||||
default:
|
||||
if s == "+OK" {
|
||||
return "", nil
|
||||
} else if strings.HasPrefix(s, "+OK ") {
|
||||
return line[4:], nil
|
||||
} else if s == "-ERR" {
|
||||
return "", ResponseError("")
|
||||
} else if strings.HasPrefix(s, "-ERR ") {
|
||||
return "", ResponseError(line[5:])
|
||||
} else {
|
||||
return "", ResponseError(fmt.Sprintf("unknown response: %s", line))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,15 +59,51 @@ func TestReadResponse(t *testing.T) {
|
||||
t.Fatalf("%v, %v", s, err)
|
||||
}
|
||||
|
||||
r = reader("+OK\n")
|
||||
s, err = r.ReadResponse()
|
||||
if s != "" || err != nil {
|
||||
t.Fatalf("%v, %v", s, err)
|
||||
}
|
||||
|
||||
r = reader("+OK \n")
|
||||
s, err = r.ReadResponse()
|
||||
if s != "" || err != nil {
|
||||
t.Fatalf("%v, %v", s, err)
|
||||
}
|
||||
|
||||
r = reader("+OKAY\n")
|
||||
s, err = r.ReadResponse()
|
||||
if s != "" || err == nil || err.Error() != "unknown response: +OKAY" {
|
||||
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("-ERR\n")
|
||||
s, err = r.ReadResponse()
|
||||
if s != "" || err == nil || err.Error() != "" {
|
||||
t.Fatalf("%v, %v", s, err)
|
||||
}
|
||||
|
||||
r = reader("-ERR \n")
|
||||
s, err = r.ReadResponse()
|
||||
if s != "" || err == nil || err.Error() != "" {
|
||||
t.Fatalf("%v, %v", s, err)
|
||||
}
|
||||
|
||||
r = reader("-ERROR\n")
|
||||
s, err = r.ReadResponse()
|
||||
if s != "" || err == nil || err.Error() != "unknown response: -ERROR" {
|
||||
t.Fatalf("%v, %v", s, err)
|
||||
}
|
||||
|
||||
r = reader("message\n")
|
||||
s, err = r.ReadResponse()
|
||||
if s != "" || err == nil || err.Error() != "invalid response format: message" {
|
||||
if s != "" || err == nil || err.Error() != "unknown response: message" {
|
||||
t.Fatalf("%v, %v", s, err)
|
||||
}
|
||||
|
||||
@@ -76,6 +112,18 @@ func TestReadResponse(t *testing.T) {
|
||||
if s != "" || err == nil || err.Error() != "unknown response: * message" {
|
||||
t.Fatalf("%v, %v", s, err)
|
||||
}
|
||||
|
||||
r = reader(" message\n")
|
||||
s, err = r.ReadResponse()
|
||||
if s != "" || err == nil || err.Error() != "unknown response: message" {
|
||||
t.Fatalf("%v, %v", s, err)
|
||||
}
|
||||
|
||||
r = reader("\n")
|
||||
s, err = r.ReadResponse()
|
||||
if s != "" || err == nil || err.Error() != "unknown response: " {
|
||||
t.Fatalf("%v, %v", s, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestWriteLine(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user