#!/usr/bin/env perl # # Test writing of maildir folders. # use strict; use warnings; use lib qw(. .. tests); use Tools; use Test::More; use File::Compare; use File::Copy; use Mail::Box::Maildir; BEGIN { if($windows) { plan skip_all => 'Filenames not compatible with Windows'; exit 1; } plan tests => 45; } my $mdsrc = File::Spec->catfile('folders', 'maildir.src'); clean_dir $mdsrc; unpack_mbox2maildir($src, $mdsrc); my $folder = new Mail::Box::Maildir ( folder => $mdsrc , extract => 'LAZY' , access => 'rw' ); ok(defined $folder); ok($folder->message(40)->label('accepted'), "40 accepted"); ok(!$folder->message(41)->label('accepted'), "41 not accepted"); # # Count files flagged for deletion (T flag) # my $to_be_deleted =0; $_->deleted && $to_be_deleted++ foreach $folder->messages; cmp_ok($to_be_deleted, "==", 7); $folder->close; # # Reopen the folder and see whether the messages flagged for deletion # are away. # $folder = new Mail::Box::Maildir ( folder => $mdsrc , extract => 'LAZY' , access => 'rw' ); cmp_ok($folder->messages, "==", 38); my $msg6 = $folder->message(6); like($msg6->filename , qr/:2,$/); ok(!$msg6->label('draft')); ok(!$msg6->label('flagged')); ok(!$msg6->label('replied')); ok(!$msg6->label('seen')); ok(!$msg6->modified); my $msg12 = $folder->message(12); like($msg12->filename , qr/:2,DFRS$/); ok($msg12->label('draft')); ok($msg12->label('flagged')); ok($msg12->label('replied')); ok($msg12->label('seen')); ok(!$msg12->label(flagged => 0)); ok(!$msg12->label('flagged')); like($msg12->filename , qr/:2,DRS$/); ok(!$msg12->label(draft => 0)); ok(!$msg12->label('draft')); like($msg12->filename , qr/:2,RS$/); ok(!$msg12->label(seen => 0)); ok(!$msg12->label('seen')); like($msg12->filename , qr/:2,R$/); ok($msg12->label(flagged => 1)); ok($msg12->label('flagged')); like($msg12->filename , qr/:2,FR$/); ok(!$msg12->label(flagged => 0, replied => 0)); ok(!$msg12->label('flagged')); ok(!$msg12->label('replied')); like($msg12->filename , qr/:2,$/); ok(!$msg12->modified); # # Test accepting and unaccepting # # test are only run on unix, so we can simply use '/'s is($msg12->filename, 'folders/maildir.src/cur/110000010.l.43:2,'); ok($msg12->label('accepted'), "12 accepted"); cmp_ok($msg12->label(accepted => 0), '==', 0, 'un-accept a message'); ok(! $msg12->label('accepted')); is($msg12->filename, 'folders/maildir.src/new/110000010.l.43:2,'); ok(!$msg12->modified); # message is not modified ok($folder->modified); # ... but the folder is modified # (which implies nothing) cmp_ok($msg12->label(accepted => 1), '==', 1, 'accept the message'); ok($msg12->label('accepted')); is($msg12->filename, 'folders/maildir.src/cur/110000010.l.43:2,'); ok(! $folder->message(-1)->label('accepted')); $folder->message(-1)->accept; ok($folder->message(-1)->label('accepted')); $folder->close; clean_dir $mdsrc;