CGI-Application-Plugin-Forward
view release on metacpan or search on metacpan
t/05-auto_runmode.t view on Meta::CPAN
#!/usr/bin/perl
use strict;
# the number of tests is important, because we want to make sure that
# all run modes are actually reached
use Test::More;
BEGIN {
eval {
require CGI::Application::Plugin::AutoRunmode;
};
if ($@) {
plan skip_all => 'CGI::Application::Plugin::AutoRunmode not installed';
}
if (!CGI::Application->can('new_hook')) {
plan skip_all => 'installed CGI::Application does not support callbacks';
}
else {
if (CGI::Application::Plugin::AutoRunmode->can('is_auto_runmode')) {
plan 'tests' => 17;
CGI::Application::Plugin::AutoRunmode->import('cgiapp_prerun');
}
else {
plan skip_all => 'installed CGI::Application::Plugin::AutoRunmode does not support is_auto_runmode';
}
}
}
{
package WebApp;
use vars qw(@ISA);
use Test::More;
use CGI::Application;
BEGIN { @ISA = ('CGI::Application'); }
use CGI::Application::Plugin::Forward;
BEGIN {
CGI::Application::Plugin::AutoRunmode->import('cgiapp_prerun');
}
sub setup {
my $self = shift;
$self->header_type('none');
$self->param('hook' => 0);
$self->add_callback('forward_prerun', \&hooked_method);
}
sub meth_one : StartRunmode {
my $self = shift;
is($self->get_current_runmode, 'meth_one', '[meth_one] crm: meth_one');
ok(!$self->param('hook'), '[meth_one] hook not called yet 1');
$self->other_method('foo');
ok(!$self->param('hook'), '[meth_one] hook not called yet 2');
'';
}
sub other_method : Runmode {
my $self = shift;
my @params = @_;
ok(!$self->param('hook'), '[other_method] hook not called yet 1');
ok(eq_array(\@params, ['foo']), '[other_method] params');
is($self->get_current_runmode, 'meth_one', '[other_method] crm: meth_one');
my $output = $self->forward('meth_two', 'bar', 'baz');
is($self->param('hook'), 'meth_two', '[other_method] hook called');
$self->param('hook' => 0);
ok(!$self->param('hook'), '[other_method] hook not called yet 2');
is($output, 'other_runmode_output', 'other_runmode output');
eval {
$output = $self->forward('non_existent', 'bar', 'baz');
};
ok($@, 'prevented from forwarding to non-existent run mode');
ok(!$self->param('hook'), '[other_method] hook not called yet 3 (after non-existent)');
eval {
$output = $self->forward('action_not', 'bar', 'baz');
};
( run in 1.881 second using v1.01-cache-2.11-cpan-39bf76dae61 )