diff options
Diffstat (limited to 't/eml_content_disposition.t')
-rw-r--r-- | t/eml_content_disposition.t | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/t/eml_content_disposition.t b/t/eml_content_disposition.t new file mode 100644 index 00000000..099587f8 --- /dev/null +++ b/t/eml_content_disposition.t @@ -0,0 +1,102 @@ +#!perl -w +# Copyright (C) 2020-2021 all contributors <meta@public-inbox.org> +# Copyright (C) 2004- Simon Cozens, Casey West, Ricardo SIGNES +# This library is free software; you can redistribute it and/or modify +# it under the same terms as Perl itself. +# +# License: GPL-1.0+ or Artistic-1.0-Perl +# <https://www.gnu.org/licenses/gpl-1.0.txt> +# <https://dev.perl.org/licenses/artistic.html> +use strict; +use Test::More; +use PublicInbox::EmlContentFoo qw(parse_content_disposition); + +my %cd_tests = ( + '' => { type => 'attachment', attributes => {} }, + 'inline' => { type => 'inline', attributes => {} }, + 'attachment' => { type => 'attachment', attributes => {} }, + + 'attachment; filename=genome.jpeg;' . + ' modification-date="Wed, 12 Feb 1997 16:29:51 -0500"' => { + type => 'attachment', + attributes => { + filename => 'genome.jpeg', + 'modification-date' => 'Wed, 12 Feb 1997 16:29:51 -0500' + } + }, + + q(attachment; filename*=UTF-8''genome.jpeg;) . + q( modification-date="Wed, 12 Feb 1997 16:29:51 -0500") => { + type => 'attachment', + attributes => { + filename => 'genome.jpeg', + 'modification-date' => 'Wed, 12 Feb 1997 16:29:51 -0500' + } + }, + + q(attachment; filename*0*=us-ascii'en'This%20is%20even%20more%20;) . + q( filename*1*=%2A%2A%2Afun%2A%2A%2A%20; filename*2="isn't it!") => { + type => 'attachment', + attributes => { + filename => "This is even more ***fun*** isn't it!" + } + }, + + q(attachment; filename*0*='en'This%20is%20even%20more%20;) . + q( filename*1*=%2A%2A%2Afun%2A%2A%2A%20; filename*2="isn't it!") => { + type => 'attachment', + attributes => { + filename => "This is even more ***fun*** isn't it!" + } + }, + + q(attachment; filename*0*=''This%20is%20even%20more%20;) . + q( filename*1*=%2A%2A%2Afun%2A%2A%2A%20; filename*2="isn't it!") => { + type => 'attachment', + attributes => { + filename => "This is even more ***fun*** isn't it!" + } + }, + + q(attachment; filename*0*=us-ascii''This%20is%20even%20more%20;). + q( filename*1*=%2A%2A%2Afun%2A%2A%2A%20; filename*2="isn't it!") => { + type => 'attachment', + attributes => { + filename => "This is even more ***fun*** isn't it!" + } + }, +); + +my %non_strict_cd_tests = ( + 'attachment; filename=genome.jpeg;' . + ' modification-date="Wed, 12 Feb 1997 16:29:51 -0500";' => { + type => 'attachment', + attributes => { + filename => 'genome.jpeg', + 'modification-date' => + 'Wed, 12 Feb 1997 16:29:51 -0500' + } + }, +); + +sub test { + my ($string, $expect, $info) = @_; + local $_; + $info =~ s/\r/\\r/g; + $info =~ s/\n/\\n/g; + is_deeply(parse_content_disposition($string), $expect, $info); +} + +for (sort keys %cd_tests) { + test($_, $cd_tests{$_}, "Can parse C-D <$_>"); +} + +local $PublicInbox::EmlContentFoo::STRICT_PARAMS = 0; +for (sort keys %cd_tests) { + test($_, $cd_tests{$_}, "Can parse non-strict C-D <$_>"); +} +for (sort keys %non_strict_cd_tests) { + test($_, $non_strict_cd_tests{$_}, "Can parse non-strict C-D <$_>"); +} + +done_testing; |