The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
#
use strict ;
use Test::More ;

use App::Framework '+Mail' ;
use config ;

# VERSION
our $VERSION = '1.000' ;

my %set = (
	'from'			=> 'someone@domain.co.uk',
	'to'			=> 'a@domain.co.uk, b@domain.co.uk, c@domain.co.uk',
	'error_to'		=> 'd@domain.co.uk',
	'err_level'		=> 'error',
	'subject'		=> 'a test',
	'host'			=> 'localhost',
) ;

my %man = (
	'-mail-from'			=> 'someone@domain.co.uk',
	'-mail-to'			=> 'a@domain.co.uk, b@domain.co.uk, c@domain.co.uk',
	'-mail-error-to'		=> 'd@domain.co.uk',
	'-mail-err-level'		=> 'error',
	'-mail-subject'		=> 'a test',
	'-mail-host'			=> 'localhost',
) ;

my %tests = (
	'set'	=> scalar(keys %set),
	'man'	=> scalar(keys %man),
) ;


	diag( "Testing Mail feature" );

	if (!exists($config::TO_TEST{'App::Framework::Feature::Mail'}))
	{
	    plan skip_all => 'Module not selected for full install';
		exit 0 ;
	}


	eval {
		require Net::SMTP;
	} ;
	if ($@)
	{
	    plan skip_all => 'Unable to run tests since Net::SMTP not available';
		exit 0 ;
  	}

	my $stdout="" ;
	my $stderr="" ;


	## start with a redirect check
	eval{
		local *STDOUT ;
		local *STDERR ;

		open(STDOUT, '>', \$stdout)  or die "Can't open STDOUT: $!" ;
		open(STDERR, '>', \$stderr) or die "Can't open STDERR: $!";

		print "I was hoping for more!\n" ;
	} ;
	if (!$stdout)
	{
		diag("Sorry, can't redirect stdout: $@") ;
		$tests{'man'} = 0 ;
	}

	## Planned tests
	my $test_count = 0 ;
	foreach my $test (keys %tests)
	{
		$test_count += $tests{$test} ;
	}
	plan tests => $test_count ;
	
	## MAN pages
	if ($tests{'man'})
	{
		eval{
			local *STDOUT ;
			local *STDERR ;
	
			open(STDOUT, '>', \$stdout)  or die "Can't open STDOUT: $!" ;
			open(STDERR, '>', \$stderr) or die "Can't open STDERR: $!";
	
			@ARGV = ('-help') ;	
			App::Framework->new('exit_type'=>'die')->go() ;
		} ;

		foreach my $test (keys %man)
		{
			like  ($stdout, qr/$test/im, "Man page entry existance: $test");
		}

	}

	# Create application and run it
	@ARGV = () ;	
	go() ;




#=================================================================================
# SUBROUTINES EXECUTED BY APP
#=================================================================================

#----------------------------------------------------------------------
# Main execution
#
sub app
{
	my ($app, $opts_href) = @_ ;

	if ($tests{'set'})
	{
		foreach my $field (keys %set)
		{
			$app->Mail()->set(
				$field		=> $set{$field},
			) ;
	
			my $value = $app->Mail()->$field() ;
			is($value, $set{$field}, "Checking field $field") ;	
		}
	}
	
}

#----------------------------------------------------------
sub check
{
}




#=================================================================================
# SETUP
#=================================================================================

__DATA__

[SUMMARY]
Tests the application object with Mail feature