Merge branch 'develop' into features/JAL-518_justify_seqs_in_region
[jalview.git] / test / jalview / bin / CommandsTest2.java
diff --git a/test/jalview/bin/CommandsTest2.java b/test/jalview/bin/CommandsTest2.java
new file mode 100644 (file)
index 0000000..aa3c834
--- /dev/null
@@ -0,0 +1,233 @@
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+package jalview.bin;
+
+import java.util.Date;
+import java.util.List;
+
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import jalview.api.AlignViewportI;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SequenceI;
+import jalview.gui.AlignFrame;
+import jalview.gui.AlignmentPanel;
+import jalview.gui.Desktop;
+import jalview.gui.JvOptionPane;
+import jalview.gui.StructureViewerBase;
+
+@Test
+public class CommandsTest2
+{
+  @BeforeClass(alwaysRun = true)
+  public static void setUpBeforeClass() throws Exception
+  {
+    Cache.loadProperties("test/jalview/bin/commandsTest.jvprops");
+    Date oneHourFromNow = new Date(
+            System.currentTimeMillis() + 3600 * 1000);
+    Cache.setDateProperty("JALVIEW_NEWS_RSS_LASTMODIFIED", oneHourFromNow);
+    if (Desktop.instance != null)
+      Desktop.instance.closeAll_actionPerformed(null);
+
+  }
+
+  @AfterClass(alwaysRun = true)
+  public static void resetProps()
+  {
+    Cache.loadProperties("test/jalview/testProps.jvprops");
+  }
+
+  @BeforeClass(alwaysRun = true)
+  public void setUpJvOptionPane()
+  {
+    JvOptionPane.setInteractiveMode(false);
+    JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
+  }
+
+  @AfterMethod(alwaysRun = true)
+  public void tearDown()
+  {
+    Desktop.closeDesktop();
+  }
+
+  @Test(
+    groups =
+    { "Functional", "testTask1" },
+    dataProvider = "structureOpeningArgsParams",
+    singleThreaded = true)
+  public void structureOpeningArgsTest(String cmdLine, int seqNum,
+          int annNum, int viewerNum)
+  {
+    String[] args = cmdLine.split("\\s+");
+
+    CommandsTest.callJalviewMain(args);
+    while (Desktop.instance != null
+            && Desktop.instance.operationsAreInProgress())
+    {
+      try
+      {
+        // sleep for slow build server to open annotations and viewer windows
+        Thread.sleep(viewerNum * 50);
+      } catch (InterruptedException e)
+      {
+        e.printStackTrace();
+      }
+    }
+    ;
+
+    AlignFrame[] afs = Desktop.getDesktopAlignFrames();
+    Assert.assertNotNull(afs);
+    Assert.assertTrue(afs.length > 0);
+
+    AlignFrame af = afs[0];
+    Assert.assertNotNull(af);
+
+    AlignmentPanel ap = af.alignPanel;
+    Assert.assertNotNull(ap);
+
+    AlignmentI al = ap.getAlignment();
+    Assert.assertNotNull(al);
+
+    List<SequenceI> seqs = al.getSequences();
+    Assert.assertNotNull(seqs);
+
+    Assert.assertEquals(seqs.size(), seqNum, "Wrong number of sequences");
+
+    AlignViewportI av = ap.getAlignViewport();
+    Assert.assertNotNull(av);
+
+    AlignmentAnnotation[] aas = al.getAlignmentAnnotation();
+    int visibleAnn = 0;
+    int dcount = 0;
+    for (AlignmentAnnotation aa : aas)
+    {
+      if (aa.visible)
+        visibleAnn++;
+    }
+
+    Assert.assertEquals(visibleAnn, annNum,
+            "Wrong number of visible annotations");
+
+    if (viewerNum > -1)
+    {
+      List<StructureViewerBase> openViewers = Desktop.instance
+              .getStructureViewers(ap, null);
+      Assert.assertNotNull(openViewers);
+      int count = 0;
+      for (StructureViewerBase svb : openViewers)
+      {
+        if (svb.isVisible())
+          count++;
+      }
+      Assert.assertEquals(count, viewerNum,
+              "Wrong number of structure viewers opened");
+    }
+  }
+
+  @DataProvider(name = "structureOpeningArgsParams")
+  public Object[][] structureOpeningArgsParams()
+  {
+    /*
+      String cmdLine,
+      int seqNum,
+      int annNum,
+      int structureViewerNum,
+     */
+    return new Object[][] {
+        //
+        /*
+         */
+        { "--gui --nonews --nosplash --debug "
+                + "--append=examples/uniref50.fa "
+                + "--colour=gecos-flower "
+                + "--structure=[seqid=FER1_SPIOL]examples/AlphaFold/AF-P00221-F1-model_v4.cif "
+                + "--paematrix=examples/AlphaFold/AF-P00221-F1-predicted_aligned_error_v4.json "
+                + "--props=test/jalview/bin/commandsTest2.jvprops1 ",
+            15, 7, 1 },
+        { "--gui --nonews --nosplash --debug "
+                + "--append=examples/uniref50.fa "
+                + "--colour=gecos-flower "
+                + "--structure=[seqid=FER1_SPIOL]examples/AlphaFold/AF-P00221-F1-model_v4.cif "
+                + "--paematrix=examples/AlphaFold/AF-P00221-F1-predicted_aligned_error_v4.json "
+                + "--props=test/jalview/bin/commandsTest2.jvprops2 ",
+            15, 4, 1 },
+        { "--gui --nonews --nosplash --debug "
+                + "--append=examples/uniref50.fa "
+                + "--colour=gecos-flower "
+                + "--structure=[seqid=FER1_SPIOL]examples/AlphaFold/AF-P00221-F1-model_v4.cif "
+                + "--paematrix=examples/AlphaFold/AF-P00221-F1-predicted_aligned_error_v4.json "
+                + "--noshowssannotations "
+                + "--props=test/jalview/bin/commandsTest2.jvprops1 ",
+            15, 4, 1 },
+        { "--gui --nonews --nosplash --debug "
+                + "--append=examples/uniref50.fa "
+                + "--colour=gecos-flower "
+                + "--structure=[seqid=FER1_SPIOL]examples/AlphaFold/AF-P00221-F1-model_v4.cif "
+                + "--paematrix=examples/AlphaFold/AF-P00221-F1-predicted_aligned_error_v4.json "
+                + "--noshowannotations "
+                + "--props=test/jalview/bin/commandsTest2.jvprops1 ",
+            15, 3, 1 },
+        { "--gui --nonews --nosplash --debug "
+                + "--append=examples/uniref50.fa "
+                + "--colour=gecos-flower "
+                + "--structure=[seqid=FER1_SPIOL]examples/AlphaFold/AF-P00221-F1-model_v4.cif "
+                + "--paematrix=examples/AlphaFold/AF-P00221-F1-predicted_aligned_error_v4.json "
+                + "--noshowannotations " + "--noshowssannotations "
+                + "--props=test/jalview/bin/commandsTest2.jvprops1 ",
+            15, 0, 1 },
+        { "--gui --nonews --nosplash --debug "
+                + "--append=examples/uniref50.fa "
+                + "--colour=gecos-flower "
+                + "--structure=[seqid=FER1_SPIOL]examples/AlphaFold/AF-P00221-F1-model_v4.cif "
+                + "--paematrix=examples/AlphaFold/AF-P00221-F1-predicted_aligned_error_v4.json "
+                + "--noshowannotations " + "--noshowssannotations "
+                + "--props=test/jalview/bin/commandsTest2.jvprops1 ",
+            15, 0, 1 },
+        { "--gui --nonews --nosplash --debug --nowebservicediscovery --props=test/jalview/bin/commandsTest.jvprops --argfile=test/jalview/bin/commandsTest2.argfile1 ",
+            16, 19, 3 },
+        { "--gui --nonews --nosplash --debug --nowebservicediscovery --props=test/jalview/bin/commandsTest.jvprops --argfile=test/jalview/bin/commandsTest2.argfile2 ",
+            16, 0, 2 },
+        { "--gui --nonews --nosplash --debug --nowebservicediscovery --props=test/jalview/bin/commandsTest.jvprops --open=./examples/test_fab41.result/sample.a2m "
+                + "--allstructures "
+                + "--structure=./examples/test_fab41.result/test_fab41_unrelaxed_rank_1_model_3.pdb "
+                + "--structureviewer=none "
+                + "--structure=./examples/test_fab41.result/test_fab41_unrelaxed_rank_2_model_4.pdb "
+                + "--structure=./examples/test_fab41.result/test_fab41_unrelaxed_rank_3_model_2.pdb",
+            16, 10, 0 },
+        { "--gui --nonews --nosplash --debug --nowebservicediscovery --props=test/jalview/bin/commandsTest.jvprops --open=./examples/test_fab41.result/sample.a2m "
+                + "--allstructures "
+                + "--structure=./examples/test_fab41.result/test_fab41_unrelaxed_rank_1_model_3.pdb "
+                + "--noallstructures " + "--structureviewer=none "
+                + "--structure=./examples/test_fab41.result/test_fab41_unrelaxed_rank_2_model_4.pdb "
+                + "--structure=./examples/test_fab41.result/test_fab41_unrelaxed_rank_3_model_2.pdb",
+            16, 10, 2 },
+        /*
+         */
+        //
+    };
+  }
+}