Merge develop to Release_2_8_3_Branch
[jalview.git] / test / jalview / datamodel / AlignedCodonFrameTest.java
1 package jalview.datamodel;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertNull;
5 import jalview.util.MapList;
6
7 import java.util.Arrays;
8
9 import org.junit.Test;
10
11 public class AlignedCodonFrameTest
12 {
13
14   /**
15    * Test the method that locates the first aligned sequence that has a mapping.
16    */
17   @Test
18   public void testFindAlignedSequence()
19   {
20     AlignmentI cdna = new Alignment(new SequenceI[]
21     {});
22     final Sequence seq1 = new Sequence("Seq1", "C-G-TA-GC");
23     seq1.createDatasetSequence();
24     cdna.addSequence(seq1);
25     final Sequence seq2 = new Sequence("Seq2", "-TA-GG-GG");
26     seq2.createDatasetSequence();
27     cdna.addSequence(seq2);
28
29     AlignmentI aa = new Alignment(new SequenceI[]
30     {});
31     final Sequence aseq1 = new Sequence("Seq1", "-P-R");
32     aseq1.createDatasetSequence();
33     aa.addSequence(aseq1);
34     final Sequence aseq2 = new Sequence("Seq2", "-LY-");
35     aseq2.createDatasetSequence();
36     aa.addSequence(aseq2);
37
38     /*
39      * Mapping from first DNA sequence to second AA sequence.
40      */
41     AlignedCodonFrame acf = new AlignedCodonFrame();
42
43     assertNull(acf.findAlignedSequence(seq1, aa));
44
45     MapList map = new MapList(new int[]
46     { 1, 6 }, new int[]
47     { 1, 2 }, 3, 1);
48     acf.addMap(seq1.getDatasetSequence(), aseq2.getDatasetSequence(), map);
49
50     /*
51      * DNA seq1 maps to AA seq2
52      */
53     assertEquals(aa.getSequenceAt(1),
54  acf.findAlignedSequence(cdna
55             .getSequenceAt(0).getDatasetSequence(), aa));
56
57     assertEquals(cdna.getSequenceAt(0),
58  acf.findAlignedSequence(aa
59             .getSequenceAt(1).getDatasetSequence(), cdna));
60   }
61
62   /**
63    * Test the method that locates the mapped codon for a protein position.
64    */
65     @Test
66   public void testGetMappedRegion()
67   {
68     // introns lower case, exons upper case
69     final Sequence seq1 = new Sequence("Seq1", "c-G-TA-gC-gT-T");
70     seq1.createDatasetSequence();
71     final Sequence seq2 = new Sequence("Seq2", "-TA-gG-Gg-CG-a");
72     seq2.createDatasetSequence();
73
74     final Sequence aseq1 = new Sequence("Seq1", "-P-R");
75     aseq1.createDatasetSequence();
76     final Sequence aseq2 = new Sequence("Seq2", "-LY-");
77     aseq2.createDatasetSequence();
78
79     /*
80      * First with no mappings
81      */
82     AlignedCodonFrame acf = new AlignedCodonFrame();
83
84     assertNull(acf.getMappedRegion(seq1, aseq1, 1));
85
86     /*
87      * Set up the mappings for the exons (upper-case bases)
88      */
89     MapList map = new MapList(new int[]
90     { 2, 4, 6, 6, 8, 9 }, new int[]
91     { 1, 2 }, 3, 1);
92     acf.addMap(seq1.getDatasetSequence(), aseq1.getDatasetSequence(), map);
93     map = new MapList(new int[]
94     { 1, 2, 4, 5, 7, 8 }, new int[]
95     { 1, 2 }, 3, 1);
96     acf.addMap(seq2.getDatasetSequence(), aseq2.getDatasetSequence(), map);
97
98     assertEquals("[2, 4]",
99             Arrays.toString(acf.getMappedRegion(seq1, aseq1, 1)));
100     assertEquals("[6, 6, 8, 9]",
101             Arrays.toString(acf.getMappedRegion(seq1, aseq1, 2)));
102     assertEquals("[1, 2, 4, 4]",
103             Arrays.toString(acf.getMappedRegion(seq2, aseq2, 1)));
104     assertEquals("[5, 5, 7, 8]",
105             Arrays.toString(acf.getMappedRegion(seq2, aseq2, 2)));
106
107     /*
108      * No mapping from sequence 1 to sequence 2
109      */
110     assertNull(acf.getMappedRegion(seq1, aseq2, 1));
111   }
112
113   @Test
114   public void testGetMappedCodon()
115   {
116     final Sequence seq1 = new Sequence("Seq1", "c-G-TA-gC-gT-T");
117     seq1.createDatasetSequence();
118     final Sequence aseq1 = new Sequence("Seq1", "-P-R");
119     aseq1.createDatasetSequence();
120
121     /*
122      * First with no mappings
123      */
124     AlignedCodonFrame acf = new AlignedCodonFrame();
125
126     assertNull(acf.getMappedCodon(seq1.getDatasetSequence(), 0));
127
128     /*
129      * Set up the mappings for the exons (upper-case bases)
130      */
131     MapList map = new MapList(new int[]
132     { 2, 4, 6, 6, 8, 9 }, new int[]
133     { 1, 2 }, 3, 1);
134     acf.addMap(seq1.getDatasetSequence(), aseq1.getDatasetSequence(), map);
135     
136     assertEquals("[G, T, A]", Arrays.toString(acf.getMappedCodon(
137             aseq1.getDatasetSequence(), 1)));
138     assertEquals("[C, T, T]", Arrays.toString(acf.getMappedCodon(
139             aseq1.getDatasetSequence(), 2)));
140   }
141 }