@@ -1110,7 +1110,7 @@ def test_enable
1110
1110
end
1111
1111
end
1112
1112
1113
- def test_responses
1113
+ test "#responses" do
1114
1114
with_fake_server do |server , imap |
1115
1115
# responses available before SELECT/EXAMINE
1116
1116
assert_equal ( %w[ IMAP4REV1 NAMESPACE MOVE IDLE UTF8=ACCEPT ] ,
@@ -1144,7 +1144,7 @@ def test_responses
1144
1144
end
1145
1145
end
1146
1146
1147
- def test_clear_responses
1147
+ test "#clear_responses" do
1148
1148
with_fake_server do |server , imap |
1149
1149
resp = imap . select "INBOX"
1150
1150
assert_equal ( [ Net ::IMAP ::TaggedResponse , "RUBY0001" , "OK" ] ,
@@ -1168,6 +1168,49 @@ def test_clear_responses
1168
1168
end
1169
1169
end
1170
1170
1171
+ test "#extract_responses" do
1172
+ with_fake_server do |server , imap |
1173
+ resp = imap . select "INBOX"
1174
+ assert_equal ( [ Net ::IMAP ::TaggedResponse , "RUBY0001" , "OK" ] ,
1175
+ [ resp . class , resp . tag , resp . name ] )
1176
+ # Need to send a string type and a block
1177
+ assert_raise ( ArgumentError ) do imap . extract_responses { true } end
1178
+ assert_raise ( ArgumentError ) do imap . extract_responses ( nil ) { true } end
1179
+ assert_raise ( ArgumentError ) do imap . extract_responses ( "OK" ) end
1180
+ # matching nothing
1181
+ assert_equal ( [ 172 ] , imap . responses ( "EXISTS" , &:dup ) )
1182
+ assert_equal ( [ ] , imap . extract_responses ( "EXISTS" ) { String === _1 } )
1183
+ assert_equal ( [ 172 ] , imap . responses ( "EXISTS" , &:dup ) )
1184
+ # matching everything
1185
+ assert_equal ( [ 172 ] , imap . responses ( "EXISTS" , &:dup ) )
1186
+ assert_equal ( [ 172 ] , imap . extract_responses ( "EXISTS" , &:even? ) )
1187
+ assert_equal ( [ ] , imap . responses ( "EXISTS" , &:dup ) )
1188
+ # matching some
1189
+ server . unsolicited ( "101 FETCH (UID 1111 FLAGS (\\ Seen))" )
1190
+ server . unsolicited ( "102 FETCH (UID 2222 FLAGS (\\ Seen \\ Flagged))" )
1191
+ server . unsolicited ( "103 FETCH (UID 3333 FLAGS (\\ Deleted))" )
1192
+ wait_for_response_count ( imap , type : "FETCH" , count : 3 )
1193
+
1194
+ result = imap . extract_responses ( "FETCH" ) { _1 . flags . include? ( :Flagged ) }
1195
+ assert_equal (
1196
+ [
1197
+ Net ::IMAP ::FetchData . new (
1198
+ 102 , { "UID" => 2222 , "FLAGS" => [ :Seen , :Flagged ] }
1199
+ ) ,
1200
+ ] ,
1201
+ result ,
1202
+ )
1203
+ assert_equal 2 , imap . responses ( "FETCH" , &:count )
1204
+
1205
+ result = imap . extract_responses ( "FETCH" ) { _1 . flags . include? ( :Deleted ) }
1206
+ assert_equal (
1207
+ [ Net ::IMAP ::FetchData . new ( 103 , { "UID" => 3333 , "FLAGS" => [ :Deleted ] } ) ] ,
1208
+ result
1209
+ )
1210
+ assert_equal 1 , imap . responses ( "FETCH" , &:count )
1211
+ end
1212
+ end
1213
+
1171
1214
test "#select with condstore" do
1172
1215
with_fake_server do |server , imap |
1173
1216
imap . select "inbox" , condstore : true
0 commit comments