#! /usr/bin/perl -w
use strict;
use Test::Harness;
use Test::More tests=>13;
use Test::Group;
use Test::Differences;
use Test::Deep;
use Test::Exception;
# 1,2
BEGIN {
use_ok('LIMS::MT_Plate');
use_ok('LIMS::MT_Plate_File');
$SIG{__WARN__} = \&trap_warn;
}
my $oTube = tube->new('tube');
my $oPlate_96_1 = mt_96->new('96well_1');
my $oPlate_96_2 = mt_plate->new('96well_2',96);
my $oPlate_96_3 = mt_96->new('96well_3',96);
my $oPlate_96_4 = mt_96->new('96well_4',96);
my $oPlate_96_5 = mt_96->new('96well_5',96);
my $oPlate_96_6 = mt_96->new('96well_6',96);
my $oPlate_96_7 = mt_96->new('96well_7',96);
my $oPlate_384 = mt_384->new('384well');
my $oPlate_1536 = mt_1536->new('1536well');
# 3
test "objects" => sub {
isa_ok($oTube,'tube','tube object');
isa_ok($oPlate_96_1,'mt_96','mt_96 object');
isa_ok($oPlate_384,'mt_384','mt_384 object');
isa_ok($oPlate_1536,'mt_1536','mt_1536 object');
isa_ok($oPlate_96_2,'mt_96','mt_plate object');
isa_ok($oPlate_96_3,'mt_96','mt_96 object');
isa_ok($oPlate_96_4,'mt_96','mt_96 object');
isa_ok($oPlate_96_5,'mt_96','mt_96 object');
isa_ok($oPlate_96_6,'mt_96','mt_96 object');
isa_ok($oPlate_96_7,'mt_96','mt_96 object');
};
# 4
test "barcodes" => sub {
is($oPlate_96_1->barcode,'96well_1','barcode');
is($oPlate_96_2->barcode,'96well_2','barcode');
is($oPlate_384->barcode,'384well','barcode');
is($oPlate_1536->barcode,'1536well','barcode');
};
# 5
test "start wells filled" => sub {
cmp_ok($oPlate_96_1->wells_filled,'==',0,'0 wells_filled');
cmp_ok($oPlate_96_2->wells_filled,'==',0,'0 wells_filled');
};
my @aSamples = ();
my @aSamples_b = ();
my @aSamples_c = ();
my @a8_Samples = ();
my @a12_Samples = ();
for (my $i=1; $i<=96; $i++){
push (@aSamples,"sample $i");
push (@aSamples_b,"sample_b $i");
push (@aSamples_c,"sample_c $i");
next if ($i > 12);
push (@a12_Samples,"12_sample $i");
next if ($i > 8);
push (@a8_Samples,"8_sample $i");
}
$oPlate_96_1->fill_wells(\@aSamples);
$oPlate_96_2->fill_wells('1A','12H',\@aSamples);
$oPlate_96_3->fill_rows(['A'..'H'],\@aSamples_b);
$oPlate_96_4->fill_cols([1..12],\@aSamples_c);
$oPlate_96_5->fill_row('A',\@a12_Samples);
$oPlate_96_6->fill_col(1,\@a8_Samples);
$oPlate_96_6->fill_well('B2','sample 9','cosmid clone');
# 6
test "replace samples" => sub {
dies_ok { $oPlate_96_6->fill_well('A1','sample x') } "can't replace";
ok($oPlate_96_6->can_replace,'can_replace()');
lives_ok { $oPlate_96_6->fill_well('A1','sample x') } 'can replace';
ok($oPlate_96_6->warn_dont_replace,'warn_dont_replace()');
lives_ok { $oPlate_96_6->fill_well('A1','sample x') } 'warn replace';
};
# 7
test "wells filled" => sub {
cmp_ok($oPlate_96_1->wells_filled,'==',96,'96 wells_filled');
cmp_ok($oPlate_96_2->wells_filled,'==',96,'96 wells_filled');
cmp_ok($oPlate_96_3->wells_filled,'==',96,'96 wells_filled');
cmp_ok($oPlate_96_4->wells_filled,'==',96,'96 wells_filled');
cmp_ok($oPlate_96_5->wells_filled,'==',12,'12 wells_filled');
cmp_ok($oPlate_96_6->wells_filled,'==',9,'9 wells_filled');
cmp_ok($oPlate_96_6->samples_in_rowcol(1),'==',8,"8 samples_in_rowcol(1)");
cmp_ok($oPlate_96_6->samples_in_rowcol('B'),'==',2,"2 samples_in_rowcol('B')");
is($oPlate_96_6->rowcol_is_empty('A'),undef,"rowcol_is_empty('A')");
cmp_ok($oPlate_96_6->rowcol_is_empty(3),'==',1,"rowcol_is_empty(3) returns 1");
is($oPlate_96_6->rowcol_is_full('A'),undef,"rowcol_is_full('A')");
cmp_ok($oPlate_96_6->rowcol_is_full(1),'==',1,"rowcol_is_full(1) returns 1");
cmp_ok($oPlate_96_6->rowcol_not_full('A'),'==',11,"rowcol_not_full('A') returns 11");
is($oPlate_96_6->empty_well('A1'),'sample x',"empty_well('A1')");
$oPlate_96_6->count_filled_wells;
is($oPlate_96_6->samples_in_rowcol('A'),undef,"now 0 samples_in_rowcol('A')");
};
my $aSample_Types = [];
for (my $i=0;$i<32;$i++){
$aSample_Types->[$i] = 'cosmid clone';
$aSample_Types->[$i+32] = 'PAC clone';
$aSample_Types->[$i+64] = 'BAC clone';
}
# 8
test "sample types" => sub {
# set
ok($oPlate_96_1->all_sample_types('cosmid clone'),'all_sample_types same');
ok($oPlate_96_2->all_sample_types($aSample_Types),'all_sample_types from list');
ok($oPlate_96_6->sample_type('A1','BAC clone'),'sample_type');
# get
is($oPlate_96_1->sample_type('A1'),'cosmid clone','sample_type');
is($oPlate_96_2->sample_type('B1'),'cosmid clone','sample_type');
is($oPlate_96_2->sample_type('D1'),'PAC clone','sample_type');
is($oPlate_96_2->sample_type('G1'),'BAC clone','sample_type');
is($oPlate_96_6->sample_type('A1'),'BAC clone','sample_type');
};
# 9
test "well_names" => sub {
my $aWell_Names;
ok($aWell_Names = $oPlate_96_1->well_names,'well_names');
is($aWell_Names->[0],'A1','default well_names');
is($aWell_Names->[12],'B1','default well_names');
is($aWell_Names->[95],'H12','default well_names');
ok($oPlate_96_1->well_format('col'),"well_format('col')");
ok($aWell_Names = $oPlate_96_1->well_names,'well_names again');
is($aWell_Names->[0],'A1','default well_names');
is($aWell_Names->[12],'E2','default well_names');
is($aWell_Names->[95],'H12','default well_names');
};
# 10
test "samples" => sub {
is($oPlate_96_1->get_sample_name('A1'),'sample 1','sample A1');
is($oPlate_96_1->get_sample_name('A12'),'sample 12','sample A12');
is($oPlate_96_1->get_sample_name('D8'),'sample 44','sample D8');
is($oPlate_96_1->get_sample_name('F5'),'sample 65','sample F5');
is($oPlate_96_1->get_sample_name('H12'),'sample 96','sample H12');
eq_or_diff $oPlate_96_1->all_samples,\@aSamples,'all_samples';
eq_or_diff $oPlate_96_1->wells_empty,[],'wells_empty';
$oPlate_96_1->well_format('row');
eq_or_diff $oPlate_96_1->filled_wells,$oPlate_96_1->well_names,'filled_wells';
eq_or_diff $oPlate_96_6->filled_wells,['B1','B2','C1','D1','E1','F1','G1','H1'],'filled_wells';
};
# 11
test "plate join" => sub {
$oPlate_384->add_plate($oPlate_96_1,'A1');
cmp_ok($oPlate_384->wells_filled,'==',96,'96 wells_filled');
$oPlate_384->add_plate($oPlate_96_3,'A2');
cmp_ok($oPlate_384->wells_filled,'==',192,'192 wells_filled');
$oPlate_384->add_plate($oPlate_96_4,'B1');
cmp_ok($oPlate_384->wells_filled,'==',288,'288 wells_filled');
$oPlate_384->add_plate($oPlate_96_6,'B2');
cmp_ok($oPlate_384->wells_filled,'==',296,'296 wells_filled');
is($oPlate_384->get_sample_name('A1'),'sample 1','sample A1');
is($oPlate_384->get_sample_name('A24'),'sample_b 12','sample A24');
is($oPlate_384->get_sample_name('B1'),'sample_c 1','sample B1');
is($oPlate_384->get_sample_name('D4'),'sample 9','sample D4');
is($oPlate_384->sample_type('D4'),'cosmid clone','sample_type D4');
$oPlate_96_5->combine_plates($oPlate_96_6);
cmp_ok($oPlate_96_5->wells_filled,'==',20,'20 wells filled in combine_plates');
eq_or_diff $oPlate_96_5->filled_wells,['A1','A2','A3','A4','A5','A6','A7','A8','A9','A10','A11','A12','B1','B2','C1','D1','E1','F1','G1','H1'],'filled_wells';
eq_or_diff $oPlate_96_5->row_contents('B'),['8_sample 2','sample 9','empty','empty','empty','empty','empty','empty','empty','empty','empty','empty'],"row_contents('B')";
eq_or_diff $oPlate_96_5->col_contents(2),['12_sample 2','sample 9','empty','empty','empty','empty','empty','empty'],"col_contents(2)";
};
# 12
test "plate format" => sub {
cmp_ok($oPlate_96_5->is_row('A'),'==',1,"is_row('A')");
is($oPlate_96_5->is_row('I'),undef,"is_row('I')");
cmp_ok($oPlate_96_5->is_col(1),'==',1,"is_col(1)");
is($oPlate_96_5->is_col(13),undef,"is_col(13)");
cmp_ok($oPlate_96_5->row_or_col(1),'eq','col',"row_or_col(1)");
cmp_ok($oPlate_96_5->row_or_col('A'),'eq','row',"row_or_col('A')");
is($oPlate_96_5->row_or_col(13),undef,"row_or_col(13)");
is($oPlate_96_5->row_or_col('I'),undef,"row_or_col('I')");
cmp_ok($oPlate_384->is_row('A'),'==',1,"is_row('A')");
is($oPlate_384->is_row('Q'),undef,"is_row('Q')");
cmp_ok($oPlate_384->is_col(1),'==',1,"is_col(1)");
is($oPlate_384->is_col(25),undef,"is_col(25)");
};
# 13
test "overload operators" => sub {
ok(($oPlate_384 > $oPlate_96_1),'gt overload');
ok(($oPlate_96_1 < $oPlate_384),'lt overload');
ok(($oPlate_96_1 ^ $oPlate_96_2),'eq overload');
};
sub trap_warn {
my $signal = shift;
if ($signal =~ /Not allowed to replace sample 'sample x' of plate '96well_6'in well 'A1' with sample 'sample x'/){
return 1;
} else {
return 0;
}
}