From fdd089ee175bf458d2674893e19b4af2edd82b4e Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 5 Oct 2016 23:47:31 +0000 Subject: t/thread-cycle: test self-referential messages Some broken (or malicious) mailers may include a generated Message-ID in its References header, so be prepared for it. --- t/thread-cycle.t | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) (limited to 't') diff --git a/t/thread-cycle.t b/t/thread-cycle.t index 4d60f7e3..0e1ecfe2 100644 --- a/t/thread-cycle.t +++ b/t/thread-cycle.t @@ -51,18 +51,7 @@ my @msgs = map { } ); -my $th = PublicInbox::SearchThread->new(\@msgs); -$th->thread; -$th->order(sub { [ sort { $a->{id} cmp $b->{id} } @{$_[0]} ] }); -my $st = ''; -my @q = map { (0, $_) } @{$th->{rootset}}; -while (@q) { - my $level = shift @q; - my $node = shift @q or next; - $st .= (" "x$level). "$node->{id}\n"; - my $cl = $level + 1; - unshift @q, map { ($cl, $_) } @{$node->{children}} -} +my $st = thread_to_s(\@msgs); SKIP: { skip 'Mail::Thread missing', 1 unless $mt; @@ -71,7 +60,7 @@ SKIP: { $mt->order(sub { sort { $a->messageid cmp $b->messageid } @_ }); my $check = ''; - @q = map { (0, $_) } $mt->rootset; + my @q = map { (0, $_) } $mt->rootset; while (@q) { my $level = shift @q; my $node = shift @q or next; @@ -81,6 +70,28 @@ SKIP: { is($check, $st, 'Mail::Thread output matches'); } +@msgs = map { bless $_, 'PublicInbox::SearchMsg' } ( + { mid => 'a@b' }, + { mid => 'b@c', references => ' ' }, + { mid => 'd@e', references => '' }, +); + +is(thread_to_s(\@msgs), "a\@b\n b\@c\nd\@e\n", 'ok with self-references'); + done_testing(); -1; +sub thread_to_s { + my $th = PublicInbox::SearchThread->new(shift); + $th->thread; + $th->order(sub { [ sort { $a->{id} cmp $b->{id} } @{$_[0]} ] }); + my $st = ''; + my @q = map { (0, $_) } @{$th->{rootset}}; + while (@q) { + my $level = shift @q; + my $node = shift @q or next; + $st .= (" "x$level). "$node->{id}\n"; + my $cl = $level + 1; + unshift @q, map { ($cl, $_) } @{$node->{children}}; + } + $st; +} -- cgit v1.2.3-24-ge0c7