The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use 5.008;                  # Require at least Perl version 5.8
use strict;                 # Must declare all variables before using them
use warnings;               # Emit helpful warnings
use autodie;                # Automatically throw fatal exceptions for common unrecoverable
                            #   errors (e.g. trying to open a non-existent file)

use Test::More;                  # Testing module
use Test::LongString;            # Compare strings byte by byte
use File::Temp  qw( tempfile );  #
use Data::Section -setup;        # Have various DATA sections, allows for mock files
use File::Slurp qw( slurp);

test_system(
    outfile => 't/trim_AGGT_out',
);

{    # Test trimming both ends 
    my $outfile = 't/trimmed_AGGT_TTG';
    system( "bin/selex_adapter_trimmer --fastq --infile=t/sample.fastq --outfile=$outfile --adapterseq=AGGT --adapter3prime=TTG");

    my $result   = slurp $outfile;
    my $expected = slurp 't/expected_AGGT_TTG.fastq';

    is_string( $result, $expected, 'AGGT and TTG trimming successful' );

    delete_temp_file($outfile);
}

done_testing();

sub test_system {
    my %opt = @_;
    system ("bin/selex_adapter_trimmer --fastq --infile=t/sample.fastq --outfile=$opt{outfile} --adapterseq=AGGT");

    my $result   = slurp $opt{outfile};
    my $expected = slurp 't/expected_trimAGGT.fastq';

    is_string( $result, $expected, 'Simple trim of AGGT successful' );

    delete_temp_file($opt{outfile});
}

sub delete_temp_file {
    my $filename = shift;
    my $unlinked_ok = unlink $filename;
    ok($unlinked_ok, "Deleted temp file '$filename'");
}