Clover icon

jalviewX

  1. Project Clover database Wed Oct 31 2018 15:13:58 GMT
  2. Package jalview.ext.ensembl

File EnsemblGenomeTest.java

 

Code metrics

0
73
6
1
204
123
6
0.08
12.17
6
1

Classes

Class Line # Actions
EnsemblGenomeTest 41 73 6 0
1.0100%
 

Contributing tests

This file is covered by 3 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.datamodel.SequenceDummy;
28    import jalview.datamodel.SequenceFeature;
29    import jalview.datamodel.SequenceI;
30    import jalview.gui.JvOptionPane;
31    import jalview.io.gff.SequenceOntologyFactory;
32    import jalview.io.gff.SequenceOntologyLite;
33    import jalview.util.MapList;
34   
35    import java.util.List;
36   
37    import org.testng.annotations.AfterClass;
38    import org.testng.annotations.BeforeClass;
39    import org.testng.annotations.Test;
40   
 
41    public class EnsemblGenomeTest
42    {
43   
 
44  1 toggle @BeforeClass(alwaysRun = true)
45    public void setUpJvOptionPane()
46    {
47  1 JvOptionPane.setInteractiveMode(false);
48  1 JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
49    }
50   
 
51  1 toggle @BeforeClass(alwaysRun = true)
52    public void setUp()
53    {
54  1 SequenceOntologyFactory.setInstance(new SequenceOntologyLite());
55    }
56   
 
57  1 toggle @AfterClass(alwaysRun = true)
58    public void tearDown()
59    {
60  1 SequenceOntologyFactory.setInstance(null);
61    }
62   
63    /**
64    * Test that the genomic sequence part of genomic sequence is correctly
65    * identified by 'transcript' features (or subtypes) with the correct gene ID
66    */
 
67  1 toggle @Test(groups = "Functional")
68    public void testGetGenomicRangesFromFeatures()
69    {
70  1 EnsemblGenome testee = new EnsemblGenome();
71  1 SequenceI genomic = new SequenceDummy("chr7");
72  1 genomic.setStart(10000);
73  1 genomic.setEnd(50000);
74  1 String transcriptId = "ABC123";
75   
76    // transcript at (start+10000) length 501
77  1 SequenceFeature sf = new SequenceFeature("transcript", "", 20000,
78    20500, 0f, null);
79  1 sf.setValue("ID", "transcript:" + transcriptId);
80  1 sf.setStrand("+");
81  1 genomic.addSequenceFeature(sf);
82   
83    // transcript (sub-type) at (start + 10500) length 101
84  1 sf = new SequenceFeature("ncRNA", "", 10500, 10600, 0f, null);
85  1 sf.setValue("ID", "transcript:" + transcriptId);
86  1 sf.setStrand("+");
87  1 genomic.addSequenceFeature(sf);
88   
89    // Ensembl treats NMD_transcript_variant as if transcript
90    // although strictly it is a sequence_variant in SO
91  1 sf = new SequenceFeature("NMD_transcript_variant", "", 11000, 12000,
92    0f, null);
93  1 sf.setValue("ID", "transcript:" + transcriptId);
94  1 sf.setStrand("+");
95  1 genomic.addSequenceFeature(sf);
96   
97    // transcript with a different ID doesn't count
98  1 sf = new SequenceFeature("transcript", "", 11500, 12600, 0f, null);
99  1 sf.setValue("ID", "transcript:anotherOne");
100  1 genomic.addSequenceFeature(sf);
101   
102    // parent of transcript feature doesn't count
103  1 sf = new SequenceFeature("gene_member_region", "", 10000, 50000, 0f,
104    null);
105  1 genomic.addSequenceFeature(sf);
106   
107  1 MapList ranges = testee.getGenomicRangesFromFeatures(genomic,
108    transcriptId, 23);
109  1 List<int[]> fromRanges = ranges.getFromRanges();
110  1 assertEquals(3, fromRanges.size());
111    // from ranges should be sorted by start order
112  1 assertEquals(10500, fromRanges.get(0)[0]);
113  1 assertEquals(10600, fromRanges.get(0)[1]);
114  1 assertEquals(11000, fromRanges.get(1)[0]);
115  1 assertEquals(12000, fromRanges.get(1)[1]);
116  1 assertEquals(20000, fromRanges.get(2)[0]);
117  1 assertEquals(20500, fromRanges.get(2)[1]);
118    // to range should start from given start numbering
119  1 List<int[]> toRanges = ranges.getToRanges();
120  1 assertEquals(1, toRanges.size());
121  1 assertEquals(23, toRanges.get(0)[0]);
122  1 assertEquals(1625, toRanges.get(0)[1]);
123    }
124   
125    /**
126    * Test the method that retains features except for 'transcript' (or
127    * sub-type), or those with parent other than the given id
128    */
 
129  1 toggle @Test(groups = "Functional")
130    public void testRetainFeature()
131    {
132  1 String accId = "ABC123";
133  1 EnsemblGenome testee = new EnsemblGenome();
134   
135  1 SequenceFeature sf = new SequenceFeature("transcript", "", 20000,
136    20500, 0f, null);
137  1 assertFalse(testee.retainFeature(sf, accId));
138   
139  1 sf = new SequenceFeature("mature_transcript", "", 20000, 20500, 0f,
140    null);
141  1 assertFalse(testee.retainFeature(sf, accId));
142   
143  1 sf = new SequenceFeature("NMD_transcript_variant", "", 20000, 20500,
144    0f, null);
145  1 assertFalse(testee.retainFeature(sf, accId));
146   
147    // other feature with no parent is kept
148  1 sf = new SequenceFeature("anything", "", 20000, 20500, 0f, null);
149  1 assertTrue(testee.retainFeature(sf, accId));
150   
151    // other feature with correct parent is kept
152  1 sf.setValue("Parent", "transcript:" + accId);
153  1 assertTrue(testee.retainFeature(sf, accId));
154   
155    // other feature with wrong parent is not kept
156  1 sf.setValue("Parent", "transcript:XYZ");
157  1 assertFalse(testee.retainFeature(sf, accId));
158    }
159   
160    /**
161    * Test the method that picks out 'transcript' (or subtype) features with the
162    * accession id as ID
163    */
 
164  1 toggle @Test(groups = "Functional")
165    public void testIdentifiesSequence()
166    {
167  1 String accId = "ABC123";
168  1 EnsemblGenome testee = new EnsemblGenome();
169   
170    // transcript with no ID not valid
171  1 SequenceFeature sf = new SequenceFeature("transcript", "", 1, 2, 0f,
172    null);
173  1 assertFalse(testee.identifiesSequence(sf, accId));
174   
175    // transcript with wrong ID not valid
176  1 sf.setValue("ID", "transcript");
177  1 assertFalse(testee.identifiesSequence(sf, accId));
178   
179    // transcript with right ID is valid
180  1 sf.setValue("ID", "transcript:" + accId);
181  1 assertTrue(testee.identifiesSequence(sf, accId));
182   
183    // transcript sub-type with right ID is valid
184  1 sf = new SequenceFeature("ncRNA", "", 1, 2, 0f, null);
185  1 sf.setValue("ID", "transcript:" + accId);
186  1 assertTrue(testee.identifiesSequence(sf, accId));
187   
188    // Ensembl treats NMD_transcript_variant as if a transcript
189  1 sf = new SequenceFeature("NMD_transcript_variant", "", 1, 2, 0f, null);
190  1 sf.setValue("ID", "transcript:" + accId);
191  1 assertTrue(testee.identifiesSequence(sf, accId));
192   
193    // gene not valid:
194  1 sf = new SequenceFeature("gene", "", 1, 2, 0f, null);
195  1 sf.setValue("ID", "transcript:" + accId);
196  1 assertFalse(testee.identifiesSequence(sf, accId));
197   
198    // exon not valid:
199  1 sf = new SequenceFeature("exon", "", 1, 2, 0f, null);
200  1 sf.setValue("ID", "transcript:" + accId);
201  1 assertFalse(testee.identifiesSequence(sf, accId));
202    }
203   
204    }