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