test for JAL-1312
[jalview.git] / test / jalview / analysis / DnaTranslation.java
1 package jalview.analysis;
2
3 import static org.junit.Assert.*;
4 import jalview.datamodel.ColumnSelection;
5
6 import java.io.IOException;
7
8 import org.junit.AfterClass;
9 import org.junit.BeforeClass;
10 import org.junit.Test;
11 import org.junit.runner.RunWith;
12
13 public class DnaTranslation
14 {
15
16   private static String JAL_1312_example_align_fasta =
17           ">B.FR.83.HXB2_LAI_IIIB_BRU_K03455/45-306\n"
18                   +"ATGGGAAAAAATTCGGTTAAGGCCAGGGGGAAAGAAAAAATATAAATTAAAACATATAGTATGGGCAAGCAG\n"
19                   +"GGAGCTAGAACGATTCGCAGTTAATCCTGGCCTGTTAGAAACATCAGAAGGCTGTAGACAAATACTGGGACA\n"
20                   +"GCTACAACCATCCCTTCAGACAGGATCAGAAGAACTTAGATCATTATATAATACAGTAGCAACCCTCTATTG\n"
21                   +"TGTGCATCAAAGGATAGAGATAAAAGACACCAAGGAAGCTTTAGAC\n"
22                   +">gi|27804621|gb|AY178912.1|/1-259\n"
23                   +"-TGGGAGAA-ATTCGGTT-CGGCCAGGGGGAAAGAAAAAATATCAGTTAAAACATATAGTATGGGCAAGCAG\n"
24                   +"AGAGCTAGAACGATTCGCAGTTAACCCTGGCCTTTTAGAGACATCACAAGGCTGTAGACAAATACTGGGACA\n"
25                   +"GCTACAACCATCCCTTCAGACAGGATCAGAAGAACTTAAATCATTATATAATACAGTAGCAACCCTCTATTG\n"
26                   +"TGTTCATCAAAGGATAGATATAAAAGACACCAAGGAAGCTTTAGAT\n"
27                   +">gi|27804623|gb|AY178913.1|/1-259\n"
28                   +"-TGGGAGAA-ATTCGGTT-CGGCCAGGGGGAAAGAAAAAATATCAGTTAAAACATATAGTATGGGCAAGCAG\n"
29                   +"AGAGCTAGAACGATTCGCAGTTAACCCTGGCCTTTTAGAGACATCACAAGGCTGTAGACAAATACTGGAACA\n"
30                   +"GCTACAACCATCCCTTCAGACAGGATCAGAAGAACTTAAATCATTATATAATACAGTAGCAACCCTCTATTG\n"
31                   +"TGTTCATCAAAGGATAGATGTAAAAGACACCAAGGAAGCTTTAGAT\n"
32                   +">gi|27804627|gb|AY178915.1|/1-260\n"
33                   +"-TGGGAAAA-ATTCGGTTAAGGCCAGGGGGAAAGAAAAAATATAAGTTAAAACATATAGTATGGGCAAGCAG\n"
34                   +"GGAGCTAGAACGATTCGCAGTTAACCCTGGCCTGTTAGAAACATCAGAAGGTTGTAGACAAATATTGGGACA\n"
35                   +"GCTACAACCATCCCTTGAGACAGGATCAGAAGAACTTAAATCATTATWTAATACCATAGCAGTCCTCTATTG\n"
36                   +"TGTACATCAAAGGATAGATATAAAAGACACCAAGGAAGCTTTAGAG\n"
37                   +">gi|27804631|gb|AY178917.1|/1-261\n"
38                   +"-TGGGAAAAAATTCGGTTGAGGCCAGGGGGAAAGAAAAAATATAAGTTAAAACATATAGTATGGGCAAGCAG\n"
39                   +"GGAGCTAGAACGATTCGCAGTCAACCCTGGCCTGTTAGAAACACCAGAAGGCTGTAGACAAATACTGGGACA\n"
40                   +"GCTACAACCGTCCCTTCAGACAGGATCGGAAGAACTTAAATCATTATATAATACAGTAGCAACCCTCTATTG\n"
41                   +"TGTGCATCAAAGGATAGATGTAAAAGACACCAAGGAGGCTTTAGAC\n"
42                   +">gi|27804635|gb|AY178919.1|/1-261\n"
43                   +"-TGGGAGAGAATTCGGTTACGGCCAGGAGGAAAGAAAAAATATAAATTGAAACATATAGTATGGGCAGGCAG\n"
44                   +"AGAGCTAGATCGATTCGCAGTCAATCCTGGCCTGTTAGAAACATCAGAAGGCTGCAGACAGATATTGGGACA\n"
45                   +"GCTACAACCGTCCCTTAAGACAGGATCAGAAGAACTTAAATCATTATATAATACAGTAGCAACCCTCTATTG\n"
46                   +"TGTACATCAAAGGATAGATGTAAAAGACACCAAGGAAGCTTTAGAT\n"
47                   +">gi|27804641|gb|AY178922.1|/1-261\n"
48                   +"-TGGGAGAAAATTCGGTTACGGCCAGGGGGAAAGAAAAGATATAAGTTAAAACATATAGTATGGGCAAGCAG\n"
49                   +"GGAGCTAGAACGATTCGCAGTCAACCCTGGCCTGTTAGAAACATCAGAAGGCTGCAGACAAATACTGGGACA\n"
50                   +"GTTACACCCATCCCTTCATACAGGATCAGAAGAACTTAAATCATTATATAATACAGTAGCAACCCTCTATTG\n"
51                   +"TGTGCATCAAAGGATAGAAGTAAAAGACACCAAGGAAGCTTTAGAC\n"
52                   +">gi|27804647|gb|AY178925.1|/1-261\n"
53                   +"-TGGGAAAAAATTCGGTTAAGGCCAGGGGGAAAGAAAAAATATCAATTAAAACATGTAGTATGGGCAAGCAG\n"
54                   +"GGAACTAGAACGATTCGCAGTTAATCCTGGCCTGTTAGAAACATCAGAAGGCTGTAGACAAATATTGGGACA\n"
55                   +"GCTACAACCATCCCTTCAGACAGGATCAGAGGAACTTAAATCATTATTTAATACAGTAGCAGTCCTCTATTG\n"
56                   +"TGTACATCAAAGAATAGATGTAAAAGACACCAAGGAAGCTCTAGAA\n"
57                   +">gi|27804649|gb|AY178926.1|/1-261\n"
58                   +"-TGGGAAAAAATTCGGTTAAGGCCAGGGGGAAAGAAAAAATATAAGTTAAAACATATAGTATGGGCAAGCAG\n"
59                   +"GGAGCTAGAACGATTCGCGGTCAATCCTGGCCTGTTAGAAACATCAGAAGGCTGTAGACAACTACTGGGACA\n"
60                   +"GTTACAACCATCCCTTCAGACAGGATCAGAAGAACTCAAATCATTATATAATACAATAGCAACCCTCTATTG\n"
61                   +"TGTGCATCAAAGGATAGAGATAAAAGACACCAAGGAAGCCTTAGAT\n"
62                   +">gi|27804653|gb|AY178928.1|/1-261\n"
63                   +"-TGGGAAAGAATTCGGTTAAGGCCAGGGGGAAAGAAACAATATAAATTAAAACATATAGTATGGGCAAGCAG\n"
64                   +"GGAGCTAGACCGATTCGCACTTAACCCCGGCCTGTTAGAAACATCAGAAGGCTGTAGACAAATATTGGGACA\n"
65                   +"GCTACAATCGTCCCTTCAGACAGGATCAGAAGAACTTAGATCACTATATAATACAGTAGCAGTCCTCTATTG\n"
66                   +"TGTGCATCAAAAGATAGATGTAAAAGACACCAAGGAAGCCTTAGAC\n"
67                   +">gi|27804659|gb|AY178931.1|/1-261\n"
68                   +"-TGGGAAAAAATTCGGTTACGGCCAGGAGGAAAGAAAAGATATAAATTAAAACATATAGTATGGGCAAGCAG\n"
69                   +"GGAGCTAGAACGATTYGCAGTTAATCCTGGCCTTTTAGAAACAGCAGAAGGCTGTAGACAAATACTGGGACA\n"
70                   +"GCTACAACCATCCCTTCAGACAGGATCAGAAGAACTTAAATCATTATATAATACAGTAGCAACCCTCTATTG\n"
71                   +"TGTACATCAAAGGATAGAGATAAAAGACACCAAGGAAGCTTTAGAA\n";
72   @Test
73   public void translationWithUntranslatableCodonsTest() {
74     // Corner case for this test is the presence of codons after codons that were not translated.
75     try {
76       jalview.datamodel.AlignmentI alf = new jalview.io.FormatAdapter().readFile(JAL_1312_example_align_fasta, jalview.io.FormatAdapter.PASTE, "FASTA");
77       int vwidth=15; // translate in 15 base stretches
78       for (int ipos=0;ipos+vwidth<alf.getWidth();ipos+=vwidth) {
79         ColumnSelection cs = new jalview.datamodel.ColumnSelection();
80         if (ipos>0) { cs.hideColumns(0,ipos-1); }
81         cs.hideColumns(ipos+vwidth,alf.getWidth());
82         int[] vcontigs = cs.getVisibleContigs(0, alf.getWidth());
83         String[] sel = cs.getVisibleSequenceStrings(0, alf.getWidth(), alf.getSequencesArray());
84       jalview.datamodel.AlignmentI transAlf = jalview.analysis.Dna.CdnaTranslate(alf.getSequencesArray(), sel,
85               vcontigs, alf.getGapCharacter(),null, alf.getWidth(), null);
86               
87       assertTrue("Translation failed (ipos="+ipos+") No alignment data.",transAlf!=null);
88       assertTrue("Translation failed (ipos="+ipos+") Empty algnment.",transAlf.getHeight()>0);
89       assertTrue("Translation failed (ipos="+ipos+") Translated "+transAlf.getHeight()+" sequences from "+alf.getHeight()+" sequences",alf.getHeight()==transAlf.getHeight());
90       }
91     } catch (IOException x)
92     {
93       x.printStackTrace();
94       fail("Unexpected IOException ("+x.getMessage()+") - check test environment");
95     }
96   }
97
98 }