1 package jalview.ext.ensembl;
3 import static org.testng.AssertJUnit.assertEquals;
4 import static org.testng.AssertJUnit.assertNull;
6 import jalview.datamodel.SequenceDummy;
7 import jalview.datamodel.SequenceFeature;
8 import jalview.datamodel.SequenceI;
9 import jalview.io.gff.SequenceOntologyFactory;
10 import jalview.io.gff.SequenceOntologyLite;
11 import jalview.util.MapList;
13 import java.util.List;
15 import org.testng.annotations.Test;
17 public class EnsemblCdnaTest
20 * Test that the cdna part of genomic sequence is correctly identified by
21 * 'exon' features (or subtypes) - reverse strand case.
23 @Test(groups = "Functional")
24 public void getGenomicRangesFromFeatures_reverseStrand()
26 EnsemblCdna testee = new EnsemblCdna();
27 SequenceI genomic = new SequenceDummy("chr7");
28 genomic.setStart(10000);
29 genomic.setEnd(50000);
30 String transcriptId = "ABC123";
32 // exon at (start+10000) length 501
33 SequenceFeature sf = new SequenceFeature("exon", "", 20000, 20500, 0f,
35 sf.setValue("Parent", "transcript:" + transcriptId);
37 genomic.addSequenceFeature(sf);
39 // exon (sub-type) at (start + exon_variant) length 101
40 sf = new SequenceFeature("coding_exon", "", 10500, 10600, 0f, null);
41 sf.setValue("Parent", "transcript:" + transcriptId);
43 genomic.addSequenceFeature(sf);
45 // exon belonging to a different transcript doesn't count
46 sf = new SequenceFeature("exon", "", 11500, 12600, 0f, null);
47 sf.setValue("Parent", "transcript:anotherOne");
48 genomic.addSequenceFeature(sf);
50 // transcript feature doesn't count
51 sf = new SequenceFeature("transcript", "", 10000, 50000, 0f, null);
52 genomic.addSequenceFeature(sf);
54 SequenceOntologyFactory.setInstance(new SequenceOntologyLite());
56 MapList ranges = testee.getGenomicRangesFromFeatures(genomic,
58 List<int[]> fromRanges = ranges.getFromRanges();
59 assertEquals(2, fromRanges.size());
62 * from ranges should be sorted by start order descending
63 * and hold mappings from reverse strand sense
65 assertEquals(20500, fromRanges.get(0)[0]);
66 assertEquals(20000, fromRanges.get(0)[1]);
67 assertEquals(10600, fromRanges.get(1)[0]);
68 assertEquals(10500, fromRanges.get(1)[1]);
69 // to range should start from given start numbering
70 List<int[]> toRanges = ranges.getToRanges();
71 assertEquals(1, toRanges.size());
72 assertEquals(23, toRanges.get(0)[0]);
73 assertEquals(624, toRanges.get(0)[1]);
77 * Test that the cdna part of genomic sequence is correctly identified by
78 * 'exon' features (or subtypes).
80 @Test(groups = "Functional")
81 public void getGenomicRangesFromFeatures()
83 EnsemblCdna testee = new EnsemblCdna();
84 SequenceI genomic = new SequenceDummy("chr7");
85 genomic.setStart(10000);
86 genomic.setEnd(50000);
87 String transcriptId = "ABC123";
89 // exon at (start+10000) length 501
90 SequenceFeature sf = new SequenceFeature("exon", "", 20000, 20500, 0f,
92 sf.setValue("Parent", "transcript:" + transcriptId);
94 genomic.addSequenceFeature(sf);
96 // exon (sub-type) at (start + exon_variant) length 101
97 sf = new SequenceFeature("coding_exon", "", 10500, 10600, 0f, null);
98 sf.setValue("Parent", "transcript:" + transcriptId);
100 genomic.addSequenceFeature(sf);
102 // exon belonging to a different transcript doesn't count
103 sf = new SequenceFeature("exon", "", 11500, 12600, 0f, null);
104 sf.setValue("Parent", "transcript:anotherOne");
105 genomic.addSequenceFeature(sf);
107 // transcript feature doesn't count
108 sf = new SequenceFeature("transcript", "", 10000, 50000, 0f, null);
109 sf.setStrand("-"); // weird but ignored
110 genomic.addSequenceFeature(sf);
112 SequenceOntologyFactory.setInstance(new SequenceOntologyLite());
114 MapList ranges = testee.getGenomicRangesFromFeatures(genomic,
116 List<int[]> fromRanges = ranges.getFromRanges();
117 assertEquals(2, fromRanges.size());
118 // from ranges should be sorted by start order
119 assertEquals(10500, fromRanges.get(0)[0]);
120 assertEquals(10600, fromRanges.get(0)[1]);
121 assertEquals(20000, fromRanges.get(1)[0]);
122 assertEquals(20500, fromRanges.get(1)[1]);
123 // to range should start from given start numbering
124 List<int[]> toRanges = ranges.getToRanges();
125 assertEquals(1, toRanges.size());
126 assertEquals(23, toRanges.get(0)[0]);
127 assertEquals(624, toRanges.get(0)[1]);
131 * The method under test should give up and return null if both forward and
132 * reverse strands are present in the features of interest
134 @Test(groups = "Functional")
135 public void getGenomicRangesFromFeatures_mixedStrand()
137 EnsemblCdna testee = new EnsemblCdna();
138 SequenceI genomic = new SequenceDummy("chr7");
139 genomic.setStart(10000);
140 genomic.setEnd(50000);
141 String transcriptId = "ABC123";
143 SequenceFeature sf = new SequenceFeature("exon", "", 20000, 20500, 0f,
145 sf.setValue("Parent", "transcript:" + transcriptId);
147 genomic.addSequenceFeature(sf);
149 sf = new SequenceFeature("coding_exon", "", 10500, 10600, 0f, null);
150 sf.setValue("Parent", "transcript:" + transcriptId);
152 genomic.addSequenceFeature(sf);
154 SequenceOntologyFactory.setInstance(new SequenceOntologyLite());
156 MapList ranges = testee.getGenomicRangesFromFeatures(genomic,