@@ -4337,6 +4337,80 @@ public async Task TestParseAnnotationsExample3Async ()
43374337 }
43384338 }
43394339
4340+ [ Test ]
4341+ public void TestParseFlagsList ( )
4342+ {
4343+ const string text = "(\\ Answered \\ Flagged \\ Deleted \\ Seen \\ Draft + TAG TAG2 a b c d e f g h i j k l m n o p q r s t u v w x y z)\r \n " ;
4344+
4345+ using ( var memory = new MemoryStream ( Encoding . ASCII . GetBytes ( text ) , false ) ) {
4346+ using ( var tokenizer = new ImapStream ( memory , new NullProtocolLogger ( ) ) ) {
4347+ using ( var engine = new ImapEngine ( null ) ) {
4348+ var keywords = new HashSet < string > ( ) ;
4349+ MessageFlags flags ;
4350+
4351+ engine . SetStream ( tokenizer ) ;
4352+
4353+ try {
4354+ flags = ImapUtils . ParseFlagsList ( engine , "INBOX" , keywords , CancellationToken . None ) ;
4355+ } catch ( Exception ex ) {
4356+ Assert . Fail ( $ "Parsing FLAGS response failed: { ex } ") ;
4357+ return ;
4358+ }
4359+
4360+ var token = engine . ReadToken ( CancellationToken . None ) ;
4361+ Assert . That ( token . Type , Is . EqualTo ( ImapTokenType . Eoln ) , $ "Expected new-line, but got: { token } ") ;
4362+
4363+ Assert . That ( flags , Is . EqualTo ( MessageFlags . Answered | MessageFlags . Flagged | MessageFlags . Deleted | MessageFlags . Seen | MessageFlags . Draft ) , "message flags" ) ;
4364+
4365+ Assert . That ( keywords , Has . Count . EqualTo ( 29 ) , "keywords.Count" ) ;
4366+ Assert . That ( keywords . Contains ( "+" ) , Is . True , "Contains +" ) ;
4367+ Assert . That ( keywords . Contains ( "TAG" ) , Is . True , "Contains TAG" ) ;
4368+ Assert . That ( keywords . Contains ( "TAG2" ) , Is . True , "Contains TAG2" ) ;
4369+
4370+ for ( char c = 'a' ; c <= 'z' ; c ++ )
4371+ Assert . That ( keywords . Contains ( c . ToString ( ) ) , Is . True , $ "Contains { c } ") ;
4372+ }
4373+ }
4374+ }
4375+ }
4376+
4377+ [ Test ]
4378+ public async Task TestParseFlagsListAsync ( )
4379+ {
4380+ const string text = "(\\ Answered \\ Flagged \\ Deleted \\ Seen \\ Draft + TAG TAG2 a b c d e f g h i j k l m n o p q r s t u v w x y z)\r \n " ;
4381+
4382+ using ( var memory = new MemoryStream ( Encoding . ASCII . GetBytes ( text ) , false ) ) {
4383+ using ( var tokenizer = new ImapStream ( memory , new NullProtocolLogger ( ) ) ) {
4384+ using ( var engine = new ImapEngine ( null ) ) {
4385+ var keywords = new HashSet < string > ( ) ;
4386+ MessageFlags flags ;
4387+
4388+ engine . SetStream ( tokenizer ) ;
4389+
4390+ try {
4391+ flags = await ImapUtils . ParseFlagsListAsync ( engine , "INBOX" , keywords , CancellationToken . None ) ;
4392+ } catch ( Exception ex ) {
4393+ Assert . Fail ( $ "Parsing FLAGS response failed: { ex } ") ;
4394+ return ;
4395+ }
4396+
4397+ var token = await engine . ReadTokenAsync ( CancellationToken . None ) ;
4398+ Assert . That ( token . Type , Is . EqualTo ( ImapTokenType . Eoln ) , $ "Expected new-line, but got: { token } ") ;
4399+
4400+ Assert . That ( flags , Is . EqualTo ( MessageFlags . Answered | MessageFlags . Flagged | MessageFlags . Deleted | MessageFlags . Seen | MessageFlags . Draft ) , "message flags" ) ;
4401+
4402+ Assert . That ( keywords , Has . Count . EqualTo ( 29 ) , "keywords.Count" ) ;
4403+ Assert . That ( keywords . Contains ( "+" ) , Is . True , "Contains +" ) ;
4404+ Assert . That ( keywords . Contains ( "TAG" ) , Is . True , "Contains TAG" ) ;
4405+ Assert . That ( keywords . Contains ( "TAG2" ) , Is . True , "Contains TAG2" ) ;
4406+
4407+ for ( char c = 'a' ; c <= 'z' ; c ++ )
4408+ Assert . That ( keywords . Contains ( c . ToString ( ) ) , Is . True , $ "Contains { c } ") ;
4409+ }
4410+ }
4411+ }
4412+ }
4413+
43404414 ImapFolder CreateImapFolder ( ImapFolderConstructorArgs args )
43414415 {
43424416 return new ImapFolder ( args ) ;
0 commit comments