1 # -*- Mode: cperl; coding: utf-8; cperl-indent-level: 2 -*-
2 #!/usr/local/bin/perl -w
7 # Due to a bug in older versions of MakeMaker & Test::Harness, we must
8 # ensure the blib's are in @INC, else we might use the core CGI.pm
9 use lib qw(blib/lib blib/arch);
11 use Test::More tests => 41;
14 BEGIN { use_ok('CGI::Carp') };
16 #-----------------------------------------------------------------------------
18 #-----------------------------------------------------------------------------
21 my $expect_f = __FILE__;
22 my $expect_l = __LINE__ + 1;
23 my ($file, $line, $id) = CGI::Carp::id(0);
24 is($file, $expect_f, "file");
25 is($line, $expect_l, "line");
26 is($id, "carp.t", "id");
28 # one level of indirection
29 sub id1 { my $level = shift; return CGI::Carp::id($level); };
31 $expect_l = __LINE__ + 1;
32 ($file, $line, $id) = id1(1);
33 is($file, $expect_f, "file");
34 is($line, $expect_l, "line");
35 is($id, "carp.t", "id");
37 # two levels of indirection
38 sub id2 { my $level = shift; return id1($level); };
40 $expect_l = __LINE__ + 1;
41 ($file, $line, $id) = id2(2);
42 is($file, $expect_f, "file");
43 is($line, $expect_l, "line");
44 is($id, "carp.t", "id");
46 #-----------------------------------------------------------------------------
48 #-----------------------------------------------------------------------------
55 like(CGI::Carp::stamp(),
57 "Time in correct format");
59 sub stamp1 {return CGI::Carp::stamp()};
60 sub stamp2 {return stamp1()};
62 like(stamp2(), $stamp, "Time in correct format");
64 #-----------------------------------------------------------------------------
66 #-----------------------------------------------------------------------------
68 # set some variables to control what's going on.
70 $CGI::Carp::EMIT_WARNINGS = 0;
71 my $q_file = quotemeta($file);
74 # Test that realwarn is called
77 eval "sub CGI::Carp::realwarn {return 'Called realwarn'};";
80 $expect_l = __LINE__ + 1;
81 is(CGI::Carp::warn("There is a problem"),
83 "CGI::Carp::warn calls CORE::warn");
85 # Test that message is constructed correctly
86 eval 'sub CGI::Carp::realwarn {my $mess = shift; return $mess};';
88 $expect_l = __LINE__ + 1;
89 like(CGI::Carp::warn("There is a problem"),
90 "/] $id: There is a problem at $q_file line $expect_l.".'$/',
91 "CGI::Carp::warn builds correct message");
93 # Test that _warn is called at the correct time
96 my $warn_expect_l = $expect_l = __LINE__ + 1;
97 like(CGI::Carp::warn("There is a problem"),
98 "/] $id: There is a problem at $q_file line $expect_l.".'$/',
99 "CGI::Carp::warn builds correct message");
101 #-----------------------------------------------------------------------------
103 #-----------------------------------------------------------------------------
105 ok(!CGI::Carp::ineval, 'ineval returns false when not in eval');
106 eval {ok(CGI::Carp::ineval, 'ineval returns true when in eval');};
108 #-----------------------------------------------------------------------------
110 #-----------------------------------------------------------------------------
112 # set some variables to control what's going on.
113 $CGI::Carp::WRAP = 0;
115 $expect_l = __LINE__ + 1;
116 eval { CGI::Carp::die('There is a problem'); };
118 '/^There is a problem/',
119 'CGI::Carp::die calls CORE::die without altering argument in eval');
121 # Test that realwarn is called
124 eval 'sub CGI::Carp::realdie {my $mess = shift; return $mess};';
127 like(CGI::Carp::die('There is a problem'),
129 'CGI::Carp::die calls CORE::die, but adds stamp');
131 #-----------------------------------------------------------------------------
133 #-----------------------------------------------------------------------------
135 is(CGI::Carp::set_message('My new Message'),
137 'CGI::Carp::set_message returns new message');
139 is($CGI::Carp::CUSTOM_MSG,
141 'CGI::Carp::set_message message set correctly');
143 # set the message back to the empty string so that the tests later
145 CGI::Carp::set_message(''),
147 #-----------------------------------------------------------------------------
149 #-----------------------------------------------------------------------------
151 import CGI::Carp qw(name=new_progname);
152 is($CGI::Carp::PROGNAME,
154 'CGI::Carp::import set program name correctly');
156 is(CGI::Carp::set_progname('newer_progname'),
158 'CGI::Carp::set_progname returns new program name');
160 is($CGI::Carp::PROGNAME,
162 'CGI::Carp::set_progname program name set correctly');
164 # set the message back to the empty string so that the tests later
166 is (CGI::Carp::set_progname(undef),undef,"CGI::Carp::set_progname returns unset name correctly");
167 is ($CGI::Carp::PROGNAME,undef,"CGI::Carp::set_progname program name unset correctly");
169 #-----------------------------------------------------------------------------
170 # Test warnings_to_browser
171 #-----------------------------------------------------------------------------
173 CGI::Carp::warningsToBrowser(0);
174 is($CGI::Carp::EMIT_WARNINGS, 0, "Warnings turned off");
176 # turn off STDOUT (prevents spurious warnings to screen
177 tie *STDOUT, 'StoreStuff' or die "Can't tie STDOUT";
178 CGI::Carp::warningsToBrowser(1);
179 my $fake_out = join '', <STDOUT>;
182 open(STDOUT, ">&REAL_STDOUT");
184 $fname =~ tr/<>-/\253\273\255/; # _warn does this so we have to also
185 is( $fake_out, "<!-- warning: There is a problem at $fname line $warn_expect_l. -->\n",
186 'warningsToBrowser() on' );
188 is($CGI::Carp::EMIT_WARNINGS, 1, "Warnings turned off");
190 #-----------------------------------------------------------------------------
191 # Test fatals_to_browser
192 #-----------------------------------------------------------------------------
213 tie *STDOUT, "StoreStuff";
218 CGI::Carp::fatalsToBrowser();
219 $result[0] .= $_ while (<STDOUT>);
221 CGI::Carp::fatalsToBrowser('Message to the world');
222 $result[1] .= $_ while (<STDOUT>);
224 $ENV{SERVER_ADMIN} = 'foo@bar.com';
225 CGI::Carp::fatalsToBrowser();
226 $result[2] .= $_ while (<STDOUT>);
228 CGI::Carp::set_message('Override the message passed in'),
230 CGI::Carp::fatalsToBrowser('Message to the world');
231 $result[3] .= $_ while (<STDOUT>);
232 CGI::Carp::set_message(''),
233 delete $ENV{SERVER_ADMIN};
240 '/Content-type: text/html/',
241 "Default string has header");
243 ok($result[0] !~ /Message to the world/, "Custom message not in default string");
246 '/Message to the world/',
247 "Custom Message appears in output");
249 ok($result[0] !~ /foo\@bar.com/, "Server Admin does not appear in default message");
253 "Server Admin appears in output");
256 '/Message to the world/',
257 "Custom message not in result");
260 '/Override the message passed in/',
261 "Correct message in string");
263 #-----------------------------------------------------------------------------
265 #-----------------------------------------------------------------------------
268 CGI::Carp::to_filehandle (@_);
271 tie *STORE, "StoreStuff";
274 my $fh = FileHandle->new;
276 ok( defined buffer(\*STORE), '\*STORE returns proper filehandle');
277 ok( defined buffer( $fh ), '$fh returns proper filehandle');
278 ok( defined buffer('::STDOUT'), 'STDIN returns proper filehandle');
279 ok( defined buffer(*main::STDOUT), 'STDIN returns proper filehandle');
280 ok(!defined buffer("WIBBLE"), '"WIBBLE" doesn\'t returns proper filehandle');