1package imap_test 2 3import ( 4 "bytes" 5 "testing" 6 7 "github.com/emersion/go-imap" 8) 9 10func TestStatusResp_WriteTo(t *testing.T) { 11 tests := []struct { 12 input *imap.StatusResp 13 expected string 14 }{ 15 { 16 input: &imap.StatusResp{ 17 Tag: "*", 18 Type: imap.StatusRespOk, 19 }, 20 expected: "* OK \r\n", 21 }, 22 { 23 input: &imap.StatusResp{ 24 Tag: "*", 25 Type: imap.StatusRespOk, 26 Info: "LOGIN completed", 27 }, 28 expected: "* OK LOGIN completed\r\n", 29 }, 30 { 31 input: &imap.StatusResp{ 32 Tag: "42", 33 Type: imap.StatusRespBad, 34 Info: "Invalid arguments", 35 }, 36 expected: "42 BAD Invalid arguments\r\n", 37 }, 38 { 39 input: &imap.StatusResp{ 40 Tag: "a001", 41 Type: imap.StatusRespOk, 42 Code: "READ-ONLY", 43 Info: "EXAMINE completed", 44 }, 45 expected: "a001 OK [READ-ONLY] EXAMINE completed\r\n", 46 }, 47 { 48 input: &imap.StatusResp{ 49 Tag: "*", 50 Type: imap.StatusRespOk, 51 Code: "CAPABILITY", 52 Arguments: []interface{}{imap.RawString("IMAP4rev1")}, 53 Info: "IMAP4rev1 service ready", 54 }, 55 expected: "* OK [CAPABILITY IMAP4rev1] IMAP4rev1 service ready\r\n", 56 }, 57 } 58 59 for i, test := range tests { 60 b := &bytes.Buffer{} 61 w := imap.NewWriter(b) 62 63 if err := test.input.WriteTo(w); err != nil { 64 t.Errorf("Cannot write status #%v, got error: %v", i, err) 65 continue 66 } 67 68 o := b.String() 69 if o != test.expected { 70 t.Errorf("Invalid output for status #%v: %v", i, o) 71 } 72 } 73} 74 75func TestStatus_Err(t *testing.T) { 76 status := &imap.StatusResp{Type: imap.StatusRespOk, Info: "All green"} 77 if err := status.Err(); err != nil { 78 t.Error("OK status returned error:", err) 79 } 80 81 status = &imap.StatusResp{Type: imap.StatusRespBad, Info: "BAD!"} 82 if err := status.Err(); err == nil { 83 t.Error("BAD status didn't returned error:", err) 84 } else if err.Error() != "BAD!" { 85 t.Error("BAD status returned incorrect error message:", err) 86 } 87 88 status = &imap.StatusResp{Type: imap.StatusRespNo, Info: "NO!"} 89 if err := status.Err(); err == nil { 90 t.Error("NO status didn't returned error:", err) 91 } else if err.Error() != "NO!" { 92 t.Error("NO status returned incorrect error message:", err) 93 } 94} 95