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