Add tests for memory leaks and weaken for Issue #81
[bioperl-live.git] / t / SeqIO / SeqBuilder.t
blob3be6e4d6b916007ef5c101924d10a5b39f351af6
1 # -*-Perl-*- Test Harness script for Bioperl
2 # $Id$
4 use strict;
6 BEGIN {     
7     use lib '.';
8     use Bio::Root::Test;
9     test_begin(-tests => 137);
10     use_ok('Bio::SeqIO');
13 my $verbosity = test_debug;
15 my ($seqio, $seq); # predeclare variables for strict
17 # default mode
18 ok $seqio = Bio::SeqIO->new('-file' => test_input_file('test.genbank'), 
19                             '-format' => 'GenBank');
20 $seqio->verbose($verbosity);
22 my $numseqs = 0;
23 my @loci = qw(U63596 U63595 M37762 NT_010368 L26462);
24 my @numfeas = (3,1,6,3,26);
26 while ($seq = $seqio->next_seq) {
27     is $seq->accession_number, $loci[$numseqs++];
28     ok $seq->annotation->get_Annotations;
29     is scalar($seq->top_SeqFeatures), $numfeas[$numseqs-1];
30     ok $seq->species->binomial;
31     ok $seq->seq;
32     ok $seq->desc;
33     ok $seq->id;
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     ok $seq->desc;
64     ok $seq->id;
65     # switch on features for the last 2 seqs
66     $seqbuilder->add_wanted_slot('features') if $numseqs == 3;
68 is $numseqs, 5;
70 # everything but no sequence, and no features
71 $seqio = Bio::SeqIO->new('-file' => test_input_file('test.genbank'), 
72                          '-format' => 'GenBank');
73 ok $seqio;
74 $seqio->verbose($verbosity);
75 $seqbuilder = $seqio->sequence_builder;
76 # want-all is default
77 $seqbuilder->add_unwanted_slot('seq','features');
79 $numseqs = 0;
81 while ($seq = $seqio->next_seq) {
82     is $seq->accession_number, $loci[$numseqs++];
83     ok scalar($seq->annotation->get_Annotations);
84     if ($numseqs <= 3) {
85         is scalar($seq->top_SeqFeatures), 0;
86     }
87     else {
88         is scalar($seq->top_SeqFeatures), $numfeas[$numseqs-1];
89     }
90     ok $seq->species->binomial;
91     is $seq->seq, undef;
92     ok $seq->desc;
93     ok $seq->id;
94     # switch on features for the last 2 seqs
95     if ($numseqs == 3) {
96         $seqbuilder->add_unwanted_slot(
97             grep { $_ ne 'features'; } $seqbuilder->remove_unwanted_slots
98         );
99     }
101 is $numseqs, 5;
103 # skip sequences less than 100bp or accession like 'NT_*'
104 $seqio = Bio::SeqIO->new('-file' => test_input_file('test.genbank'), 
105                          '-format' => 'GenBank');
106 ok $seqio;
107 $seqio->verbose($verbosity);
108 $seqbuilder = $seqio->sequence_builder;
109 # we could have as well combined the two conditions into one, but we want to
110 # test the implicit AND here
111 $seqbuilder->add_object_condition(sub {
112     my $h = shift;
113     return 0 if($h->{'-length'} < 100);
114     return 1;
116 $seqbuilder->add_object_condition(sub {
117     my $h = shift;
118     return 0 if($h->{'-display_id'} =~ /^NT_/);
119     return 1;
122 $numseqs = 0;
123 my $i = 0;
125 while ($seq = $seqio->next_seq) {
126     $numseqs++;
127     is $seq->accession_number, $loci[$i];
128     ok scalar($seq->annotation->get_Annotations);
129     is scalar($seq->top_SeqFeatures), $numfeas[$i];
130     ok $seq->species->binomial;
131     ok $seq->seq;
132     ok $seq->desc;
133     ok $seq->id;
134     $i += 2;
136 is $numseqs, 3;