Class |
Line # |
Actions |
|||
---|---|---|---|---|---|
JmolViewerTest | 50 | 58 | 19 |
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.ext.jmol; | |
22 | ||
23 | import static org.junit.Assert.assertNotNull; | |
24 | import static org.testng.Assert.assertEquals; | |
25 | import static org.testng.AssertJUnit.assertTrue; | |
26 | ||
27 | import java.lang.reflect.InvocationTargetException; | |
28 | ||
29 | import org.testng.annotations.AfterClass; | |
30 | import org.testng.annotations.BeforeClass; | |
31 | import org.testng.annotations.Test; | |
32 | ||
33 | import jalview.api.structures.JalviewStructureDisplayI; | |
34 | import jalview.bin.Cache; | |
35 | import jalview.bin.Jalview; | |
36 | import jalview.datamodel.PDBEntry; | |
37 | import jalview.datamodel.SearchResultsI; | |
38 | import jalview.datamodel.SequenceI; | |
39 | import jalview.gui.AlignFrame; | |
40 | import jalview.gui.Desktop; | |
41 | import jalview.gui.JvOptionPane; | |
42 | import jalview.gui.Preferences; | |
43 | import jalview.gui.StructureViewer; | |
44 | import jalview.gui.StructureViewer.ViewerType; | |
45 | import jalview.io.DataSourceType; | |
46 | import jalview.io.FileFormat; | |
47 | import jalview.io.FileLoader; | |
48 | ||
49 | @Test(singleThreaded = true) | |
50 | public class JmolViewerTest | |
51 | { | |
52 | ||
53 | 1 | @BeforeClass(alwaysRun = true) |
54 | public void setUpJvOptionPane() | |
55 | { | |
56 | 1 | JvOptionPane.setInteractiveMode(false); |
57 | 1 | JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); |
58 | } | |
59 | ||
60 | /** | |
61 | * @throws java.lang.Exception | |
62 | */ | |
63 | 1 | @BeforeClass(alwaysRun = true) |
64 | public static void setUpBeforeClass() throws Exception | |
65 | { | |
66 | 1 | Jalview.main( |
67 | new String[] | |
68 | { "--noquestionnaire", "--nonews", "--props", | |
69 | "test/jalview/ext/rbvi/chimera/testProps.jvprops" }); | |
70 | } | |
71 | ||
72 | /** | |
73 | * @throws java.lang.Exception | |
74 | */ | |
75 | 1 | @AfterClass(alwaysRun = true) |
76 | public static void tearDownAfterClass() throws Exception | |
77 | { | |
78 | 1 | if (Desktop.instance != null) |
79 | 1 | Desktop.instance.closeAll_actionPerformed(null); |
80 | } | |
81 | ||
82 | 1 | @Test(groups = { "Functional" }) |
83 | public void testSingleSeqViewJMol() | |
84 | { | |
85 | 1 | Cache.setProperty(Preferences.STRUCTURE_DISPLAY, |
86 | ViewerType.JMOL.name()); | |
87 | 1 | String inFile = "examples/1gaq.txt"; |
88 | 1 | AlignFrame af = new jalview.io.FileLoader() |
89 | .LoadFileWaitTillLoaded(inFile, DataSourceType.FILE); | |
90 | 1 | assertTrue("Didn't read input file " + inFile, af != null); |
91 | 1 | for (SequenceI sq : af.getViewport().getAlignment().getSequences()) |
92 | { | |
93 | 1 | SequenceI dsq = sq.getDatasetSequence(); |
94 | 1 | while (dsq.getDatasetSequence() != null) |
95 | { | |
96 | 0 | dsq = dsq.getDatasetSequence(); |
97 | } | |
98 | 1 | if (dsq.getAllPDBEntries() != null |
99 | && dsq.getAllPDBEntries().size() > 0) | |
100 | { | |
101 | 1 | for (int q = 0; q < dsq.getAllPDBEntries().size(); q++) |
102 | { | |
103 | 1 | final StructureViewer structureViewer = new StructureViewer( |
104 | af.getViewport().getStructureSelectionManager()); | |
105 | 1 | structureViewer.setViewerType(ViewerType.JMOL); |
106 | 1 | JalviewStructureDisplayI jmolViewer = structureViewer |
107 | .viewStructures(dsq.getAllPDBEntries().elementAt(q), | |
108 | new SequenceI[] | |
109 | { sq }, af.getCurrentView().getAlignPanel()); | |
110 | /* | |
111 | * Wait for viewer load thread to complete | |
112 | */ | |
113 | 1 | try |
114 | { | |
115 | 2 | while (!jmolViewer.getBinding().isFinishedInit()) |
116 | { | |
117 | 1 | Thread.sleep(500); |
118 | } | |
119 | } catch (InterruptedException e) | |
120 | { | |
121 | } | |
122 | ||
123 | 1 | jmolViewer.closeViewer(true); |
124 | // todo: break here means only once through this loop? | |
125 | 1 | break; |
126 | } | |
127 | 1 | break; |
128 | } | |
129 | } | |
130 | } | |
131 | ||
132 | 1 | @Test(groups = { "Functional" }) |
133 | public void testAddStrToSingleSeqViewJMol() | |
134 | throws InvocationTargetException, InterruptedException | |
135 | { | |
136 | 1 | Cache.setProperty(Preferences.STRUCTURE_DISPLAY, |
137 | ViewerType.JMOL.name()); | |
138 | 1 | String inFile = "examples/1gaq.txt"; |
139 | 1 | AlignFrame af = new jalview.io.FileLoader(true) |
140 | .LoadFileWaitTillLoaded(inFile, DataSourceType.FILE); | |
141 | 1 | assertTrue("Didn't read input file " + inFile, af != null); |
142 | // show a structure for 4th Sequence | |
143 | 1 | SequenceI sq1 = af.getViewport().getAlignment().getSequences().get(0); |
144 | 1 | final StructureViewer structureViewer = new StructureViewer( |
145 | af.getViewport().getStructureSelectionManager()); | |
146 | 1 | structureViewer.setViewerType(ViewerType.JMOL); |
147 | 1 | JalviewStructureDisplayI jmolViewer = structureViewer.viewStructures( |
148 | sq1.getDatasetSequence().getAllPDBEntries().elementAt(0), | |
149 | new SequenceI[] | |
150 | { sq1 }, af.getCurrentView().getAlignPanel()); | |
151 | /* | |
152 | * Wait for viewer load thread to complete | |
153 | */ | |
154 | 1 | try |
155 | { | |
156 | 2 | while (!jmolViewer.getBinding().isFinishedInit()) |
157 | { | |
158 | 1 | Thread.sleep(500); |
159 | } | |
160 | } catch (InterruptedException e) | |
161 | { | |
162 | } | |
163 | ||
164 | 1 | assertTrue(jmolViewer.isVisible()); |
165 | ||
166 | // add another pdb file and add it to view | |
167 | 1 | final String _inFile = "examples/3W5V.pdb"; |
168 | 1 | inFile = _inFile; |
169 | 1 | FileLoader fl = new FileLoader(); |
170 | 1 | fl.LoadFile(af.getCurrentView(), _inFile, DataSourceType.FILE, |
171 | FileFormat.PDB); | |
172 | 1 | try |
173 | { | |
174 | 1 | int time = 0; |
175 | 1 | do |
176 | { | |
177 | 9 | Thread.sleep(50); // hope we can avoid race condition |
178 | ||
179 | 9 | } while (++time < 30 |
180 | && af.getViewport().getAlignment().getHeight() == 3); | |
181 | } catch (Exception q) | |
182 | { | |
183 | } | |
184 | 1 | ; |
185 | 1 | assertTrue("Didn't paste additional structure" + inFile, |
186 | af.getViewport().getAlignment().getHeight() > 3); | |
187 | 1 | SequenceI sq2 = af.getViewport().getAlignment().getSequenceAt(3); |
188 | 1 | PDBEntry pdbe = sq2.getDatasetSequence().getAllPDBEntries().get(0); |
189 | 1 | assertTrue(pdbe.getFile().contains(inFile)); |
190 | 1 | structureViewer.viewStructures(pdbe, new SequenceI[] { sq2 }, |
191 | af.alignPanel); | |
192 | /* | |
193 | * Wait for viewer load thread to complete | |
194 | */ | |
195 | 1 | try |
196 | { | |
197 | 4 | while (structureViewer.isBusy()) |
198 | { | |
199 | 3 | Thread.sleep(500); |
200 | } | |
201 | } catch (InterruptedException e) | |
202 | { | |
203 | } | |
204 | 1 | assertEquals(jmolViewer.getBinding().getPdbCount(), 2); |
205 | 1 | String mouseOverTest = "[GLY]293:A.CA/2.1 #2164"; |
206 | 1 | ((JalviewJmolBinding) jmolViewer.getBinding()).mouseOverStructure(2164, |
207 | mouseOverTest); | |
208 | 1 | SearchResultsI highlight = af.alignPanel.getSeqPanel() |
209 | .getLastSearchResults(); | |
210 | 1 | assertNotNull("Didn't find highlight from second structure mouseover", |
211 | highlight.getResults(sq2, sq2.getStart(), sq2.getEnd())); | |
212 | } | |
213 | ||
214 | } |