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