JAL-1619 refactoring / tests to support 'align linked dna as protein'
[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
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     AlignedCodonFrame acf = new AlignedCodonFrame();
80
81     assertNull(acf.getMappedRegion(seq1, aseq1, 1));
82
83     MapList map = new MapList(new int[]
84     { 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[]
88     { 1, 2, 4, 5, 7, 8 }, new int[]
89     { 1, 2 }, 3, 1);
90     acf.addMap(seq2.getDatasetSequence(), aseq2.getDatasetSequence(), map);
91
92     assertEquals("[2, 4]",
93             Arrays.toString(acf.getMappedRegion(seq1, aseq1, 1)));
94     assertEquals("[6, 6, 8, 9]",
95             Arrays.toString(acf.getMappedRegion(seq1, aseq1, 2)));
96     assertEquals("[1, 2, 4, 4]",
97             Arrays.toString(acf.getMappedRegion(seq2, aseq2, 1)));
98     assertEquals("[5, 5, 7, 8]",
99             Arrays.toString(acf.getMappedRegion(seq2, aseq2, 2)));
100
101     assertNull(acf.getMappedRegion(seq1, aseq2, 1));
102   }
103 }