@@ -143,6 +143,53 @@ func TestIdle(t *testing.T) {
143143 require .NoError (t , err )
144144 require .Equal (t , "+ idling" , res )
145145
146+ res , err = c .SendRaw ("A01 FINISHED" )
147+ require .NoError (t , err )
148+ require .Equal (t , "A01 BAD Expected DONE to end IDLE" , res )
149+ },
150+ },
151+ {
152+ name : "send updates while idle" ,
153+ handler : func (t * testing.T ) imap.Handler {
154+ return & imaptest.Handler {
155+ SelectFunc : func (mailbox string , readonly bool , session map [string ]interface {}) (* imap.Selected , error ) {
156+ return & imap.Selected {}, nil
157+ },
158+ IdleFunc : func (w imap.UpdateWriter , done chan struct {}, session map [string ]interface {}) error {
159+ session ["idle" ] = done
160+ go func () {
161+ err := w .WriteNumMessages (10 )
162+ require .NoError (t , err )
163+ err = w .WriteMessageFlags (20 , []imap.Flag {imap .FlagSeen })
164+ require .NoError (t , err )
165+ err = w .WriteExpunge (1 )
166+ }()
167+ return nil
168+ },
169+ }
170+ },
171+ test : func (t * testing.T , c * imap.Client ) {
172+ err := c .PlainAuth ("" , "bob" , "password" )
173+ require .NoError (t , err )
174+ _ , err = c .Select ("INBOX" , false )
175+ require .NoError (t , err )
176+
177+ res , err := c .SendRaw ("A01 IDLE" )
178+ require .NoError (t , err )
179+ require .Equal (t , "+ idling" , res )
180+
181+ res , err = c .ReadLine ()
182+ require .NoError (t , err )
183+ require .Equal (t , "* 10 EXISTS" , res )
184+
185+ res , err = c .ReadLine ()
186+ require .NoError (t , err )
187+ require .Equal (t , "* 20 FETCH (\\ Seen)" , res )
188+
189+ res , err = c .ReadLine ()
190+ require .NoError (t , err )
191+ require .Equal (t , "* 1 EXPUNGE" , res )
192+
146193 res , err = c .SendRaw ("A01 FINISHED" )
147194 require .NoError (t , err )
148195 require .Equal (t , "A01 BAD Expected DONE to end IDLE" , res )
0 commit comments