rims 0.2.4 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ChangeLog +65 -0
- data/lib/rims.rb +0 -2
- data/lib/rims/cksum_kvs.rb +1 -1
- data/lib/rims/cmd.rb +67 -8
- data/lib/rims/lock.rb +2 -2
- data/lib/rims/mail_store.rb +38 -52
- data/lib/rims/protocol/decoder.rb +1274 -789
- data/lib/rims/protocol/parser.rb +79 -39
- data/lib/rims/rfc822.rb +31 -24
- data/lib/rims/service.rb +67 -20
- data/lib/rims/test.rb +4 -1
- data/lib/rims/version.rb +1 -1
- data/test/cmd/test_command.rb +1103 -108
- data/test/test_mail_store.rb +23 -137
- data/test/test_protocol_auth.rb +8 -1
- data/test/test_protocol_decoder.rb +615 -175
- data/test/test_protocol_fetch.rb +276 -147
- data/test/test_protocol_request.rb +6 -0
- data/test/test_protocol_search.rb +27 -1
- data/test/test_service.rb +99 -6
- metadata +2 -3
- data/lib/rims/pool.rb +0 -85
data/test/test_mail_store.rb
CHANGED
@@ -329,7 +329,7 @@ module RIMS::Test
|
|
329
329
|
|
330
330
|
def test_mail_folder
|
331
331
|
mbox_id = @mail_store.add_mbox('INBOX')
|
332
|
-
folder = @mail_store.
|
332
|
+
folder = @mail_store.open_folder(mbox_id)
|
333
333
|
assert_equal(mbox_id, folder.mbox_id)
|
334
334
|
assert_equal(false, folder.read_only)
|
335
335
|
assert_equal(true, folder.updated?)
|
@@ -371,7 +371,7 @@ module RIMS::Test
|
|
371
371
|
end
|
372
372
|
@mail_store.expunge_mbox(mbox_id)
|
373
373
|
|
374
|
-
folder = @mail_store.
|
374
|
+
folder = @mail_store.open_folder(mbox_id).reload
|
375
375
|
|
376
376
|
assert_equal([ 1 ].to_set, folder.parse_msg_set('1'))
|
377
377
|
assert_equal([ 1 ].to_set, folder.parse_msg_set('1', uid: false))
|
@@ -398,7 +398,7 @@ module RIMS::Test
|
|
398
398
|
def test_mail_folder_parse_msg_set_empty
|
399
399
|
mbox_id = @mail_store.add_mbox('INBOX')
|
400
400
|
assert_equal([], @mail_store.each_msg_uid(mbox_id).to_a)
|
401
|
-
folder = @mail_store.
|
401
|
+
folder = @mail_store.open_folder(mbox_id).reload
|
402
402
|
|
403
403
|
assert_equal([ 1 ].to_set, folder.parse_msg_set('1'))
|
404
404
|
assert_equal([ 1 ].to_set, folder.parse_msg_set('1', uid: false))
|
@@ -424,7 +424,7 @@ module RIMS::Test
|
|
424
424
|
@mail_store.add_msg(mbox_id, 'g') # 7
|
425
425
|
@mail_store.add_msg(mbox_id, 'h') # 8 deleted
|
426
426
|
|
427
|
-
folder = @mail_store.
|
427
|
+
folder = @mail_store.open_folder(mbox_id).reload
|
428
428
|
assert_equal(8, folder.each_msg.count)
|
429
429
|
|
430
430
|
client_msg_list = folder.each_msg.to_a
|
@@ -441,6 +441,25 @@ module RIMS::Test
|
|
441
441
|
assert_equal(folder.each_msg.map(&:uid), client_msg_list.map(&:uid))
|
442
442
|
end
|
443
443
|
|
444
|
+
def test_folder_alive?
|
445
|
+
mbox_id = @mail_store.add_mbox('INBOX')
|
446
|
+
folder = @mail_store.open_folder(mbox_id).reload
|
447
|
+
assert_equal(true, folder.alive?)
|
448
|
+
|
449
|
+
@mail_store.del_mbox(mbox_id)
|
450
|
+
assert_equal(false, folder.alive?)
|
451
|
+
end
|
452
|
+
|
453
|
+
def test_folder_should_be_alive
|
454
|
+
mbox_id = @mail_store.add_mbox('INBOX')
|
455
|
+
folder = @mail_store.open_folder(mbox_id).reload
|
456
|
+
folder.should_be_alive
|
457
|
+
|
458
|
+
@mail_store.del_mbox(mbox_id)
|
459
|
+
error = assert_raise(RuntimeError) { folder.should_be_alive }
|
460
|
+
assert_match(/deleted folder:/, error.message)
|
461
|
+
end
|
462
|
+
|
444
463
|
def test_close_open
|
445
464
|
mbox_id1 = @mail_store.add_mbox('INBOX')
|
446
465
|
msg_uid1 = @mail_store.add_msg(mbox_id1, 'foo', Time.local(2014, 5, 6, 12, 34, 56))
|
@@ -625,139 +644,6 @@ module RIMS::Test
|
|
625
644
|
mail_store.close
|
626
645
|
end
|
627
646
|
end
|
628
|
-
|
629
|
-
class MailStorePoolRefCountTest < Test::Unit::TestCase
|
630
|
-
def setup
|
631
|
-
@kvs = Hash.new{|h, k| h[k] = {} }
|
632
|
-
@kvs_open = proc{|mbox_version, unique_user_id, db_name|
|
633
|
-
RIMS::Hash_KeyValueStore.new(@kvs["#{mbox_version}/#{unique_user_id[0, 7]}/#{db_name}"])
|
634
|
-
}
|
635
|
-
@mail_store_pool = RIMS::MailStore.build_pool(@kvs_open, @kvs_open)
|
636
|
-
end
|
637
|
-
|
638
|
-
def teardown
|
639
|
-
pp @kvs if $DEBUG
|
640
|
-
end
|
641
|
-
|
642
|
-
def assert_call_hook
|
643
|
-
call_count = 0
|
644
|
-
yield(proc{ call_count += 1 })
|
645
|
-
assert_equal(1, call_count, 'a hook should be called once.')
|
646
|
-
end
|
647
|
-
private :assert_call_hook
|
648
|
-
|
649
|
-
def test_holder_object_key
|
650
|
-
unique_user_id = RIMS::Authentication.unique_user_id('foo')
|
651
|
-
holder = @mail_store_pool.get(unique_user_id)
|
652
|
-
assert_equal(unique_user_id, holder.object_key)
|
653
|
-
assert_equal(unique_user_id, holder.unique_user_id)
|
654
|
-
end
|
655
|
-
|
656
|
-
def test_get
|
657
|
-
unique_user_id = RIMS::Authentication.unique_user_id('foo')
|
658
|
-
assert_call_hook{|hook|
|
659
|
-
@mail_store_pool.get(unique_user_id) { hook.call }
|
660
|
-
}
|
661
|
-
end
|
662
|
-
|
663
|
-
def test_get2
|
664
|
-
unique_user_id = RIMS::Authentication.unique_user_id('foo')
|
665
|
-
@mail_store_pool.get(unique_user_id)
|
666
|
-
@mail_store_pool.get(unique_user_id) { flunk }
|
667
|
-
end
|
668
|
-
|
669
|
-
def test_get_multiuser
|
670
|
-
unique_user_id = RIMS::Authentication.unique_user_id('foo')
|
671
|
-
unique_user_id2 = RIMS::Authentication.unique_user_id('bar')
|
672
|
-
|
673
|
-
assert_call_hook{|hook|
|
674
|
-
@mail_store_pool.get(unique_user_id) { hook.call }
|
675
|
-
}
|
676
|
-
assert_call_hook{|hook|
|
677
|
-
@mail_store_pool.get(unique_user_id2) { hook.call }
|
678
|
-
}
|
679
|
-
|
680
|
-
@mail_store_pool.get(unique_user_id) { flunk }
|
681
|
-
@mail_store_pool.get(unique_user_id2) { flunk }
|
682
|
-
end
|
683
|
-
|
684
|
-
def test_return_pool
|
685
|
-
unique_user_id = RIMS::Authentication.unique_user_id('foo')
|
686
|
-
|
687
|
-
holder = @mail_store_pool.get(unique_user_id)
|
688
|
-
assert_call_hook{|hook|
|
689
|
-
holder.return_pool{ hook.call }
|
690
|
-
}
|
691
|
-
end
|
692
|
-
|
693
|
-
def test_return_pool2
|
694
|
-
unique_user_id = RIMS::Authentication.unique_user_id('foo')
|
695
|
-
|
696
|
-
holders = []
|
697
|
-
holders << @mail_store_pool.get(unique_user_id)
|
698
|
-
holders << @mail_store_pool.get(unique_user_id)
|
699
|
-
holders << @mail_store_pool.get(unique_user_id)
|
700
|
-
|
701
|
-
holders.pop.return_pool{ flunk }
|
702
|
-
holders.shift.return_pool{ flunk }
|
703
|
-
assert_call_hook{|hook|
|
704
|
-
holders.pop.return_pool{ hook.call }
|
705
|
-
}
|
706
|
-
end
|
707
|
-
|
708
|
-
def test_return_pool_multiuser
|
709
|
-
unique_user_id = RIMS::Authentication.unique_user_id('foo')
|
710
|
-
unique_user_id2 = RIMS::Authentication.unique_user_id('bar')
|
711
|
-
|
712
|
-
holders = []
|
713
|
-
holders << @mail_store_pool.get(unique_user_id)
|
714
|
-
holders << @mail_store_pool.get(unique_user_id)
|
715
|
-
holders << @mail_store_pool.get(unique_user_id)
|
716
|
-
|
717
|
-
holders2 = []
|
718
|
-
holders2 << @mail_store_pool.get(unique_user_id2)
|
719
|
-
holders2 << @mail_store_pool.get(unique_user_id2)
|
720
|
-
holders2 << @mail_store_pool.get(unique_user_id2)
|
721
|
-
|
722
|
-
holders.pop.return_pool{ flunk }
|
723
|
-
holders2.shift.return_pool{ flunk }
|
724
|
-
holders.pop.return_pool{ flunk }
|
725
|
-
holders2.shift.return_pool{ flunk }
|
726
|
-
assert_call_hook{|hook|
|
727
|
-
holders2.shift.return_pool{ hook.call }
|
728
|
-
}
|
729
|
-
assert_call_hook{|hook|
|
730
|
-
holders.pop.return_pool{ hook.call }
|
731
|
-
}
|
732
|
-
end
|
733
|
-
|
734
|
-
def test_cycle
|
735
|
-
unique_user_id = RIMS::Authentication.unique_user_id('foo')
|
736
|
-
|
737
|
-
holders = []
|
738
|
-
assert_call_hook{|hook|
|
739
|
-
holders << @mail_store_pool.get(unique_user_id) { hook.call }
|
740
|
-
}
|
741
|
-
holders << @mail_store_pool.get(unique_user_id) { flunk }
|
742
|
-
holders << @mail_store_pool.get(unique_user_id) { flunk }
|
743
|
-
|
744
|
-
holders.pop.return_pool{ flunk }
|
745
|
-
holders.pop.return_pool{ flunk }
|
746
|
-
assert_call_hook{|hook|
|
747
|
-
holders.pop.return_pool{ hook.call }
|
748
|
-
}
|
749
|
-
|
750
|
-
assert_call_hook{|hook|
|
751
|
-
holders << @mail_store_pool.get(unique_user_id) { hook.call }
|
752
|
-
}
|
753
|
-
holders << @mail_store_pool.get(unique_user_id) { flunk }
|
754
|
-
|
755
|
-
holders.shift.return_pool{ flunk }
|
756
|
-
assert_call_hook{|hook|
|
757
|
-
holders.shift.return_pool{ hook.call }
|
758
|
-
}
|
759
|
-
end
|
760
|
-
end
|
761
647
|
end
|
762
648
|
|
763
649
|
# Local Variables:
|
data/test/test_protocol_auth.rb
CHANGED
@@ -30,7 +30,14 @@ module RIMS::Test
|
|
30
30
|
@logger = Logger.new(STDOUT)
|
31
31
|
@logger.level = ($DEBUG) ? Logger::DEBUG : Logger::FATAL
|
32
32
|
|
33
|
-
|
33
|
+
input_gets = @input.method(:gets)
|
34
|
+
output_write = lambda{|res|
|
35
|
+
for line in res
|
36
|
+
@output << line
|
37
|
+
end
|
38
|
+
}
|
39
|
+
|
40
|
+
@reader = RIMS::Protocol::AuthenticationReader.new(@auth, input_gets, output_write, @logger)
|
34
41
|
end
|
35
42
|
|
36
43
|
def assert_input_output_stream(input_txt, expected_output_txt)
|
@@ -133,7 +133,13 @@ module RIMS::Test
|
|
133
133
|
if (client_input_text) then
|
134
134
|
input = StringIO.new(client_input_text, 'r')
|
135
135
|
output = StringIO.new('', 'w')
|
136
|
-
|
136
|
+
input_gets = input.method(:gets)
|
137
|
+
output_write = lambda{|res|
|
138
|
+
for line in res
|
139
|
+
output << line
|
140
|
+
end
|
141
|
+
}
|
142
|
+
inout_args = [ input_gets, output_write ]
|
137
143
|
inout_args << RIMS::Protocol::ConnectionTimer.new(@limits, input) if (cmd_id == :idle)
|
138
144
|
cmd_args = inout_args + cmd_args
|
139
145
|
end
|
@@ -236,21 +242,21 @@ module RIMS::Test
|
|
236
242
|
extend Forwardable
|
237
243
|
|
238
244
|
def open_mail_store
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
245
|
+
@services.call_service(:engine, @unique_user_id) {|engine|
|
246
|
+
begin
|
247
|
+
@mail_store = engine.mail_store
|
248
|
+
@mail_store.write_synchronize{
|
249
|
+
yield
|
250
|
+
}
|
251
|
+
ensure
|
252
|
+
@mail_store = nil
|
253
|
+
end
|
254
|
+
}
|
249
255
|
end
|
250
256
|
private :open_mail_store
|
251
257
|
|
252
258
|
def make_decoder
|
253
|
-
RIMS::Protocol::Decoder.new_decoder(@
|
259
|
+
RIMS::Protocol::Decoder.new_decoder(@services, @auth, @logger)
|
254
260
|
end
|
255
261
|
private :make_decoder
|
256
262
|
|
@@ -273,13 +279,30 @@ module RIMS::Test
|
|
273
279
|
private :command_test?
|
274
280
|
|
275
281
|
def setup
|
282
|
+
@logger = Logger.new(STDOUT)
|
283
|
+
@logger.level = ($DEBUG) ? Logger::DEBUG : Logger::FATAL
|
284
|
+
|
276
285
|
@kvs = Hash.new{|h, k| h[k] = {} }
|
277
286
|
@kvs_open = proc{|mbox_version, unique_user_id, db_name|
|
278
287
|
RIMS::Hash_KeyValueStore.new(@kvs["#{mbox_version}/#{unique_user_id[0, 7]}/#{db_name}"])
|
279
288
|
}
|
280
289
|
@unique_user_id = RIMS::Authentication.unique_user_id('foo')
|
281
290
|
|
282
|
-
@
|
291
|
+
@services = Riser::DRbServices.new(0)
|
292
|
+
@services.add_sticky_process_service(:engine,
|
293
|
+
Riser::ResourceSet.build{|builder|
|
294
|
+
builder.at_create{|unique_user_id|
|
295
|
+
mail_store = RIMS::MailStore.build(unique_user_id, @kvs_open, @kvs_open)
|
296
|
+
RIMS::Protocol::Decoder::Engine.new(unique_user_id, mail_store, @logger)
|
297
|
+
}
|
298
|
+
builder.at_destroy{|engine|
|
299
|
+
engine.destroy
|
300
|
+
}
|
301
|
+
builder.alias_unref(:destroy)
|
302
|
+
})
|
303
|
+
@services.start_server
|
304
|
+
@services.start_client
|
305
|
+
|
283
306
|
open_mail_store{
|
284
307
|
@inbox_id = @mail_store.mbox_id('INBOX')
|
285
308
|
}
|
@@ -297,9 +320,6 @@ module RIMS::Test
|
|
297
320
|
@pw.entry('#postman', 'password_of_mail_delivery_user')
|
298
321
|
@auth.add_plug_in(@pw)
|
299
322
|
|
300
|
-
@logger = Logger.new(STDOUT)
|
301
|
-
@logger.level = ($DEBUG) ? Logger::DEBUG : Logger::FATAL
|
302
|
-
|
303
323
|
@limits = RIMS::Protocol::ConnectionLimits.new(0.001, 60 * 30)
|
304
324
|
@decoder = make_decoder
|
305
325
|
@tag = 'T000'
|
@@ -308,8 +328,8 @@ module RIMS::Test
|
|
308
328
|
end
|
309
329
|
|
310
330
|
def teardown
|
311
|
-
@
|
312
|
-
|
331
|
+
assert_equal(0, @services.get_service(:engine, @unique_user_id).proxy_count)
|
332
|
+
@services.stop_server
|
313
333
|
pp @kvs if $DEBUG
|
314
334
|
end
|
315
335
|
|
@@ -554,7 +574,7 @@ module RIMS::Test
|
|
554
574
|
|
555
575
|
assert_imap_command("AUTHENTICATE plain #{client_plain_response_base64('foo', 'detarame')}",
|
556
576
|
client_input_text: '') {|assert|
|
557
|
-
assert.match(/^#{tag} NO /)
|
577
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/auth.* fail/)
|
558
578
|
}
|
559
579
|
|
560
580
|
assert_equal(false, @decoder.auth?) if command_test?
|
@@ -568,7 +588,7 @@ module RIMS::Test
|
|
568
588
|
|
569
589
|
assert_imap_command("AUTHENTICATE plain #{client_plain_response_base64('foo', 'open_sesame')}",
|
570
590
|
client_input_text: '') {|assert|
|
571
|
-
assert.match(/^#{tag} NO /)
|
591
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/dup.* auth/)
|
572
592
|
}
|
573
593
|
|
574
594
|
assert_equal(true, @decoder.auth?) if command_test?
|
@@ -599,13 +619,13 @@ module RIMS::Test
|
|
599
619
|
|
600
620
|
assert_imap_command('AUTHENTICATE plain', client_input_text: "*\r\n") {|assert|
|
601
621
|
assert.equal('+ ')
|
602
|
-
assert.match(/^#{tag} BAD /)
|
622
|
+
assert.match(/^#{tag} BAD AUTHENTICATE/, peek_next_line: true).match(/fail/)
|
603
623
|
}
|
604
624
|
|
605
625
|
assert_imap_command('AUTHENTICATE plain',
|
606
626
|
client_input_text: client_plain_response_base64('foo', 'detarame') + "\r\n") {|assert|
|
607
627
|
assert.equal('+ ')
|
608
|
-
assert.match(/^#{tag} NO /)
|
628
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/auth.* fail/)
|
609
629
|
}
|
610
630
|
|
611
631
|
assert_equal(false, @decoder.auth?) if command_test?
|
@@ -619,7 +639,7 @@ module RIMS::Test
|
|
619
639
|
assert_equal(true, @decoder.auth?) if command_test?
|
620
640
|
|
621
641
|
assert_imap_command('AUTHENTICATE plain', client_input_text: '') {|assert|
|
622
|
-
assert.match(/^#{tag} NO /, peek_next_line: true).match(/
|
642
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/dup.* auth/)
|
623
643
|
}
|
624
644
|
|
625
645
|
assert_equal(true, @decoder.auth?) if command_test?
|
@@ -656,13 +676,13 @@ module RIMS::Test
|
|
656
676
|
|
657
677
|
assert_imap_command('AUTHENTICATE cram-md5', client_input_text: "*\r\n") {|assert|
|
658
678
|
assert.equal("+ #{server_client_data_base64_pair_list[0][0]}")
|
659
|
-
assert.match(/^#{tag} BAD /)
|
679
|
+
assert.match(/^#{tag} BAD AUTHENTICATE/, peek_next_line: true).match(/fail/)
|
660
680
|
}
|
661
681
|
|
662
682
|
assert_imap_command('AUTHENTICATE cram-md5',
|
663
683
|
client_input_text: server_client_data_base64_pair_list[1][1] + "\r\n") {|assert|
|
664
684
|
assert.equal("+ #{server_client_data_base64_pair_list[1][0]}")
|
665
|
-
assert.match(/^#{tag} NO /)
|
685
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/auth.* fail/)
|
666
686
|
}
|
667
687
|
|
668
688
|
assert_equal(false, @decoder.auth?) if command_test?
|
@@ -676,7 +696,7 @@ module RIMS::Test
|
|
676
696
|
assert_equal(true, @decoder.auth?) if command_test?
|
677
697
|
|
678
698
|
assert_imap_command('AUTHENTICATE cram-md5', client_input_text: '') {|assert|
|
679
|
-
assert.match(/^#{tag} NO /, peek_next_line: true).match(/
|
699
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/dup.* auth/)
|
680
700
|
}
|
681
701
|
|
682
702
|
assert_imap_command('LOGOUT') {|assert|
|
@@ -704,7 +724,7 @@ module RIMS::Test
|
|
704
724
|
assert_equal(false, @decoder.auth?) if command_test?
|
705
725
|
|
706
726
|
assert_imap_command('LOGIN foo detarame') {|assert|
|
707
|
-
assert.match(/^#{tag} NO /)
|
727
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/fail.* login/)
|
708
728
|
}
|
709
729
|
|
710
730
|
assert_equal(false, @decoder.auth?) if command_test?
|
@@ -716,7 +736,7 @@ module RIMS::Test
|
|
716
736
|
assert_equal(true, @decoder.auth?) if command_test?
|
717
737
|
|
718
738
|
assert_imap_command('LOGIN foo open_sesame') {|assert|
|
719
|
-
assert.match(/^#{tag} NO/)
|
739
|
+
assert.match(/^#{tag} NO/, peek_next_line: true).match(/dup.* login/)
|
720
740
|
}
|
721
741
|
|
722
742
|
assert_equal(true, @decoder.auth?) if command_test?
|
@@ -767,7 +787,7 @@ module RIMS::Test
|
|
767
787
|
end
|
768
788
|
|
769
789
|
assert_imap_command('SELECT INBOX') {|assert|
|
770
|
-
assert.match(/^#{tag} NO /)
|
790
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
771
791
|
}
|
772
792
|
|
773
793
|
if (command_test?) then
|
@@ -898,7 +918,7 @@ module RIMS::Test
|
|
898
918
|
end
|
899
919
|
|
900
920
|
assert_imap_command('EXAMINE INBOX') {|assert|
|
901
|
-
assert.match(/^#{tag} NO /)
|
921
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
902
922
|
}
|
903
923
|
|
904
924
|
if (command_test?) then
|
@@ -1008,7 +1028,7 @@ module RIMS::Test
|
|
1008
1028
|
assert_equal(false, @decoder.auth?) if command_test?
|
1009
1029
|
|
1010
1030
|
assert_imap_command('CREATE foo') {|assert|
|
1011
|
-
assert.match(/^#{tag} NO /)
|
1031
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
1012
1032
|
}
|
1013
1033
|
|
1014
1034
|
assert_equal(false, @decoder.auth?) if command_test?
|
@@ -1031,7 +1051,7 @@ module RIMS::Test
|
|
1031
1051
|
}
|
1032
1052
|
|
1033
1053
|
assert_imap_command('CREATE inbox') {|assert|
|
1034
|
-
assert.match(/^#{tag} NO /)
|
1054
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/dup.* mailbox/)
|
1035
1055
|
}
|
1036
1056
|
|
1037
1057
|
assert_imap_command('LOGOUT') {|assert|
|
@@ -1098,7 +1118,7 @@ module RIMS::Test
|
|
1098
1118
|
assert_equal(false, @decoder.auth?) if command_test?
|
1099
1119
|
|
1100
1120
|
assert_imap_command('DELETE foo') {|assert|
|
1101
|
-
assert.match(/^#{tag} NO /)
|
1121
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
1102
1122
|
}
|
1103
1123
|
|
1104
1124
|
open_mail_store{
|
@@ -1124,7 +1144,7 @@ module RIMS::Test
|
|
1124
1144
|
}
|
1125
1145
|
|
1126
1146
|
assert_imap_command('DELETE bar') {|assert|
|
1127
|
-
assert.match(/^#{tag} NO /)
|
1147
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not found.* mailbox/)
|
1128
1148
|
}
|
1129
1149
|
|
1130
1150
|
open_mail_store{
|
@@ -1133,7 +1153,7 @@ module RIMS::Test
|
|
1133
1153
|
}
|
1134
1154
|
|
1135
1155
|
assert_imap_command('DELETE inbox') {|assert|
|
1136
|
-
assert.match(/^#{tag} NO /)
|
1156
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not delete.* [Ii][Nn][Bb][Oo][Xx]/)
|
1137
1157
|
}
|
1138
1158
|
|
1139
1159
|
if (command_test?) then
|
@@ -1211,7 +1231,7 @@ module RIMS::Test
|
|
1211
1231
|
assert_equal(false, @decoder.auth?) if command_test?
|
1212
1232
|
|
1213
1233
|
assert_imap_command('RENAME foo bar') {|assert|
|
1214
|
-
assert.match(/^#{tag} NO /)
|
1234
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
1215
1235
|
}
|
1216
1236
|
|
1217
1237
|
open_mail_store{
|
@@ -1237,7 +1257,7 @@ module RIMS::Test
|
|
1237
1257
|
}
|
1238
1258
|
|
1239
1259
|
assert_imap_command('RENAME nobox baz') {|assert|
|
1240
|
-
assert.match(/^#{tag} NO /)
|
1260
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not found.* mailbox/)
|
1241
1261
|
}
|
1242
1262
|
|
1243
1263
|
open_mail_store{
|
@@ -1245,7 +1265,7 @@ module RIMS::Test
|
|
1245
1265
|
}
|
1246
1266
|
|
1247
1267
|
assert_imap_command('RENAME INBOX baz') {|assert|
|
1248
|
-
assert.match(/^#{tag} NO /)
|
1268
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not rename.* [Ii][Nn][Bb][Oo][Xx]/)
|
1249
1269
|
}
|
1250
1270
|
|
1251
1271
|
open_mail_store{
|
@@ -1254,7 +1274,7 @@ module RIMS::Test
|
|
1254
1274
|
}
|
1255
1275
|
|
1256
1276
|
assert_imap_command('RENAME bar inbox') {|assert|
|
1257
|
-
assert.match(/^#{tag} NO /)
|
1277
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/dup.* mailbox/)
|
1258
1278
|
}
|
1259
1279
|
|
1260
1280
|
open_mail_store{
|
@@ -1331,7 +1351,7 @@ module RIMS::Test
|
|
1331
1351
|
assert_equal(false, @decoder.auth?) if command_test?
|
1332
1352
|
|
1333
1353
|
assert_imap_command('SUBSCRIBE INBOX') {|assert|
|
1334
|
-
assert.match(/^#{tag} NO /)
|
1354
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
1335
1355
|
}
|
1336
1356
|
|
1337
1357
|
assert_equal(false, @decoder.auth?) if command_test?
|
@@ -1400,7 +1420,7 @@ module RIMS::Test
|
|
1400
1420
|
assert_equal(false, @decoder.auth?) if command_test?
|
1401
1421
|
|
1402
1422
|
assert_imap_command('UNSUBSCRIBE INBOX') {|assert|
|
1403
|
-
assert.match(/^#{tag} NO /)
|
1423
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
1404
1424
|
}
|
1405
1425
|
|
1406
1426
|
assert_equal(false, @decoder.auth?) if command_test?
|
@@ -1412,7 +1432,7 @@ module RIMS::Test
|
|
1412
1432
|
assert_equal(true, @decoder.auth?) if command_test?
|
1413
1433
|
|
1414
1434
|
assert_imap_command('UNSUBSCRIBE INBOX') {|assert|
|
1415
|
-
assert.
|
1435
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not implemented/)
|
1416
1436
|
}
|
1417
1437
|
}
|
1418
1438
|
end
|
@@ -1433,7 +1453,7 @@ module RIMS::Test
|
|
1433
1453
|
assert_equal(false, @decoder.auth?) if command_test?
|
1434
1454
|
|
1435
1455
|
assert_imap_command('LIST "" ""') {|assert|
|
1436
|
-
assert.match(/^#{tag} NO /)
|
1456
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
1437
1457
|
}
|
1438
1458
|
|
1439
1459
|
assert_equal(false, @decoder.auth?) if command_test?
|
@@ -1548,7 +1568,7 @@ module RIMS::Test
|
|
1548
1568
|
assert_equal(false, @decoder.auth?) if command_test?
|
1549
1569
|
|
1550
1570
|
assert_imap_command('STATUS nobox (MESSAGES)') {|assert|
|
1551
|
-
assert.match(/^#{tag} NO /)
|
1571
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
1552
1572
|
}
|
1553
1573
|
|
1554
1574
|
assert_equal(false, @decoder.auth?) if command_test?
|
@@ -1560,7 +1580,7 @@ module RIMS::Test
|
|
1560
1580
|
assert_equal(true, @decoder.auth?) if command_test?
|
1561
1581
|
|
1562
1582
|
assert_imap_command('STATUS nobox (MESSAGES)') {|assert|
|
1563
|
-
assert.match(/^#{tag} NO /)
|
1583
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not found.* mailbox/)
|
1564
1584
|
}
|
1565
1585
|
|
1566
1586
|
assert_imap_command('STATUS INBOX (MESSAGES)') {|assert|
|
@@ -1618,12 +1638,17 @@ module RIMS::Test
|
|
1618
1638
|
assert.equal("#{tag} OK STATUS completed")
|
1619
1639
|
}
|
1620
1640
|
|
1641
|
+
assert_imap_command('STATUS INBOX ()') {|assert|
|
1642
|
+
assert.equal('* STATUS "INBOX" ()')
|
1643
|
+
assert.equal("#{tag} OK STATUS completed")
|
1644
|
+
}
|
1645
|
+
|
1621
1646
|
assert_imap_command('STATUS INBOX MESSAGES') {|assert|
|
1622
|
-
assert.match(/^#{tag} BAD /)
|
1647
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
1623
1648
|
}
|
1624
1649
|
|
1625
1650
|
assert_imap_command('STATUS INBOX (DETARAME)') {|assert|
|
1626
|
-
assert.match(/^#{tag} BAD /)
|
1651
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
1627
1652
|
}
|
1628
1653
|
|
1629
1654
|
assert_imap_command('LOGOUT') {|assert|
|
@@ -1680,7 +1705,7 @@ module RIMS::Test
|
|
1680
1705
|
assert_equal(false, @decoder.auth?) if command_test?
|
1681
1706
|
|
1682
1707
|
assert_imap_command('LSUB "" *') {|assert|
|
1683
|
-
assert.match(/^#{tag} NO /)
|
1708
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
1684
1709
|
}
|
1685
1710
|
|
1686
1711
|
assert_equal(false, @decoder.auth?) if command_test?
|
@@ -1747,7 +1772,7 @@ module RIMS::Test
|
|
1747
1772
|
assert_equal(false, @decoder.auth?) if command_test?
|
1748
1773
|
|
1749
1774
|
assert_imap_command('APPEND INBOX a') {|assert|
|
1750
|
-
assert.match(/^#{tag} NO /, peek_next_line: true).no_match(/\[TRYCREATE\]/)
|
1775
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/, peek_next_line: true).no_match(/\[TRYCREATE\]/)
|
1751
1776
|
}
|
1752
1777
|
|
1753
1778
|
open_mail_store{
|
@@ -1805,7 +1830,7 @@ module RIMS::Test
|
|
1805
1830
|
}
|
1806
1831
|
|
1807
1832
|
assert_imap_command('APPEND INBOX (\Answered \Flagged \Deleted \Seen \Draft) "19-Nov-1975 12:34:56 +0900" NIL x') {|assert|
|
1808
|
-
assert.match(/^#{tag} BAD /)
|
1833
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
1809
1834
|
}
|
1810
1835
|
|
1811
1836
|
open_mail_store{
|
@@ -1813,7 +1838,7 @@ module RIMS::Test
|
|
1813
1838
|
}
|
1814
1839
|
|
1815
1840
|
assert_imap_command('APPEND INBOX "19-Nov-1975 12:34:56 +0900" (\Answered \Flagged \Deleted \Seen \Draft) x') {|assert|
|
1816
|
-
assert.match(/^#{tag} BAD /)
|
1841
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
1817
1842
|
}
|
1818
1843
|
|
1819
1844
|
open_mail_store{
|
@@ -1821,7 +1846,7 @@ module RIMS::Test
|
|
1821
1846
|
}
|
1822
1847
|
|
1823
1848
|
assert_imap_command('APPEND INBOX (\Recent) x') {|assert|
|
1824
|
-
assert.match(/^#{tag} BAD /)
|
1849
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
1825
1850
|
}
|
1826
1851
|
|
1827
1852
|
open_mail_store{
|
@@ -1829,7 +1854,7 @@ module RIMS::Test
|
|
1829
1854
|
}
|
1830
1855
|
|
1831
1856
|
assert_imap_command('APPEND INBOX "bad date-time" x') {|assert|
|
1832
|
-
assert.match(/^#{tag} BAD /)
|
1857
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
1833
1858
|
}
|
1834
1859
|
|
1835
1860
|
open_mail_store{
|
@@ -1837,7 +1862,7 @@ module RIMS::Test
|
|
1837
1862
|
}
|
1838
1863
|
|
1839
1864
|
assert_imap_command('APPEND nobox x') {|assert|
|
1840
|
-
assert.match(/^#{tag} NO \[TRYCREATE\]/)
|
1865
|
+
assert.match(/^#{tag} NO \[TRYCREATE\]/, peek_next_line: true).match(/not found.* mailbox/)
|
1841
1866
|
}
|
1842
1867
|
|
1843
1868
|
open_mail_store{
|
@@ -1909,7 +1934,7 @@ module RIMS::Test
|
|
1909
1934
|
end
|
1910
1935
|
|
1911
1936
|
assert_imap_command('CHECK') {|assert|
|
1912
|
-
assert.match(/^#{tag} NO /)
|
1937
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
1913
1938
|
}
|
1914
1939
|
|
1915
1940
|
if (command_test?) then
|
@@ -1927,7 +1952,7 @@ module RIMS::Test
|
|
1927
1952
|
end
|
1928
1953
|
|
1929
1954
|
assert_imap_command('CHECK') {|assert|
|
1930
|
-
assert.match(/^#{tag} NO /)
|
1955
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not selected/)
|
1931
1956
|
}
|
1932
1957
|
|
1933
1958
|
assert_imap_command('SELECT INBOX') {|assert|
|
@@ -1988,7 +2013,7 @@ module RIMS::Test
|
|
1988
2013
|
end
|
1989
2014
|
|
1990
2015
|
assert_imap_command('CLOSE') {|assert|
|
1991
|
-
assert.match(/^#{tag} NO /)
|
2016
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
1992
2017
|
}
|
1993
2018
|
|
1994
2019
|
if (command_test?) then
|
@@ -2006,7 +2031,7 @@ module RIMS::Test
|
|
2006
2031
|
end
|
2007
2032
|
|
2008
2033
|
assert_imap_command('CLOSE') {|assert|
|
2009
|
-
assert.match(/^#{tag} NO /)
|
2034
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not selected/)
|
2010
2035
|
}
|
2011
2036
|
|
2012
2037
|
assert_imap_command('SELECT INBOX') {|assert|
|
@@ -2024,7 +2049,13 @@ module RIMS::Test
|
|
2024
2049
|
end
|
2025
2050
|
|
2026
2051
|
assert_imap_command('CLOSE') {|assert|
|
2027
|
-
|
2052
|
+
# see: RFC 3501 / 6.4.2. CLOSE Command
|
2053
|
+
# <https://tools.ietf.org/html/rfc3501#section-6.4.2>
|
2054
|
+
#
|
2055
|
+
# The CLOSE command permanently removes all messages that have the
|
2056
|
+
# \Deleted flag set from the currently selected mailbox, and returns
|
2057
|
+
# to the authenticated state from the selected state. No untagged
|
2058
|
+
# EXPUNGE responses are sent.
|
2028
2059
|
assert.equal("#{tag} OK CLOSE completed")
|
2029
2060
|
}
|
2030
2061
|
|
@@ -2093,7 +2124,7 @@ module RIMS::Test
|
|
2093
2124
|
end
|
2094
2125
|
|
2095
2126
|
assert_imap_command('CLOSE') {|assert|
|
2096
|
-
assert.match(/^#{tag} NO /)
|
2127
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
2097
2128
|
}
|
2098
2129
|
|
2099
2130
|
if (command_test?) then
|
@@ -2111,7 +2142,7 @@ module RIMS::Test
|
|
2111
2142
|
end
|
2112
2143
|
|
2113
2144
|
assert_imap_command('CLOSE') {|assert|
|
2114
|
-
assert.match(/^#{tag} NO /)
|
2145
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not selected/)
|
2115
2146
|
}
|
2116
2147
|
|
2117
2148
|
assert_imap_command('EXAMINE INBOX') {|assert|
|
@@ -2179,7 +2210,7 @@ module RIMS::Test
|
|
2179
2210
|
end
|
2180
2211
|
|
2181
2212
|
assert_imap_command('EXPUNGE') {|assert|
|
2182
|
-
assert.match(/^#{tag} NO /)
|
2213
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
2183
2214
|
}
|
2184
2215
|
|
2185
2216
|
if (command_test?) then
|
@@ -2197,7 +2228,7 @@ module RIMS::Test
|
|
2197
2228
|
end
|
2198
2229
|
|
2199
2230
|
assert_imap_command('EXPUNGE') {|assert|
|
2200
|
-
assert.match(/^#{tag} NO /)
|
2231
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not selected/)
|
2201
2232
|
}
|
2202
2233
|
|
2203
2234
|
assert_imap_command('SELECT INBOX') {|assert|
|
@@ -2338,7 +2369,7 @@ module RIMS::Test
|
|
2338
2369
|
end
|
2339
2370
|
|
2340
2371
|
assert_imap_command('EXPUNGE') {|assert|
|
2341
|
-
assert.match(/^#{tag} NO /)
|
2372
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
2342
2373
|
}
|
2343
2374
|
|
2344
2375
|
if (command_test?) then
|
@@ -2356,7 +2387,7 @@ module RIMS::Test
|
|
2356
2387
|
end
|
2357
2388
|
|
2358
2389
|
assert_imap_command('EXPUNGE') {|assert|
|
2359
|
-
assert.match(/^#{tag} NO /)
|
2390
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not selected/)
|
2360
2391
|
}
|
2361
2392
|
|
2362
2393
|
assert_imap_command('EXAMINE INBOX') {|assert|
|
@@ -2370,7 +2401,7 @@ module RIMS::Test
|
|
2370
2401
|
end
|
2371
2402
|
|
2372
2403
|
assert_imap_command('EXPUNGE') {|assert|
|
2373
|
-
assert.match(/^#{tag} NO /)
|
2404
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/cannot expunge.* read-only/)
|
2374
2405
|
}
|
2375
2406
|
|
2376
2407
|
open_mail_store{
|
@@ -2405,7 +2436,7 @@ module RIMS::Test
|
|
2405
2436
|
end
|
2406
2437
|
|
2407
2438
|
assert_imap_command('SEARCH ALL') {|assert|
|
2408
|
-
assert.match(/^#{tag} NO /)
|
2439
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
2409
2440
|
}
|
2410
2441
|
|
2411
2442
|
if (command_test?) then
|
@@ -2423,7 +2454,7 @@ module RIMS::Test
|
|
2423
2454
|
end
|
2424
2455
|
|
2425
2456
|
assert_imap_command('SEARCH ALL') {|assert|
|
2426
|
-
assert.match(/^#{tag} NO /)
|
2457
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not selected/)
|
2427
2458
|
}
|
2428
2459
|
|
2429
2460
|
assert_imap_command('SELECT INBOX') {|assert|
|
@@ -2506,11 +2537,11 @@ module RIMS::Test
|
|
2506
2537
|
}
|
2507
2538
|
|
2508
2539
|
assert_imap_command('SEARCH bad-search-command') {|assert|
|
2509
|
-
assert.match(/^#{tag} BAD /)
|
2540
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
2510
2541
|
}
|
2511
2542
|
|
2512
2543
|
assert_imap_command('SEARCH') {|assert|
|
2513
|
-
assert.match(/^#{tag} BAD /)
|
2544
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
2514
2545
|
}
|
2515
2546
|
|
2516
2547
|
assert_imap_command('LOGOUT') {|assert|
|
@@ -2561,7 +2592,7 @@ module RIMS::Test
|
|
2561
2592
|
end
|
2562
2593
|
|
2563
2594
|
assert_imap_command('SEARCH CHARSET utf-8 ALL') {|assert|
|
2564
|
-
assert.match(/^#{tag} NO /)
|
2595
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
2565
2596
|
}
|
2566
2597
|
|
2567
2598
|
if (command_test?) then
|
@@ -2579,7 +2610,7 @@ module RIMS::Test
|
|
2579
2610
|
end
|
2580
2611
|
|
2581
2612
|
assert_imap_command('SEARCH CHARSET utf-8 ALL') {|assert|
|
2582
|
-
assert.match(/^#{tag} NO /)
|
2613
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not selected/)
|
2583
2614
|
}
|
2584
2615
|
|
2585
2616
|
assert_imap_command('SELECT INBOX') {|assert|
|
@@ -2609,11 +2640,23 @@ module RIMS::Test
|
|
2609
2640
|
|
2610
2641
|
utf8_msg = "\u306F\u306B\u307B"
|
2611
2642
|
assert_imap_command("SEARCH CHARSET utf-8 BODY {#{utf8_msg.bytesize}}\r\n#{utf8_msg}".b) {|assert|
|
2612
|
-
assert.
|
2643
|
+
assert.match(/^\+ /)
|
2613
2644
|
assert.equal("* SEARCH 4 5\r\n")
|
2614
2645
|
assert.equal("#{tag} OK SEARCH completed\r\n")
|
2615
2646
|
}
|
2616
2647
|
|
2648
|
+
assert_imap_command('SEARCH CHARSET') {|assert|
|
2649
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
2650
|
+
}
|
2651
|
+
|
2652
|
+
assert_imap_command('SEARCH CHARSET NIL') {|assert|
|
2653
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
2654
|
+
}
|
2655
|
+
|
2656
|
+
assert_imap_command('SEARCH CHARSET utf-8') {|assert|
|
2657
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
2658
|
+
}
|
2659
|
+
|
2617
2660
|
assert_imap_command('LOGOUT') {|assert|
|
2618
2661
|
assert.match(/^\* BYE /)
|
2619
2662
|
assert.equal("#{tag} OK LOGOUT completed")
|
@@ -2663,7 +2706,7 @@ module RIMS::Test
|
|
2663
2706
|
end
|
2664
2707
|
|
2665
2708
|
assert_imap_command('SEARCH CHARSET utf-8 ALL') {|assert|
|
2666
|
-
assert.match(/^#{tag} NO /)
|
2709
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
2667
2710
|
}
|
2668
2711
|
|
2669
2712
|
if (command_test?) then
|
@@ -2681,7 +2724,7 @@ module RIMS::Test
|
|
2681
2724
|
end
|
2682
2725
|
|
2683
2726
|
assert_imap_command('SEARCH CHARSET utf-8 ALL') {|assert|
|
2684
|
-
assert.match(/^#{tag} NO /)
|
2727
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not selected/)
|
2685
2728
|
}
|
2686
2729
|
|
2687
2730
|
assert_imap_command('SELECT INBOX') {|assert|
|
@@ -2716,11 +2759,23 @@ module RIMS::Test
|
|
2716
2759
|
|
2717
2760
|
utf8_msg = "\u306F\u306B\u307B"
|
2718
2761
|
assert_imap_command("SEARCH CHARSET utf-8 TEXT {#{utf8_msg.bytesize}}\r\n#{utf8_msg}".b) {|assert|
|
2719
|
-
assert.
|
2762
|
+
assert.match(/^\+ /)
|
2720
2763
|
assert.equal("* SEARCH 4 5\r\n")
|
2721
2764
|
assert.equal("#{tag} OK SEARCH completed\r\n")
|
2722
2765
|
}
|
2723
2766
|
|
2767
|
+
assert_imap_command('SEARCH CHARSET') {|assert|
|
2768
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
2769
|
+
}
|
2770
|
+
|
2771
|
+
assert_imap_command('SEARCH CHARSET NIL') {|assert|
|
2772
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
2773
|
+
}
|
2774
|
+
|
2775
|
+
assert_imap_command('SEARCH CHARSET utf-8') {|assert|
|
2776
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
2777
|
+
}
|
2778
|
+
|
2724
2779
|
assert_imap_command('LOGOUT') {|assert|
|
2725
2780
|
assert.match(/^\* BYE /)
|
2726
2781
|
assert.equal("#{tag} OK LOGOUT completed")
|
@@ -2756,7 +2811,7 @@ module RIMS::Test
|
|
2756
2811
|
end
|
2757
2812
|
|
2758
2813
|
assert_imap_command('FETCH 1:* FAST') {|assert|
|
2759
|
-
assert.match(/^#{tag} NO /)
|
2814
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
2760
2815
|
}
|
2761
2816
|
|
2762
2817
|
assert_imap_command('LOGIN foo open_sesame') {|assert|
|
@@ -2769,7 +2824,7 @@ module RIMS::Test
|
|
2769
2824
|
end
|
2770
2825
|
|
2771
2826
|
assert_imap_command('FETCH 1:* FAST') {|assert|
|
2772
|
-
assert.match(/^#{tag} NO /)
|
2827
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not selected/)
|
2773
2828
|
}
|
2774
2829
|
|
2775
2830
|
assert_imap_command('SELECT INBOX') {|assert|
|
@@ -2815,6 +2870,18 @@ module RIMS::Test
|
|
2815
2870
|
assert_msg_flags(3, seen: false, recent: true)
|
2816
2871
|
}
|
2817
2872
|
|
2873
|
+
assert(10 < @simple_mail.raw_source.bytesize)
|
2874
|
+
assert(10 + 10 < @simple_mail.raw_source.bytesize)
|
2875
|
+
assert_imap_command('FETCH 1 BODY[]<10.10>') {|assert|
|
2876
|
+
assert.equal_lines("* 1 FETCH (BODY[]<10> #{literal(@simple_mail.raw_source[10, 10])})".b)
|
2877
|
+
assert.equal("#{tag} OK FETCH completed")
|
2878
|
+
}
|
2879
|
+
|
2880
|
+
open_mail_store{
|
2881
|
+
assert_msg_flags(2, seen: true, recent: true)
|
2882
|
+
assert_msg_flags(3, seen: false, recent: true)
|
2883
|
+
}
|
2884
|
+
|
2818
2885
|
assert_imap_command('FETCH 2 BODY.PEEK[1]') {|assert|
|
2819
2886
|
assert.equal_lines(%Q'* 2 FETCH (BODY[1] "#{@mpart_mail.parts[0].body.raw_source}")'.b)
|
2820
2887
|
assert.equal("#{tag} OK FETCH completed")
|
@@ -2835,6 +2902,18 @@ module RIMS::Test
|
|
2835
2902
|
assert_msg_flags(3, seen: false, recent: true)
|
2836
2903
|
}
|
2837
2904
|
|
2905
|
+
assert(10 < @simple_mail.raw_source.bytesize)
|
2906
|
+
assert(10 + 10 < @simple_mail.raw_source.bytesize)
|
2907
|
+
assert_imap_command('FETCH 2 BODY[]<10.10>', uid: true) {|assert|
|
2908
|
+
assert.equal_lines("* 1 FETCH (UID 2 BODY[]<10> #{literal(@simple_mail.raw_source[10, 10])})".b)
|
2909
|
+
assert.equal("#{tag} OK FETCH completed")
|
2910
|
+
}
|
2911
|
+
|
2912
|
+
open_mail_store{
|
2913
|
+
assert_msg_flags(2, seen: true, recent: true)
|
2914
|
+
assert_msg_flags(3, seen: false, recent: true)
|
2915
|
+
}
|
2916
|
+
|
2838
2917
|
assert_imap_command('FETCH 3 (UID BODY.PEEK[1])', uid: true) {|assert|
|
2839
2918
|
assert.equal_lines(%Q'* 2 FETCH (UID 3 BODY[1] "#{@mpart_mail.parts[0].body.raw_source}")'.b)
|
2840
2919
|
assert.equal("#{tag} OK FETCH completed")
|
@@ -2845,6 +2924,10 @@ module RIMS::Test
|
|
2845
2924
|
assert_msg_flags(3, seen: false, recent: true)
|
2846
2925
|
}
|
2847
2926
|
|
2927
|
+
assert_imap_command('FETCH 1 bad-fetch-attr') {|assert|
|
2928
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
2929
|
+
}
|
2930
|
+
|
2848
2931
|
assert_imap_command('LOGOUT') {|assert|
|
2849
2932
|
assert.match(/^\* BYE /)
|
2850
2933
|
assert.equal("#{tag} OK LOGOUT completed")
|
@@ -2880,7 +2963,7 @@ module RIMS::Test
|
|
2880
2963
|
end
|
2881
2964
|
|
2882
2965
|
assert_imap_command('FETCH 1:* FAST') {|assert|
|
2883
|
-
assert.match(/^#{tag} NO /)
|
2966
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
2884
2967
|
}
|
2885
2968
|
|
2886
2969
|
assert_imap_command('LOGIN foo open_sesame') {|assert|
|
@@ -2893,7 +2976,7 @@ module RIMS::Test
|
|
2893
2976
|
end
|
2894
2977
|
|
2895
2978
|
assert_imap_command('FETCH 1:* FAST') {|assert|
|
2896
|
-
assert.match(/^#{tag} NO /)
|
2979
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not selected/)
|
2897
2980
|
}
|
2898
2981
|
|
2899
2982
|
assert_imap_command('EXAMINE INBOX') {|assert|
|
@@ -2939,6 +3022,18 @@ module RIMS::Test
|
|
2939
3022
|
assert_msg_flags(3, seen: false, recent: true)
|
2940
3023
|
}
|
2941
3024
|
|
3025
|
+
assert(10 < @simple_mail.raw_source.bytesize)
|
3026
|
+
assert(10 + 10 < @simple_mail.raw_source.bytesize)
|
3027
|
+
assert_imap_command('FETCH 1 BODY[]<10.10>') {|assert|
|
3028
|
+
assert.equal_lines("* 1 FETCH (BODY[]<10> #{literal(@simple_mail.raw_source[10, 10])})".b)
|
3029
|
+
assert.equal("#{tag} OK FETCH completed")
|
3030
|
+
}
|
3031
|
+
|
3032
|
+
open_mail_store{
|
3033
|
+
assert_msg_flags(2, seen: false, recent: true)
|
3034
|
+
assert_msg_flags(3, seen: false, recent: true)
|
3035
|
+
}
|
3036
|
+
|
2942
3037
|
assert_imap_command('FETCH 2 BODY.PEEK[1]') {|assert|
|
2943
3038
|
assert.equal_lines(%Q'* 2 FETCH (BODY[1] "#{@mpart_mail.parts[0].body.raw_source}")'.b)
|
2944
3039
|
assert.equal("#{tag} OK FETCH completed")
|
@@ -2959,6 +3054,18 @@ module RIMS::Test
|
|
2959
3054
|
assert_msg_flags(3, seen: false, recent: true)
|
2960
3055
|
}
|
2961
3056
|
|
3057
|
+
assert(10 < @simple_mail.raw_source.bytesize)
|
3058
|
+
assert(10 + 10 < @simple_mail.raw_source.bytesize)
|
3059
|
+
assert_imap_command('FETCH 2 BODY[]<10.10>', uid: true) {|assert|
|
3060
|
+
assert.equal_lines("* 1 FETCH (UID 2 BODY[]<10> #{literal(@simple_mail.raw_source[10, 10])})".b)
|
3061
|
+
assert.equal("#{tag} OK FETCH completed")
|
3062
|
+
}
|
3063
|
+
|
3064
|
+
open_mail_store{
|
3065
|
+
assert_msg_flags(2, seen: false, recent: true)
|
3066
|
+
assert_msg_flags(3, seen: false, recent: true)
|
3067
|
+
}
|
3068
|
+
|
2962
3069
|
assert_imap_command('FETCH 3 (UID BODY.PEEK[1])', uid: true) {|assert|
|
2963
3070
|
assert.equal_lines(%Q'* 2 FETCH (UID 3 BODY[1] "#{@mpart_mail.parts[0].body.raw_source}")'.b)
|
2964
3071
|
assert.equal("#{tag} OK FETCH completed")
|
@@ -2969,6 +3076,10 @@ module RIMS::Test
|
|
2969
3076
|
assert_msg_flags(3, seen: false, recent: true)
|
2970
3077
|
}
|
2971
3078
|
|
3079
|
+
assert_imap_command('FETCH 1 bad-fetch-attr') {|assert|
|
3080
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
3081
|
+
}
|
3082
|
+
|
2972
3083
|
assert_imap_command('LOGOUT') {|assert|
|
2973
3084
|
assert.match(/^\* BYE /)
|
2974
3085
|
assert.equal("#{tag} OK LOGOUT completed")
|
@@ -3012,7 +3123,7 @@ module RIMS::Test
|
|
3012
3123
|
end
|
3013
3124
|
|
3014
3125
|
assert_imap_command('STORE 1 +FLAGS (\Answered)') {|assert|
|
3015
|
-
assert.match(/^#{tag} NO /)
|
3126
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
3016
3127
|
}
|
3017
3128
|
|
3018
3129
|
assert_imap_command('LOGIN foo open_sesame') {|assert|
|
@@ -3025,7 +3136,7 @@ module RIMS::Test
|
|
3025
3136
|
end
|
3026
3137
|
|
3027
3138
|
assert_imap_command('STORE 1 +FLAGS (\Answered)') {|assert|
|
3028
|
-
assert.match(/^#{tag} NO /)
|
3139
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not selected/)
|
3029
3140
|
}
|
3030
3141
|
|
3031
3142
|
assert_imap_command('SELECT INBOX') {|assert|
|
@@ -3249,6 +3360,78 @@ module RIMS::Test
|
|
3249
3360
|
assert_mbox_flag_num(answered: 4, flagged: 3, deleted: 2, seen: 1, draft: 0, recent: 5)
|
3250
3361
|
}
|
3251
3362
|
|
3363
|
+
assert_imap_command('STORE 1:5 +FLAGS ()') {|assert|
|
3364
|
+
assert.equal('* 1 FETCH (FLAGS (\Recent))')
|
3365
|
+
assert.equal('* 2 FETCH (FLAGS (\Answered \Recent))')
|
3366
|
+
assert.equal('* 3 FETCH (FLAGS (\Answered \Flagged \Recent))')
|
3367
|
+
assert.equal('* 4 FETCH (FLAGS (\Answered \Flagged \Deleted \Recent))')
|
3368
|
+
assert.equal('* 5 FETCH (FLAGS (\Answered \Flagged \Deleted \Seen \Recent))')
|
3369
|
+
assert.equal("#{tag} OK STORE completed")
|
3370
|
+
}
|
3371
|
+
|
3372
|
+
open_mail_store{
|
3373
|
+
assert_msg_uid( 1, 3, 5, 7, 9)
|
3374
|
+
assert_flag_enabled_msgs('answered', 3, 5, 7, 9)
|
3375
|
+
assert_flag_enabled_msgs('flagged' , 5, 7, 9)
|
3376
|
+
assert_flag_enabled_msgs('deleted' , 7, 9)
|
3377
|
+
assert_flag_enabled_msgs('seen' , 9)
|
3378
|
+
assert_flag_enabled_msgs('draft' , )
|
3379
|
+
assert_flag_enabled_msgs('recent' , 1, 3, 5, 7, 9)
|
3380
|
+
assert_mbox_flag_num(answered: 4, flagged: 3, deleted: 2, seen: 1, draft: 0, recent: 5)
|
3381
|
+
}
|
3382
|
+
|
3383
|
+
assert_imap_command('STORE 1:5 -FLAGS ()') {|assert|
|
3384
|
+
assert.equal('* 1 FETCH (FLAGS (\Recent))')
|
3385
|
+
assert.equal('* 2 FETCH (FLAGS (\Answered \Recent))')
|
3386
|
+
assert.equal('* 3 FETCH (FLAGS (\Answered \Flagged \Recent))')
|
3387
|
+
assert.equal('* 4 FETCH (FLAGS (\Answered \Flagged \Deleted \Recent))')
|
3388
|
+
assert.equal('* 5 FETCH (FLAGS (\Answered \Flagged \Deleted \Seen \Recent))')
|
3389
|
+
assert.equal("#{tag} OK STORE completed")
|
3390
|
+
}
|
3391
|
+
|
3392
|
+
open_mail_store{
|
3393
|
+
assert_msg_uid( 1, 3, 5, 7, 9)
|
3394
|
+
assert_flag_enabled_msgs('answered', 3, 5, 7, 9)
|
3395
|
+
assert_flag_enabled_msgs('flagged' , 5, 7, 9)
|
3396
|
+
assert_flag_enabled_msgs('deleted' , 7, 9)
|
3397
|
+
assert_flag_enabled_msgs('seen' , 9)
|
3398
|
+
assert_flag_enabled_msgs('draft' , )
|
3399
|
+
assert_flag_enabled_msgs('recent' , 1, 3, 5, 7, 9)
|
3400
|
+
assert_mbox_flag_num(answered: 4, flagged: 3, deleted: 2, seen: 1, draft: 0, recent: 5)
|
3401
|
+
}
|
3402
|
+
|
3403
|
+
assert_imap_command('STORE 1:5 FLAGS ()') {|assert|
|
3404
|
+
assert.equal('* 1 FETCH (FLAGS (\Recent))')
|
3405
|
+
assert.equal('* 2 FETCH (FLAGS (\Recent))')
|
3406
|
+
assert.equal('* 3 FETCH (FLAGS (\Recent))')
|
3407
|
+
assert.equal('* 4 FETCH (FLAGS (\Recent))')
|
3408
|
+
assert.equal('* 5 FETCH (FLAGS (\Recent))')
|
3409
|
+
assert.equal("#{tag} OK STORE completed")
|
3410
|
+
}
|
3411
|
+
|
3412
|
+
open_mail_store{
|
3413
|
+
assert_msg_uid( 1, 3, 5, 7, 9)
|
3414
|
+
assert_flag_enabled_msgs('answered', )
|
3415
|
+
assert_flag_enabled_msgs('flagged' , )
|
3416
|
+
assert_flag_enabled_msgs('deleted' , )
|
3417
|
+
assert_flag_enabled_msgs('seen' , )
|
3418
|
+
assert_flag_enabled_msgs('draft' , )
|
3419
|
+
assert_flag_enabled_msgs('recent' , 1, 3, 5, 7, 9)
|
3420
|
+
assert_mbox_flag_num(answered: 0, flagged: 0, deleted: 0, seen: 0, draft: 0, recent: 5)
|
3421
|
+
}
|
3422
|
+
|
3423
|
+
assert_imap_command('STORE 1 DETARAME (\Flagged)') {|assert|
|
3424
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
3425
|
+
}
|
3426
|
+
|
3427
|
+
assert_imap_command('STORE 1 FLAGS (\Detarame)') {|assert|
|
3428
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
3429
|
+
}
|
3430
|
+
|
3431
|
+
assert_imap_command('STORE 1 FLAGS NIL') {|assert|
|
3432
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
3433
|
+
}
|
3434
|
+
|
3252
3435
|
assert_imap_command('LOGOUT') {|assert|
|
3253
3436
|
assert.match(/^\* BYE /)
|
3254
3437
|
assert.equal("#{tag} OK LOGOUT completed")
|
@@ -3292,7 +3475,7 @@ module RIMS::Test
|
|
3292
3475
|
end
|
3293
3476
|
|
3294
3477
|
assert_imap_command('STORE 1 +FLAGS.SILENT (\Answered)') {|assert|
|
3295
|
-
assert.match(/^#{tag} NO /)
|
3478
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
3296
3479
|
}
|
3297
3480
|
|
3298
3481
|
assert_imap_command('LOGIN foo open_sesame') {|assert|
|
@@ -3305,7 +3488,7 @@ module RIMS::Test
|
|
3305
3488
|
end
|
3306
3489
|
|
3307
3490
|
assert_imap_command('STORE 1 +FLAGS.SILENT (\Answered)') {|assert|
|
3308
|
-
assert.match(/^#{tag} NO /)
|
3491
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not selected/)
|
3309
3492
|
}
|
3310
3493
|
|
3311
3494
|
assert_imap_command('SELECT INBOX') {|assert|
|
@@ -3494,6 +3677,63 @@ module RIMS::Test
|
|
3494
3677
|
assert_mbox_flag_num(answered: 4, flagged: 3, deleted: 2, seen: 1, draft: 0, recent: 5)
|
3495
3678
|
}
|
3496
3679
|
|
3680
|
+
assert_imap_command('STORE 1:5 +FLAGS.SILENT ()') {|assert|
|
3681
|
+
assert.equal("#{tag} OK STORE completed")
|
3682
|
+
}
|
3683
|
+
|
3684
|
+
open_mail_store{
|
3685
|
+
assert_msg_uid( 1, 3, 5, 7, 9)
|
3686
|
+
assert_flag_enabled_msgs('answered', 3, 5, 7, 9)
|
3687
|
+
assert_flag_enabled_msgs('flagged' , 5, 7, 9)
|
3688
|
+
assert_flag_enabled_msgs('deleted' , 7, 9)
|
3689
|
+
assert_flag_enabled_msgs('seen' , 9)
|
3690
|
+
assert_flag_enabled_msgs('draft' , )
|
3691
|
+
assert_flag_enabled_msgs('recent' , 1, 3, 5, 7, 9)
|
3692
|
+
assert_mbox_flag_num(answered: 4, flagged: 3, deleted: 2, seen: 1, draft: 0, recent: 5)
|
3693
|
+
}
|
3694
|
+
|
3695
|
+
assert_imap_command('STORE 1:5 -FLAGS.SILENT ()') {|assert|
|
3696
|
+
assert.equal("#{tag} OK STORE completed")
|
3697
|
+
}
|
3698
|
+
|
3699
|
+
open_mail_store{
|
3700
|
+
assert_msg_uid( 1, 3, 5, 7, 9)
|
3701
|
+
assert_flag_enabled_msgs('answered', 3, 5, 7, 9)
|
3702
|
+
assert_flag_enabled_msgs('flagged' , 5, 7, 9)
|
3703
|
+
assert_flag_enabled_msgs('deleted' , 7, 9)
|
3704
|
+
assert_flag_enabled_msgs('seen' , 9)
|
3705
|
+
assert_flag_enabled_msgs('draft' , )
|
3706
|
+
assert_flag_enabled_msgs('recent' , 1, 3, 5, 7, 9)
|
3707
|
+
assert_mbox_flag_num(answered: 4, flagged: 3, deleted: 2, seen: 1, draft: 0, recent: 5)
|
3708
|
+
}
|
3709
|
+
|
3710
|
+
assert_imap_command('STORE 1:5 FLAGS.SILENT ()') {|assert|
|
3711
|
+
assert.equal("#{tag} OK STORE completed")
|
3712
|
+
}
|
3713
|
+
|
3714
|
+
open_mail_store{
|
3715
|
+
assert_msg_uid( 1, 3, 5, 7, 9)
|
3716
|
+
assert_flag_enabled_msgs('answered', )
|
3717
|
+
assert_flag_enabled_msgs('flagged' , )
|
3718
|
+
assert_flag_enabled_msgs('deleted' , )
|
3719
|
+
assert_flag_enabled_msgs('seen' , )
|
3720
|
+
assert_flag_enabled_msgs('draft' , )
|
3721
|
+
assert_flag_enabled_msgs('recent' , 1, 3, 5, 7, 9)
|
3722
|
+
assert_mbox_flag_num(answered: 0, flagged: 0, deleted: 0, seen: 0, draft: 0, recent: 5)
|
3723
|
+
}
|
3724
|
+
|
3725
|
+
assert_imap_command('STORE 1 FLAGS.DETARAME (\Flagged)') {|assert|
|
3726
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
3727
|
+
}
|
3728
|
+
|
3729
|
+
assert_imap_command('STORE 1 FLAGS.SILENT (\Detarame)') {|assert|
|
3730
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
3731
|
+
}
|
3732
|
+
|
3733
|
+
assert_imap_command('STORE 1 FLAGS.SILENT NIL') {|assert|
|
3734
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
3735
|
+
}
|
3736
|
+
|
3497
3737
|
assert_imap_command('LOGOUT') {|assert|
|
3498
3738
|
assert.match(/^\* BYE /)
|
3499
3739
|
assert.equal("#{tag} OK LOGOUT completed")
|
@@ -3537,7 +3777,7 @@ module RIMS::Test
|
|
3537
3777
|
end
|
3538
3778
|
|
3539
3779
|
assert_imap_command('STORE 1 +FLAGS (\Answered)', uid: true) {|assert|
|
3540
|
-
assert.match(/^#{tag} NO /)
|
3780
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
3541
3781
|
}
|
3542
3782
|
|
3543
3783
|
assert_imap_command('LOGIN foo open_sesame') {|assert|
|
@@ -3550,7 +3790,7 @@ module RIMS::Test
|
|
3550
3790
|
end
|
3551
3791
|
|
3552
3792
|
assert_imap_command('STORE 1 +FLAGS (\Answered)', uid: true) {|assert|
|
3553
|
-
assert.match(/^#{tag} NO /)
|
3793
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not selected/)
|
3554
3794
|
}
|
3555
3795
|
|
3556
3796
|
assert_imap_command('SELECT INBOX') {|assert|
|
@@ -3774,6 +4014,78 @@ module RIMS::Test
|
|
3774
4014
|
assert_mbox_flag_num(answered: 4, flagged: 3, deleted: 2, seen: 1, draft: 0, recent: 5)
|
3775
4015
|
}
|
3776
4016
|
|
4017
|
+
assert_imap_command('STORE 1,3,5,7,9 +FLAGS ()', uid: true) {|assert|
|
4018
|
+
assert.equal('* 1 FETCH (UID 1 FLAGS (\Recent))')
|
4019
|
+
assert.equal('* 2 FETCH (UID 3 FLAGS (\Answered \Recent))')
|
4020
|
+
assert.equal('* 3 FETCH (UID 5 FLAGS (\Answered \Flagged \Recent))')
|
4021
|
+
assert.equal('* 4 FETCH (UID 7 FLAGS (\Answered \Flagged \Deleted \Recent))')
|
4022
|
+
assert.equal('* 5 FETCH (UID 9 FLAGS (\Answered \Flagged \Deleted \Seen \Recent))')
|
4023
|
+
assert.equal("#{tag} OK STORE completed")
|
4024
|
+
}
|
4025
|
+
|
4026
|
+
open_mail_store{
|
4027
|
+
assert_msg_uid( 1, 3, 5, 7, 9)
|
4028
|
+
assert_flag_enabled_msgs('answered', 3, 5, 7, 9)
|
4029
|
+
assert_flag_enabled_msgs('flagged' , 5, 7, 9)
|
4030
|
+
assert_flag_enabled_msgs('deleted' , 7, 9)
|
4031
|
+
assert_flag_enabled_msgs('seen' , 9)
|
4032
|
+
assert_flag_enabled_msgs('draft' , )
|
4033
|
+
assert_flag_enabled_msgs('recent' , 1, 3, 5, 7, 9)
|
4034
|
+
assert_mbox_flag_num(answered: 4, flagged: 3, deleted: 2, seen: 1, draft: 0, recent: 5)
|
4035
|
+
}
|
4036
|
+
|
4037
|
+
assert_imap_command('STORE 1,3,5,7,9 -FLAGS ()', uid: true) {|assert|
|
4038
|
+
assert.equal('* 1 FETCH (UID 1 FLAGS (\Recent))')
|
4039
|
+
assert.equal('* 2 FETCH (UID 3 FLAGS (\Answered \Recent))')
|
4040
|
+
assert.equal('* 3 FETCH (UID 5 FLAGS (\Answered \Flagged \Recent))')
|
4041
|
+
assert.equal('* 4 FETCH (UID 7 FLAGS (\Answered \Flagged \Deleted \Recent))')
|
4042
|
+
assert.equal('* 5 FETCH (UID 9 FLAGS (\Answered \Flagged \Deleted \Seen \Recent))')
|
4043
|
+
assert.equal("#{tag} OK STORE completed")
|
4044
|
+
}
|
4045
|
+
|
4046
|
+
open_mail_store{
|
4047
|
+
assert_msg_uid( 1, 3, 5, 7, 9)
|
4048
|
+
assert_flag_enabled_msgs('answered', 3, 5, 7, 9)
|
4049
|
+
assert_flag_enabled_msgs('flagged' , 5, 7, 9)
|
4050
|
+
assert_flag_enabled_msgs('deleted' , 7, 9)
|
4051
|
+
assert_flag_enabled_msgs('seen' , 9)
|
4052
|
+
assert_flag_enabled_msgs('draft' , )
|
4053
|
+
assert_flag_enabled_msgs('recent' , 1, 3, 5, 7, 9)
|
4054
|
+
assert_mbox_flag_num(answered: 4, flagged: 3, deleted: 2, seen: 1, draft: 0, recent: 5)
|
4055
|
+
}
|
4056
|
+
|
4057
|
+
assert_imap_command('STORE 1,3,5,7,9 FLAGS ()', uid: true) {|assert|
|
4058
|
+
assert.equal('* 1 FETCH (UID 1 FLAGS (\Recent))')
|
4059
|
+
assert.equal('* 2 FETCH (UID 3 FLAGS (\Recent))')
|
4060
|
+
assert.equal('* 3 FETCH (UID 5 FLAGS (\Recent))')
|
4061
|
+
assert.equal('* 4 FETCH (UID 7 FLAGS (\Recent))')
|
4062
|
+
assert.equal('* 5 FETCH (UID 9 FLAGS (\Recent))')
|
4063
|
+
assert.equal("#{tag} OK STORE completed")
|
4064
|
+
}
|
4065
|
+
|
4066
|
+
open_mail_store{
|
4067
|
+
assert_msg_uid( 1, 3, 5, 7, 9)
|
4068
|
+
assert_flag_enabled_msgs('answered', )
|
4069
|
+
assert_flag_enabled_msgs('flagged' , )
|
4070
|
+
assert_flag_enabled_msgs('deleted' , )
|
4071
|
+
assert_flag_enabled_msgs('seen' , )
|
4072
|
+
assert_flag_enabled_msgs('draft' , )
|
4073
|
+
assert_flag_enabled_msgs('recent' , 1, 3, 5, 7, 9)
|
4074
|
+
assert_mbox_flag_num(answered: 0, flagged: 0, deleted: 0, seen: 0, draft: 0, recent: 5)
|
4075
|
+
}
|
4076
|
+
|
4077
|
+
assert_imap_command('STORE 1 DETARAME (\Flagged)', uid: true) {|assert|
|
4078
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
4079
|
+
}
|
4080
|
+
|
4081
|
+
assert_imap_command('STORE 1 FLAGS (\Detarame)', uid: true) {|assert|
|
4082
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
4083
|
+
}
|
4084
|
+
|
4085
|
+
assert_imap_command('STORE 1 FLAGS NIL', uid: true) {|assert|
|
4086
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
4087
|
+
}
|
4088
|
+
|
3777
4089
|
assert_imap_command('LOGOUT') {|assert|
|
3778
4090
|
assert.match(/^\* BYE /)
|
3779
4091
|
assert.equal("#{tag} OK LOGOUT completed")
|
@@ -3817,7 +4129,7 @@ module RIMS::Test
|
|
3817
4129
|
end
|
3818
4130
|
|
3819
4131
|
assert_imap_command('STORE 1 +FLAGS.SILENT (\Answered)', uid: true) {|assert|
|
3820
|
-
assert.match(/^#{tag} NO /)
|
4132
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
3821
4133
|
}
|
3822
4134
|
|
3823
4135
|
assert_imap_command('LOGIN foo open_sesame') {|assert|
|
@@ -3830,7 +4142,7 @@ module RIMS::Test
|
|
3830
4142
|
end
|
3831
4143
|
|
3832
4144
|
assert_imap_command('STORE 1 +FLAGS.SILENT (\Answered)', uid: true) {|assert|
|
3833
|
-
assert.match(/^#{tag} NO /)
|
4145
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not selected/)
|
3834
4146
|
}
|
3835
4147
|
|
3836
4148
|
assert_imap_command('SELECT INBOX') {|assert|
|
@@ -4019,6 +4331,63 @@ module RIMS::Test
|
|
4019
4331
|
assert_mbox_flag_num(answered: 4, flagged: 3, deleted: 2, seen: 1, draft: 0, recent: 5)
|
4020
4332
|
}
|
4021
4333
|
|
4334
|
+
assert_imap_command('STORE 1,3,5,7,9 +FLAGS.SILENT ()', uid: true) {|assert|
|
4335
|
+
assert.equal("#{tag} OK STORE completed")
|
4336
|
+
}
|
4337
|
+
|
4338
|
+
open_mail_store{
|
4339
|
+
assert_msg_uid( 1, 3, 5, 7, 9)
|
4340
|
+
assert_flag_enabled_msgs('answered', 3, 5, 7, 9)
|
4341
|
+
assert_flag_enabled_msgs('flagged' , 5, 7, 9)
|
4342
|
+
assert_flag_enabled_msgs('deleted' , 7, 9)
|
4343
|
+
assert_flag_enabled_msgs('seen' , 9)
|
4344
|
+
assert_flag_enabled_msgs('draft' , )
|
4345
|
+
assert_flag_enabled_msgs('recent' , 1, 3, 5, 7, 9)
|
4346
|
+
assert_mbox_flag_num(answered: 4, flagged: 3, deleted: 2, seen: 1, draft: 0, recent: 5)
|
4347
|
+
}
|
4348
|
+
|
4349
|
+
assert_imap_command('STORE 1,3,5,7,9 -FLAGS.SILENT ()', uid: true) {|assert|
|
4350
|
+
assert.equal("#{tag} OK STORE completed")
|
4351
|
+
}
|
4352
|
+
|
4353
|
+
open_mail_store{
|
4354
|
+
assert_msg_uid( 1, 3, 5, 7, 9)
|
4355
|
+
assert_flag_enabled_msgs('answered', 3, 5, 7, 9)
|
4356
|
+
assert_flag_enabled_msgs('flagged' , 5, 7, 9)
|
4357
|
+
assert_flag_enabled_msgs('deleted' , 7, 9)
|
4358
|
+
assert_flag_enabled_msgs('seen' , 9)
|
4359
|
+
assert_flag_enabled_msgs('draft' , )
|
4360
|
+
assert_flag_enabled_msgs('recent' , 1, 3, 5, 7, 9)
|
4361
|
+
assert_mbox_flag_num(answered: 4, flagged: 3, deleted: 2, seen: 1, draft: 0, recent: 5)
|
4362
|
+
}
|
4363
|
+
|
4364
|
+
assert_imap_command('STORE 1,3,5,7,9 FLAGS.SILENT ()', uid: true) {|assert|
|
4365
|
+
assert.equal("#{tag} OK STORE completed")
|
4366
|
+
}
|
4367
|
+
|
4368
|
+
open_mail_store{
|
4369
|
+
assert_msg_uid( 1, 3, 5, 7, 9)
|
4370
|
+
assert_flag_enabled_msgs('answered', )
|
4371
|
+
assert_flag_enabled_msgs('flagged' , )
|
4372
|
+
assert_flag_enabled_msgs('deleted' , )
|
4373
|
+
assert_flag_enabled_msgs('seen' , )
|
4374
|
+
assert_flag_enabled_msgs('draft' , )
|
4375
|
+
assert_flag_enabled_msgs('recent' , 1, 3, 5, 7, 9)
|
4376
|
+
assert_mbox_flag_num(answered: 0, flagged: 0, deleted: 0, seen: 0, draft: 0, recent: 5)
|
4377
|
+
}
|
4378
|
+
|
4379
|
+
assert_imap_command('STORE 1 FLAGS.DETARAME (\Flagged)', uid: true) {|assert|
|
4380
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
4381
|
+
}
|
4382
|
+
|
4383
|
+
assert_imap_command('STORE 1 FLAGS.SILENT (\Detarame)', uid: true) {|assert|
|
4384
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
4385
|
+
}
|
4386
|
+
|
4387
|
+
assert_imap_command('STORE 1 FLAGS.SILENT NIL', uid: true) {|assert|
|
4388
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
4389
|
+
}
|
4390
|
+
|
4022
4391
|
assert_imap_command('LOGOUT') {|assert|
|
4023
4392
|
assert.match(/^\* BYE /)
|
4024
4393
|
assert.equal("#{tag} OK LOGOUT completed")
|
@@ -4054,7 +4423,7 @@ module RIMS::Test
|
|
4054
4423
|
end
|
4055
4424
|
|
4056
4425
|
assert_imap_command('STORE 1 +FLAGS (\Answered \Flagged \Deleted \Seen \Draft)') {|assert|
|
4057
|
-
assert.match(/^#{tag} NO /)
|
4426
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/)
|
4058
4427
|
}
|
4059
4428
|
|
4060
4429
|
open_mail_store{
|
@@ -4075,7 +4444,7 @@ module RIMS::Test
|
|
4075
4444
|
end
|
4076
4445
|
|
4077
4446
|
assert_imap_command('STORE 1 +FLAGS (\Answered \Flagged \Deleted \Seen \Draft)') {|assert|
|
4078
|
-
assert.match(/^#{tag} NO /)
|
4447
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not selected/)
|
4079
4448
|
}
|
4080
4449
|
|
4081
4450
|
open_mail_store{
|
@@ -4093,7 +4462,7 @@ module RIMS::Test
|
|
4093
4462
|
end
|
4094
4463
|
|
4095
4464
|
assert_imap_command('STORE 1 +FLAGS (\Answered \Flagged \Deleted \Seen \Draft)') {|assert|
|
4096
|
-
assert.match(/^#{tag} NO /)
|
4465
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/cannot store.* read-only/)
|
4097
4466
|
}
|
4098
4467
|
|
4099
4468
|
open_mail_store{
|
@@ -4101,7 +4470,7 @@ module RIMS::Test
|
|
4101
4470
|
}
|
4102
4471
|
|
4103
4472
|
assert_imap_command('STORE 1 FLAGS (\Answered \Flagged \Deleted \Seen \Draft)') {|assert|
|
4104
|
-
assert.match(/^#{tag} NO /)
|
4473
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/cannot store.* read-only/)
|
4105
4474
|
}
|
4106
4475
|
|
4107
4476
|
open_mail_store{
|
@@ -4109,7 +4478,7 @@ module RIMS::Test
|
|
4109
4478
|
}
|
4110
4479
|
|
4111
4480
|
assert_imap_command('STORE 1 -FLAGS (\Answered \Flagged \Deleted \Seen \Draft)') {|assert|
|
4112
|
-
assert.match(/^#{tag} NO /)
|
4481
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/cannot store.* read-only/)
|
4113
4482
|
}
|
4114
4483
|
|
4115
4484
|
open_mail_store{
|
@@ -4117,7 +4486,7 @@ module RIMS::Test
|
|
4117
4486
|
}
|
4118
4487
|
|
4119
4488
|
assert_imap_command('STORE 1 +FLAGS.SILENT (\Answered \Flagged \Deleted \Seen \Draft)') {|assert|
|
4120
|
-
assert.match(/^#{tag} NO /)
|
4489
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/cannot store.* read-only/)
|
4121
4490
|
}
|
4122
4491
|
|
4123
4492
|
open_mail_store{
|
@@ -4125,7 +4494,7 @@ module RIMS::Test
|
|
4125
4494
|
}
|
4126
4495
|
|
4127
4496
|
assert_imap_command('STORE 1 FLAGS.SILENT (\Answered \Flagged \Deleted \Seen \Draft)') {|assert|
|
4128
|
-
assert.match(/^#{tag} NO /)
|
4497
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/cannot store.* read-only/)
|
4129
4498
|
}
|
4130
4499
|
|
4131
4500
|
open_mail_store{
|
@@ -4133,7 +4502,7 @@ module RIMS::Test
|
|
4133
4502
|
}
|
4134
4503
|
|
4135
4504
|
assert_imap_command('STORE 1 -FLAGS.SILENT (\Answered \Flagged \Deleted \Seen \Draft)') {|assert|
|
4136
|
-
assert.match(/^#{tag} NO /)
|
4505
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/cannot store.* read-only/)
|
4137
4506
|
}
|
4138
4507
|
|
4139
4508
|
open_mail_store{
|
@@ -4141,7 +4510,7 @@ module RIMS::Test
|
|
4141
4510
|
}
|
4142
4511
|
|
4143
4512
|
assert_imap_command('STORE 1 +FLAGS (\Answered \Flagged \Deleted \Seen \Draft)', uid: true) {|assert|
|
4144
|
-
assert.match(/^#{tag} NO /)
|
4513
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/cannot store.* read-only/)
|
4145
4514
|
}
|
4146
4515
|
|
4147
4516
|
open_mail_store{
|
@@ -4149,7 +4518,7 @@ module RIMS::Test
|
|
4149
4518
|
}
|
4150
4519
|
|
4151
4520
|
assert_imap_command('STORE 1 FLAGS (\Answered \Flagged \Deleted \Seen \Draft)', uid: true) {|assert|
|
4152
|
-
assert.match(/^#{tag} NO /)
|
4521
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/cannot store.* read-only/)
|
4153
4522
|
}
|
4154
4523
|
|
4155
4524
|
open_mail_store{
|
@@ -4157,7 +4526,7 @@ module RIMS::Test
|
|
4157
4526
|
}
|
4158
4527
|
|
4159
4528
|
assert_imap_command('STORE 1 -FLAGS (\Answered \Flagged \Deleted \Seen \Draft)', uid: true) {|assert|
|
4160
|
-
assert.match(/^#{tag} NO /)
|
4529
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/cannot store.* read-only/)
|
4161
4530
|
}
|
4162
4531
|
|
4163
4532
|
open_mail_store{
|
@@ -4165,7 +4534,7 @@ module RIMS::Test
|
|
4165
4534
|
}
|
4166
4535
|
|
4167
4536
|
assert_imap_command('STORE 1 +FLAGS.SILENT (\Answered \Flagged \Deleted \Seen \Draft)', uid: true) {|assert|
|
4168
|
-
assert.match(/^#{tag} NO /)
|
4537
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/cannot store.* read-only/)
|
4169
4538
|
}
|
4170
4539
|
|
4171
4540
|
open_mail_store{
|
@@ -4173,7 +4542,7 @@ module RIMS::Test
|
|
4173
4542
|
}
|
4174
4543
|
|
4175
4544
|
assert_imap_command('STORE 1 FLAGS.SILENT (\Answered \Flagged \Deleted \Seen \Draft)', uid: true) {|assert|
|
4176
|
-
assert.match(/^#{tag} NO /)
|
4545
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/cannot store.* read-only/)
|
4177
4546
|
}
|
4178
4547
|
|
4179
4548
|
open_mail_store{
|
@@ -4181,7 +4550,7 @@ module RIMS::Test
|
|
4181
4550
|
}
|
4182
4551
|
|
4183
4552
|
assert_imap_command('STORE 1 -FLAGS.SILENT (\Answered \Flagged \Deleted \Seen \Draft)', uid: true) {|assert|
|
4184
|
-
assert.match(/^#{tag} NO /)
|
4553
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/cannot store.* read-only/)
|
4185
4554
|
}
|
4186
4555
|
|
4187
4556
|
open_mail_store{
|
@@ -4247,7 +4616,7 @@ module RIMS::Test
|
|
4247
4616
|
end
|
4248
4617
|
|
4249
4618
|
assert_imap_command('COPY 2:4 WORK') {|assert|
|
4250
|
-
assert.match(/^#{tag} NO /, peek_next_line: true).no_match(/\[TRYCREATE\]/)
|
4619
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/, peek_next_line: true).no_match(/\[TRYCREATE\]/)
|
4251
4620
|
}
|
4252
4621
|
|
4253
4622
|
if (command_test?) then
|
@@ -4265,7 +4634,7 @@ module RIMS::Test
|
|
4265
4634
|
end
|
4266
4635
|
|
4267
4636
|
assert_imap_command('COPY 2:4 WORK') {|assert|
|
4268
|
-
assert.match(/^#{tag} NO /, peek_next_line: true).no_match(/\[TRYCREATE\]/)
|
4637
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not selected/, peek_next_line: true).no_match(/\[TRYCREATE\]/)
|
4269
4638
|
}
|
4270
4639
|
|
4271
4640
|
assert_imap_command('SELECT INBOX') {|assert|
|
@@ -4389,7 +4758,7 @@ module RIMS::Test
|
|
4389
4758
|
}
|
4390
4759
|
|
4391
4760
|
assert_imap_command('COPY 1:* nobox') {|assert|
|
4392
|
-
assert.match(/^#{tag} NO \[TRYCREATE\]/)
|
4761
|
+
assert.match(/^#{tag} NO \[TRYCREATE\]/, peek_next_line: true).match(/not found.* mailbox/)
|
4393
4762
|
}
|
4394
4763
|
|
4395
4764
|
assert_imap_command('LOGOUT') {|assert|
|
@@ -4451,7 +4820,7 @@ module RIMS::Test
|
|
4451
4820
|
end
|
4452
4821
|
|
4453
4822
|
assert_imap_command('COPY 3,5,7 WORK', uid: true) {|assert|
|
4454
|
-
assert.match(/^#{tag} NO /, peek_next_line: true).no_match(/\[TRYCREATE\]/)
|
4823
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not auth/, peek_next_line: true).no_match(/\[TRYCREATE\]/)
|
4455
4824
|
}
|
4456
4825
|
|
4457
4826
|
if (command_test?) then
|
@@ -4469,7 +4838,7 @@ module RIMS::Test
|
|
4469
4838
|
end
|
4470
4839
|
|
4471
4840
|
assert_imap_command('COPY 3,5,7 WORK', uid: true) {|assert|
|
4472
|
-
assert.match(/^#{tag} NO /, peek_next_line: true).no_match(/\[TRYCREATE\]/)
|
4841
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not selected/, peek_next_line: true).no_match(/\[TRYCREATE\]/)
|
4473
4842
|
}
|
4474
4843
|
|
4475
4844
|
assert_imap_command('SELECT INBOX') {|assert|
|
@@ -4593,7 +4962,7 @@ module RIMS::Test
|
|
4593
4962
|
}
|
4594
4963
|
|
4595
4964
|
assert_imap_command('COPY 1:* nobox', uid: true) {|assert|
|
4596
|
-
assert.match(/^#{tag} NO \[TRYCREATE\]/)
|
4965
|
+
assert.match(/^#{tag} NO \[TRYCREATE\]/, peek_next_line: true).match(/not found.* mailbox/)
|
4597
4966
|
}
|
4598
4967
|
|
4599
4968
|
assert_imap_command('LOGOUT') {|assert|
|
@@ -4794,24 +5163,24 @@ module RIMS::Test
|
|
4794
5163
|
end
|
4795
5164
|
|
4796
5165
|
assert_imap_command('IDLE', client_input_text: "DONE\r\n") {|assert|
|
4797
|
-
assert.
|
5166
|
+
assert.match(/^\+ /)
|
4798
5167
|
assert.equal("#{tag} OK IDLE terminated")
|
4799
5168
|
}
|
4800
5169
|
|
4801
5170
|
assert_imap_command('IDLE', client_input_text: "done\r\n") {|assert|
|
4802
|
-
assert.
|
5171
|
+
assert.match(/^\+ /)
|
4803
5172
|
assert.equal("#{tag} OK IDLE terminated")
|
4804
5173
|
}
|
4805
5174
|
|
4806
5175
|
assert_imap_command('IDLE', client_input_text: "detarame\r\n") {|assert|
|
4807
|
-
assert.
|
5176
|
+
assert.match(/^\+ /)
|
4808
5177
|
assert.equal("#{tag} BAD unexpected client response")
|
4809
5178
|
}
|
4810
5179
|
|
4811
5180
|
if (command_test?) then
|
4812
5181
|
# not be able to close client input in stream test
|
4813
5182
|
assert_imap_command('IDLE', client_input_text: '') {|assert|
|
4814
|
-
assert.
|
5183
|
+
assert.match(/^\+ /)
|
4815
5184
|
assert.equal("#{tag} BAD unexpected client connection close")
|
4816
5185
|
}
|
4817
5186
|
end
|
@@ -4840,7 +5209,7 @@ module RIMS::Test
|
|
4840
5209
|
end
|
4841
5210
|
|
4842
5211
|
assert_imap_command('IDLE', client_input_text: "DONE\r\n") {|assert|
|
4843
|
-
assert.
|
5212
|
+
assert.match(/^\+ /)
|
4844
5213
|
assert.equal("#{tag} OK IDLE terminated")
|
4845
5214
|
}
|
4846
5215
|
|
@@ -4950,71 +5319,71 @@ module RIMS::Test
|
|
4950
5319
|
}
|
4951
5320
|
|
4952
5321
|
assert_imap_command('SELECT INBOX') {|assert|
|
4953
|
-
assert.match(
|
5322
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not allowed/)
|
4954
5323
|
}
|
4955
5324
|
|
4956
5325
|
assert_imap_command('EXAMINE INBOX') {|assert|
|
4957
|
-
assert.match(
|
5326
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not allowed/)
|
4958
5327
|
}
|
4959
5328
|
|
4960
5329
|
assert_imap_command('CREATE foo') {|assert|
|
4961
|
-
assert.match(
|
5330
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not allowed/)
|
4962
5331
|
}
|
4963
5332
|
|
4964
5333
|
assert_imap_command('DELETE foo') {|assert|
|
4965
|
-
assert.match(
|
5334
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not allowed/)
|
4966
5335
|
}
|
4967
5336
|
|
4968
5337
|
assert_imap_command('RENAME foo bar') {|assert|
|
4969
|
-
assert.match(
|
5338
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not allowed/)
|
4970
5339
|
}
|
4971
5340
|
|
4972
5341
|
assert_imap_command('SUBSCRIBE foo') {|assert|
|
4973
|
-
assert.match(
|
5342
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not allowed/)
|
4974
5343
|
}
|
4975
5344
|
|
4976
5345
|
assert_imap_command('UNSUBSCRIBE foo') {|assert|
|
4977
|
-
assert.match(
|
5346
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not allowed/)
|
4978
5347
|
}
|
4979
5348
|
|
4980
5349
|
assert_imap_command('LIST "" *') {|assert|
|
4981
|
-
assert.match(
|
5350
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not allowed/)
|
4982
5351
|
}
|
4983
5352
|
|
4984
5353
|
assert_imap_command('LSUB "" *') {|assert|
|
4985
|
-
assert.match(
|
5354
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not allowed/)
|
4986
5355
|
}
|
4987
5356
|
|
4988
5357
|
assert_imap_command('STATUS INBOX (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN)') {|assert|
|
4989
|
-
assert.match(
|
5358
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not allowed/)
|
4990
5359
|
}
|
4991
5360
|
|
4992
5361
|
assert_imap_command('CHECK') {|assert|
|
4993
|
-
assert.match(
|
5362
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not allowed/)
|
4994
5363
|
}
|
4995
5364
|
|
4996
5365
|
assert_imap_command('CLOSE') {|assert|
|
4997
|
-
assert.match(
|
5366
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not allowed/)
|
4998
5367
|
}
|
4999
5368
|
|
5000
5369
|
assert_imap_command('EXPUNGE') {|assert|
|
5001
|
-
assert.match(
|
5370
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not allowed/)
|
5002
5371
|
}
|
5003
5372
|
|
5004
5373
|
assert_imap_command('SEARCH *') {|assert|
|
5005
|
-
assert.match(
|
5374
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not allowed/)
|
5006
5375
|
}
|
5007
5376
|
|
5008
5377
|
assert_imap_command('FETCH * RFC822') {|assert|
|
5009
|
-
assert.match(
|
5378
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not allowed/)
|
5010
5379
|
}
|
5011
5380
|
|
5012
5381
|
assert_imap_command('STORE 1 +FLAGS (\Answered \Flagged \Deleted \Seen \Draft)') {|assert|
|
5013
|
-
assert.match(
|
5382
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not allowed/)
|
5014
5383
|
}
|
5015
5384
|
|
5016
5385
|
assert_imap_command('COPY * foo') {|assert|
|
5017
|
-
assert.match(
|
5386
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not allowed/)
|
5018
5387
|
}
|
5019
5388
|
|
5020
5389
|
base64_foo = RIMS::Protocol.encode_base64('foo')
|
@@ -5042,7 +5411,7 @@ module RIMS::Test
|
|
5042
5411
|
}
|
5043
5412
|
|
5044
5413
|
assert_imap_command(%Q'APPEND "b64user-mbox #{base64_foo} nobox" x') {|assert|
|
5045
|
-
assert.match(/^#{tag} NO \[TRYCREATE\]/)
|
5414
|
+
assert.match(/^#{tag} NO \[TRYCREATE\]/, peek_next_line: true).match(/not found.* mailbox/)
|
5046
5415
|
}
|
5047
5416
|
|
5048
5417
|
open_mail_store{
|
@@ -5050,7 +5419,7 @@ module RIMS::Test
|
|
5050
5419
|
}
|
5051
5420
|
|
5052
5421
|
assert_imap_command(%Q'APPEND "b64user-mbox #{base64_nouser} INBOX" x') {|assert|
|
5053
|
-
assert.match(/^#{tag} NO not found
|
5422
|
+
assert.match(/^#{tag} NO/, peek_next_line: true).match(/not found.* user/)
|
5054
5423
|
}
|
5055
5424
|
|
5056
5425
|
open_mail_store{
|
@@ -5058,7 +5427,7 @@ module RIMS::Test
|
|
5058
5427
|
}
|
5059
5428
|
|
5060
5429
|
assert_imap_command(%Q'APPEND "unknown-encode-type #{base64_foo} INBOX" x') {|assert|
|
5061
|
-
assert.match(/^#{tag} BAD /)
|
5430
|
+
assert.match(/^#{tag} BAD /, peek_next_line: true).match(/syntax error/)
|
5062
5431
|
}
|
5063
5432
|
|
5064
5433
|
open_mail_store{
|
@@ -5264,7 +5633,7 @@ module RIMS::Test
|
|
5264
5633
|
}
|
5265
5634
|
|
5266
5635
|
assert_imap_command('IDLE', client_input_text: '') {|assert|
|
5267
|
-
assert.
|
5636
|
+
assert.match(/^\+ /)
|
5268
5637
|
}
|
5269
5638
|
|
5270
5639
|
@limits.command_wait_timeout_seconds = 0.1
|
@@ -5292,7 +5661,7 @@ module RIMS::Test
|
|
5292
5661
|
}
|
5293
5662
|
|
5294
5663
|
assert_imap_command('IDLE', client_input_text: '') {|assert|
|
5295
|
-
assert.
|
5664
|
+
assert.match(/^\+ /)
|
5296
5665
|
}
|
5297
5666
|
|
5298
5667
|
@limits.command_wait_timeout_seconds = 0
|
@@ -5334,67 +5703,70 @@ module RIMS::Test
|
|
5334
5703
|
another_decoder = another_decoder.next_decoder
|
5335
5704
|
assert_equal(true, another_decoder.selected?)
|
5336
5705
|
|
5706
|
+
n = 1
|
5337
5707
|
another_decoder.append('tag', 'INBOX', [ :group, '\Deleted' ], 'test', &another_writer)
|
5338
5708
|
assert_imap_command('NOOP') {|assert|
|
5339
|
-
assert.equal(
|
5340
|
-
assert.equal(
|
5709
|
+
assert.equal("* #{n} EXISTS")
|
5710
|
+
assert.equal("* #{n} RECENT")
|
5341
5711
|
assert.equal("#{tag} OK NOOP completed")
|
5342
5712
|
}
|
5343
5713
|
|
5714
|
+
n += 1
|
5344
5715
|
another_decoder.copy('tag', '1', 'INBOX', &another_writer)
|
5345
5716
|
assert_imap_command('NOOP') {|assert|
|
5346
|
-
assert.equal(
|
5347
|
-
assert.equal(
|
5717
|
+
assert.equal("* #{n} EXISTS")
|
5718
|
+
assert.equal("* #{n} RECENT")
|
5348
5719
|
assert.equal("#{tag} OK NOOP completed")
|
5349
5720
|
}
|
5350
5721
|
|
5722
|
+
n -= 1
|
5351
5723
|
another_decoder.expunge('tag', &another_writer)
|
5352
5724
|
assert_imap_command('NOOP') {|assert|
|
5353
5725
|
assert.equal('* 1 EXPUNGE')
|
5354
5726
|
assert.equal("#{tag} OK NOOP completed")
|
5355
5727
|
}
|
5356
|
-
n = 2
|
5357
5728
|
|
5729
|
+
n += 1
|
5358
5730
|
another_decoder.append('tag', 'INBOX', 'test', &another_writer)
|
5359
5731
|
assert_imap_command('CREATE foo') {|assert|
|
5360
5732
|
assert.equal("* #{n} EXISTS")
|
5361
5733
|
assert.equal("* #{n} RECENT")
|
5362
5734
|
assert.equal("#{tag} OK CREATE completed")
|
5363
5735
|
}
|
5364
|
-
n += 1
|
5365
5736
|
|
5737
|
+
n += 1
|
5366
5738
|
another_decoder.append('tag', 'INBOX', 'test', &another_writer)
|
5367
5739
|
assert_imap_command('RENAME foo bar') {|assert|
|
5368
5740
|
assert.equal("* #{n} EXISTS")
|
5369
5741
|
assert.equal("* #{n} RECENT")
|
5370
5742
|
assert.equal("#{tag} OK RENAME completed")
|
5371
5743
|
}
|
5372
|
-
n += 1
|
5373
5744
|
|
5745
|
+
n += 1
|
5374
5746
|
another_decoder.append('tag', 'INBOX', 'test', &another_writer)
|
5375
5747
|
assert_imap_command('DELETE bar') {|assert|
|
5376
5748
|
assert.equal("* #{n} EXISTS")
|
5377
5749
|
assert.equal("* #{n} RECENT")
|
5378
5750
|
assert.equal("#{tag} OK DELETE completed")
|
5379
5751
|
}
|
5380
|
-
n += 1
|
5381
5752
|
|
5753
|
+
n += 1
|
5382
5754
|
another_decoder.append('tag', 'INBOX', 'test', &another_writer)
|
5383
5755
|
assert_imap_command('SUBSCRIBE INBOX') {|assert|
|
5384
5756
|
assert.equal("* #{n} EXISTS")
|
5385
5757
|
assert.equal("* #{n} RECENT")
|
5386
5758
|
assert.equal("#{tag} OK SUBSCRIBE completed")
|
5387
5759
|
}
|
5388
|
-
n += 1
|
5389
5760
|
|
5761
|
+
n += 1
|
5390
5762
|
another_decoder.append('tag', 'INBOX', 'test', &another_writer)
|
5391
5763
|
assert_imap_command('UNSUBSCRIBE INBOX') {|assert|
|
5392
5764
|
assert.equal("* #{n} EXISTS")
|
5393
5765
|
assert.equal("* #{n} RECENT")
|
5394
|
-
assert.
|
5766
|
+
assert.match(/^#{tag} NO /, peek_next_line: true).match(/not implemented/)
|
5395
5767
|
}
|
5396
|
-
n += 1
|
5397
5768
|
|
5769
|
+
n += 1
|
5398
5770
|
another_decoder.append('tag', 'INBOX', 'test', &another_writer)
|
5399
5771
|
assert_imap_command('LIST "" *') {|assert|
|
5400
5772
|
assert.equal("* #{n} EXISTS")
|
@@ -5402,8 +5774,8 @@ module RIMS::Test
|
|
5402
5774
|
assert.equal('* LIST (\Noinferiors \Marked) NIL "INBOX"')
|
5403
5775
|
assert.equal("#{tag} OK LIST completed")
|
5404
5776
|
}
|
5405
|
-
n += 1
|
5406
5777
|
|
5778
|
+
n += 1
|
5407
5779
|
another_decoder.append('tag', 'INBOX', 'test', &another_writer)
|
5408
5780
|
assert_imap_command('LSUB "" *') {|assert|
|
5409
5781
|
assert.equal("* #{n} EXISTS")
|
@@ -5411,8 +5783,8 @@ module RIMS::Test
|
|
5411
5783
|
assert.equal('* LSUB (\Noinferiors \Marked) NIL "INBOX"')
|
5412
5784
|
assert.equal("#{tag} OK LSUB completed")
|
5413
5785
|
}
|
5414
|
-
n += 1
|
5415
5786
|
|
5787
|
+
n += 1
|
5416
5788
|
another_decoder.append('tag', 'INBOX', 'test', &another_writer)
|
5417
5789
|
assert_imap_command('STATUS INBOX (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN)') {|assert|
|
5418
5790
|
assert.equal("* #{n} EXISTS")
|
@@ -5420,34 +5792,35 @@ module RIMS::Test
|
|
5420
5792
|
assert.equal("* STATUS \"INBOX\" (MESSAGES #{n} RECENT #{n} UIDNEXT #{(n+1).succ} UIDVALIDITY #{@inbox_id} UNSEEN #{n})")
|
5421
5793
|
assert.equal("#{tag} OK STATUS completed")
|
5422
5794
|
}
|
5423
|
-
n += 1
|
5424
5795
|
|
5796
|
+
n += 1
|
5425
5797
|
another_decoder.append('tag', 'INBOX', 'test', &another_writer)
|
5798
|
+
n += 1
|
5426
5799
|
assert_imap_command('APPEND INBOX test') {|assert|
|
5800
|
+
assert.equal("* #{n-1} EXISTS")
|
5801
|
+
assert.equal("* #{n-1} RECENT")
|
5427
5802
|
assert.equal("* #{n} EXISTS")
|
5428
5803
|
assert.equal("* #{n} RECENT")
|
5429
|
-
assert.equal("
|
5430
|
-
assert.equal("* #{n+1} RECENT")
|
5431
|
-
assert.equal("#{tag} OK [APPENDUID 1 #{n+2}] APPEND completed")
|
5804
|
+
assert.equal("#{tag} OK [APPENDUID 1 #{n+1}] APPEND completed")
|
5432
5805
|
}
|
5433
|
-
n += 2
|
5434
5806
|
|
5807
|
+
n += 1
|
5435
5808
|
another_decoder.append('tag', 'INBOX', 'test', &another_writer)
|
5436
5809
|
assert_imap_command('CHECK') {|assert|
|
5437
5810
|
assert.equal("* #{n} EXISTS")
|
5438
5811
|
assert.equal("* #{n} RECENT")
|
5439
5812
|
assert.equal("#{tag} OK CHECK completed")
|
5440
5813
|
}
|
5441
|
-
n += 1
|
5442
5814
|
|
5815
|
+
n += 1
|
5443
5816
|
another_decoder.append('tag', 'INBOX', 'test', &another_writer)
|
5444
5817
|
assert_imap_command('EXPUNGE') {|assert|
|
5445
5818
|
assert.equal("* #{n} EXISTS")
|
5446
5819
|
assert.equal("* #{n} RECENT")
|
5447
5820
|
assert.equal("#{tag} OK EXPUNGE completed")
|
5448
5821
|
}
|
5449
|
-
n += 1
|
5450
5822
|
|
5823
|
+
n += 1
|
5451
5824
|
another_decoder.append('tag', 'INBOX', 'test', &another_writer)
|
5452
5825
|
assert_imap_command('SEARCH *') {|assert|
|
5453
5826
|
assert.equal("* #{n} EXISTS\r\n")
|
@@ -5455,8 +5828,8 @@ module RIMS::Test
|
|
5455
5828
|
assert.equal("* SEARCH #{n}\r\n")
|
5456
5829
|
assert.equal("#{tag} OK SEARCH completed\r\n")
|
5457
5830
|
}
|
5458
|
-
n += 1
|
5459
5831
|
|
5832
|
+
n += 1
|
5460
5833
|
another_decoder.append('tag', 'INBOX', 'test', &another_writer)
|
5461
5834
|
assert_imap_command('FETCH 1 BODY.PEEK[]') {|assert|
|
5462
5835
|
assert.equal("* #{n} EXISTS")
|
@@ -5464,8 +5837,8 @@ module RIMS::Test
|
|
5464
5837
|
assert.equal(%Q'* 1 FETCH (BODY[] "test")')
|
5465
5838
|
assert.equal("#{tag} OK FETCH completed")
|
5466
5839
|
}
|
5467
|
-
n += 1
|
5468
5840
|
|
5841
|
+
n += 1
|
5469
5842
|
another_decoder.append('tag', 'INBOX', 'test', &another_writer)
|
5470
5843
|
assert_imap_command('STORE 1 +FLAGS (\Flagged)') {|assert|
|
5471
5844
|
assert.equal("* #{n} EXISTS")
|
@@ -5473,20 +5846,19 @@ module RIMS::Test
|
|
5473
5846
|
assert.equal('* 1 FETCH (FLAGS (\Flagged \Recent))')
|
5474
5847
|
assert.equal("#{tag} OK STORE completed")
|
5475
5848
|
}
|
5476
|
-
n += 1
|
5477
5849
|
|
5850
|
+
n += 2
|
5478
5851
|
another_decoder.append('tag', 'INBOX', 'test', &another_writer)
|
5479
5852
|
assert_imap_command('COPY 1 INBOX') {|assert|
|
5853
|
+
assert.equal("* #{n-1} EXISTS")
|
5854
|
+
assert.equal("* #{n-1} RECENT")
|
5480
5855
|
assert.equal("* #{n} EXISTS")
|
5481
5856
|
assert.equal("* #{n} RECENT")
|
5482
|
-
assert.equal("
|
5483
|
-
assert.equal("* #{n+1} RECENT")
|
5484
|
-
assert.equal("#{tag} OK [COPYUID 1 2 #{n+2}] COPY completed")
|
5857
|
+
assert.equal("#{tag} OK [COPYUID 1 2 #{n+1}] COPY completed")
|
5485
5858
|
}
|
5486
|
-
n += 2
|
5487
5859
|
|
5488
5860
|
open_mail_store{
|
5489
|
-
f = @mail_store.
|
5861
|
+
f = @mail_store.open_folder(@inbox_id, read_only: true)
|
5490
5862
|
begin
|
5491
5863
|
uid_list = @mail_store.each_msg_uid(@inbox_id).to_a
|
5492
5864
|
last_uid = uid_list.min
|
@@ -5496,13 +5868,80 @@ module RIMS::Test
|
|
5496
5868
|
end
|
5497
5869
|
}
|
5498
5870
|
|
5871
|
+
n -= 1
|
5499
5872
|
another_decoder.close('tag', &another_writer)
|
5500
5873
|
assert_imap_command('NOOP') {|assert|
|
5501
5874
|
assert.equal("* 1 EXPUNGE")
|
5875
|
+
assert.equal("* 0 RECENT")
|
5502
5876
|
assert.equal("#{tag} OK NOOP completed")
|
5503
5877
|
}
|
5504
5878
|
|
5505
|
-
|
5879
|
+
open_mail_store{
|
5880
|
+
f = @mail_store.open_folder(@inbox_id, read_only: true)
|
5881
|
+
begin
|
5882
|
+
uid_list = @mail_store.each_msg_uid(@inbox_id).to_a
|
5883
|
+
last_uid = uid_list.min
|
5884
|
+
@mail_store.set_msg_flag(@inbox_id, last_uid, 'deleted', true)
|
5885
|
+
ensure
|
5886
|
+
f.close
|
5887
|
+
end
|
5888
|
+
}
|
5889
|
+
|
5890
|
+
another_decoder.create('tag', 'foo', &another_writer)
|
5891
|
+
another_decoder.examine('tag', 'INBOX', &another_writer)
|
5892
|
+
another_decoder.examine('tag', 'foo', &another_writer) # closed INBOX implicitly
|
5893
|
+
another_decoder.close('tag', 'foo', &another_writer)
|
5894
|
+
assert_imap_command('NOOP') {|assert|
|
5895
|
+
# no untagged responses on implicit INBOX close because
|
5896
|
+
# INBOX is opened as read-only.
|
5897
|
+
assert.equal("#{tag} OK NOOP completed")
|
5898
|
+
}
|
5899
|
+
|
5900
|
+
n -= 1
|
5901
|
+
another_decoder.select('tag', 'INBOX', &another_writer)
|
5902
|
+
another_decoder.select('tag', 'foo', &another_writer) # closed INBOX implicitly
|
5903
|
+
another_decoder.close('tag', 'foo', &another_writer)
|
5904
|
+
assert_imap_command('NOOP') {|assert|
|
5905
|
+
assert.equal("* 1 EXPUNGE")
|
5906
|
+
assert.equal("#{tag} OK NOOP completed")
|
5907
|
+
}
|
5908
|
+
|
5909
|
+
n += 1
|
5910
|
+
another_decoder.append('tag', 'INBOX', 'test', &another_writer)
|
5911
|
+
assert_imap_command('CLOSE') {|assert|
|
5912
|
+
# IMAP CLOSE command releases a mailbox that has a status to
|
5913
|
+
# be notified, and it will not send untagged responses
|
5914
|
+
# notified from other connections.
|
5915
|
+
assert.equal("#{tag} OK CLOSE completed")
|
5916
|
+
}
|
5917
|
+
|
5918
|
+
assert_imap_command('EXAMINE INBOX') {|assert|
|
5919
|
+
assert.equal("* #{n} EXISTS")
|
5920
|
+
assert.equal('* 0 RECENT')
|
5921
|
+
assert.equal("* OK [UNSEEN #{n}]")
|
5922
|
+
assert.equal('* OK [UIDVALIDITY 1]')
|
5923
|
+
assert.equal('* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)')
|
5924
|
+
assert.equal("#{tag} OK [READ-ONLY] EXAMINE completed")
|
5925
|
+
}
|
5926
|
+
|
5927
|
+
open_mail_store{
|
5928
|
+
f = @mail_store.open_folder(@inbox_id, read_only: true)
|
5929
|
+
begin
|
5930
|
+
uid_list = @mail_store.each_msg_uid(@inbox_id).to_a
|
5931
|
+
last_uid = uid_list.min
|
5932
|
+
@mail_store.set_msg_flag(@inbox_id, last_uid, 'deleted', true)
|
5933
|
+
ensure
|
5934
|
+
f.close
|
5935
|
+
end
|
5936
|
+
}
|
5937
|
+
|
5938
|
+
n -= 1
|
5939
|
+
another_decoder.select('tag', 'INBOX', &another_writer)
|
5940
|
+
another_decoder.cleanup # closed INBOX implicitly
|
5941
|
+
assert_imap_command('NOOP') {|assert|
|
5942
|
+
assert.equal("* 1 EXPUNGE")
|
5943
|
+
assert.equal("#{tag} OK NOOP completed")
|
5944
|
+
}
|
5506
5945
|
}
|
5507
5946
|
end
|
5508
5947
|
|
@@ -5544,29 +5983,29 @@ module RIMS::Test
|
|
5544
5983
|
|
5545
5984
|
another_decoder.append('tag', 'INBOX', [ :group, '\Deleted' ], 'test', &another_writer)
|
5546
5985
|
assert_imap_command('IDLE', client_input_text: "DONE\r\n") {|assert|
|
5547
|
-
assert.
|
5548
|
-
|
5549
|
-
|
5986
|
+
assert.match(/^\+ /)
|
5987
|
+
assert.equal('* 1 EXISTS')
|
5988
|
+
assert.equal('* 1 RECENT')
|
5550
5989
|
assert.equal("#{tag} OK IDLE terminated")
|
5551
5990
|
}
|
5552
5991
|
|
5553
5992
|
another_decoder.copy('tag', '1', 'INBOX', &another_writer)
|
5554
5993
|
assert_imap_command('IDLE', client_input_text: "DONE\r\n") {|assert|
|
5555
|
-
assert.
|
5556
|
-
|
5557
|
-
|
5994
|
+
assert.match(/^\+ /)
|
5995
|
+
assert.equal('* 2 EXISTS')
|
5996
|
+
assert.equal('* 2 RECENT')
|
5558
5997
|
assert.equal("#{tag} OK IDLE terminated")
|
5559
5998
|
}
|
5560
5999
|
|
5561
6000
|
another_decoder.expunge('tag', &another_writer)
|
5562
6001
|
assert_imap_command('IDLE', client_input_text: "DONE\r\n") {|assert|
|
5563
|
-
assert.
|
5564
|
-
|
6002
|
+
assert.match(/^\+ /)
|
6003
|
+
assert.equal('* 1 EXPUNGE')
|
5565
6004
|
assert.equal("#{tag} OK IDLE terminated")
|
5566
6005
|
}
|
5567
6006
|
|
5568
6007
|
open_mail_store{
|
5569
|
-
f = @mail_store.
|
6008
|
+
f = @mail_store.open_folder(@inbox_id, read_only: true)
|
5570
6009
|
begin
|
5571
6010
|
uid_list = @mail_store.each_msg_uid(@inbox_id).to_a
|
5572
6011
|
last_uid = uid_list.min
|
@@ -5578,8 +6017,9 @@ module RIMS::Test
|
|
5578
6017
|
|
5579
6018
|
another_decoder.close('tag', &another_writer)
|
5580
6019
|
assert_imap_command('IDLE', client_input_text: "DONE\r\n") {|assert|
|
5581
|
-
assert.
|
5582
|
-
|
6020
|
+
assert.match(/^\+ /)
|
6021
|
+
assert.equal('* 1 EXPUNGE')
|
6022
|
+
assert.equal('* 0 RECENT')
|
5583
6023
|
assert.equal("#{tag} OK IDLE terminated")
|
5584
6024
|
}
|
5585
6025
|
|