maint: remove Travis stuff which has been replaced with Github actions (#325)
[bioperl-live.git] / t / SeqIO / table.t
blobc2e6745aa44adfeac8ce09fbdcc7ee44a5b40e63
1 # -*-Perl-*- Test Harness script for Bioperl
3 use strict;
5 BEGIN {
6     use Bio::Root::Test;
8     test_begin(-tests => 351,
9                            -requires_module => 'IO::Scalar');
11         use_ok('Bio::Tools::CodonTable');
12         use_ok('Bio::SeqIO::table');
15 my @names = qw(A6
16                A6r
17                A6ps1
18                A6ps2
19                CaMK2d
20                CaMKK2
21                AMPKa1
22                AMPKa2
23                MARK3
24                MARK2);
25 my @accs = qw(SK001
26               SK512
27               SK752
28               SK766
29               SK703
30               SK482
31               SK032
32               SK033
33               SK096
34               SK120);
35 my @num_anns = (5, 5, 5, 5, 6, 7, 7, 7, 7, 7);
36 my @psg = (0, 0, 1, 1, 0, 0, 0, 0, 0, 0);
37 my @rs = (0, 0, 0, 0, 1, 1, 1, 1, 1, 1);
39 ok my $seqin = Bio::SeqIO->new(-file => test_input_file("test.tsv"),
40                             -format  => 'table',
41                             -species => "Homo sapiens",
42                             -delim   => "\t",
43                             -header  => 1,
44                             -display_id => 1,
45                             -accession_number => 2,
46                             -seq => 7,
47                             -annotation => 1,
48                             -trim => 1);
49 run_tests([@names],[@accs],[@num_anns],[@psg],[@rs]);
51 $seqin->close();
53 ok $seqin = Bio::SeqIO->new(-file => test_input_file("test.tsv"),
54                          -format  => 'table',
55                          -species => "Homo sapiens",
56                          -delim   => "\t",
57                          -header  => 1,
58                          -display_id => 1,
59                          -accession_number => 2,
60                          -seq => 7,
61                          -colnames => "[Family,Subfamily,Pseudogene?,Protein,Novelty]",
62                          -trim => 1);
63 run_tests([@names],[@accs],[4,4,4,4,4,5,5,5,5,5],[@psg],[@rs]);
65 $seqin->close();
67 ok $seqin = Bio::SeqIO->new(-file => test_input_file("test.tsv"),
68                          -format  => 'table',
69                          -species => "Homo sapiens",
70                          -delim   => "\t",
71                          -header  => 1,
72                          -display_id => 1,
73                          -accession_number => 2,
74                          -seq => 7,
75                          -annotation => "[4,5,6,8,10]",
76                          -trim => 1);
77 run_tests([@names],[@accs],[4,4,4,4,4,5,5,5,5,5],[@psg],[@rs]);
79 # Tests to check that 'description' is read from 'table' format
80 ok $seqin = Bio::SeqIO->new(
81     -file   => test_input_file("test-1.tab"),
82     -format => 'table',
83     -header => 1,
84     -display_id => 1,
85     -accession_number => 1,
86     -seq => 3,
87     -desc => 2
89 ok($seqin);
90 my $seq = $seqin->next_seq;
91 ok($seq);
92 is( $seq->desc, 'd1');
93 is( $seq->display_id, 'n1');
94 is( $seq->seq, 'aaaa');
95 $seq = $seqin->next_seq;
96 ok($seq);
97 is( $seq->desc, 'd2');
98 is( $seq->display_id, 'n2');
99 is( $seq->seq, 'tttt');
101 $seqin->close();
103 # Tests to check that we can _not_ write to 'table' format
104 ok $seqin = Bio::SeqIO->new(
105     -file   => test_input_file("test-1.tab.gb"),
106     -format => 'genbank'
108 ok($seqin);
109 $seq = $seqin->next_seq;
110 ok($seq);
111 my $tmpfile = test_output_file();
112 my $seqout = Bio::SeqIO->new( -format => 'table', -file => ">$tmpfile" );
113 # dies_ok not available
114 # dies_ok { $seqout->write_seq($seq) } "write_seq() not implemented";
116 sub run_tests {
117     my ($names_,$accs_,$num_anns_,$psg_,$rs_) = @_;
119     my @names = @$names_;
120     my @accs = @$accs_;
121     my @num_anns = @$num_anns_;
122     my @psg = @$psg_;
123     my @rs = @$rs_;
125     my $n = 0;
126     my $translator = Bio::Tools::CodonTable->new(-id => 1);
127     while (my $seq = $seqin->next_seq()) {
128         $n++;
129         is ($seq->display_id, shift(@names));
130         is ($seq->accession_number, shift(@accs));
131         ok ($seq->species);
132         is ($seq->species->binomial, "Homo sapiens");
133         my @anns = $seq->annotation->get_Annotations();
134         is (scalar(@anns), shift(@num_anns));
135         @anns = grep { $_->value eq "Y";
136                      } $seq->annotation->get_Annotations("Pseudogene?");
137         is (scalar(@anns), shift(@psg));
139         # check sequences and that they translate to what we expect
140         if (($n >= 5) && ($seq->display_id ne "MARK3")) {
141             my $dna = $seq->seq;
142             my $protein = "";
143             my $frame = 0;
144             while ($frame <= 2) {
145                 my $inframe = substr($dna,$frame);
146                 # translate to protein
147                 my $protseq = $translator->translate($inframe);
148                 # chop off everything after the stop and before the first Met
149                 while ($protseq =~ /(M[^\*]+)/g) {
150                     $protein = $1 if length($1) > length($protein);
151                 }
152                 $frame++;
153             }
154             # retrieve expected result from annotation and compare
155             my ($protann) = $seq->annotation->get_Annotations("Protein");
156             ok (defined $protann);
157             is ($protein, $protann->value);
158         }
160         @anns = grep { $_->value eq "Known - Refseq";
161                      } $seq->annotation->get_Annotations("Novelty");
162         is (scalar(@anns), shift(@rs));
163         @anns = $seq->annotation->get_Annotations("Subfamily");
164         is (scalar(@anns), ($n <= 5) ? 0 : 1);
165         @anns = $seq->annotation->get_Annotations("Family");
166         is (scalar(@anns), 1);
167         is (substr($anns[0]->value,0,4), ($n <= 4) ? "A6" : "CAMK");
168     }
170     is ($n, 10);