@@ -2,12 +2,13 @@ package imap_test
22
33import (
44 "fmt"
5- "github.com/stretchr/testify/require"
65 "mokapi/imap"
76 "mokapi/imap/imaptest"
87 "mokapi/try"
98 "testing"
109 "time"
10+
11+ "github.com/stretchr/testify/require"
1112)
1213
1314func TestIdle (t * testing.T ) {
@@ -62,7 +63,47 @@ func TestIdle(t *testing.T) {
6263 require .NoError (t , err )
6364 require .Equal (t , "+ idling" , res )
6465
65- res , err = c .SendRaw ("A01 DONE" )
66+ res , err = c .SendRaw ("DONE" )
67+ require .NoError (t , err )
68+ require .Equal (t , "A01 OK IDLE terminated" , res )
69+ },
70+ },
71+ {
72+ name : "idle and done with lower case" ,
73+ handler : func (t * testing.T ) imap.Handler {
74+ return & imaptest.Handler {
75+ SelectFunc : func (mailbox string , readonly bool , session map [string ]interface {}) (* imap.Selected , error ) {
76+ return & imap.Selected {}, nil
77+ },
78+ IdleFunc : func (w imap.UpdateWriter , done chan struct {}, session map [string ]interface {}) error {
79+ session ["idle" ] = done
80+ return nil
81+ },
82+ UnselectFunc : func (session map [string ]interface {}) error {
83+ done := session ["idle" ].(chan struct {})
84+ doneClosed := false
85+ select {
86+ case <- done :
87+ doneClosed = true
88+ case <- time .After (time .Second ):
89+ }
90+
91+ require .True (t , doneClosed , "done is closed" )
92+ return nil
93+ },
94+ }
95+ },
96+ test : func (t * testing.T , c * imap.Client ) {
97+ err := c .PlainAuth ("" , "bob" , "password" )
98+ require .NoError (t , err )
99+ _ , err = c .Select ("INBOX" , false )
100+ require .NoError (t , err )
101+
102+ res , err := c .SendRaw ("A01 idle" )
103+ require .NoError (t , err )
104+ require .Equal (t , "+ idling" , res )
105+
106+ res , err = c .SendRaw ("done" )
66107 require .NoError (t , err )
67108 require .Equal (t , "A01 OK IDLE terminated" , res )
68109 },
@@ -125,7 +166,7 @@ func TestIdle(t *testing.T) {
125166 }()
126167
127168 c := imap .NewClient (fmt .Sprintf ("localhost:%v" , p ))
128- defer c .Close ()
169+ defer func () { _ = c .Close () } ()
129170
130171 _ , err := c .Dial ()
131172 require .NoError (t , err )
0 commit comments