fix a memory leak introduced by 1f8cad5e5a1875de94d63ac91d8ded4d2282c62e
[catagits/Web-Simple.git] / t / dispatch_misc.t
index 7ad4cd8..842cf52 100644 (file)
@@ -16,12 +16,16 @@ my @dispatch;
 
     package MiscTest;
     sub dispatch_request { @dispatch }
+    sub string_method { [ 999, [], [""] ]; }
 }
 
 my $app = MiscTest->new;
 sub run_request { $app->run_test_request( @_ ); }
 
+string_method_name();
 app_is_non_plack();
+app_is_object();
+app_is_just_sub();
 plack_app_return();
 broken_route_def();
 invalid_psgi_responses();
@@ -32,11 +36,19 @@ matcher_nonsub_pair();
 
 done_testing();
 
+sub string_method_name {
+    @dispatch = ( '/' => "string_method" );
+
+    my $get = run_request( GET => 'http://localhost/' );
+
+    cmp_ok $get->code, '==', 999, "a dispatcher that's a string matching a method on the dispatch object gets executed";
+}
+
 sub app_is_non_plack {
 
     my $r = HTTP::Response->new( 999 );
 
-    my $d = Web::Dispatch->new( app => $r );
+    my $d = Web::Dispatch->new( dispatch_app => $r );
     eval { $d->call };
 
     like $@, qr/No idea how we got here with HTTP::Response/,
@@ -44,6 +56,29 @@ sub app_is_non_plack {
     undef $@;
 }
 
+sub app_is_object {
+    {
+
+        package ObjectApp;
+        use Moo;
+        sub to_app { [ 999, [], ["ok"] ] }
+    }
+
+    my $o = ObjectApp->new;
+    my $d = Web::Dispatch->new( dispatch_object => $o );
+    my $res = $d->call;
+
+    cmp_ok $res->[0], '==', 999, "Web::Dispatch can dispatch properly, given only an object with to_app method";
+}
+
+sub app_is_just_sub {
+    my $d = Web::Dispatch->new( dispatch_app => sub () { [ 999, [], ["ok"] ] } );
+    my $res = $d->call( {} );
+
+    cmp_ok $res->[0], '==', 999,
+      "Web::Dispatch can dispatch properly, given only an app that's just a sub, with no object involved";
+}
+
 sub plack_app_return {
     {