t/SeqFeature/Generic.t: fix typo on required module for testing
[bioperl-live.git] / t / SeqIO / SeqIO.t
blobb41d60b02e6d2fe1262a24fb9f2def6a09593f04
1 # -*-Perl-*- Test Harness script for Bioperl
2 # $Id$
4 use strict;
6 BEGIN {     
7     use Bio::Root::Test;
8     
9     test_begin(-tests => 58);
10     
11     use_ok 'Bio::SeqIO';
14 my $verbose = test_debug();
16 my @formats = qw(gcg fasta raw pir tab ace );
17 # The following files or formats are failing: swiss genbank interpro embl
19 for my $format (@formats) {
20     print "======== $format ========\n" if $verbose;
21     my $seq;
22     my $str = Bio::SeqIO->new( -file   => test_input_file("test.$format"),
23                                -format => $format                          );
25     is $str->format(), $format;
27     ok $seq = $str->next_seq();
28     print "Sequence 1 of 2 from $format stream:\n", $seq->seq, "\n\n" if  $verbose;
29     unless ($format eq 'raw') {
30         is $seq->id, 'roa1_drome',"ID for format $format";
31         is $seq->length, 358;
32     }
33     
34     unless ($format eq 'gcg') { # GCG file can contain only one sequence
35         ok $seq = $str->next_seq();
36         print "Sequence 2 of 2 from $format stream:\n", $seq->seq, $seq->seq, "\n" if $verbose;
37     }
38     
39     my $outfile = test_output_file();
40     my $out = Bio::SeqIO->new( -file   => ">$outfile",
41                                -format => $format      );
42     ok $out->write_seq($seq);
43     if ($format eq 'fasta') {
44         my $id_type;
45         ok($id_type = $out->preferred_id_type('accession.version'),
46             'accession.version');
47     }
48     
49     ok -s $outfile;
54 # from testformats.pl
55 SKIP: {
56     test_skip(-tests => 6, -requires_modules => [qw(Algorithm::Diff
57                                                     IO::ScalarArray
58                                                     IO::String)]);
59     use_ok 'Algorithm::Diff';
60     eval "use Algorithm::Diff qw(diff LCS);";
61     use_ok 'IO::ScalarArray';
62     use_ok 'IO::String';
63     
64     my %files = ( 
65              #'test.embl'      => 'embl',
66              #'test.ace'       => 'ace',
67               'test.fasta'     => 'fasta',
68              #'test.game'      => 'game',
69               'test.gcg'       => 'gcg',
70              #'test.genbank'   => 'genbank',
71               'test.raw'       => 'raw',
72              #'test_badlf.gcg' => 'gcg'
73               );
74     
75     while( my ($file, $type) = each %files ) {
76         my $filename = test_input_file($file);
77         print "processing file $filename\n" if $verbose;
78         open my $FILE, '<', $filename or die "Could not read file '$filename': $!\n";
79         my @datain = <$FILE>;
80         close $FILE;
82         my $in = IO::String->new( join('', @datain) );
83         my $seqin = Bio::SeqIO->new( -fh     => $in,
84                                      -format => $type );
85         my $out = IO::String->new();
86         my $seqout = Bio::SeqIO->new( -fh     => $out,
87                                       -format => $type );
88         my $seq;
89         while( defined($seq = $seqin->next_seq) ) {
90             $seqout->write_seq($seq);
91         }
92         $seqout->close();
93         $seqin->close();
94         my $strref = $out->string_ref;
95         my @dataout = map { $_."\n"} split(/\n/, $$strref );
96         my @diffs = &diff( \@datain, \@dataout);
97         is @diffs, 0;
98         
99         if(@diffs && $verbose) {
100             foreach my $d ( @diffs ) {
101                 foreach my $diff ( @$d ) {
102                     chomp($diff->[2]);
103                     print $diff->[0], $diff->[1], "\n>", $diff->[2], "\n";
104                 }
105             }
106             print "in is \n", join('', @datain), "\n";
107             print "out is \n", join('',@dataout), "\n";
108         }
109     }
112 # simple tests specific to Bio::SeqIO interface (applicable to all SeqIO
113 # modules)
115 ##############################################
116 # test format() and variant() in Bio::RootIO
117 ##############################################
119 my $in = Bio::SeqIO->new(
120    -file    => test_input_file('bug2901.fa'),
121    -format  => "fasta",
123 is $in->format, 'fasta';
124 is $in->variant, undef;
126 $in = Bio::SeqIO->new(
127    -file    => test_input_file('fastq', 'illumina_faked.fastq'),
128    -format  => "fastq",
129    -variant => 'illumina',
131 is $in->format, 'fastq';
132 is $in->variant, 'illumina';
135 ######################################################
136 # test format detection from different inputs
137 ######################################################
139 $in = Bio::SeqIO->new( -file => test_input_file('test.fastq') );
140 is $in->format, 'fastq';
142 open my $fh, '<', test_input_file('test.genbank') or die "Could not read file 'test.genbank': $!\n";
143 $in = Bio::SeqIO->new( -fh => $fh );
144 is $in->format, 'genbank';
145 close $fh;
147 my $string = ">seq\nACGATCG\n";
148 $in = Bio::SeqIO->new( -string => $string );
149 is $in->format, 'fasta';
152 ############ EXCEPTION HANDLING ############
154 TODO: {
155     local $TODO = 'file/fh-based tests should be in Bio::Root::IO, see issue #3204';
156     throws_ok {
157         Bio::SeqIO->new();
158     } qr/No file, fh, or string argument provided/, 'Must pass a file or file handle';
161 throws_ok {
162     Bio::SeqIO->new(-fh => undef);
163 } qr/fh argument provided, but with an undefined value/,
164     'Must pass a file or file handle';
166 throws_ok {
167     Bio::SeqIO->new(-file => undef);
168 } qr/file argument provided, but with an undefined value/,
169     'Must pass a file or file handle';
171 throws_ok {
172     Bio::SeqIO->new(-file => 'foo.bar');
173 } qr/Could not read file 'foo.bar':/,
174     'Must pass a real file';