JAL-3829 use sequence dependent constructor for structure chooser query engine testing
[jalview.git] / test / jalview / gui / StructureChooserTest.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.gui;
22
23 import static org.testng.AssertJUnit.assertEquals;
24 import static org.testng.AssertJUnit.assertNotNull;
25 import static org.testng.AssertJUnit.assertTrue;
26
27 import jalview.datamodel.DBRefEntry;
28 import jalview.datamodel.DBRefSource;
29 import jalview.datamodel.PDBEntry;
30 import jalview.datamodel.Sequence;
31 import jalview.datamodel.SequenceI;
32 import jalview.fts.api.FTSData;
33 import jalview.gui.structurechooser.PDBStructureChooserQuerySource;
34 import jalview.gui.structurechooser.StructureChooserQuerySource;
35 import jalview.gui.structurechooser.ThreeDBStructureChooserQuerySource;
36 import jalview.jbgui.FilterOption;
37 import jalview.ws.params.InvalidArgumentException;
38
39 import java.util.Collection;
40 import java.util.Vector;
41
42 import org.testng.annotations.AfterMethod;
43 import org.testng.annotations.BeforeClass;
44 import org.testng.annotations.BeforeMethod;
45 import org.testng.annotations.Test;
46
47 import junit.extensions.PA;
48
49 public class StructureChooserTest
50 {
51
52   @BeforeClass(alwaysRun = true)
53   public void setUpJvOptionPane()
54   {
55     JvOptionPane.setInteractiveMode(false);
56     JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
57   }
58
59   Sequence seq;
60
61   @BeforeMethod(alwaysRun = true)
62   public void setUp() throws Exception
63   {
64     seq = new Sequence("PDB|4kqy|4KQY|A", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 1,
65             26);
66     seq.createDatasetSequence();
67     for (int x = 1; x < 5; x++)
68     {
69       DBRefEntry dbRef = new DBRefEntry();
70       dbRef.setAccessionId("XYZ_" + x);
71       seq.addDBRef(dbRef);
72     }
73
74     PDBEntry dbRef = new PDBEntry();
75     dbRef.setId("1tim");
76
77     Vector<PDBEntry> pdbIds = new Vector<>();
78     pdbIds.add(dbRef);
79
80     seq.setPDBId(pdbIds);
81   }
82
83   @AfterMethod(alwaysRun = true)
84   public void tearDown() throws Exception
85   {
86     seq = null;
87   }
88
89   @SuppressWarnings("deprecation")
90   @Test(groups = { "Functional" })
91   public void buildQueryTest()
92   {
93     System.out.println("seq >>>> " + seq);
94     
95     StructureChooserQuerySource scquery = StructureChooserQuerySource.getQuerySourceFor(new SequenceI[] { seq});
96     assertTrue(scquery instanceof PDBStructureChooserQuerySource);
97     String query = scquery.buildQuery(seq);
98     assertEquals("pdb_id:1tim", query);
99     seq.getAllPDBEntries().clear();
100     query = scquery.buildQuery(seq);
101     assertEquals(
102             "text:XYZ_1 OR text:XYZ_2 OR text:XYZ_3 OR text:XYZ_4 OR text:4kqy",
103             query);
104     seq.setDBRefs(null);
105     query = scquery.buildQuery(seq);
106     System.out.println(query);
107     assertEquals("text:4kqy", query);
108
109     DBRefEntry uniprotDBRef = new DBRefEntry();
110     uniprotDBRef.setAccessionId("P12345");
111     uniprotDBRef.setSource(DBRefSource.UNIPROT);
112     seq.addDBRef(uniprotDBRef);
113
114     DBRefEntry pdbDBRef = new DBRefEntry();
115     pdbDBRef.setAccessionId("1XYZ");
116     pdbDBRef.setSource(DBRefSource.PDB);
117     seq.addDBRef(pdbDBRef);
118
119     for (int x = 1; x < 5; x++)
120     {
121       DBRefEntry dbRef = new DBRefEntry();
122       dbRef.setAccessionId("XYZ_" + x);
123       seq.addDBRef(dbRef);
124     }
125     System.out.println("");
126     System.out.println(seq.getDBRefs());
127     System.out.println(query);
128     query = scquery.buildQuery(seq);
129     assertEquals(
130             "uniprot_accession:P12345 OR uniprot_id:P12345 OR pdb_id:1xyz",
131             query);
132   }
133
134   @Test(groups = { "Functional" })
135   public void populateFilterComboBoxTest() throws InterruptedException
136   {
137     SequenceI[] selectedSeqs = new SequenceI[] { seq };
138     StructureChooser sc = new StructureChooser(selectedSeqs, seq, null);
139     sc.populateFilterComboBox(false, false);
140     int optionsSize = sc.getCmbFilterOption().getItemCount();
141     assertEquals(2, optionsSize); // if structures are not discovered then don't
142                                   // populate filter options
143
144     sc.populateFilterComboBox(true, false);
145     optionsSize = sc.getCmbFilterOption().getItemCount();
146     assertTrue(optionsSize > 3); // if structures are found, filter options
147                                  // should be populated
148
149     sc.populateFilterComboBox(true, true);
150     assertTrue(sc.getCmbFilterOption().getSelectedItem() != null);
151     FilterOption filterOpt = (FilterOption) sc.getCmbFilterOption()
152             .getSelectedItem();
153     assertEquals("Cached Structures", filterOpt.getName());
154   }
155
156   @Test(groups = { "Network" })
157   public void fetchStructuresInfoTest()
158   {
159     SequenceI[] selectedSeqs = new SequenceI[] { seq };
160     StructureChooser sc = new StructureChooser(selectedSeqs, seq, null);
161     sc.fetchStructuresMetaData();
162     Collection<FTSData> ss = (Collection<FTSData>) PA.getValue(sc,
163             "discoveredStructuresSet");
164     assertNotNull(ss);
165     assertTrue(ss.size() > 0);
166
167   }
168
169   @Test(groups = { "Functional" })
170   public void sanitizeSeqNameTest()
171   {
172     String name = "ab_cdEF|fwxyz012349";
173     assertEquals(name, PDBStructureChooserQuerySource.sanitizeSeqName(name));
174
175     // remove a [nn] substring
176     name = "abcde12[345]fg";
177     assertEquals("abcde12fg", PDBStructureChooserQuerySource.sanitizeSeqName(name));
178
179     // remove characters other than a-zA-Z0-9 | or _
180     name = "ab[cd],.\t£$*!- \\\"@:e";
181     assertEquals("abcde", PDBStructureChooserQuerySource.sanitizeSeqName(name));
182
183     name = "abcde12[345a]fg";
184     assertEquals("abcde12345afg", PDBStructureChooserQuerySource.sanitizeSeqName(name));
185   }
186 }