Add the test from r9505, move the new method out of the POD where patch put it, and...
Tomas Doran [Sat, 21 Mar 2009 14:16:33 +0000 (14:16 +0000)]
lib/Catalyst/Dispatcher.pm
t/unit_core_action_chained.t [new file with mode: 0644]

index e5b3d22..0f632e6 100644 (file)
@@ -32,8 +32,8 @@ has _registered_dispatch_types => (is => 'rw', default => sub { {} }, required =
 has _method_action_class => (is => 'rw', default => 'Catalyst::Action');
 has _action_hash => (is => 'rw', required => 1, lazy => 1, default => sub { {} });
 has _container_hash => (is => 'rw', required => 1, lazy => 1, default => sub { {} });
-
 has preload_dispatch_types => (is => 'rw', required => 1, lazy => 1, default => sub { [@PRELOAD] });
+
 has postload_dispatch_types => (is => 'rw', required => 1, lazy => 1, default => sub { [@POSTLOAD] });
 
 # Wrap accessors so you can assign a list and it will capture a list ref.
@@ -641,6 +641,20 @@ sub _load_dispatch_types {
     return @loaded;
 }
 
+# Dont document this until someone else is happy with beaviour. Ash 2009/03/16
+sub dispatch_type {
+    my ($self, $name) = @_;
+
+    unless ($name =~ s/^\+//) {
+        $name = "Catalyst::DispatchType::" . $name;
+    }
+
+    for (@{ $self->_dispatch_types }) {
+        return $_ if ref($_) eq $name;
+    }
+    return undef;
+}
+
 use Moose;
 
 # 5.70 backwards compatibility hacks.
@@ -687,20 +701,6 @@ __PACKAGE__->meta->make_immutable;
 
 Provided by Moose
 
-# Dont document this until someone else is happy with beaviour. Ash 2009/03/16
-sub dispatch_type {
-    my ($self, $name) = @_;
-
-    unless ($name =~ s/^\+//) {
-        $name = "Catalyst::DispatchType::" . $name;
-    }
-
-    for (@{ $self->dispatch_types }) {
-        return $_ if ref($_) eq $name;
-    }
-    return undef;
-}
-
 =head1 AUTHORS
 
 Catalyst Contributors, see Catalyst.pm
diff --git a/t/unit_core_action_chained.t b/t/unit_core_action_chained.t
new file mode 100644 (file)
index 0000000..1d4f4a8
--- /dev/null
@@ -0,0 +1,26 @@
+#!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");