Blame t/02-mailbox.t

Packit e6c8bb
# $Id: 02-mailbox.t 1406 2015-10-05 08:25:49Z willem $	-*-perl-*-
Packit e6c8bb
Packit e6c8bb
use strict;
Packit e6c8bb
use Test::More tests => 43;
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
BEGIN {
Packit e6c8bb
	use_ok('Net::DNS::Mailbox');
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
{
Packit e6c8bb
	my $name    = 'mbox@example.com';
Packit e6c8bb
	my $mailbox = new Net::DNS::Mailbox($name);
Packit e6c8bb
	ok( $mailbox->isa('Net::DNS::Mailbox'), 'object returned by new() constructor' );
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
{
Packit e6c8bb
	my $mailbox = eval { new Net::DNS::Mailbox(); };
Packit e6c8bb
	my $exception = $1 if $@ =~ /^(.+)\n/;
Packit e6c8bb
	ok( $exception ||= '', "empty argument list\t[$exception]" );
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
{
Packit e6c8bb
	my $mailbox = eval { new Net::DNS::Mailbox(undef); };
Packit e6c8bb
	my $exception = $1 if $@ =~ /^(.+)\n/;
Packit e6c8bb
	ok( $exception ||= '', "argument undefined\t[$exception]" );
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
{
Packit e6c8bb
	my %testcase = (
Packit e6c8bb
		'.'				    => '<>',
Packit e6c8bb
		'<>'				    => '<>',
Packit e6c8bb
		'a'				    => 'a',
Packit e6c8bb
		'a.b'				    => 'a@b',
Packit e6c8bb
		'a.b.c'				    => 'a@b.c',
Packit e6c8bb
		'a.b.c.d'			    => 'a@b.c.d',
Packit e6c8bb
		'a@b'				    => 'a@b',
Packit e6c8bb
		'a@b.c'				    => 'a@b.c',
Packit e6c8bb
		'a@b.c.d'			    => 'a@b.c.d',
Packit e6c8bb
		'a\.b.c.d'			    => 'a.b@c.d',
Packit e6c8bb
		'a\.b@c.d'			    => 'a.b@c.d',
Packit e6c8bb
		'empty <>'			    => '<>',
Packit e6c8bb
		'fore <a.b@c.d> aft'		    => 'a.b@c.d',
Packit e6c8bb
		'nested <<address>>'		    => 'address',
Packit e6c8bb
		'obscure <<left><<<deep>>><right>>' => 'right',
Packit e6c8bb
		);
Packit e6c8bb
Packit e6c8bb
	foreach my $test ( sort keys %testcase ) {
Packit e6c8bb
		my $expect  = $testcase{$test};
Packit e6c8bb
		my $mailbox = new Net::DNS::Mailbox($test);
Packit e6c8bb
		my $data    = $mailbox->encode;
Packit e6c8bb
		my $decoded = decode Net::DNS::Mailbox( \$data );
Packit e6c8bb
		is( $decoded->address, $expect, "encode/decode mailbox	$test" );
Packit e6c8bb
	}
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
{
Packit e6c8bb
	my %testcase = (
Packit e6c8bb
		'"(a.b)"@c.d' => '"(a.b)"@c.d',
Packit e6c8bb
		'"[a.b]"@c.d' => '"[a.b]"@c.d',
Packit e6c8bb
		'"a,b"@c.d'   => '"a,b"@c.d',
Packit e6c8bb
		'"a:b"@c.d'   => '"a:b"@c.d',
Packit e6c8bb
		'"a;b"@c.d'   => '"a;b"@c.d',
Packit e6c8bb
		'"a@b"@c.d'   => '"a@b"@c.d',
Packit e6c8bb
		);
Packit e6c8bb
Packit e6c8bb
	foreach my $test ( sort keys %testcase ) {
Packit e6c8bb
		my $expect  = $testcase{$test};
Packit e6c8bb
		my $mailbox = new Net::DNS::Mailbox($test);
Packit e6c8bb
		my $data    = $mailbox->encode;
Packit e6c8bb
		my $decoded = decode Net::DNS::Mailbox( \$data );
Packit e6c8bb
		is( $decoded->address, $expect, "encode/decode mailbox	$test" );
Packit e6c8bb
	}
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
{
Packit e6c8bb
	my $mailbox   = new Net::DNS::Mailbox( uc 'MBOX.EXAMPLE.COM' );
Packit e6c8bb
	my $hash      = {};
Packit e6c8bb
	my $data      = $mailbox->encode( 1, $hash );
Packit e6c8bb
	my $compress  = $mailbox->encode( length $data, $hash );
Packit e6c8bb
	my $canonical = $mailbox->encode( length $data );
Packit e6c8bb
	my $decoded   = decode Net::DNS::Mailbox( \$data );
Packit e6c8bb
	my $downcased = new Net::DNS::Mailbox( lc $mailbox->name )->encode( 0, {} );
Packit e6c8bb
	ok( $mailbox->isa('Net::DNS::Mailbox'), 'object returned by Net::DNS::Mailbox->new()' );
Packit e6c8bb
	ok( $decoded->isa('Net::DNS::Mailbox'), 'object returned by Net::DNS::Mailbox->decode()' );
Packit e6c8bb
	is( length $compress, length $data, 'Net::DNS::Mailbox encoding is uncompressed' );
Packit e6c8bb
	isnt( $data, $downcased, 'Net::DNS::Mailbox encoding preserves case' );
Packit e6c8bb
	is( length $canonical, length $data, 'Net::DNS::Mailbox canonical form is uncompressed' );
Packit e6c8bb
	isnt( $canonical, $downcased, 'Net::DNS::Mailbox canonical form preserves case' );
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
{
Packit e6c8bb
	my $mailbox   = new Net::DNS::Mailbox1035( uc 'MBOX.EXAMPLE.COM' );
Packit e6c8bb
	my $hash      = {};
Packit e6c8bb
	my $data      = $mailbox->encode( 1, $hash );
Packit e6c8bb
	my $compress  = $mailbox->encode( length $data, $hash );
Packit e6c8bb
	my $canonical = $mailbox->encode( length $data );
Packit e6c8bb
	my $decoded   = decode Net::DNS::Mailbox1035( \$data );
Packit e6c8bb
	my $downcased = new Net::DNS::Mailbox1035( lc $mailbox->name )->encode( 0, {} );
Packit e6c8bb
	ok( $mailbox->isa('Net::DNS::Mailbox1035'), 'object returned by Net::DNS::Mailbox1035->new()' );
Packit e6c8bb
	ok( $decoded->isa('Net::DNS::Mailbox1035'), 'object returned by Net::DNS::Mailbox1035->decode()' );
Packit e6c8bb
	isnt( length $compress, length $data, 'Net::DNS::Mailbox1035 encoding is compressible' );
Packit e6c8bb
	isnt( $data,		$downcased,   'Net::DNS::Mailbox1035 encoding preserves case' );
Packit e6c8bb
	is( length $canonical, length $data, 'Net::DNS::Mailbox1035 canonical form is uncompressed' );
Packit e6c8bb
	is( $canonical,	       $downcased,   'Net::DNS::Mailbox1035 canonical form is lower case' );
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
{
Packit e6c8bb
	my $mailbox   = new Net::DNS::Mailbox2535( uc 'MBOX.EXAMPLE.COM' );
Packit e6c8bb
	my $hash      = {};
Packit e6c8bb
	my $data      = $mailbox->encode( 1, $hash );
Packit e6c8bb
	my $compress  = $mailbox->encode( length $data, $hash );
Packit e6c8bb
	my $canonical = $mailbox->encode( length $data );
Packit e6c8bb
	my $decoded   = decode Net::DNS::Mailbox2535( \$data );
Packit e6c8bb
	my $downcased = new Net::DNS::Mailbox2535( lc $mailbox->name )->encode( 0, {} );
Packit e6c8bb
	ok( $mailbox->isa('Net::DNS::Mailbox2535'), 'object returned by Net::DNS::Mailbox2535->new()' );
Packit e6c8bb
	ok( $decoded->isa('Net::DNS::Mailbox2535'), 'object returned by Net::DNS::Mailbox2535->decode()' );
Packit e6c8bb
	is( length $compress, length $data, 'Net::DNS::Mailbox2535 encoding is uncompressed' );
Packit e6c8bb
	isnt( $data, $downcased, 'Net::DNS::Mailbox2535 encoding preserves case' );
Packit e6c8bb
	is( length $canonical, length $data, 'Net::DNS::Mailbox2535 canonical form is uncompressed' );
Packit e6c8bb
	is( $canonical,	       $downcased,   'Net::DNS::Mailbox2535 canonical form is lower case' );
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
exit;
Packit e6c8bb