From ce6b1b316fd07720c8c4ee6e3fc7eaaeda047c4a Mon Sep 17 00:00:00 2001
From: Graham McVicker <mcvicker@sanger.ac.uk>
Date: Tue, 12 Nov 2002 15:43:13 +0000
Subject: [PATCH] runtests script now catches SIG, INT and HUP signals to
 ensure correct cleanup changed some throws to warnings in MultiTestDB

---
 modules/runtests.pl      |  16 +++-
 modules/t/MultiTestDB.pm |  14 +++-
 modules/t/slice.t        | 170 ++++++++++++++++++++++++---------------
 3 files changed, 127 insertions(+), 73 deletions(-)

diff --git a/modules/runtests.pl b/modules/runtests.pl
index e57cc5a4e4..a987ca6694 100755
--- a/modules/runtests.pl
+++ b/modules/runtests.pl
@@ -27,19 +27,29 @@ if($opt_l) {
   exit;
 }
 
-#run all of the specified tests  
 
+#set environment var
 $ENV{'RUNTESTS_HARNESS'} = 1;
 
+#make sure proper cleanup is done if the user interrupts the tests
+$SIG{HUP} = $SIG{KILL} = $SIG{INT} = 
+  sub {warn "\n\nINTERRUPT SIGNAL RECEIEVED\n\n"; &clean;};
+
+#create a multitest db, its destruction will clean up after scripts
 my $clean_up = new MultiTestDB;
 
+#run all specified tests
 eval {
   runtests(@{&get_all_tests('.', \@ARGV)});
 };
 
-# do some clean up by creating a MultiTestDB object
+&clean;
 
-delete $ENV{"RUNTESTS_HARNESS"};
+sub clean {
+  #unset env var indicating final cleanup should be performed
+  delete $ENV{"RUNTESTS_HARNESS"};
+  exit;
+}
 
 =head2 get_all_tests
 
diff --git a/modules/t/MultiTestDB.pm b/modules/t/MultiTestDB.pm
index 61ec4139be..a153a1603b 100644
--- a/modules/t/MultiTestDB.pm
+++ b/modules/t/MultiTestDB.pm
@@ -184,7 +184,8 @@ sub load_databases {
   my $db = DBI->connect($locator, $user, $pass, {RaiseError => 1});
 
   unless($db) {
-    $self->throw("Can't connect to database $locator");
+    $self->warn("Can't connect to database $locator");
+    return;
   }
 
   #create a database for each database specified
@@ -195,7 +196,8 @@ sub load_databases {
     print STDERR "\nCreating db $dbname";
 
     unless($db->do("CREATE DATABASE $dbname")) {
-      $self->throw("Could not create database [$dbname]");
+      $self->warn("Could not create database [$dbname]");
+      return;
     }
 
     #copy the general config into a dbtype specific config 
@@ -217,7 +219,10 @@ sub load_databases {
     my $dir = $self->curr_dir . "$DUMP_DIR/".$self->species."/$dbtype";
     local *DIR;
 
-    opendir(DIR, $dir) or die "could not open dump directory '$dir'";
+    unless(opendir(DIR, $dir)) {
+      $self->warn("could not open dump directory '$dir'");
+      return;
+    }
 
     my @files = readdir DIR;
 
@@ -286,7 +291,8 @@ sub unzip_test_dbs {
   }
 
   unless(-f $zipfile) {
-    $self->throw("zipfile could not be found\n");
+    $self->warn("zipfile could not be found\n");
+    return;
   }
 
   # unzip the zip file quietly
diff --git a/modules/t/slice.t b/modules/t/slice.t
index 21066492c3..a191ac3ac0 100644
--- a/modules/t/slice.t
+++ b/modules/t/slice.t
@@ -1,110 +1,148 @@
+use strict;
+use warnings;
 
- use lib 't';
+use lib 't';
 
 BEGIN { $| = 1;  
 	use Test;
-	plan tests => 4;
+	plan tests => 27;
 }
 
-my $loaded = 0;
-END {print "not ok 1\n" unless $loaded;}
 
-use EnsTestDB;
+use MultiTestDB;
 use Bio::EnsEMBL::DBLoader;
+use Bio::EnsEMBL::Slice;
 
 
-$loaded = 1;
+#
+#1 TEST - Slice Compiles
+#
+ok(1); 
 
-ok(1);
 
-# Database will be dropped when this
-# object goes out of scope
-my $ens_test = EnsTestDB->new;
+my $CHR           = '20';
+my $START         = 31_000_000;
+my $END           = 31_200_000;
+my $STRAND        = 1;
+my $ASSEMBLY_TYPE = 'NCBI_30';
+my $DBID          = 123;
 
-$ens_test->do_sql_file("t/minidatabase.dump");
+my $multi_db = MultiTestDB->new;
+my $db = $multi_db->get_DBAdaptor('core');
 
-ok($ens_test);
 
+#
+#2-5 TEST - Slice creation from adaptor
+#
+my $slice_adaptor = $db->get_SliceAdaptor;
+my $slice = $slice_adaptor->fetch_by_chr_start_end($CHR, $START, $END);
+ok($slice->chr_name eq $CHR);
+ok($slice->chr_start == $START); 
+ok($slice->chr_end == $END);
+ok($slice->adaptor);
+  
 
-my $db = $ens_test->get_DBSQL_Obj;
-
-$sla= $db->get_SliceAdaptor();
-
-$slice = $sla->new_slice('1',4,400,'NCBI_28');
-
+#
+#6 TEST - Slice::new (empty)
+#
+$slice = new Bio::EnsEMBL::Slice(-empty => 1);
 ok($slice);
 
-&write_feature();
-
-ok(1);
 
+#
+#7-12 TEST - Slice::new
+#
+$slice = new Bio::EnsEMBL::Slice(-chr_name  => $CHR,
+		   -chr_start => $START,
+		   -chr_end   => $END,
+		   -strand    => $STRAND,
+		   -assembly_type => $ASSEMBLY_TYPE,
+		   -dbid     => $DBID);
 
-($outf) = $slice->get_all_SimilarityFeatures_above_score(5);
 
-#ok($outf);
 
+ok($slice->chr_name eq $CHR);
+ok($slice->chr_start == $START);
+ok($slice->chr_end == $END);
+ok($slice->strand == $STRAND);
+ok($slice->assembly_type eq $ASSEMBLY_TYPE);
+ok($slice->dbID == $DBID);
 
+#
+#13 Test - Slice::adaptor
+#
+$slice->adaptor($slice_adaptor);
+ok($slice->adaptor == $slice_adaptor);
 
-sub write_feature {
+#
+#14 Test - Slice::dbID
+#
+$slice->dbID(10);
+ok($slice->dbID==10);
 
-$dna_f_ad = $db->get_DnaAlignFeatureAdaptor();
+#
+#15-17 Test Slice::name
+#
+#verify that chr_name start and end are contained in the name
+my $name = $slice->name;
+ok($name =~/$CHR/);
+ok($name =~/$START/);
+ok($name =~/$END/);
 
 
+#
+#18 Test Slice::id
+#
+ok($slice->id eq $slice->name);
 
 
-$feature1 = new Bio::EnsEMBL::SeqFeature();
-$feature1->start(5);
-$feature1->end  (7);
-$feature1->strand(1);
-$feature1->score(10);
-$feature1->seqname(1);
-#$feature1->analysis($self->analysis);
+#
+#19 Test Slice::length
+#
+ok($slice->length == ($END-$START + 1));
 
-$feature2 = new Bio::EnsEMBL::SeqFeature();
-$feature2->start  (105);
-$feature2->end    (107);
-$feature2->strand (1);
-$feature2->score  (10);
-$feature2->seqname("dummy-hid");
 
-$fp = new Bio::EnsEMBL::FeaturePair(-feature1 => $feature1,
-				    -feature2 => $feature2);
+#
+#20-22 Test Slice::invert
+#
+my $inverted_slice = $slice->invert;
+ok($slice != $inverted_slice); #slice is not same object as inverted slice
+#inverted slice on opposite strand
+ok($slice->strand == ($inverted_slice->strand * -1)); 
+#slice still on same strand
+ok($slice->strand == $STRAND);
 
-push(@feats,$fp);
 
+#
+# 23-24 Test Slice::seq
+#
+my $seq = $slice->seq;
+my $invert_seq = $slice->invert->seq;
 
-$feature1 = new Bio::EnsEMBL::SeqFeature();
-$feature1->start(10);
-$feature1->end  (14);
-$feature1->strand(1);
-$feature1->score(10);
-$feature1->seqname(1);
+print STDERR "SEQ=[$seq]\n";
 
-#$feature1->analysis($self->analysis);
+ok(length($seq) == $slice->length); #sequence is correct length
+print STDERR "[".length($seq)."] != [".$slice->length."]\n"; 
+$seq = uc reverse $seq;  #reverse complement seq
+$seq =~ s/ACTG/TGAC/g; 
+ok($seq eq $invert_seq); #revcom same as seq on inverted slice
 
-$feature2 = new Bio::EnsEMBL::SeqFeature();
-$feature2->start  (106);
-$feature2->end    (110);
-$feature2->strand (1);
-$feature2->score  (10);
-$feature2->seqname('dummy-hid');
+#
+# 25-26 Test Slice::subseq
+#
+my $SPAN = 10;
+my $sub_seq = $slice->subseq(-$SPAN,$SPAN);
+my $invert_sub_seq = $slice->invert->subseq($slice->length + $SPAN, 
+					    $slice->length - $SPAN);
+ok(length $sub_seq == (2*$SPAN) + 1 ); 
+$seq = uc reverse $seq;
+$seq =~ s/ACTG/TGAC/g;
+ok($seq eq $invert_seq);
 
-$fp2 = new Bio::EnsEMBL::FeaturePair(-feature1 => $feature1,
-				    -feature2 => $feature2);
 
 
-push(@feats,$fp2);
 
 
-$dnaf = Bio::EnsEMBL::DnaDnaAlignFeature->new( -features => \@feats );
 
 
-$dnaf->seqname(1);
-$dnaf->hseqname('dummy-hid');
 
-$dnaf->analysis($db->get_AnalysisAdaptor->fetch_by_logic_name("dummy-blast"));
-
-
-$dna_f_ad->store(1,$dnaf);
-
-}
-- 
GitLab