Clover icon

Coverage Report

  1. Project Clover database Thu Aug 13 2020 12:04:21 BST
  2. Package jalview.ext.ensembl

File EnsemblGeneTest.java

 

Code metrics

0
138
10
1
322
215
10
0.07
13.8
10
1

Classes

Class Line # Actions
EnsemblGeneTest 45 138 10
0.912162291.2%
 

Contributing tests

This file is covered by 6 tests. .

Source view

1    /*
2    * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3    * Copyright (C) $$Year-Rel$$ The Jalview Authors
4    *
5    * This file is part of Jalview.
6    *
7    * Jalview is free software: you can redistribute it and/or
8    * modify it under the terms of the GNU General Public License
9    * as published by the Free Software Foundation, either version 3
10    * of the License, or (at your option) any later version.
11    *
12    * Jalview is distributed in the hope that it will be useful, but
13    * WITHOUT ANY WARRANTY; without even the implied warranty
14    * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15    * PURPOSE. See the GNU General Public License for more details.
16    *
17    * You should have received a copy of the GNU General Public License
18    * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19    * The Jalview Authors are detailed in the 'AUTHORS' file.
20    */
21    package jalview.ext.ensembl;
22   
23    import static org.testng.AssertJUnit.assertEquals;
24    import static org.testng.AssertJUnit.assertFalse;
25    import static org.testng.AssertJUnit.assertTrue;
26   
27    import jalview.api.FeatureSettingsModelI;
28    import jalview.bin.Cache;
29    import jalview.datamodel.Sequence;
30    import jalview.datamodel.SequenceDummy;
31    import jalview.datamodel.SequenceFeature;
32    import jalview.datamodel.SequenceI;
33    import jalview.gui.JvOptionPane;
34    import jalview.io.gff.SequenceOntologyFactory;
35    import jalview.io.gff.SequenceOntologyLite;
36    import jalview.util.MapList;
37   
38    import java.awt.Color;
39    import java.util.List;
40   
41    import org.testng.annotations.AfterClass;
42    import org.testng.annotations.BeforeClass;
43    import org.testng.annotations.Test;
44   
 
45    public class EnsemblGeneTest
46    {
47   
 
48  1 toggle @BeforeClass(alwaysRun = true)
49    public void setUpJvOptionPane()
50    {
51  1 JvOptionPane.setInteractiveMode(false);
52  1 JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
53    }
54   
 
55  1 toggle @BeforeClass(alwaysRun = true)
56    public void setUp()
57    {
58  1 Cache.loadProperties("test/jalview/io/testProps.jvprops");
59  1 SequenceOntologyFactory.setInstance(new SequenceOntologyLite());
60    }
61   
 
62  1 toggle @AfterClass(alwaysRun = true)
63    public void tearDown()
64    {
65  1 SequenceOntologyFactory.setInstance(null);
66    }
67   
68    /**
69    * Test that the gene part of genomic sequence is uniquely identified by a
70    * 'gene' features (or subtype) with the correct gene ID
71    */
 
72  1 toggle @Test(groups = "Functional")
73    public void testGetGenomicRangesFromFeatures()
74    {
75  1 EnsemblGene testee = new EnsemblGene();
76  1 SequenceI genomic = new SequenceDummy("chr7");
77  1 genomic.setStart(10000);
78  1 genomic.setEnd(50000);
79  1 String geneId = "ABC123";
80   
81    // gene at (start + 10500) length 101
82  1 SequenceFeature sf = new SequenceFeature("gene", "", 10500, 10600, 0f,
83    null);
84  1 sf.setValue("id", geneId);
85  1 sf.setStrand("+");
86  1 genomic.addSequenceFeature(sf);
87   
88  1 MapList ranges = testee.getGenomicRangesFromFeatures(genomic, geneId,
89    23);
90  1 List<int[]> fromRanges = ranges.getFromRanges();
91  1 assertEquals(1, fromRanges.size());
92  1 assertEquals(10500, fromRanges.get(0)[0]);
93  1 assertEquals(10600, fromRanges.get(0)[1]);
94    // to range should start from given start numbering
95  1 List<int[]> toRanges = ranges.getToRanges();
96  1 assertEquals(1, toRanges.size());
97  1 assertEquals(23, toRanges.get(0)[0]);
98  1 assertEquals(123, toRanges.get(0)[1]);
99    }
100   
101    /**
102    * Test variant using a sub-type of gene from the Sequence Ontology
103    */
 
104  1 toggle @Test(groups = "Functional")
105    public void testGetGenomicRangesFromFeatures_ncRNA_gene_reverseStrand()
106    {
107  1 EnsemblGene testee = new EnsemblGene();
108  1 SequenceI genomic = new SequenceDummy("chr7");
109  1 genomic.setStart(10000);
110  1 genomic.setEnd(50000);
111  1 String geneId = "ABC123";
112   
113    // gene at (start + 10500) length 101
114  1 SequenceFeature sf = new SequenceFeature("gene", "", 10500, 10600, 0f,
115    null);
116  1 sf.setValue("id", geneId);
117  1 sf.setStrand("+");
118  1 genomic.addSequenceFeature(sf);
119   
120  1 MapList ranges = testee.getGenomicRangesFromFeatures(genomic, geneId,
121    23);
122  1 List<int[]> fromRanges = ranges.getFromRanges();
123  1 assertEquals(1, fromRanges.size());
124    // from range on reverse strand:
125  1 assertEquals(10500, fromRanges.get(0)[0]);
126  1 assertEquals(10600, fromRanges.get(0)[1]);
127    // to range should start from given start numbering
128  1 List<int[]> toRanges = ranges.getToRanges();
129  1 assertEquals(1, toRanges.size());
130  1 assertEquals(23, toRanges.get(0)[0]);
131  1 assertEquals(123, toRanges.get(0)[1]);
132    }
133   
134    /**
135    * Test the method that extracts transcript (or subtype) features with a
136    * specified gene as parent
137    */
 
138  1 toggle @Test(groups = "Functional")
139    public void testGetTranscriptFeatures()
140    {
141  1 SequenceI genomic = new SequenceDummy("chr7");
142  1 genomic.setStart(10000);
143  1 genomic.setEnd(50000);
144  1 String geneId = "ABC123";
145   
146    // transcript feature
147  1 SequenceFeature sf1 = new SequenceFeature("transcript", "", 20000,
148    20500, 0f, null);
149  1 sf1.setValue("Parent", geneId);
150  1 sf1.setValue("id", "transcript1");
151  1 genomic.addSequenceFeature(sf1);
152   
153    // transcript sub-type feature
154  1 SequenceFeature sf2 = new SequenceFeature("snRNA", "", 21000, 21500,
155    0f, null);
156  1 sf2.setValue("Parent", geneId);
157  1 sf2.setValue("id", "transcript2");
158  1 genomic.addSequenceFeature(sf2);
159   
160    // NMD_transcript_variant treated like transcript in Ensembl
161  1 SequenceFeature sf3 = new SequenceFeature("NMD_transcript_variant", "",
162    22000, 22500, 0f, null);
163    // id matching should not be case-sensitive
164  1 sf3.setValue("Parent", geneId.toLowerCase());
165  1 sf3.setValue("id", "transcript3");
166  1 genomic.addSequenceFeature(sf3);
167   
168    // transcript for a different gene - ignored
169  1 SequenceFeature sf4 = new SequenceFeature("snRNA", "", 23000, 23500,
170    0f, null);
171  1 sf4.setValue("Parent", "XYZ");
172  1 sf4.setValue("id", "transcript4");
173  1 genomic.addSequenceFeature(sf4);
174   
175  1 EnsemblGene testee = new EnsemblGene();
176   
177    /*
178    * with no filter
179    */
180  1 List<SequenceFeature> features = testee.getTranscriptFeatures(geneId,
181    genomic);
182  1 assertEquals(3, features.size());
183  1 assertTrue(features.contains(sf1));
184  1 assertTrue(features.contains(sf2));
185  1 assertTrue(features.contains(sf3));
186    }
187   
188    /**
189    * Test the method that retains features except for 'gene', or 'transcript'
190    * with parent other than the given id
191    */
 
192  1 toggle @Test(groups = "Functional")
193    public void testRetainFeature()
194    {
195  1 String geneId = "ABC123";
196  1 EnsemblGene testee = new EnsemblGene();
197  1 SequenceFeature sf = new SequenceFeature("gene", "", 20000, 20500, 0f,
198    null);
199  1 sf.setValue("id", geneId);
200  1 assertFalse(testee.retainFeature(sf, geneId));
201   
202  1 sf = new SequenceFeature("transcript", "", 20000, 20500, 0f, null);
203  1 sf.setValue("Parent", geneId);
204  1 assertTrue(testee.retainFeature(sf, geneId));
205   
206  1 sf = new SequenceFeature("mature_transcript", "", 20000, 20500, 0f,
207    null);
208  1 sf.setValue("Parent", geneId);
209  1 assertTrue(testee.retainFeature(sf, geneId));
210   
211  1 sf = new SequenceFeature("NMD_transcript_variant", "", 20000, 20500,
212    0f, null);
213  1 sf.setValue("Parent", geneId);
214  1 assertTrue(testee.retainFeature(sf, geneId));
215   
216  1 sf.setValue("Parent", "ßXYZ");
217  1 assertFalse(testee.retainFeature(sf, geneId));
218   
219  1 sf = new SequenceFeature("anything", "", 20000, 20500, 0f, null);
220  1 assertTrue(testee.retainFeature(sf, geneId));
221    }
222   
223    /**
224    * Test the method that picks out 'gene' (or subtype) features with the
225    * accession id as ID
226    */
 
227  1 toggle @Test(groups = "Functional")
228    public void testGetIdentifyingFeatures()
229    {
230  1 String accId = "ABC123";
231  1 SequenceI seq = new Sequence(accId, "HIBEES");
232   
233    // gene with no ID not valid
234  1 SequenceFeature sf1 = new SequenceFeature("gene", "", 1, 2, 0f, null);
235  1 seq.addSequenceFeature(sf1);
236   
237    // gene with wrong ID not valid
238  1 SequenceFeature sf2 = new SequenceFeature("gene", "a", 1, 2, 0f, null);
239  1 sf2.setValue("id", "XYZ");
240  1 seq.addSequenceFeature(sf2);
241   
242    // gene with right ID is valid
243  1 SequenceFeature sf3 = new SequenceFeature("gene", "b", 1, 2, 0f, null);
244  1 sf3.setValue("id", accId);
245  1 seq.addSequenceFeature(sf3);
246   
247    // gene sub-type with right ID is valid
248  1 SequenceFeature sf4 = new SequenceFeature("snRNA_gene", "", 1, 2, 0f, null);
249  1 sf4.setValue("id", accId);
250  1 seq.addSequenceFeature(sf4);
251   
252    // transcript not valid:
253  1 SequenceFeature sf5 = new SequenceFeature("transcript", "", 1, 2, 0f, null);
254  1 sf5.setValue("id", accId);
255  1 seq.addSequenceFeature(sf5);
256   
257    // exon not valid:
258  1 SequenceFeature sf6 = new SequenceFeature("exon", "", 1, 2, 0f, null);
259  1 sf6.setValue("id", accId);
260  1 seq.addSequenceFeature(sf6);
261   
262  1 List<SequenceFeature> sfs = new EnsemblGene()
263    .getIdentifyingFeatures(seq, accId);
264  1 assertFalse(sfs.contains(sf1));
265  1 assertFalse(sfs.contains(sf2));
266  1 assertTrue(sfs.contains(sf3));
267  1 assertTrue(sfs.contains(sf4));
268  1 assertFalse(sfs.contains(sf5));
269  1 assertFalse(sfs.contains(sf6));
270    }
271   
272    /**
273    * Check behaviour of feature colour scheme for EnsemblGene sequences.
274    * Currently coded to display exon and sequence_variant (or sub-types) only,
275    * with sequence_variant in red above exon coloured by label.
276    */
 
277  1 toggle @Test(groups = "Functional")
278    public void testGetFeatureColourScheme()
279    {
280  1 FeatureSettingsModelI fc = new EnsemblGene().getFeatureColourScheme();
281  1 assertTrue(fc.isFeatureDisplayed("exon"));
282  1 assertTrue(fc.isFeatureDisplayed("coding_exon")); // subtype of exon
283  1 assertTrue(fc.isFeatureDisplayed("sequence_variant"));
284  1 assertTrue(fc.isFeatureDisplayed("feature_variant")); // subtype
285  1 assertFalse(fc.isFeatureDisplayed("transcript"));
286  1 assertEquals(Color.RED, fc.getFeatureColour("sequence_variant")
287    .getColour());
288  1 assertEquals(Color.RED, fc.getFeatureColour("feature_variant")
289    .getColour());
290  1 assertTrue(fc.getFeatureColour("exon").isColourByLabel());
291  1 assertTrue(fc.getFeatureColour("coding_exon").isColourByLabel());
292  1 assertEquals(1, fc.compare("sequence_variant", "exon"));
293  1 assertEquals(-1, fc.compare("exon", "sequence_variant"));
294  1 assertEquals(1, fc.compare("feature_variant", "coding_exon"));
295  1 assertEquals(-1, fc.compare("coding_exon", "feature_variant"));
296  1 assertEquals(1f, fc.getTransparency());
297    }
298   
 
299  0 toggle @Test(groups = "Network")
300    public void testGetGeneIds()
301    {
302    /*
303    * ENSG00000158828 gene id PINK1 human
304    * ENST00000321556 transcript for the same gene - should not be duplicated
305    * P30419 Uniprot identifier for ENSG00000136448
306    * ENST00000592782 transcript for Uniprot gene - should not be duplicated
307    * BRAF - gene name resolvabe (at time of writing) for 6 model species
308    */
309  0 String ids = "ENSG00000158828 ENST00000321556 P30419 ENST00000592782 BRAF";
310  0 EnsemblGene testee = new EnsemblGene();
311  0 List<String> geneIds = testee.getGeneIds(ids);
312  0 assertEquals(8, geneIds.size());
313  0 assertTrue(geneIds.contains("ENSG00000158828"));
314  0 assertTrue(geneIds.contains("ENSG00000136448"));
315  0 assertTrue(geneIds.contains("ENSG00000157764")); // BRAF human
316  0 assertTrue(geneIds.contains("ENSMUSG00000002413")); // mouse
317  0 assertTrue(geneIds.contains("ENSRNOG00000010957")); // rat
318  0 assertTrue(geneIds.contains("ENSXETG00000004845")); // xenopus
319  0 assertTrue(geneIds.contains("ENSDARG00000017661")); // zebrafish
320  0 assertTrue(geneIds.contains("ENSGALG00000012865")); // chicken
321    }
322    }