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