The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package testcases::base;
use strict;
use CGI;
use IO::File;
use XAO::Utils;
use XAO::Base;
use XAO::Objects;
use XAO::Projects qw(:all);

use base qw(Test::Unit::TestCase);

sub siteconfig {
    my $self=shift;
    return $self->{siteconfig};
}

sub set_up {
    my $self=shift;

    chomp(my $root=`pwd`);
    $root.='/testcases/testroot';
    XAO::Base::set_root($root);

    my $config=XAO::Objects->new(objname => 'Config',
                                 sitename => 'test');
    create_project(name => 'test',
                   object => $config,
                   set_current => 1);
    $config->init();

    my $cgi=CGI->new('foo=bar&test=1');

    $config->embedded('web')->enable_special_access();
    $config->cgi($cgi);
    $config->embedded('web')->disable_special_access();

    $self->{siteconfig}=$config;

    push @INC,$root;
}

sub tear_down {
    my $self=shift;
    $self->get_stdout();
    drop_project('test');
}

sub timestamp ($$) {
    my $self=shift;
    time;
}

sub timediff ($$$) {
    my $self=shift;
    my $t1=shift;
    my $t2=shift;
    $t1-$t2;
}

sub catch_stdout ($) {
    my $self=shift;
    $self->assert(!$self->{tempfile},
                  "Already catching STDOUT");

    open(TEMPSTDOUT,">&STDOUT") || die;
    my $tempstdout=IO::File->new_from_fd(fileno(TEMPSTDOUT),"w") || die;
    $self->assert($tempstdout,
                  "Can't make a copy of STDOUT");
    $self->{tempstdout}=$tempstdout;

    $self->{tempfile}=IO::File->new_tmpfile();
    $self->assert($self->{tempfile},
                  "Can't create temporary file");

    open(STDOUT,'>&' . $self->{tempfile}->fileno);
}

sub get_stdout ($) {
    my $self=shift;

    my $file=$self->{tempfile};
    return undef unless $file;

    open(STDOUT,'>&' . $self->{tempstdout}->fileno);
    $self->{tempstdout}->close();

    $file->seek(0,0);
    my $text=join('',$file->getlines);
    $file->close;

    delete $self->{tempfile};
    delete $self->{tempstdout};

    return $text;
}

1;