Clover icon

jalviewX

  1. Project Clover database Wed Oct 31 2018 15:13:58 GMT
  2. Package jalview.datamodel.xdb.embl

File EmblEntryTest.java

 

Code metrics

2
129
4
1
264
179
5
0.04
32.25
4
1.25

Classes

Class Line # Actions
EmblEntryTest 41 129 5 1
0.992592699.3%
 

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.datamodel.xdb.embl;
22   
23    import static org.testng.AssertJUnit.assertEquals;
24    import static org.testng.AssertJUnit.assertNull;
25    import static org.testng.AssertJUnit.assertSame;
26   
27    import jalview.analysis.SequenceIdMatcher;
28    import jalview.datamodel.DBRefEntry;
29    import jalview.datamodel.DBRefSource;
30    import jalview.datamodel.SequenceI;
31    import jalview.gui.JvOptionPane;
32    import jalview.util.MapList;
33   
34    import java.util.ArrayList;
35    import java.util.Arrays;
36    import java.util.List;
37   
38    import org.testng.annotations.BeforeClass;
39    import org.testng.annotations.Test;
40   
 
41    public class EmblEntryTest
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 @Test(groups = "Functional")
52    public void testGetCdsRanges()
53    {
54  1 EmblEntry testee = new EmblEntry();
55   
56    /*
57    * Make a (CDS) Feature with 5 locations
58    */
59  1 EmblFeature cds = new EmblFeature();
60  1 cds.setLocation("join(10..20,complement(30..40),50..60,70..80,complement(110..120))");
61   
62  1 int[] exons = testee.getCdsRanges(cds);
63  1 assertEquals("[10, 20, 40, 30, 50, 60, 70, 80, 120, 110]",
64    Arrays.toString(exons));
65    }
66   
 
67  1 toggle @Test(groups = "Functional")
68    public void testParseCodingFeature()
69    {
70    // not the whole sequence but enough for this test...
71  1 List<SequenceI> peptides = new ArrayList<SequenceI>();
72  1 SequenceIdMatcher matcher = new SequenceIdMatcher(peptides);
73  1 EmblFile ef = EmblTestHelper.getEmblFile();
74  1 assertEquals(1, ef.getEntries().size());
75  1 EmblEntry testee = ef.getEntries().get(0);
76  1 String sourceDb = "EMBL";
77  1 SequenceI dna = testee.makeSequence(sourceDb);
78   
79    /*
80    * parse three CDS features, with two/one/no Uniprot cross-refs
81    */
82  1 for (EmblFeature feature : ef.getEntries().get(0).getFeatures())
83    {
84  3 if ("CDS".equals(feature.getName()))
85    {
86  3 testee.parseCodingFeature(feature, sourceDb, dna, peptides, matcher);
87    }
88    }
89   
90    /*
91    * peptides should now have five entries:
92    * EMBL product and two Uniprot accessions for the first CDS / translation
93    * EMBL product and one Uniprot accession for the second CDS / "
94    * EMBL product only for the third
95    */
96  1 assertEquals(6, peptides.size());
97  1 assertEquals("CAA30420.1", peptides.get(0).getName());
98  1 assertEquals("MLCF", peptides.get(0).getSequenceAsString());
99  1 assertEquals("UNIPROT|B0BCM4", peptides.get(1).getName());
100  1 assertEquals("MLCF", peptides.get(1).getSequenceAsString());
101  1 assertEquals("UNIPROT|P0CE20", peptides.get(2).getName());
102  1 assertEquals("MLCF", peptides.get(2).getSequenceAsString());
103  1 assertEquals("CAA30421.1", peptides.get(3).getName());
104  1 assertEquals("MSSS", peptides.get(3).getSequenceAsString());
105  1 assertEquals("UNIPROT|B0BCM3", peptides.get(4).getName());
106  1 assertEquals("MSSS", peptides.get(4).getSequenceAsString());
107  1 assertEquals("CAA12345.6", peptides.get(5).getName());
108  1 assertEquals("MSS", peptides.get(5).getSequenceAsString());
109   
110    /*
111    * verify dna sequence has dbrefs with CDS mappings to the peptide 'products'
112    */
113  1 MapList cds1Map = new MapList(new int[] { 57, 46 }, new int[] { 1, 4 },
114    3, 1);
115  1 MapList cds2Map = new MapList(new int[] { 4, 15 }, new int[] { 1, 4 },
116    3, 1);
117  1 MapList cds3Map = new MapList(new int[] { 4, 6, 10, 15 }, new int[] {
118    1, 3 }, 3, 1);
119  1 DBRefEntry[] dbrefs = dna.getDBRefs();
120  1 assertEquals(4, dbrefs.length);
121  1 DBRefEntry dbRefEntry = dbrefs[0];
122  1 assertEquals("UNIPROT", dbRefEntry.getSource());
123  1 assertEquals("B0BCM4", dbRefEntry.getAccessionId());
124  1 assertSame(peptides.get(1), dbRefEntry.getMap().getTo());
125  1 assertEquals(cds1Map, dbRefEntry.getMap().getMap());
126   
127  1 dbRefEntry = dbrefs[1];
128  1 assertEquals("UNIPROT", dbRefEntry.getSource());
129  1 assertEquals("P0CE20", dbRefEntry.getAccessionId());
130  1 assertSame(peptides.get(2), dbRefEntry.getMap().getTo());
131  1 assertEquals(cds1Map, dbRefEntry.getMap().getMap());
132   
133  1 dbRefEntry = dbrefs[2];
134  1 assertEquals("UNIPROT", dbRefEntry.getSource());
135  1 assertEquals("B0BCM3", dbRefEntry.getAccessionId());
136  1 assertSame(peptides.get(4), dbRefEntry.getMap().getTo());
137  1 assertEquals(cds2Map, dbRefEntry.getMap().getMap());
138   
139  1 dbRefEntry = dbrefs[3];
140  1 assertEquals("EMBLCDSPROTEIN", dbRefEntry.getSource());
141  1 assertEquals("CAA12345.6", dbRefEntry.getAccessionId());
142  1 assertSame(peptides.get(5), dbRefEntry.getMap().getTo());
143  1 assertEquals(cds3Map, dbRefEntry.getMap().getMap());
144   
145    /*
146    * verify peptides have dbrefs
147    * - to EMBL sequence (with inverse 1:3 cds mapping)
148    * - to EMBLCDS (with 1:3 mapping)
149    * - direct (no mapping) to other protein accessions
150    */
151  1 MapList proteinToCdsMap1 = new MapList(new int[] { 1, 4 }, new int[] {
152    1, 12 }, 1, 3);
153  1 MapList proteinToCdsMap2 = new MapList(new int[] { 1, 3 }, new int[] {
154    1, 9 }, 1, 3);
155   
156    // dbrefs for first CDS EMBL product CAA30420.1
157  1 dbrefs = peptides.get(0).getDBRefs();
158  1 assertEquals(5, dbrefs.length);
159  1 assertEquals(DBRefSource.EMBL, dbrefs[0].getSource());
160  1 assertEquals("CAA30420.1", dbrefs[0].getAccessionId());
161    // TODO: verify getPrimaryDBRefs() for peptide products
162  1 assertEquals(cds1Map.getInverse(), dbrefs[0].getMap().getMap());
163  1 assertEquals(DBRefSource.EMBLCDS, dbrefs[1].getSource());
164  1 assertEquals("CAA30420.1", dbrefs[1].getAccessionId());
165  1 assertEquals(proteinToCdsMap1, dbrefs[1].getMap().getMap());
166  1 assertEquals(DBRefSource.EMBLCDSProduct, dbrefs[2].getSource());
167  1 assertEquals("CAA30420.1", dbrefs[2].getAccessionId());
168  1 assertNull(dbrefs[2].getMap());
169  1 assertEquals(new DBRefEntry(DBRefSource.UNIPROT, "2.1", "B0BCM4"),
170    dbrefs[3]);
171  1 assertNull(dbrefs[3].getMap());
172  1 assertEquals(new DBRefEntry(DBRefSource.UNIPROT, "0", "P0CE20"),
173    dbrefs[4]);
174  1 assertNull(dbrefs[4].getMap());
175   
176    // dbrefs for first CDS first Uniprot xref
177  1 dbrefs = peptides.get(1).getDBRefs();
178  1 assertEquals(2, dbrefs.length);
179  1 assertEquals(new DBRefEntry(DBRefSource.UNIPROT, "2.1", "B0BCM4"),
180    dbrefs[0]);
181  1 assertNull(dbrefs[0].getMap());
182  1 assertEquals(DBRefSource.EMBL, dbrefs[1].getSource());
183  1 assertEquals("X07547", dbrefs[1].getAccessionId());
184  1 assertEquals(cds1Map.getInverse(), dbrefs[1].getMap().getMap());
185   
186    // dbrefs for first CDS second Uniprot xref
187  1 dbrefs = peptides.get(2).getDBRefs();
188  1 assertEquals(2, dbrefs.length);
189  1 assertEquals(new DBRefEntry(DBRefSource.UNIPROT, "0", "P0CE20"),
190    dbrefs[0]);
191  1 assertNull(dbrefs[0].getMap());
192  1 assertEquals(DBRefSource.EMBL, dbrefs[1].getSource());
193  1 assertEquals("X07547", dbrefs[1].getAccessionId());
194  1 assertEquals(cds1Map.getInverse(), dbrefs[1].getMap().getMap());
195   
196    // dbrefs for second CDS EMBL product CAA30421.1
197  1 dbrefs = peptides.get(3).getDBRefs();
198  1 assertEquals(4, dbrefs.length);
199  1 assertEquals(DBRefSource.EMBL, dbrefs[0].getSource());
200  1 assertEquals("CAA30421.1", dbrefs[0].getAccessionId());
201  1 assertEquals(cds2Map.getInverse(), dbrefs[0].getMap().getMap());
202  1 assertEquals(DBRefSource.EMBLCDS, dbrefs[1].getSource());
203  1 assertEquals("CAA30421.1", dbrefs[1].getAccessionId());
204  1 assertEquals(proteinToCdsMap1, dbrefs[1].getMap().getMap());
205  1 assertEquals(DBRefSource.EMBLCDSProduct, dbrefs[2].getSource());
206  1 assertEquals("CAA30421.1", dbrefs[2].getAccessionId());
207  1 assertNull(dbrefs[2].getMap());
208  1 assertEquals(new DBRefEntry(DBRefSource.UNIPROT, "0", "B0BCM3"),
209    dbrefs[3]);
210  1 assertNull(dbrefs[3].getMap());
211   
212    // dbrefs for second CDS second Uniprot xref
213  1 dbrefs = peptides.get(4).getDBRefs();
214  1 assertEquals(2, dbrefs.length);
215  1 assertEquals(new DBRefEntry(DBRefSource.UNIPROT, "0", "B0BCM3"),
216    dbrefs[0]);
217  1 assertNull(dbrefs[0].getMap());
218  1 assertEquals(DBRefSource.EMBL, dbrefs[1].getSource());
219  1 assertEquals("X07547", dbrefs[1].getAccessionId());
220  1 assertEquals(cds2Map.getInverse(), dbrefs[1].getMap().getMap());
221   
222    // dbrefs for third CDS inferred EMBL product CAA12345.6
223  1 dbrefs = peptides.get(5).getDBRefs();
224  1 assertEquals(3, dbrefs.length);
225  1 assertEquals(DBRefSource.EMBL, dbrefs[0].getSource());
226  1 assertEquals("CAA12345.6", dbrefs[0].getAccessionId());
227  1 assertEquals(cds3Map.getInverse(), dbrefs[0].getMap().getMap());
228  1 assertEquals(DBRefSource.EMBLCDS, dbrefs[1].getSource());
229  1 assertEquals("CAA12345.6", dbrefs[1].getAccessionId());
230  1 assertEquals(proteinToCdsMap2, dbrefs[1].getMap().getMap());
231  1 assertEquals(DBRefSource.EMBLCDSProduct, dbrefs[2].getSource());
232  1 assertEquals("CAA12345.6", dbrefs[2].getAccessionId());
233  1 assertNull(dbrefs[2].getMap());
234    }
235   
 
236  1 toggle @Test(groups = "Functional")
237    public void testAdjustForProteinLength()
238    {
239  1 int[] exons = new int[] { 11, 15, 21, 25, 31, 38 }; // 18 bp
240   
241    // exact length match:
242  1 assertSame(exons, EmblEntry.adjustForProteinLength(6, exons));
243   
244    // match if we assume exons include stop codon not in protein:
245  1 assertSame(exons, EmblEntry.adjustForProteinLength(5, exons));
246   
247    // truncate last exon by 6bp
248  1 int[] truncated = EmblEntry.adjustForProteinLength(4, exons);
249  1 assertEquals("[11, 15, 21, 25, 31, 32]", Arrays.toString(truncated));
250   
251    // remove last exon and truncate preceding by 1bp
252  1 truncated = EmblEntry.adjustForProteinLength(3, exons);
253  1 assertEquals("[11, 15, 21, 24]", Arrays.toString(truncated));
254   
255    // exact removal of exon case:
256  1 exons = new int[] { 11, 15, 21, 27, 33, 38 }; // 18 bp
257  1 truncated = EmblEntry.adjustForProteinLength(4, exons);
258  1 assertEquals("[11, 15, 21, 27]", Arrays.toString(truncated));
259   
260    // what if exons are too short for protein?
261  1 truncated = EmblEntry.adjustForProteinLength(7, exons);
262  1 assertSame(exons, truncated);
263    }
264    }