JAL-1270 separated Jmol and Chimera tests to avoid concurrency problems
[jalview.git] / test / jalview / ext / rbvi / chimera / JalviewChimeraView.java
1 package jalview.ext.rbvi.chimera;
2
3 import static org.testng.AssertJUnit.assertEquals;
4 import static org.testng.AssertJUnit.assertTrue;
5
6 import jalview.api.structures.JalviewStructureDisplayI;
7 import jalview.bin.Cache;
8 import jalview.datamodel.SequenceI;
9 import jalview.gui.AlignFrame;
10 import jalview.gui.Preferences;
11 import jalview.gui.StructureViewer;
12 import jalview.gui.StructureViewer.ViewerType;
13 import jalview.io.FormatAdapter;
14
15 import org.testng.annotations.AfterClass;
16 import org.testng.annotations.BeforeClass;
17 import org.testng.annotations.Test;
18
19 @Test(singleThreaded = true)
20 public class JalviewChimeraView
21 {
22
23   /**
24    * @throws java.lang.Exception
25    */
26   @BeforeClass(alwaysRun = true)
27   public static void setUpBeforeClass() throws Exception
28   {
29     jalview.bin.Jalview.main(new String[]
30  {
31         "-noquestionnaire -nonews -props",
32         "test/jalview/ext/rbvi/chimera/testProps.jvprops" });
33   }
34
35   /**
36    * @throws java.lang.Exception
37    */
38   @AfterClass
39   public static void tearDownAfterClass() throws Exception
40   {
41     jalview.gui.Desktop.instance.closeAll_actionPerformed(null);
42   }
43
44   @Test(groups ={ "Functional" })
45   public void testSingleSeqViewChimera()
46   {
47     Cache.setProperty(Preferences.STRUCTURE_DISPLAY,
48             ViewerType.CHIMERA.name());
49     String inFile = "examples/1gaq.txt";
50     AlignFrame af = new jalview.io.FileLoader().LoadFileWaitTillLoaded(
51             inFile, FormatAdapter.FILE);
52     assertTrue("Didn't read input file " + inFile, af != null);
53     for (SequenceI sq : af.getViewport().getAlignment().getSequences())
54     {
55       System.out.println("** sq=" + sq.getName());
56       SequenceI dsq = sq.getDatasetSequence();
57       while (dsq.getDatasetSequence() != null)
58       {
59         dsq = dsq.getDatasetSequence();
60       }
61       if (dsq.getAllPDBEntries() != null && dsq.getAllPDBEntries().size() > 0)
62       {
63         for (int q = 0; q < dsq.getAllPDBEntries().size(); q++)
64         {
65           final StructureViewer structureViewer = new StructureViewer(af
66                   .getViewport().getStructureSelectionManager());
67           structureViewer.setViewerType(ViewerType.CHIMERA);
68           JalviewStructureDisplayI chimeraViewer = structureViewer
69                   .viewStructures(dsq.getAllPDBEntries().elementAt(q),
70                           new SequenceI[]
71                           { sq }, af.getCurrentView().getAlignPanel());
72           /*
73            * Wait for viewer load thread to complete
74            */
75           while (!chimeraViewer.getBinding().isFinishedInit())
76           {
77             try
78             {
79               Thread.sleep(500);
80             } catch (InterruptedException e)
81             {
82             }
83           }
84           assertEquals(1, chimeraViewer.getBinding().getPdbCount());
85           chimeraViewer.closeViewer(true);
86           // todo: break here means only once through this loop?
87           break;
88         }
89         break;
90       }
91     }
92   }
93 }