# check core module: cgi handler
use strict;
use warnings;
use Test::More tests => 1;
#=== Dependencies
use Cwd;
my $cwd = getcwd();
$cwd .= "/" unless substr($cwd, -1, 1) eq "/";
my $root = "${cwd}t/data/Handler/CGI/";
#File handler
use Konstrukt::Handler::CGI;
my $cgihandler = Konstrukt::Handler::CGI->new($root, '/testfile');
#catch output
my $redirector = Konstrukt::Test::PrintRedirector->new();
$redirector->activate();
my $catcher = Konstrukt::Test::PrintRedirectorCatcher->new();
use Konstrukt::Event;
$Konstrukt::Event->register("Konstrukt::Test::PrintRedirector::print", $catcher, \&Konstrukt::Test::PrintRedirectorCatcher::print);
#process
$cgihandler->handler();
$redirector->deactivate();
like($catcher->{printed}, qr/\r?\n\r?\ntestdata$/, "handler");
package Konstrukt::Test::PrintRedirector;
#test print director to catch the output of the file handler
use Konstrukt::Event;
sub new {
my ($class) = @_;
tie(*TESTPRINTREDIRECTOR, 'Konstrukt::Test::PrintRedirector');
return bless {}, $class;
}
sub activate {
my ($self) = @_;
$self->{old_fh} = select(TESTPRINTREDIRECTOR) unless exists($self->{old_fh});
}
sub deactivate {
my ($self) = @_;
if (defined($self->{old_fh})) {
select($self->{old_fh});
delete($self->{old_fh});
}
}
sub TIEHANDLE {
my ($class) = @_;
return bless {}, $class;
}
sub PRINT {
my ($self, @data) = @_;
$Konstrukt::Event->trigger("Konstrukt::Test::PrintRedirector::print", @data);
}
1;
package Konstrukt::Test::PrintRedirectorCatcher;
sub new { bless {}, $_[0] }
sub print { $_[0]->{printed} .= $_[1] }
1;