The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

use strict;
use Test::More tests=> 11;
BEGIN{
use_ok('Bio::SNP::Inherit');
}
#Test that duplicate sample codes cause crash
eval{
my $dead_snp_obj = Bio::SNP::Inherit->new(
manifest_filename => 't/sample_bad_manifest.tab',
data_filename => 't/sample_data.tab',
);
};
like(
$@,
qr/duplicate sample id in manifest file/,
'fail on duplicate sample id in manifest file'
);
#Test that having a missing id causes program to die
eval{
my $dead_snp_obj = Bio::SNP::Inherit->new(
manifest_filename => 't/missing_id_manifest.tab',
data_filename => 't/sample_data.tab',
);
};
like(
$@,
qr/Empty id/,
'fail on missing id in manifest file'
);
my $dummy_sample_snp_obj = Bio::SNP::Inherit->new(
manifest_filename => 't/dummy_manifest.tab',
data_filename => 't/dummy_data.tab',
);
my %dummy_sample_for = (
'WG0096796-DNAF01' => {
name => 'B97',
group => '25DL',
replicates => ['WG0096796-DNAF11'],
},
'WG0096796-DNAA05' => {
name => 'B73xB97',
group => 'NAM F1',
parentA => 'WG0096795-DNAA01',
parentB => 'WG0096796-DNAF01',
},
'WG0096795-DNAA01' => {
name => 'B73',
group => 'Control',
replicates =>['WG0096796-DNAA01','WG0096797-DNAA01'],
},
'WG0096796-DNAA01' => {
name => 'B73',
group => 'Control',
replicate_of => 'WG0096795-DNAA01',
},
'WG0096797-DNAA01' => {
name => 'B73',
group => 'Control',
replicate_of => 'WG0096795-DNAA01',
},
'WG0096796-DNAF11' => {
name => 'B97',
group => 'Holland pop',
replicate_of => 'WG0096796-DNAF01',
},
'DUMMY-NUMBER-WEL' => {
name => 'B73xB97',
group => 'NAM F1',
parentA => 'WG0096795-DNAA01',
},
'DUMMY-NUMBE-WELL' => {
name => 'B73xB97',
group => 'NAM F1',
parentB => 'WG0096796-DNAF01',
},
);
is_deeply(
$dummy_sample_snp_obj->_sample_for(),
\%dummy_sample_for,
'correctly parses/stores info from dummy manifest file'
);
SKIP: {
eval 'use File::Slurp qw{ slurp }';
skip('File::Slurp needed for these tests',2) if $@;
eval 'use Test::LongString';
skip('Test::LongString needed for these tests',2) if $@;
my $expected_dummy_abh = slurp('t/dummy_abh.tab');
my $result_dummy_abh = slurp('t/dummy_data.tab_abh.tab');
is_string( $result_dummy_abh, $expected_dummy_abh, 'dummy abh correct' );
my $expected_dummy_summary = slurp('t/dummy_summary.tab');
my $result_dummy_summary = slurp('t/dummy_data.tab_summary.tab');
is_string( $result_dummy_summary, $expected_dummy_summary,
'dummy summary correct' );
}
#Test that information from the manifest file is correctly parsed and stored
# in the object.
my $snp_obj = Bio::SNP::Inherit->new(
manifest_filename => 't/sample_manifest.tab',
data_filename => 't/sample_data.tab',
);
my %expected_sample_for = (
'WG0096796-DNAF01' => {
name => 'B97',
group => '25DL',
replicates => ['WG0096796-DNAF11'],
},
'WG0096796-DNAA05' => {
name => 'B73xB97',
group => 'NAM F1',
parentA => 'WG0096795-DNAA01',
parentB => 'WG0096796-DNAF01',
},
'WG0096795-DNAA01' => {
name => 'B73',
group => 'Control',
replicates =>['WG0096796-DNAA01','WG0096797-DNAA01'],
},
'WG0096796-DNAA01' => {
name => 'B73',
group => 'Control',
replicate_of => 'WG0096795-DNAA01',
},
'WG0096797-DNAA01' => {
name => 'B73',
group => 'Control',
replicate_of => 'WG0096795-DNAA01',
},
'WG0096796-DNAF11' => {
name => 'B97',
group => 'Holland pop',
replicate_of => 'WG0096796-DNAF01',
},
);
is_deeply(
$snp_obj->_sample_for(),
\%expected_sample_for,
'correctly parses/stores info from sample manifest file'
);
remove_temp_file('t/dummy_data.tab_abh.tab' );
remove_temp_file('t/dummy_data.tab_summary.tab' );
remove_temp_file('t/sample_data.tab_abh.tab' );
remove_temp_file('t/sample_data.tab_summary.tab');
sub remove_temp_file{
my $filename = shift;
my $result = unlink $filename;
ok($result, "removed temp file: '$filename'");
}