From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 286651F66F for ; Sun, 15 Nov 2020 08:56:11 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH] t/eml.t: workaround newer Email::MIME* behavior Date: Sun, 15 Nov 2020 08:56:09 +0000 Message-Id: <20201115085609.18547-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: Recent (2020) versions of Email::MIME (and/or dependencies) have different behavior than historical versions which seem to be less DWIM and perhaps technically more correct. We'll retain historical behavior for now, since it doesn't seem to cause real problems and DWIM-ness is often required to make sense of historical mail. Tested on a FreeBSD 11.4 VM with the following packages: p5-Email-MIME-1.949 p5-Email-MIME-ContentType-1.024_1 p5-Email-MIME-Encodings-1.315_2 --- t/eml.t | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/t/eml.t b/t/eml.t index 8d131b14..4d1c1216 100644 --- a/t/eml.t +++ b/t/eml.t @@ -8,6 +8,9 @@ use PublicInbox::MsgIter qw(msg_part_text); my @classes = qw(PublicInbox::Eml); SKIP: { require_mods('Email::MIME', 1); + # TODO: Email::MIME behavior is not consistent in newer versions + # we need to evaluate and possibly adjust our behavior to decide + # between DWIM-ness with historical mail... push @classes, 'PublicInbox::MIME'; }; use_ok $_ for @classes; @@ -260,6 +263,9 @@ EOF } for my $cls (@classes) { +SKIP: { + skip 'newer Email::MIME behavior inconsistent', 1 if + $cls eq 'PublicInbox::MIME'; my $s = <new(\$s); my ($str, $err) = msg_part_text($eml, $eml->content_type); - is($str, "\x{100}\n", "got wide character by assuming utf-8"); + is($str, "\x{100}\n", "got wide character by assuming utf-8 ($cls)"); +} # SKIP } if ('we differ from Email::MIME with final "\n" on missing epilogue') { @@ -383,8 +390,12 @@ SKIP: { $msg->parts_set([$old[-1]]); is(scalar $msg->subparts, 1, 'only last remains'); } - is($eml->as_string, $mime->as_string, - 'as_string matches after parts_set'); + + # some versions of Email::MIME or Email::MIME::* will drop + # unnecessary ", while PublicInbox::Eml will preserve the original + my $exp = $mime->as_string; + $exp =~ s/; boundary=b\b/; boundary="b"/; + is($eml->as_string, $exp, 'as_string matches after parts_set'); } for my $cls (@classes) { @@ -395,7 +406,8 @@ Content-Disposition: attachment; filename="=?utf-8?q?vtpm-makefile.patch?=" EOF is($cls->new($s)->filename, 'vtpm-makefile.patch', 'filename decoded'); $s =~ s/^Content-Disposition:.*$//sm; - is($cls->new($s)->filename, 'vtpm-fakefile.patch', 'filename fallback'); + is($cls->new($s)->filename, 'vtpm-fakefile.patch', + "filename fallback ($cls)") if $cls ne 'PublicInbox::MIME'; is($cls->new($s)->content_type, 'text/x-patch; name="vtpm-fakefile.patch"', 'matches Email::MIME output, "correct" or not'); @@ -413,10 +425,14 @@ Content-Type: text/x-patch; name="=?utf-8?q?vtpm-fakefile.patch?=" b --b-- EOF - my @tmp; - $cls->new($s)->each_part(sub { push @tmp, $_[0]->[0]->filename }); - is_deeply(['vtpm-makefile.patch', 'vtpm-fakefile.patch'], \@tmp, - 'got filename for both attachments'); + SKIP: { + skip 'newer Email::MIME is inconsistent here', 1 + if $cls eq 'PublicInbox::MIME'; + my @x; + $cls->new($s)->each_part(sub { push @x, $_[0]->[0]->filename }); + is_deeply(['vtpm-makefile.patch', 'vtpm-fakefile.patch'], \@x, + "got filename for both attachments ($cls)"); + } } done_testing;