The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More tests => 10;

# Need CGI.pm for tests
use CGI;

# Include the test hierarchy
use lib 't/lib';

# Can we even use this module?
use_ok('TestApp6');

# Prevent output to STDOUT
$ENV{CGI_APP_RETURN_ONLY} = 1;

# Test basic cgiapp_prerun() and get_current_runmode()
{
	my $ta_obj = TestApp6->new(QUERY=>CGI->new(""));
	my $output = $ta_obj->run();

	# Did the run mode work?
	like($output, qr/^Content\-Type\:\ text\/html/);
	like($output, qr/Hello\ World\:\ prerun\_test\ OK/);

	# Did the cgiapp_prerun work?
	is($ta_obj->param('PRERUN_RUNMODE'), 'prerun_test');

	# get_current_runmode() working?
	is($ta_obj->get_current_runmode(), 'prerun_test');
}


# Test basic prerun_mode()
{
	local($^W) = undef;  # Temporarily disable warnings

	my $ta_obj = TestApp6->new(QUERY=>CGI->new('rm=prerun_mode_test'));
	my $output = $ta_obj->run();

	# Did the run mode work?
	like($output, qr/^Content\-Type\:\ text\/html/);

	# We will be in mode 'new_prerun_mode_test' if everything is working
	like($output, qr/Hello\ World\:\ new\_prerun\_mode\_test\ OK/);

	# get_current_runmode() working?
	is($ta_obj->get_current_runmode(), 'new_prerun_mode_test');
}


# Test fail-case for prerun_mode()
{
	my $ta_obj = TestApp6->new(QUERY=>CGI->new('rm=illegal_prerun_mode'));

	eval {
		my $output = $ta_obj->run();
	};

	my $eval_error = $@;

	# Should result in an error
	like($eval_error, qr/prerun\_mode\(\) can only be called within cgiapp\_prerun\(\)/);
}


# Test fail-case for prerun_mode() called from setup()
{
	$ENV{PRERUN_IN_SETUP} = 1;

	eval {
		my $ta_obj = TestApp6->new(QUERY=>CGI->new(""));
	};

	my $eval_error = $@;

	# Should result in an error
	like($eval_error, qr/prerun\_mode\(\) can only be called within cgiapp\_prerun\(\)/);
}


###############
####  EOF  ####
###############