JAL-3116 parse EMBL XML with JAXB (todo: update unit tests)
[jalview.git] / test / jalview / datamodel / xdb / embl / EmblFileTest.java
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
26 import jalview.datamodel.DBRefEntry;
27 import jalview.gui.JvOptionPane;
28
29 import java.util.Vector;
30
31 import org.testng.annotations.BeforeClass;
32 import org.testng.annotations.Test;
33
34 public class EmblFileTest
35 {
36
37   @BeforeClass(alwaysRun = true)
38   public void setUpJvOptionPane()
39   {
40     JvOptionPane.setInteractiveMode(false);
41     JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
42   }
43
44   @Test(groups = { "Functional" })
45   public void testGetEmblFile()
46   {
47     Vector<EmblEntry> entries = EmblTestHelper.getEmblFile().getEntries();
48     assertEquals(1, entries.size());
49     EmblEntry entry = entries.get(0);
50
51     assertEquals("X07547", entry.getAccession());
52     assertEquals("C. trachomatis plasmid", entry.getDescription());
53     assertEquals("STD", entry.getDataClass());
54     assertEquals("PRO", entry.getTaxonomicDivision());
55     assertEquals("1999-02-10", entry.getLastUpdatedDate());
56     assertEquals("58", entry.getLastUpdatedRelease());
57     assertEquals("1988-11-10", entry.getFirstPublicDate());
58     assertEquals("18", entry.getFirstPublicRelease());
59     assertEquals("genomic DNA", entry.getMoleculeType());
60     assertEquals("1", entry.getSequenceVersion());
61     assertEquals("8", entry.getEntryVersion());
62     assertEquals("linear", entry.getTopology());
63     assertEquals("7499", entry.getSequenceLength());
64
65     /*
66      * FIXME these assertions fail - values are null - why?? Adding or removing
67      * attributes in the test XML modifies behaviour. eg. inserting an attribute
68      * _before_ lastUpdated results in a null value in this field.
69      */
70     assertEquals("1988-11-10", entry.getFirstPublicDate());
71     assertEquals("18", entry.getFirstPublicRelease());
72
73     assertEquals(2, entry.getKeywords().size());
74     assertEquals("plasmid", entry.getKeywords().get(0));
75     assertEquals("unidentified reading frame", entry.getKeywords().get(1));
76
77     /*
78      * dbrefs
79      */
80     assertEquals(2, entry.getDbRefs().size());
81     DBRefEntry dbref = entry.getDbRefs().get(0);
82     assertEquals("EuropePMC", dbref.getSource());
83     assertEquals("PMC107176", dbref.getAccessionId());
84     assertEquals("9573186", dbref.getVersion());
85     dbref = entry.getDbRefs().get(1);
86     assertEquals("MD5", dbref.getSource());
87     assertEquals("ac73317", dbref.getAccessionId());
88     // blank version has been converted to "0"
89     assertEquals("0", dbref.getVersion());
90
91     /*
92      * three sequence features for CDS
93      */
94     assertEquals(3, entry.getFeatures().size());
95     /*
96      * first CDS
97      */
98     EmblFeature ef = entry.getFeatures().get(0);
99     assertEquals("CDS", ef.getName());
100     assertEquals("complement(46..57)", ef.getLocation());
101     assertEquals(2, ef.getDbRefs().size());
102     dbref = ef.getDbRefs().get(0);
103     assertEquals("UniProtKB/Swiss-Prot", dbref.getSource());
104     assertEquals("B0BCM4", dbref.getAccessionId());
105     assertEquals("2.1", dbref.getVersion());
106     dbref = ef.getDbRefs().get(1);
107     assertEquals("UniProtKB/Swiss-Prot", dbref.getSource());
108     assertEquals("P0CE20", dbref.getAccessionId());
109     // blank version gets converted to "0":
110     assertEquals("0", dbref.getVersion());
111     // CDS feature qualifiers
112     assertEquals(3, ef.getQualifiers().size());
113     Qualifier q = ef.getQualifiers().get(0);
114     assertEquals("note", q.getName());
115     assertEquals(2, q.getValues().length);
116     assertEquals("ORF 8 (AA 1-330)", q.getValues()[0]);
117     assertEquals("pickle", q.getValues()[1]);
118     assertNull(q.getEvidence());
119     q = ef.getQualifiers().get(1);
120     assertEquals("protein_id", q.getName());
121     assertEquals(1, q.getValues().length);
122     assertEquals("CAA30420.1", q.getValues()[0]);
123     q = ef.getQualifiers().get(2);
124     assertEquals("translation", q.getName());
125     assertEquals(1, q.getValues().length);
126     assertEquals("MLCF", q.getValues()[0]);
127     assertEquals(1, q.getEvidence().length);
128     assertEquals("Keith", q.getEvidence()[0]);
129
130     /*
131      * second CDS
132      */
133     ef = entry.getFeatures().get(1);
134     assertEquals("CDS", ef.getName());
135     assertEquals("4..15", ef.getLocation());
136     assertEquals(1, ef.getDbRefs().size());
137     dbref = ef.getDbRefs().get(0);
138     assertEquals("UniProtKB/Swiss-Prot", dbref.getSource());
139     assertEquals("B0BCM3", dbref.getAccessionId());
140     assertEquals("0", dbref.getVersion());
141     assertEquals(2, ef.getQualifiers().size());
142     q = ef.getQualifiers().get(0);
143     assertEquals("protein_id", q.getName());
144     assertEquals(1, q.getValues().length);
145     assertEquals("CAA30421.1", q.getValues()[0]);
146     q = ef.getQualifiers().get(1);
147     assertEquals("translation", q.getName());
148     assertEquals(1, q.getValues().length);
149     assertEquals("MSSS", q.getValues()[0]);
150
151     /*
152      * third CDS
153      */
154     ef = entry.getFeatures().get(2);
155     assertEquals("CDS", ef.getName());
156     assertEquals("join(4..6,10..15)", ef.getLocation());
157     assertNull(ef.getDbRefs());
158     assertEquals(2, ef.getQualifiers().size());
159     q = ef.getQualifiers().get(0);
160     assertEquals("protein_id", q.getName());
161     assertEquals(1, q.getValues().length);
162     assertEquals("CAA12345.6", q.getValues()[0]);
163     q = ef.getQualifiers().get(1);
164     assertEquals("translation", q.getName());
165     assertEquals(1, q.getValues().length);
166     assertEquals("MSS", q.getValues()[0]);
167
168     /*
169      * Sequence - verify newline not converted to space (JAL-2029)
170      */
171     EmblSequence seq = entry.getSequence();
172     assertEquals(
173             "GGTATGTCCTCTAGTACAAACACCCCCAATATTGTGATATAATTAAAAACATAGCAT",
174             seq.getSequence());
175
176     /*
177      * getSequence() converts empty DBRefEntry.version to "0"
178      */
179     assertEquals("0", entry.getDbRefs().get(1).getVersion());
180     assertEquals("0", entry.getFeatures().get(0).getDbRefs().get(1)
181             .getVersion());
182   }
183 }