provide proper debug output in test if compiling psgi fails
[catagits/Catalyst-Runtime.git] / t / aggregate / psgi_file.t
CommitLineData
c234ca55 1use strict;
2use warnings;
3use Test::More;
4use FindBin;
5use lib "$FindBin::Bin/../lib";
6use File::Temp qw/ tempdir /;
7use TestApp;
8use File::Spec;
3d5bcdf4 9use Carp qw/croak/;
7991d6fc 10use IPC::Open3 qw(open3);
c234ca55 11
12my $home = tempdir( CLEANUP => 1 );
13my $path = File::Spec->catfile($home, 'testapp.psgi');
14open(my $psgi, '>', $path)
15 or die;
16print $psgi q{
17use strict;
18use warnings;
19use TestApp;
20
8f076801 21TestApp->psgi_app;
c234ca55 22};
23close($psgi);
3d5bcdf4 24
7991d6fc 25open my $stdin, '<', File::Spec->devnull;
26my $pid = open3 $stdin, my $stdout, undef, $^X, '-I', "$FindBin::Bin/../lib", '-c', $path;
27my $output = do { local $/; <$stdout> };
28waitpid $pid, 0;
29
30ok $? == 0, '.psgi compiles'
31 or diag $output;
3d5bcdf4 32
c234ca55 33# NOTE - YOU *CANNOT* do something like:
34#my $psgi_ref = require $path;
35# otherwise this test passes!
36# I don't exactly know why that is yet, however, to be safe for future, that
e6006848 37# is why this test writes out its own .psgi file in a temp directory - so that that
c234ca55 38# path has never been require'd before, and will never be require'd again..
39
40local TestApp->config->{home} = $home;
41
42my $failed = 0;
43eval {
44 # Catch infinite recursion (or anything else)
45 local $SIG{__WARN__} = sub { warn(@_); $failed = 1; die; };
8f076801 46 TestApp->_finalized_psgi_app;
c234ca55 47};
48ok(!$@, 'No exception')
49 or diag $@;
8f076801 50ok(!$failed, 'TestApp->_finalized_psgi_app works');
c234ca55 51
52done_testing;