/* * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * Jalview is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Jalview. If not, see . * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.ext.jmol; import static org.testng.AssertJUnit.assertTrue; import jalview.api.structures.JalviewStructureDisplayI; import jalview.bin.Cache; import jalview.datamodel.SequenceI; import jalview.gui.AlignFrame; import jalview.gui.Preferences; import jalview.gui.StructureViewer; import jalview.gui.StructureViewer.ViewerType; import jalview.io.FormatAdapter; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @Test(singleThreaded = true) public class JmolViewerTest { /** * @throws java.lang.Exception */ @BeforeClass(alwaysRun = true) public static void setUpBeforeClass() throws Exception { jalview.bin.Jalview.main(new String[] { "-noquestionnaire -nonews -props", "test/jalview/ext/rbvi/chimera/testProps.jvprops" }); } /** * @throws java.lang.Exception */ @AfterClass(alwaysRun = true) public static void tearDownAfterClass() throws Exception { jalview.gui.Desktop.instance.closeAll_actionPerformed(null); } @Test(groups = { "Functional" }) public void testSingleSeqViewJMol() { Cache.setProperty(Preferences.STRUCTURE_DISPLAY, ViewerType.JMOL.name()); String inFile = "examples/1gaq.txt"; AlignFrame af = new jalview.io.FileLoader().LoadFileWaitTillLoaded( inFile, FormatAdapter.FILE); assertTrue("Didn't read input file " + inFile, af != null); for (SequenceI sq : af.getViewport().getAlignment().getSequences()) { SequenceI dsq = sq.getDatasetSequence(); while (dsq.getDatasetSequence() != null) { dsq = dsq.getDatasetSequence(); } if (dsq.getAllPDBEntries() != null && dsq.getAllPDBEntries().size() > 0) { for (int q = 0; q < dsq.getAllPDBEntries().size(); q++) { final StructureViewer structureViewer = new StructureViewer(af .getViewport().getStructureSelectionManager()); structureViewer.setViewerType(ViewerType.JMOL); JalviewStructureDisplayI jmolViewer = structureViewer .viewStructures(dsq.getAllPDBEntries().elementAt(q), new SequenceI[] { sq }, af.getCurrentView() .getAlignPanel()); /* * Wait for viewer load thread to complete */ try { while (!jmolViewer.getBinding().isFinishedInit()) { Thread.sleep(500); } } catch (InterruptedException e) { } jmolViewer.closeViewer(true); // todo: break here means only once through this loop? break; } break; } } } }