use
constant
GFF_FILE
=> Bio::Root::IO->catfile(
't'
,
'data'
,
'seqfeaturedb'
,
'test.gff3'
);
BEGIN {
if
( $@ ) {
}
plan
test
=> TEST_COUNT;
$ENV
{ORACLE_HOME} ||=
'/home/oracle/Home'
;
}
use
lib
'.'
,
'..'
,
'./blib/lib'
;
sub
bail ($;$) {
my
$count
=
shift
;
my
$explanation
=
shift
;
for
(1..
$count
) {
skip(
$explanation
,1);
}
exit
0;
}
sub
fail ($) {
my
$count
=
shift
;
for
(1..
$count
) {
ok(0);
}
exit
0;
}
my
(
@f
,
$f
,
@s
,
$s
,
$seq1
,
$seq2
);
my
@args
=
@ARGV
;
@args
= (
-adaptor
=>
'memory'
)
unless
@args
;
my
$db
=
eval
{ Bio::DB::SeqFeature::Store->new(
@args
) };
warn
$@
if
$@;
ok(
$db
);
fail(TEST_COUNT - 1)
unless
$db
;
my
$loader
=
eval
{ Bio::DB::SeqFeature::Store::GFF3Loader->new(
-store
=>
$db
) };
warn
$@
if
$@;
ok(
$loader
);
fail(TEST_COUNT - 2)
unless
$loader
;
ok(
$loader
->load(GFF_FILE));
@f
=
$db
->get_features_by_name(
'abc-1'
);
ok(
@f
==1);
$f
=
$f
[0];
ok(
$f
->get_SeqFeatures(
'exon'
)==3);
ok(
$f
->get_SeqFeatures(
'CDS'
)==3);
$seq1
=
$f
->seq->seq;
$seq2
= (
sort
{
$a
->start<=>
$b
->start}
$f
->get_SeqFeatures(
'exon'
))[0]->seq->seq;
ok(
substr
(
$seq1
,0,
length
$seq2
) eq
$seq2
);
ok(
length
$seq1
==
$f
->
length
);
(
$s
) =
$db
->get_features_by_name(
'abc-1'
);
ok(
$f
eq
$s
);
@f
=
$db
->get_features_by_alias(
'abc-1'
);
ok(
@f
==2);
ok(
$f
[0] ne
$f
[1]);
(
$f
) =
$db
->get_features_by_name(
'match1'
);
ok(
defined
$f
);
$s
=
$f
->target;
ok(
defined
$s
);
ok(
$s
->seq_id eq
'CEESC13F'
);
$seq1
=
$s
->seq->seq;
ok(
substr
(
$seq1
,0,10) eq
'ttgcgttcgg'
);
(
$f
) =
$db
->get_features_by_name(
'gene3.a'
);
ok(
$f
);
(
$f
) =
$db
->get_features_by_name(
'gene3.b'
);
ok(!
$f
);
(
$f
) =
$db
->get_features_by_name(
'gene3'
);
ok(
$f
);
my
@transcripts
=
$f
->get_SeqFeatures;
ok(
@transcripts
== 2);
ok(
$transcripts
[0]->method eq
'mRNA'
);
ok(
$transcripts
[0]->source eq
'confirmed'
);
my
@exons1
=
$transcripts
[0]->get_SeqFeatures(
'CDS'
);
ok(
@exons1
== 3);
my
@exons2
=
$transcripts
[1]->get_SeqFeatures(
'CDS'
);
my
(
$shared1
) =
grep
{
$_
->display_name||
''
eq
'shared_exon'
}
@exons1
;
my
(
$shared2
) =
grep
{
$_
->display_name||
''
eq
'shared_exon'
}
@exons2
;
ok(
$shared1
&&
$shared2
);
ok(
$shared1
eq
$shared2
);
ok(
$shared1
->primary_id eq
$shared2
->primary_id);
ok(
$shared1
->phase == 0);
ok(
$shared1
->strand eq +1);
ok((
$f
->attributes(
'expressed'
))[0] eq
'yes'
);
my
(
$gene3a
) =
grep
{
$_
->display_name eq
'gene3.a'
}
@transcripts
;
my
(
$gene3b
) =
grep
{
$_
->display_name eq
'gene3.b'
}
@transcripts
;
ok(
$gene3a
);
ok(
$gene3b
);
ok(
$gene3a
->Is_expressed);
ok(!
$gene3b
->Is_expressed);
ok(
$gene3a
->Three_prime_UTR == 2);
ok(
$gene3b
->Three_prime_UTR == 1);
my
(
$utr
) =
$gene3b
->Three_prime_UTR;
ok(
$utr
->segments == 2);
my
$location
=
$utr
->location;
ok(
$location
->isa(
'Bio::Location::Split'
));
ok(
$location
->sub_Location == 2);
@f
=
$db
->get_features_by_attribute({
expressed
=>
'yes'
});
ok(
@f
== 2);
@f
=
$db
->get_features_by_location(
-seq_id
=>
'Contig3'
);
ok(
@f
== 2);
@f
=
$db
->features(
-seq_id
=>
'Contig3'
,
-type
=>
'assembly_component'
);
ok(
@f
==1);
@f
=
$db
->features;
my
$feature_count
=
@f
;
ok(
$feature_count
> 0);
my
$i
=
$db
->get_seq_stream;
ok(
$i
);
my
$count
;
while
(
$i
->next_seq) {
$count
++ }
ok(
$feature_count
==
$count
);
@f
=
$db
->get_features_by_name(
'agt830.3'
);
ok(
@f
&& !
$f
[0]->get_SeqFeatures(
'exon'
));
ok(
@f
&&
$f
[0]->get_SeqFeatures(
'EST_match'
));
ok(
@f
&&
$f
[0]->load_id eq
'Match2'
);
my
(
$alignment
) =
$db
->get_features_by_name(
'agt830.5'
);
ok(
$alignment
);
ok(
$alignment
->target->start == 1 &&
$alignment
->target->end == 654);
ok(
$alignment
->get_SeqFeatures == 2);
my
$gff3
=
$alignment
->gff3_string(1);
my
@lines
=
split
"\n"
,
$gff3
;
ok (
@lines
== 2);
ok (
"@lines"
!~ /Parent=/s);
ok (
"@lines"
=~ /ID=/s);
1;