blob: 03970849a093977a84f58a63f94757c7f26aa48d [file] [log] [blame]
#!/usr/bin/perl -T
use utf8;
use open qw( :std :encoding(UTF-8) );
use lib '.'; use lib 't';
use SATest; sa_t_init("util_parse_header_addresses");
use Test::More;
use strict;
require Mail::SpamAssassin::Util;
use constant HAS_IDN => eval { require Net::LibIDN; };
use constant HAS_IDN2 => eval { require Net::LibIDN2; };
plan skip_all => "Net::LibIDN or Net::LibIDN2 is required for this test to pass" unless (HAS_IDN || HAS_IDN2);
my @data = (
{
in => 'companyname <"no reply"@example.com>',
out => [
{
'phrase' => 'companyname',
'user' => '"no reply"',
'host' => 'example.com',
'address' => '"no reply"@example.com',
'comment' => undef,
'invalid' => 0
}
],
},
{
in => 'companyname <no reply@example.com>',
out => [
{
'phrase' => 'companyname',
'user' => 'no reply',
'host' => 'example.com',
'address' => 'no reply@example.com',
'comment' => undef,
'invalid' => 1
}
],
},
{
in => 'Support <support@foo.com_bar.com>',
out => [
{
'phrase' => 'Support',
'user' => 'support',
'host' => 'foo.com_bar.com',
'address' => 'support@foo.com_bar.com',
'comment' => undef,
'invalid' => 1
}
],
},
{
in => 'user@example.みんな',
out => [
{
'phrase' => undef,
'user' => 'user',
'host' => 'example.みんな',
'address' => 'user@example.みんな',
'comment' => undef,
'invalid' => 0
}
],
},
{
in => 'John Doe <jdoe@example.com> (Support Team)',
out => [
{
'phrase' => 'John Doe',
'user' => 'jdoe',
'host' => 'example.com',
'address' => 'jdoe@example.com',
'comment' => 'Support Team',
'invalid' => 0
}
],
},
{
in => 'Alice <alice@example.com>, Bob <bob@example.org>',
out => [
{
'phrase' => 'Alice',
'user' => 'alice',
'host' => 'example.com',
'address' => 'alice@example.com',
'comment' => undef,
'invalid' => 0
},
{
'phrase' => 'Bob',
'user' => 'bob',
'host' => 'example.org',
'address' => 'bob@example.org',
'comment' => undef,
'invalid' => 0
}
],
},
{
in => 'Root User <root>',
out => [
{
'phrase' => 'Root User',
'user' => 'root',
'host' => undef,
'address' => 'root',
'comment' => undef,
'invalid' => 1
}
],
},
{
in => 'Invalid <user@domain..com>',
out => [
{
'phrase' => 'Invalid',
'user' => 'user',
'host' => 'domain..com',
'address' => 'user@domain..com',
'comment' => undef,
'invalid' => 1
}
],
},
{
in => '<invalid@address>',
out => [
{
'phrase' => undef,
'user' => 'invalid',
'host' => 'address',
'address' => 'invalid@address',
'comment' => undef,
'invalid' => 1
}
],
},
);
plan tests => scalar @data;
foreach my $test (@data) {
my $in = $test->{in};
my $out = $test->{out};
my @addresses = Mail::SpamAssassin::Util::parse_header_addresses($in);
is_deeply(\@addresses, $out, "parse_header_addresses('$in')");
}