The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# Copyright (c) 2002-2005 Cunningham & Cunningham, Inc.
# Released under the terms of the GNU General Public License version 2 or later.
#
# Perl translation by Martin Busik <martin.busik@busik.de>

package Test::C2FIT::eg::ExampleTests;
use base 'Test::C2FIT::ColumnFixture';

use strict;

use Error qw( :try );
use Test::C2FIT::Fixture;
use IO::File;

sub new {
    my $pkg  = shift;
    my $self = $pkg->SUPER::new( basedir => undef );

    for my $adir qw(.) {
        $self->{basedir} = $adir
          if -d "$adir"
          && -d "$adir/input"
          && -d "$adir/output";
    }
    die "expecting input and output directories somewhere!"
      unless defined( $self->{basedir} );

    $self->{input}     = undef;
    $self->{tables}    = undef;
    $self->{fixture}   = undef;
    $self->{runCounts} = new Test::C2FIT::Counts();
    $self->{footnote}  = undef;
    $self->{fileCell}  = undef;

    return $self;
}

sub run {
    my $self  = shift;
    my $input = $self->read( $self->{file} );
    $self->{fixture} = new Test::C2FIT::Fixture();
    if ( defined( $self->{wiki} ) && $self->{wiki} eq "true" ) {
        $self->{tables} =
          new Test::C2FIT::Parse( $input, [ "wiki", "table", "tr", "td" ] );
        $self->{fixture}->doTables( $self->{tables}->{parts} );
    }
    else {
        $self->{tables} =
          new Test::C2FIT::Parse( $input, [ "table", "tr", "td" ] );
        $self->{fixture}->doTables( $self->{tables} );
    }
    $self->{runCounts}->tally( $self->{fixture}->{counts} );

    #
    # TBD: following line is not correct
    # $Test::C2FIT::Fixture::summary{"counts run"} = $self->{runCounts};
}

sub right() {
    my $self = shift;
    $self->run();
    return $self->{fixture}->{counts}->{right};
}

sub wrongCount() {
    my $self = shift;
    return $self->{fixture}->{counts}->{wrong};
}

sub ignores() {
    my $self = shift;
    return $self->{fixture}->{counts}->{ignores};
}

sub exceptions() {
    my $self = shift;
    return $self->{fixture}->{counts}->{exceptions};
}

sub read {
    my $self     = shift;
    my $filename = shift;
    my $fqfn     = $self->{basedir} . "/input/" . $filename;

    my $of = new IO::File "<$fqfn";
    die unless ref($of);

    my $cont = join( '', <$of> );
    $of = undef;
    $cont;
}

#
# nice perl trickery, since the java-fit-document uses a public int wrong() and
# the Fixture uses as void wrong(Parse cell)
#

sub wrong {
    my $self = shift;
    if ( scalar(@_) == 0 ) {

        #
        #  public int wrong()
        #
        return $self->wrongCount();
    }
    else {

        #
        #   wrong(Parse cell)
        #
        return $self->SUPER::wrong(@_);
    }
}

=pod

not supported yet...
    
sub doRow {
    my ($self, $row) = @_;
    $self->{fileCell} = $row->leaf();
    $self->SUPER::doRow($row);
}


sub wrong {
    my ($self,$cell) = @_;
    $self->SUPER::wrong($cell);
    if(!defined($self->{footnote})) {
        # Footnotes not supported yet...
        # $self->{footnote} = $self->{tables}->footnote();
        $self->{fileCell}->addToBody($self->{footnote});
    }
}

=cut

1;