JAL-1551 spotlessApply
[jalview.git] / test / jalview / io / CrossRef2xmlTests.java
index 6e4593d..c46477a 100644 (file)
  */
 package jalview.io;
 
-import jalview.analysis.CrossRef;
-import jalview.api.AlignmentViewPanel;
-import jalview.datamodel.AlignedCodonFrame;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.AlignmentTest;
-import jalview.datamodel.SequenceI;
-import jalview.gui.AlignFrame;
-import jalview.gui.CrossRefAction;
-import jalview.gui.Desktop;
-import jalview.gui.JvOptionPane;
-import jalview.gui.SequenceFetcher;
-import jalview.project.Jalview2XML;
-import jalview.util.DBRefUtils;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
 
 import java.io.File;
 import java.io.IOException;
@@ -47,6 +37,19 @@ import org.testng.annotations.BeforeClass;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
+import jalview.analysis.CrossRef;
+import jalview.api.AlignmentViewPanel;
+import jalview.datamodel.AlignedCodonFrame;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.AlignmentTest;
+import jalview.datamodel.SequenceI;
+import jalview.gui.AlignFrame;
+import jalview.gui.CrossRefAction;
+import jalview.gui.Desktop;
+import jalview.gui.JvOptionPane;
+import jalview.gui.SequenceFetcher;
+import jalview.project.Jalview2XML;
+import jalview.util.DBRefUtils;
 import junit.extensions.PA;
 
 @Test(singleThreaded = true)
@@ -61,6 +64,51 @@ public class CrossRef2xmlTests extends Jalview2xmlBase
     JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
   }
 
+  @Test(groups = { "Functional" }, enabled = true)
+  public void openCrossrefsForEnsemblTwice()
+  {
+    AlignFrame af = new FileLoader(false).LoadFileWaitTillLoaded(
+            "examples/testdata/CantShowEnsemblCrossrefsTwice.jvp",
+            DataSourceType.FILE);
+    assertNotNull(af, "Couldn't load test's project.");
+    AlignmentI origAlig = af.getViewport().getAlignment();
+    List<String> source = new CrossRef(origAlig.getSequencesArray(),
+            origAlig.getDataset()).findXrefSourcesForSequences(true);
+    assertEquals(source.size(), 1, "Expected just one crossref to show.");
+    List<AlignmentViewPanel> views;
+    {
+      // try to show once - in a code block so handler is forgotten about
+      CrossRefAction xref1 = CrossRefAction.getHandlerFor(
+              origAlig.getSequencesArray(), true, source.get(0), af);
+      try
+      {
+        xref1.run();
+        views = (List<AlignmentViewPanel>) PA.getValue(xref1, "xrefViews");
+        assertTrue(views.size() > 0,
+                "Couldn't get cross ref on first attempt (SERIOUS FAIL).");
+      } catch (Exception ex)
+      {
+        Assert.fail("Unexpected Exception for first xref action", ex);
+      }
+    }
+
+    views = null;
+    // now just try it again
+    CrossRefAction xref2 = CrossRefAction.getHandlerFor(
+            origAlig.getSequencesArray(), true, source.get(0), af);
+    try
+    {
+      xref2.run();
+      views = (List<AlignmentViewPanel>) PA.getValue(xref2, "xrefViews");
+      assertTrue(views.size() > 0,
+              "Couldn't get cross ref on second attempt (SERIOUS FAIL).");
+    } catch (Exception ex)
+    {
+      Assert.fail("Unexpected Exception for second xref action", ex);
+    }
+    // TODO : check that both views contain the same data
+  }
+
   @DataProvider(name = "initialAccessions")
   static Object[][] getAccessions()
   {
@@ -162,7 +210,8 @@ public class CrossRef2xmlTests extends Jalview2xmlBase
       }
       else
       {
-        Desktop.instance.closeAll_actionPerformed(null);
+        if (Desktop.instance != null)
+          Desktop.instance.closeAll_actionPerformed(null);
         // recover stored project
         af = new FileLoader(false).LoadFileWaitTillLoaded(
                 savedProjects.get(first).toString(), DataSourceType.FILE);
@@ -229,7 +278,8 @@ public class CrossRef2xmlTests extends Jalview2xmlBase
           }
           else
           {
-            Desktop.instance.closeAll_actionPerformed(null);
+            if (Desktop.instance != null)
+              Desktop.instance.closeAll_actionPerformed(null);
             pass3 = 0;
             // recover stored project
             File storedProject = savedProjects.get(nextxref);
@@ -340,7 +390,8 @@ public class CrossRef2xmlTests extends Jalview2xmlBase
                 }
                 else
                 {
-                  Desktop.instance.closeAll_actionPerformed(null);
+                  if (Desktop.instance != null)
+                    Desktop.instance.closeAll_actionPerformed(null);
                   // recover stored project
                   File storedProject = savedProjects.get(nextnextxref);
                   if (storedProject == null)