fb17845c0ec73c0d982f444d03840c350e7b31ce
[jalview.git] / test / jalview / ext / ensembl / EnsemblCdsTest.java
1 package jalview.ext.ensembl;
2
3 import static org.testng.AssertJUnit.assertEquals;
4 import static org.testng.AssertJUnit.assertFalse;
5 import static org.testng.AssertJUnit.assertTrue;
6
7 import jalview.datamodel.SequenceDummy;
8 import jalview.datamodel.SequenceFeature;
9 import jalview.datamodel.SequenceI;
10 import jalview.io.gff.SequenceOntologyFactory;
11 import jalview.io.gff.SequenceOntologyLite;
12 import jalview.util.MapList;
13
14 import java.util.List;
15
16 import org.testng.annotations.AfterClass;
17 import org.testng.annotations.BeforeClass;
18 import org.testng.annotations.Test;
19
20 public class EnsemblCdsTest
21 {
22   @BeforeClass
23   public void setUp()
24   {
25     SequenceOntologyFactory.setInstance(new SequenceOntologyLite());
26   }
27
28   @AfterClass
29   public void tearDown()
30   {
31     SequenceOntologyFactory.setInstance(null);
32   }
33
34   /**
35    * Test that the cdna part of genomic sequence is correctly identified by
36    * 'CDS' features (or subtypes) with the desired transcript as parent
37    */
38   @Test(groups = "Functional")
39   public void testGetGenomicRangesFromFeatures()
40   {
41     EnsemblCds testee = new EnsemblCds();
42     SequenceI genomic = new SequenceDummy("chr7");
43     genomic.setStart(10000);
44     genomic.setEnd(50000);
45     String transcriptId = "ABC123";
46   
47     // CDS at (start+10000) length 501
48     SequenceFeature sf = new SequenceFeature("CDS", "", 20000, 20500, 0f,
49             null);
50     sf.setValue("Parent", "transcript:" + transcriptId);
51     sf.setStrand("+");
52     genomic.addSequenceFeature(sf);
53   
54     // CDS (sub-type) at (start + 10500) length 101
55     sf = new SequenceFeature("CDS_predicted", "", 10500, 10600, 0f, null);
56     sf.setValue("Parent", "transcript:" + transcriptId);
57     sf.setStrand("+");
58     genomic.addSequenceFeature(sf);
59   
60     // CDS belonging to a different transcript doesn't count
61     sf = new SequenceFeature("CDS", "", 11500, 12600, 0f, null);
62     sf.setValue("Parent", "transcript:anotherOne");
63     genomic.addSequenceFeature(sf);
64   
65     // exon feature doesn't count
66     sf = new SequenceFeature("exon", "", 10000, 50000, 0f, null);
67     genomic.addSequenceFeature(sf);
68
69     // mRNA_region feature doesn't count (parent of CDS)
70     sf = new SequenceFeature("mRNA_region", "", 10000, 50000, 0f, null);
71     genomic.addSequenceFeature(sf);
72   
73     MapList ranges = testee.getGenomicRangesFromFeatures(genomic,
74             transcriptId, 23);
75     List<int[]> fromRanges = ranges.getFromRanges();
76     assertEquals(2, fromRanges.size());
77     // from ranges should be sorted by start order
78     assertEquals(10500, fromRanges.get(0)[0]);
79     assertEquals(10600, fromRanges.get(0)[1]);
80     assertEquals(20000, fromRanges.get(1)[0]);
81     assertEquals(20500, fromRanges.get(1)[1]);
82     // to range should start from given start numbering
83     List<int[]> toRanges = ranges.getToRanges();
84     assertEquals(1, toRanges.size());
85     assertEquals(23, toRanges.get(0)[0]);
86     assertEquals(624, toRanges.get(0)[1]);
87   }
88
89   /**
90    * Test the method that retains features except for 'CDS' (or subtypes), or
91    * features with parent other than the given id
92    */
93   @Test(groups = "Functional")
94   public void testRetainFeature()
95   {
96     String accId = "ABC123";
97     EnsemblCds testee = new EnsemblCds();
98   
99     SequenceFeature sf = new SequenceFeature("CDS", "", 20000,
100             20500, 0f, null);
101     assertFalse(testee.retainFeature(sf, accId));
102   
103     sf.setType("CDS_predicted");
104     assertFalse(testee.retainFeature(sf, accId));
105   
106     // other feature with no parent is retained
107     sf.setType("sequence_variant");
108     assertTrue(testee.retainFeature(sf, accId));
109   
110     // other feature with desired parent is retained
111     sf.setValue("Parent", "transcript:" + accId);
112     assertTrue(testee.retainFeature(sf, accId));
113   
114     // feature with wrong parent is not retained
115     sf.setValue("Parent", "transcript:XYZ");
116     assertFalse(testee.retainFeature(sf, accId));
117   }
118
119   /**
120    * Test the method that picks out 'CDS' (or subtype) features with the
121    * accession id as parent
122    */
123   @Test(groups = "Functional")
124   public void testIdentifiesSequence()
125   {
126     String accId = "ABC123";
127     EnsemblCds testee = new EnsemblCds();
128   
129     // cds with no parent not valid
130     SequenceFeature sf = new SequenceFeature("CDS", "", 1, 2, 0f, null);
131     assertFalse(testee.identifiesSequence(sf, accId));
132   
133     // cds with wrong parent not valid
134     sf.setValue("Parent", "transcript:XYZ");
135     assertFalse(testee.identifiesSequence(sf, accId));
136   
137     // cds with right parent is valid
138     sf.setValue("Parent", "transcript:" + accId);
139     assertTrue(testee.identifiesSequence(sf, accId));
140   
141     // cds sub-type with right parent is valid
142     sf.setType("CDS_predicted");
143     assertTrue(testee.identifiesSequence(sf, accId));
144   
145     // transcript not valid:
146     sf.setType("transcript");
147     assertFalse(testee.identifiesSequence(sf, accId));
148   
149     // exon not valid:
150     sf.setType("exon");
151     assertFalse(testee.identifiesSequence(sf, accId));
152   }
153
154 }