# $Id: TestTarget.pm 81007 2008-03-18 20:47:11Z shuston $
#
# The TestTarget class is for operations that are per-target while testing.
# They can be overridden for specific needs like embedded systems, etc.

package PerlACE::TestTarget;

use strict;
use English;
use POSIX qw(:time_h);

###############################################################################

# Create the proper kind of TestTarget based on arguments or test
# configuration. Pass the PerlACE::ConfigList as the first argument.

sub create_target
{
    my $config = shift;
    my $target = undef;
    if ($config->check_config("LabVIEW_RT")) {
        require PerlACE::TestTarget_LVRT;
        $target = new PerlACE::TestTarget_LVRT;
    }
    else {
        $target = new PerlACE::TestTarget;
    }
    return $target;
}

### Constructor and Destructor

sub new
{
    my $proto = shift;
    my $class = ref ($proto) || $proto;
    my $self = {};

    bless ($self, $class);
    return $self;
}

sub DESTROY
{
    my $self = shift;
}

##################################################################

sub LocalFile ($)
{
    my $self = shift;
    my $file = shift;
    my $newfile = PerlACE::LocalFile($file);
    return $newfile;
}

sub DeleteFile ($)
{
    my $self = shift;
    my $file = shift;
    unlink $file;
}

sub GetFile ($)
{
    # On local host, the file is already there.
    my $self = shift;
    my $remote_file = shift;
    my $local_file = shift;
    return 0;
}

sub WaitForFileTimed ($)
{
    my $self = shift;
    my $file = shift;
    my $timeout = shift;
    return PerlACE::waitforfile_timed ($file, $timeout);
}

sub CreateProcess ($)
{
    my $self = shift;
    my $process = new PerlACE::Process (@_);
    return $process;
}

# Don't need to do anything in most cases.
sub GetStderrLog ($)
{
    my $self = shift;
    return;
}

1;
