The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use Test;
use Net::IMAP::Simple;

plan tests => (our $tests = 10 + 3);

our $imap;

sub run_tests {
    my $nm = $imap->select('testing')
        or die " failure selecting testing: " . $imap->errstr . "\n";

    $imap->create_mailbox('test');

    ok( $imap->select("testing")+0, 0 );
    $imap->put( testing => "Subject: test-$_\n\ntest-$_" . "\n" . (" xxxxxx " x 2_000), '\Seen' ) for 1 .. $tests;
    ok( $imap->select("testing")+0, $tests );

    for my $i ( 1 .. ($tests-3) ) {
        my $errors = 0;
        my $msg = $imap->get($i)   or do { $errors ++; warn " " . $imap->errstr };
        $imap->put( test => $msg ) or do { $errors ++; warn " " . $imap->errstr };
        $imap->delete( $i )        or do { $errors ++; warn " " . $imap->errstr };

        ok($errors, 0);
    }

    # hey, look at that... dovecot produces this error on its own
    # [...blib/lib/Net/IMAP/Simple.pm line 1181 in sub _send_cmd] 56 FETCH 913 RFC822\r\n
    # [...blib/lib/Net/IMAP/Simple.pm line 725 in sub _process_cmd] 56 BAD Error in IMAP command FETCH: Invalid messageset\r\n
    # [...blib/lib/Net/IMAP/Simple.pm line 1201 in sub _cmd_ok] 56 BAD Error in IMAP command FETCH: Invalid messageset\r\n


    $imap->get($tests + 9_00); # finishing move
    ok( $imap->errstr, qr(Invalid messageset|message not found)i );
}   

do "./t/test_runner.pm";