[BUG] bug 2598
[bioperl-live.git] / t / SeqBuilder.t
blob6cb5a90435683cc3ea97bfa0c3ebf6d7160387e1
1 # -*-Perl-*- Test Harness script for Bioperl
2 # $Id$
4 use strict;
6 BEGIN {     
7     use lib 't/lib';
8     use BioperlTest;
9     
10     test_begin(-tests => 101);
11         
12         use_ok('Bio::SeqIO');
15 my $verbosity = test_debug();
17 my ($seqio, $seq); # predeclare variables for strict
19 # default mode
20 ok $seqio = Bio::SeqIO->new('-file'=> test_input_file('test.genbank'), 
21                          '-format' => 'GenBank');
22 $seqio->verbose($verbosity);
24 my $numseqs = 0;
25 my @loci = qw(U63596 U63595 M37762 NT_010368 L26462);
26 my @numfeas = (3,1,6,3,26);
28 while($seq = $seqio->next_seq()) {
29     is ($seq->accession_number, $loci[$numseqs++]);
30     ok ($seq->annotation->get_Annotations());
31     is (scalar($seq->top_SeqFeatures), $numfeas[$numseqs-1]);
32     ok ($seq->species->binomial);
33     ok ($seq->seq);
35 is ($numseqs, 5);
37 # minimalistic mode
38 $seqio = Bio::SeqIO->new('-file'=> test_input_file('test.genbank'), 
39                          '-format' => 'GenBank');
40 ok $seqio;
41 $seqio->verbose($verbosity);
42 ok my $seqbuilder = $seqio->sequence_builder();
43 isa_ok $seqbuilder, "Bio::Factory::ObjectBuilderI";
44 $seqbuilder->want_none();
45 $seqbuilder->add_wanted_slot('display_id','accession_number','desc');
47 $numseqs = 0;
49 while($seq = $seqio->next_seq()) {
50     is ($seq->accession_number, $loci[$numseqs++]);
51     is (scalar(grep { ! ($_->tagname eq "keyword" ||
52                          $_->tagname eq "date_changed" ||
53                          $_->tagname eq "secondary_accession"); }
54                $seq->annotation->get_Annotations()), 0);
55     if($numseqs <= 3) {
56                 is (scalar($seq->top_SeqFeatures), 0);
57     }
58         else {
59                 is (scalar($seq->top_SeqFeatures), $numfeas[$numseqs-1]);
60     }
61     is ($seq->species, undef);
62     is ($seq->seq, undef);
63     # switch on features for the last 2 seqs
64     $seqbuilder->add_wanted_slot('features') if $numseqs == 3;
66 is ($numseqs, 5);
68 # everything but no sequence, and no features
69 $seqio = Bio::SeqIO->new('-file'=> test_input_file('test.genbank'), 
70                          '-format' => 'GenBank');
71 ok $seqio;
72 $seqio->verbose($verbosity);
73 $seqbuilder = $seqio->sequence_builder();
74 # want-all is default
75 $seqbuilder->add_unwanted_slot('seq','features');
77 $numseqs = 0;
79 while($seq = $seqio->next_seq()) {
80     is ($seq->accession_number, $loci[$numseqs++]);
81     ok scalar($seq->annotation->get_Annotations());
82     if($numseqs <= 3) {
83                 is (scalar($seq->top_SeqFeatures), 0);
84     }
85         else {
86                 is (scalar($seq->top_SeqFeatures), $numfeas[$numseqs-1]);
87     }
88     ok $seq->species->binomial;
89     is ($seq->seq, undef);
90     # switch on features for the last 2 seqs
91     if($numseqs == 3) {
92         $seqbuilder->add_unwanted_slot(
93              grep { $_ ne 'features'; } $seqbuilder->remove_unwanted_slots());
94     }
96 is ($numseqs, 5);
98 # skip sequences less than 100bp or accession like 'NT_*'
99 $seqio = Bio::SeqIO->new('-file'=> test_input_file('test.genbank'), 
100                          '-format' => 'GenBank');
101 ok $seqio;
102 $seqio->verbose($verbosity);
103 $seqbuilder = $seqio->sequence_builder();
104 # we could have as well combined the two conditions into one, but we want to
105 # test the implicit AND here
106 $seqbuilder->add_object_condition(sub {
107     my $h = shift;
108     return 0 if($h->{'-length'} < 100);
109     return 1;
111 $seqbuilder->add_object_condition(sub {
112     my $h = shift;
113     return 0 if($h->{'-display_id'} =~ /^NT_/);
114     return 1;
117 $numseqs = 0;
118 my $i = 0;
120 while($seq = $seqio->next_seq()) {
121     $numseqs++;
122     is ($seq->accession_number, $loci[$i]);
123     ok scalar($seq->annotation->get_Annotations());
124     is (scalar($seq->top_SeqFeatures), $numfeas[$i]);
125     ok $seq->species->binomial;
126     ok $seq->seq;
127     $i += 2;
129 is ($numseqs, 3);