my
$COUNT
;
plan(
tests
=>
$COUNT
);
BEGIN {
$COUNT
+= 5 }
require_ok(
'CGI::Application::Dispatch'
);
require_ok(
'Module::Name'
);
require_ok(
'MyApp::Module::Name'
);
require_ok(
'MyApp::Dispatch'
);
require_ok(
'MyApp::DispatchTable'
);
local
$ENV
{CGI_APP_RETURN_ONLY} =
'1'
;
my
$output
=
''
;
my
$junk
;
{
no
strict;
open
SAVE_ERR,
">&STDERR"
;
close
STDERR;
open
STDERR,
">"
, \
$junk
or
warn
"Could not redirect STDERR?\n"
;
}
BEGIN {
$COUNT
+= 1 }
{
local
$ENV
{PATH_INFO} =
'/test/dispatch_path/'
;
is(CGI::Application::Dispatch->dispatch_path,
'/test/dispatch_path/'
,
'->dispatch_path() is returning PATH_INFO'
);
}
BEGIN {
$COUNT
+= 2 }
{
local
$ENV
{PATH_INFO} =
'/module_name/rm1'
;
my
$output
= CGI::Application::Dispatch->dispatch();
contains_string(
$output
,
'Module::Name->rm1'
,
'dispatch(): module_name'
);
local
$ENV
{PATH_INFO} =
'module_name/rm1'
;
$output
=
''
;
$output
= CGI::Application::Dispatch->dispatch();
contains_string(
$output
,
'Module::Name->rm1'
,
'dispatch(): module_name'
);
}
BEGIN {
$COUNT
+= 1 }
{
local
$ENV
{PATH_INFO} =
'/module_name/rm2'
;
$output
= CGI::Application::Dispatch->dispatch(
prefix
=>
'MyApp'
,);
contains_string(
$output
,
'MyApp::Module::Name->rm2'
,
'dispatch(): prefix'
);
}
BEGIN {
$COUNT
+= 1 }
{
local
$ENV
{PATH_INFO} =
'/module_name/rm2'
;
$output
= CGI::Application::Dispatch->dispatch(
prefix
=>
'MyApp'
,);
contains_string(
$output
,
'MyApp::Module::Name->rm2'
,
'RM correct'
);
}
BEGIN {
$COUNT
+= 1 }
{
local
$ENV
{PATH_INFO} =
'/module_name/rm3'
;
$output
= CGI::Application::Dispatch->dispatch(
prefix
=>
'MyApp'
,
PARAMS
=> {
my_param
=>
'testing'
,},
);
contains_string(
$output
,
'MyApp::Module::Name->rm3 my_param=testing'
,
'PARAMS passed through'
);
}
BEGIN {
$COUNT
+= 2 }
{
local
$ENV
{PATH_INFO} =
''
;
$output
= CGI::Application::Dispatch->dispatch(
prefix
=>
'MyApp'
,
default
=>
'/module_name/rm2'
,
);
contains_string(
$output
,
'MyApp::Module::Name->rm2'
,
'default'
);
local
$ENV
{PATH_INFO} =
'/'
;
$output
= CGI::Application::Dispatch->dispatch(
prefix
=>
'MyApp'
,
default
=>
'/module_name/rm2'
,
);
contains_string(
$output
,
'MyApp::Module::Name->rm2'
,
'default'
);
}
BEGIN {
$COUNT
+= 1 }
{
local
$ENV
{PATH_INFO} =
'/something_strange'
;
$output
= MyApp::Dispatch->dispatch();
contains_string(
$output
,
'MyApp::Module::Name->rm1'
,
'override translate_module_name()'
);
}
BEGIN {
$COUNT
+= 2 }
{
local
$ENV
{PATH_INFO} =
'/foo'
;
$output
= CGI::Application::Dispatch->dispatch();
like(
$output
,
qr/Not Found/
i);
local
$ENV
{PATH_INFO} =
'//'
;
$output
= CGI::Application::Dispatch->dispatch();
like(
$output
,
qr/Internal Server Error/
i);
}
BEGIN {
$COUNT
+= 1 }
{
local
$ENV
{PATH_INFO} =
'/module_name/rm4'
;
$output
= CGI::Application::Dispatch->dispatch(
prefix
=>
'MyApp'
,
args_to_new
=> {
PARAMS
=> {
my_param
=>
'more testing'
},},
);
contains_string(
$output
,
'MyApp::Module::Name->rm3 my_param=more testing'
,
'PARAMS passed through'
);
}
BEGIN {
$COUNT
+= 9 }
{
local
$ENV
{PATH_INFO} =
'/module_name'
;
$output
= MyApp::DispatchTable->dispatch();
contains_string(
$output
,
'MyApp::Module::Name->rm1'
,
'matched :app'
);
local
$ENV
{PATH_INFO} =
'/module_name/rm2'
;
$output
= MyApp::DispatchTable->dispatch();
contains_string(
$output
,
'MyApp::Module::Name->rm2'
,
'matched :app/:rm'
);
local
$ENV
{PATH_INFO} =
'/module_name/rm3/stuff'
;
$output
= MyApp::DispatchTable->dispatch();
contains_string(
$output
,
'MyApp::Module::Name->rm3 my_param=stuff'
,
'matched :app/:rm/:my_param'
);
local
$ENV
{PATH_INFO} =
'/module_name/bar/stuff'
;
$output
= MyApp::DispatchTable->dispatch();
contains_string(
$output
,
'MyApp::Module::Name->rm3 my_param=stuff'
,
'matched :app/bar/:my_param'
);
local
$ENV
{PATH_INFO} =
'/foo/bar'
;
$output
= MyApp::DispatchTable->dispatch();
contains_string(
$output
,
'MyApp::Module::Name->rm2'
,
'matched foo/bar'
);
local
$ENV
{PATH_INFO} =
'/module_name/foo'
;
$output
= MyApp::DispatchTable->dispatch();
contains_string(
$output
,
'MyApp::Module::Name->rm3 my_param='
,
'missing optional'
);
local
$ENV
{PATH_INFO} =
'/module_name/foo/weird'
;
$output
= MyApp::DispatchTable->dispatch();
contains_string(
$output
,
'MyApp::Module::Name->rm3 my_param=weird'
,
'present optional'
);
local
$ENV
{PATH_INFO} =
'/module_name/baz/this/is/extra'
;
$output
= MyApp::DispatchTable->dispatch();
contains_string(
$output
,
'MyApp::Module::Name->rm5 dispatch_url_remainder=this/is/extra'
,
'url remainder'
);
local
$ENV
{PATH_INFO} =
'/module_name/bap/this/is/extra'
;
$output
= MyApp::DispatchTable->dispatch();
contains_string(
$output
,
'MyApp::Module::Name->rm5 the_rest=this/is/extra'
,
'named url remainder'
);
}
BEGIN {
$COUNT
+= 1 }
{
local
$ENV
{PATH_INFO} =
'/module_name/local_args_to_new'
;
$output
= CGI::Application::Dispatch->dispatch(
prefix
=>
'MyApp'
,
table
=> [
':app/:rm'
=> {
args_to_new
=> {
TMPL_PATH
=>
'events'
,},},],
);
contains_string(
$output
,
'events'
,
'local args_to_new works'
);
}
BEGIN {
$COUNT
+= 1 }
{
local
$ENV
{PATH_INFO} =
'/somewhere_else'
;
$output
= CGI::Application::Dispatch->dispatch(
prefix
=>
'MyApp'
,
table
=> [
':app/:rm'
=> {
args_to_new
=> {
TMPL_PATH
=>
'events'
,},},],
);
like_string(
$output
,
qr/404 not found/
i,
"proper 404 error is returned when PATH_INFO isn't parsed."
);
}
{
close
STDERR;
open
STDERR,
">&SAVE_ERR"
;
close
SAVE_ERR;
}