]> Sergey Matveev's repositories - public-inbox.git/blob - t/msg_iter.t
treewide: run update-copyrights from gnulib for 2019
[public-inbox.git] / t / msg_iter.t
1 # Copyright (C) 2016-2020 all contributors <meta@public-inbox.org>
2 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
3 use strict;
4 use warnings;
5 use Test::More;
6 use Email::MIME;
7 use_ok('PublicInbox::MsgIter');
8
9 {
10         my $parts = [ Email::MIME->create(body => "a\n"),
11                         Email::MIME->create(body => "b\n") ];
12         my $mime = Email::MIME->create(parts => $parts,
13                                 header_str => [ From => 'root@localhost' ]);
14         my @parts;
15         msg_iter($mime, sub {
16                 my ($part, $level, @ex) = @{$_[0]};
17                 my $s = $part->body_str;
18                 $s =~ s/\s+//s;
19                 push @parts, [ $s, $level, @ex ];
20         });
21         is_deeply(\@parts, [ [ qw(a 1 1) ], [ qw(b 1 2) ] ], 'order is fine');
22 }
23
24 {
25         my $parts = [ Email::MIME->create(body => 'a'),
26                         Email::MIME->create(body => 'b') ];
27         $parts = [ Email::MIME->create(parts => $parts,
28                                 header_str => [ From => 'sub@localhost' ]),
29                         Email::MIME->create(body => 'sig') ];
30         my $mime = Email::MIME->create(parts => $parts,
31                                 header_str => [ From => 'root@localhost' ]);
32         my @parts;
33         msg_iter($mime, sub {
34                 my ($part, $level, @ex) = @{$_[0]};
35                 my $s = $part->body_str;
36                 $s =~ s/\s+//s;
37                 push @parts, [ $s, $level, @ex ];
38         });
39         is_deeply(\@parts, [ [qw(a 2 1 1)], [qw(b 2 1 2)], [qw(sig 1 2)] ],
40                 'nested part shows up properly');
41 }
42
43 {
44         my $f = 't/iso-2202-jp.mbox';
45         my $mime = Email::MIME->new(do {
46                 open my $fh, '<', $f or die "open($f): $!";
47                 local $/;
48                 <$fh>;
49         });
50         my $raw = '';
51         msg_iter($mime, sub {
52                 my ($part, $level, @ex) = @{$_[0]};
53                 my ($s, $err) = msg_part_text($part, 'text/plain');
54                 ok(!$err, 'no error');
55                 $raw .= $s;
56         });
57         ok(length($raw) > 0, 'got non-empty message');
58         is(index($raw, '$$$'), -1, 'no unescaped $$$');
59 }
60
61 done_testing();
62 1;