Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

125 lines (102 sloc) 3.767 kb
# -*-Perl-*-
# $Id$
BEGIN {
use lib 't';
use Bio::Root::Test;
test_begin(-tests => 61);
use_ok('DBTestHarness');
use_ok('Bio::SeqIO');
}
$biosql = DBTestHarness->new("biosql");
$db = $biosql->get_DBAdaptor();
ok $db;
my $seqio = Bio::SeqIO->new('-format' => 'genbank',
'-file' => test_input_file('test.genbank'));
my ($seq, $pseq);
my @seqs = ();
my @arr = ();
eval {
my $pk = -1;
while($seq = $seqio->next_seq()) {
$pseq = $db->create_persistent($seq);
$pseq->namespace("mytestnamespace");
$pseq->create();
ok $pseq->primary_key();
cmp_ok $pseq->primary_key(), '!=', $pk;
$pk = $pseq->primary_key();
push(@seqs, $pseq);
}
is (scalar(@seqs), 4);
$pseq = $seqs[@seqs-1];
$seqadp = $db->get_object_adaptor("Bio::SeqI");
ok $seqadp;
# re-fetch from database
$pseq = $seqadp->find_by_primary_key($pseq->primary_key());
# features
@arr = $pseq->top_SeqFeatures();
is (scalar(@arr), 26);
# references
@arr = $pseq->annotation()->get_Annotations("reference");
is (scalar(@arr), 1);
# all feature qualifier/value pairs
@arr = ();
foreach my $feat ($pseq->top_SeqFeatures()) {
foreach ($feat->get_all_tags()) {
push(@arr, $feat->each_tag_value($_));
}
}
is (scalar(@arr), 38);
# delete all features
foreach my $feat ($pseq->top_SeqFeatures()) {
is ($feat->remove(), 1);
}
# delete all references
foreach my $ref ($pseq->annotation()->get_Annotations("reference")) {
is ($ref->remove(), 1);
}
# re-fetch sequence and retest
$pseq = $seqadp->find_by_primary_key($pseq->primary_key());
# features
@arr = $pseq->top_SeqFeatures();
is (scalar(@arr), 0);
# references
@arr = $pseq->annotation()->get_Annotations("reference");
is (scalar(@arr), 0);
# test removing associations:
# add the same comment to both seq0 and seq1
my $cmt = Bio::Annotation::Comment->new(
-tagname => "comment",
-text => "this is a simple comment");
# add the same simple value to both seq0 and seq1
my $sv = Bio::Annotation::SimpleValue->new(-tagname => "Fancy",
-value => "a simple value");
$seqs[0]->annotation->add_Annotation($cmt);
$seqs[0]->annotation->add_Annotation($sv);
$seqs[1]->annotation->add_Annotation($cmt);
$seqs[1]->annotation->add_Annotation($sv);
ok $seqs[0]->store();
ok $seqs[1]->store();
# delete all annotation from seq0 (also shares a reference with seq1)
ok $seqs[0]->annotation->remove(-fkobjs => [$seqs[0]]);
# now re-fetch seq0 and seq1 by primary key
$pseq = $seqadp->find_by_primary_key($seqs[0]->primary_key);
my $pseq1 = $seqadp->find_by_primary_key($seqs[1]->primary_key);
# test annotation counts and whether seq1 was unaffected
is (scalar($pseq->annotation->get_Annotations()), 0);
is (scalar($pseq1->annotation->get_Annotations("reference")), 3);
is (scalar($pseq1->annotation->get_Annotations("comment")), 1);
my ($cmt1) = $pseq1->annotation->get_Annotations("comment");
is ($cmt1->text, $cmt->text);
is (scalar($pseq1->annotation->get_Annotations("Fancy")), 1);
my ($sv1) = $pseq1->annotation->get_Annotations("Fancy");
is ($sv1->value, $sv->value);
};
print STDERR $@ if $@;
# delete seq
foreach $pseq (@seqs) {
is ($pseq->remove(), 1);
}
my $ns = Bio::DB::Persistent::BioNamespace->new(-identifiable => $pseq);
ok $ns = $db->get_object_adaptor($ns)->find_by_unique_key($ns);
ok $ns->primary_key();
is ($ns->remove(), 1);
Jump to Line
Something went wrong with that request. Please try again.