X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Fmbox_reader.t;h=87e8f397662cd058aafc0075a23d4377e2c0abaa;hb=4eee5af6011cc8cdefb66c9729952c7eff5c0b0b;hp=30a5e6e3590e5d3c6e63963afbfe3f5973e4e172;hpb=935f837e759f03ed48d369ab97517b8b03662ba3;p=public-inbox.git diff --git a/t/mbox_reader.t b/t/mbox_reader.t index 30a5e6e3..87e8f397 100644 --- a/t/mbox_reader.t +++ b/t/mbox_reader.t @@ -24,6 +24,16 @@ my %raw = ( (("b: ".('b' x 72)."\n") x 1000) . "From hell\n", ); +{ + my $eml = PublicInbox::Eml->new($raw{small}); + my $mbox_keywords = PublicInbox::MboxReader->can('mbox_keywords'); + is_deeply($mbox_keywords->($eml), [], 'no keywords'); + $eml->header_set('Status', 'RO'); + is_deeply($mbox_keywords->($eml), ['seen'], 'seen extracted'); + $eml->header_set('X-Status', 'A'); + is_deeply($mbox_keywords->($eml), [qw(answered seen)], + 'seen+answered extracted'); +} if ($ENV{TEST_EXTRA}) { for my $fn (glob('t/*.eml'), glob('t/*/*.{patch,eml}')) { @@ -61,6 +71,12 @@ my $check_fmt = sub { "Content-Length is correct $fmt $cur"); # clobber for ->as_string comparison below $eml->header_set('Content-Length'); + + # special case for t/solve/bare.patch, not sure if we + # should even handle it... + if ($cl[0] eq '0' && ${$eml->{hdr}} eq '') { + delete $eml->{bdy}; + } } else { is(scalar(@cl), 0, "Content-Length unset $fmt $cur"); } @@ -74,9 +90,29 @@ for my $fmt (@mbox) { $check_fmt->($fmt) } s/\n/\r\n/sg for (values %raw); for my $fmt (@mbox) { $check_fmt->($fmt) } +{ + my $no_blank_eom = <<'EOM'; +From x@y Fri Oct 2 00:00:00 1993 +a: b + +body1 +From x@y Fri Oct 2 00:00:00 1993 +c: d + +body2 +EOM + # chop($no_blank_eom) eq "\n" or BAIL_OUT 'broken LF'; + for my $variant (qw(mboxrd mboxo)) { + my @x; + open my $fh, '<', \$no_blank_eom or BAIL_OUT 'PerlIO::scalar'; + $reader->$variant($fh, sub { push @x, shift }); + is_deeply($x[0]->{bdy}, \"body1\n", 'LF preserved in 1st'); + is_deeply($x[1]->{bdy}, \"body2\n", 'no LF added in 2nd'); + } +} + SKIP: { use PublicInbox::Spawn qw(popen_rd); - use Time::HiRes qw(alarm); my $fh = popen_rd([ $^X, '-E', <<'' ]); say "From x@y Fri Oct 2 00:00:00 1993"; print "a: b\n\n", "x" x 70000, "\n\n"; @@ -91,4 +127,25 @@ exit 1 is(scalar(grep(/Final/, @x)), 0, 'no incomplete bit'); } +{ + my $html = <hi,how are you +EOM + for my $m (qw(mboxrd mboxcl mboxcl2 mboxo)) { + my (@w, @x); + local $SIG{__WARN__} = sub { push @w, @_ }; + open my $fh, '<', \$html or xbail 'PerlIO::scalar'; + PublicInbox::MboxReader->$m($fh, sub { + push @x, $_[0]->as_string + }); + if ($m =~ /\Amboxcl/) { + is_deeply(\@x, [], "messages in invalid $m"); + } else { + is_deeply(\@x, [ "\n$html" ], "body-only $m"); + } + is_deeply([grep(!/^W: leftover/, @w)], [], + "no extra warnings besides leftover ($m)"); + } +} + done_testing;