[Catalyst-commits] r9568 - in Catalyst-Runtime/5.70/trunk: .
lib/Catalyst/DispatchType t t/lib/TestApp/Controller
t0m at dev.catalyst.perl.org
t0m at dev.catalyst.perl.org
Tue Mar 24 00:14:09 GMT 2009
Author: t0m
Date: 2009-03-24 00:14:08 +0000 (Tue, 24 Mar 2009)
New Revision: 9568
Added:
Catalyst-Runtime/5.70/trunk/t/dead_recursive_chained_attributes.t
Removed:
Catalyst-Runtime/5.70/trunk/t/unit_core_action_chained.t
Modified:
Catalyst-Runtime/5.70/trunk/Changes
Catalyst-Runtime/5.70/trunk/lib/Catalyst/DispatchType/Chained.pm
Catalyst-Runtime/5.70/trunk/t/dead_load_multiple_chained_attributes.t
Catalyst-Runtime/5.70/trunk/t/lib/TestApp/Controller/Root.pm
Log:
svn merge -r 9548:9549 http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Runtime/5.80/trunk
Make chaining to yourself explode at app load time
Modified: Catalyst-Runtime/5.70/trunk/Changes
===================================================================
--- Catalyst-Runtime/5.70/trunk/Changes 2009-03-23 23:53:47 UTC (rev 9567)
+++ Catalyst-Runtime/5.70/trunk/Changes 2009-03-24 00:14:08 UTC (rev 9568)
@@ -11,6 +11,9 @@
for dispatchable actions so that ->visit or ->going to ActionChains
with qw/Class::Name method_name/ works correctly (t0m)
- Tests for this (Radoslaw Zielinski)
+ - Throw an exception rather than loading an app if an action
+ tries to chain to itself (t0m)
+ - Tests for this
- Added Catalyst::Test::ctx_request to be able to inspect
the context object after a request is made (Jos Boumans)
Modified: Catalyst-Runtime/5.70/trunk/lib/Catalyst/DispatchType/Chained.pm
===================================================================
--- Catalyst-Runtime/5.70/trunk/lib/Catalyst/DispatchType/Chained.pm 2009-03-23 23:53:47 UTC (rev 9567)
+++ Catalyst-Runtime/5.70/trunk/lib/Catalyst/DispatchType/Chained.pm 2009-03-24 00:14:08 UTC (rev 9568)
@@ -222,9 +222,14 @@
"Multiple Chained attributes not supported registering ${action}"
);
}
+ my $chained_to = $chained_attr[0];
- my $children = ($self->{children_of}{ $chained_attr[0] } ||= {});
+ Catalyst::Exception->throw(
+ "Actions cannot chain to themselves registering /${action}"
+ ) if ($chained_to eq '/' . $action);
+ my $children = ($self->{children_of}->{ $chained_to } ||= {});
+
my @path_part = @{ $action->attributes->{PathPart} || [] };
my $part = $action->name;
Modified: Catalyst-Runtime/5.70/trunk/t/dead_load_multiple_chained_attributes.t
===================================================================
--- Catalyst-Runtime/5.70/trunk/t/dead_load_multiple_chained_attributes.t 2009-03-23 23:53:47 UTC (rev 9567)
+++ Catalyst-Runtime/5.70/trunk/t/dead_load_multiple_chained_attributes.t 2009-03-24 00:14:08 UTC (rev 9568)
@@ -10,16 +10,16 @@
use Catalyst::Test 'TestApp';
-eval q{
+eval q{
package TestApp::Controller::Action::Chained;
sub should_fail : Chained('/') Chained('foo') Args(0) {}
};
ok(!$@);
-eval { TestApp->setup_actions; };
+eval { TestApp->setup_actions; };
ok($@, 'Multiple chained attributes make action setup fail');
-eval q{
+eval q{
package TestApp::Controller::Action::Chained;
no warnings 'redefine';
sub should_fail {}
Copied: Catalyst-Runtime/5.70/trunk/t/dead_recursive_chained_attributes.t (from rev 9549, Catalyst-Runtime/5.80/trunk/t/dead_recursive_chained_attributes.t)
===================================================================
--- Catalyst-Runtime/5.70/trunk/t/dead_recursive_chained_attributes.t (rev 0)
+++ Catalyst-Runtime/5.70/trunk/t/dead_recursive_chained_attributes.t 2009-03-24 00:14:08 UTC (rev 9568)
@@ -0,0 +1,43 @@
+#!perl
+
+use strict;
+use warnings;
+use lib 't/lib';
+
+use Test::More tests => 6;
+
+use Catalyst::Test 'TestApp';
+
+eval q{
+ package TestApp::Controller::Action::Chained;
+ sub should_fail : Chained('should_fail') Args(0) {}
+};
+ok(!$@);
+
+eval { TestApp->setup_actions; };
+like($@, qr|Actions cannot chain to themselves registering /action/chained/should_fail|,
+ 'Local self referencing attributes makes action setup fail');
+
+eval q{
+ package TestApp::Controller::Action::Chained;
+ no warnings 'redefine';
+ sub should_fail {}
+ use warnings 'redefine';
+ sub should_also_fail : Chained('/action/chained/should_also_fail') Args(0) {}
+};
+ok(!$@);
+
+eval { TestApp->setup_actions };
+like($@, qr|Actions cannot chain to themselves registering /action/chained/should_also_fail|,
+ 'Full path self referencing attributes makes action setup fail');
+
+eval q{
+ package TestApp::Controller::Action::Chained;
+ no warnings 'redefine';
+ sub should_also_fail {}
+};
+ok(!$@);
+
+eval { TestApp->setup_actions };
+ok(!$@, 'And ok again') or warn $@;
+
Modified: Catalyst-Runtime/5.70/trunk/t/lib/TestApp/Controller/Root.pm
===================================================================
--- Catalyst-Runtime/5.70/trunk/t/lib/TestApp/Controller/Root.pm 2009-03-23 23:53:47 UTC (rev 9567)
+++ Catalyst-Runtime/5.70/trunk/t/lib/TestApp/Controller/Root.pm 2009-03-24 00:14:08 UTC (rev 9568)
@@ -20,8 +20,4 @@
$c->forward('TestApp::View::Dump::Request');
}
-sub chain_to_self : Chained('chain_to_self') PathPart('') CaptureArgs(1) { }
-
-sub chain_recurse_endoint : Chained('chain_to_self') Args(0) { }
-
1;
Deleted: Catalyst-Runtime/5.70/trunk/t/unit_core_action_chained.t
===================================================================
--- Catalyst-Runtime/5.70/trunk/t/unit_core_action_chained.t 2009-03-23 23:53:47 UTC (rev 9567)
+++ Catalyst-Runtime/5.70/trunk/t/unit_core_action_chained.t 2009-03-24 00:14:08 UTC (rev 9568)
@@ -1,26 +0,0 @@
-#!perl
-
-use strict;
-use warnings;
-
-use FindBin;
-use lib "$FindBin::Bin/lib";
-
-use Test::More tests => 3;
-
-
-use TestApp;
-
-my $dispatch_type = TestApp->dispatcher->dispatch_type('Chained');
-isa_ok($dispatch_type, "Catalyst::DispatchType::Chained", "got dispatch type");
-
-# This test was failing due to recursion/OOM. set up an alarm so things dont
-# runaway
-local $SIG{ALRM} = sub {
- ok(0, "Chained->list didn't loop");
- die "alarm expired - test probably looping";
-};
-alarm 10;
-
-$dispatch_type->list("TestApp");
-ok(1, "Chained->list didn't loop");
More information about the Catalyst-commits
mailing list