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