JAL-3065 - amended commit 4906697ab6e5a79fbce3baae89f7f64178c9a739 to exclude ...
[jalview.git] / test / jalview / bin / CommandLineOperations.java
index 3582dc5..9b94be9 100644 (file)
  */
 package jalview.bin;
 
+import jalview.gui.JvOptionPane;
+
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.util.ArrayList;
 
 import org.testng.Assert;
 import org.testng.FileAssert;
-import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.DataProvider;
@@ -36,15 +38,24 @@ import org.testng.annotations.Test;
 public class CommandLineOperations
 {
 
-  @BeforeClass
-  public static void setUpBeforeClass() throws Exception
+  @BeforeClass(alwaysRun = true)
+  public void setUpJvOptionPane()
   {
+    JvOptionPane.setInteractiveMode(false);
+    JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
   }
 
-  @AfterClass
-  public static void tearDownAfterClass() throws Exception
-  {
-  }
+  private static final int TEST_TIMEOUT = 4500; // Note longer timeout needed on
+                                                // full test run than on
+                                                // individual tests
+
+  private static final int SETUP_TIMEOUT = 9000;
+
+  private static final int MINFILESIZE_SMALL = 2096;
+
+  private static final int MINFILESIZE_BIG = 4096;
+
+  private ArrayList<String> successfulCMDs = new ArrayList<>();
 
   /***
    * from
@@ -58,6 +69,10 @@ public class CommandLineOperations
   {
     private final Process process;
 
+    private BufferedReader outputReader;
+
+    private BufferedReader errorReader;
+
     private Integer exit;
 
     private Worker(Process process)
@@ -65,6 +80,7 @@ public class CommandLineOperations
       this.process = process;
     }
 
+    @Override
     public void run()
     {
       try
@@ -75,64 +91,135 @@ public class CommandLineOperations
         return;
       }
     }
+
+    public BufferedReader getOutputReader()
+    {
+      return outputReader;
+    }
+
+    public void setOutputReader(BufferedReader outputReader)
+    {
+      this.outputReader = outputReader;
+    }
+
+    public BufferedReader getErrorReader()
+    {
+      return errorReader;
+    }
+
+    public void setErrorReader(BufferedReader errorReader)
+    {
+      this.errorReader = errorReader;
+    }
   }
 
   private Worker jalviewDesktopRunner(boolean withAwt, String cmd,
-          int timeout) throws InterruptedException, IOException
+          int timeout)
   {
+    String cp_sep = ":";
+    if (System.getProperty("os.name").indexOf("Windows") >= 0)
+    {
+      cp_sep = ";";
+    }
     String _cmd = "java "
             + (withAwt ? "-Djava.awt.headless=true" : "")
-            + " -Djava.ext.dirs=./lib -classpath ./classes jalview.bin.Jalview ";
-    System.out.println("############ Testing Jalview CMD: " + _cmd + cmd);
-    Process ls2_proc = Runtime.getRuntime().exec(_cmd + cmd);
-    BufferedReader outputReader = new BufferedReader(new InputStreamReader(
-            ls2_proc.getInputStream()));
-
-    BufferedReader errorReader = new BufferedReader(new InputStreamReader(
-            ls2_proc.getErrorStream()));
-    Worker worker = new Worker(ls2_proc);
-    worker.start();
-    worker.join(timeout);
-    // System.out.println("Output:  ");
-    // String ln = null;
-    // while ((ln = outputReader.readLine()) != null)
-    // {
-    // System.out.println(ln);
-    // }
-    //
-    // System.out.println("Error:  ");
-    // while ((ln = errorReader.readLine()) != null)
-    // {
-    // System.out.println(ln);
-    // }
+            + " -classpath \"./lib/*" + cp_sep
+            + "./classes\" jalview.bin.Jalview ";
+    System.out.println("CMD [" + cmd + "]");
+    Process ls2_proc = null;
+    Worker worker = null;
+    try
+    {
+      ls2_proc = Runtime.getRuntime().exec(_cmd + cmd);
+    } catch (IOException e1)
+    {
+      e1.printStackTrace();
+    }
+    if (ls2_proc != null)
+    {
+      BufferedReader outputReader = new BufferedReader(
+              new InputStreamReader(ls2_proc.getInputStream()));
+      BufferedReader errorReader = new BufferedReader(
+              new InputStreamReader(ls2_proc.getErrorStream()));
+      worker = new Worker(ls2_proc);
+      worker.start();
+      try
+      {
+        worker.join(timeout);
+      } catch (InterruptedException e)
+      {
+        // e.printStackTrace();
+      }
+      worker.setOutputReader(outputReader);
+      worker.setErrorReader(errorReader);
+    }
     return worker;
   }
 
-  @BeforeTest
+  @BeforeTest(alwaysRun = true)
   public void initialize()
   {
     new CommandLineOperations();
   }
 
-  @Test(groups =
-  { "Functional" }, dataProvider = "headlessModeOutputParams")
-  public void testHeadlessModeOutputs(String harg, String type,
-          String fileName, boolean withAWT, int expectedMinFileSize)
+  @BeforeTest(alwaysRun = true)
+  public void setUpForHeadlessCommandLineInputOperations()
+          throws IOException
   {
-    String cmd = harg + type + " " + fileName;
-    // System.out.println(">>>>>>>>>>>>>>>> Command : " + cmd);
-    File file = new File(fileName);
-    Worker worker = null;
-    try
+    String cmds = "nodisplay -open examples/uniref50.fa -sortbytree -props FILE -colour zappo "
+            + "-jabaws http://www.compbio.dundee.ac.uk/jabaws -nosortbytree -dasserver nickname=www.test.com "
+            + "-features examples/testdata/plantfdx.features -annotations examples/testdata/plantfdx.annotations -tree examples/testdata/uniref50_test_tree";
+    Worker worker = jalviewDesktopRunner(true, cmds, SETUP_TIMEOUT);
+    String ln = null;
+    while ((ln = worker.getOutputReader().readLine()) != null)
     {
-      worker = jalviewDesktopRunner(withAWT, cmd, 9000);
-    } catch (InterruptedException e)
+      System.out.println(ln);
+      successfulCMDs.add(ln);
+    }
+  }
+
+  @BeforeTest(alwaysRun = true)
+  public void setUpForCommandLineInputOperations() throws IOException
+  {
+    String cmds = "-open examples/uniref50.fa -noquestionnaire -nousagestats";
+    Worker worker = jalviewDesktopRunner(false, cmds, SETUP_TIMEOUT);
+    String ln = null;
+    int count = 0;
+    while ((ln = worker.getErrorReader().readLine()) != null)
     {
-      e.printStackTrace();
-    } catch (IOException e)
+      System.out.println(ln);
+      successfulCMDs.add(ln);
+      if (++count > 5)
+      {
+        break;
+      }
+    }
+    if (worker != null && worker.exit == null)
     {
-      e.printStackTrace();
+      worker.interrupt();
+      Thread.currentThread().interrupt();
+      worker.process.destroy();
     }
+  }
+
+  @Test(groups = { "Functional" }, dataProvider = "allInputOpearationsData")
+  public void testAllInputOperations(String expectedString,
+          String failureMsg)
+  {
+    Assert.assertTrue(successfulCMDs.contains(expectedString), failureMsg);
+  }
+
+  @Test(
+    groups = { "Functional" },
+    dataProvider = "headlessModeOutputOperationsData")
+  public void testHeadlessModeOutputOperations(String harg, String type,
+          String fileName, boolean withAWT, int expectedMinFileSize,
+          int timeout)
+  {
+    String cmd = harg + type + " " + fileName;
+    // System.out.println(">>>>>>>>>>>>>>>> Command : " + cmd);
+    File file = new File(fileName);
+    Worker worker = jalviewDesktopRunner(withAWT, cmd, timeout);
 
     FileAssert.assertFile(file, "Didn't create an output" + type
             + " file.[" + harg + "]");
@@ -142,77 +229,87 @@ public class CommandLineOperations
       worker.interrupt();
       Thread.currentThread().interrupt();
       worker.process.destroy();
-      Assert.fail("Jalview did not exit after  "
+      Assert.fail("Jalview did not exit after "
               + type
-              + " generation (try running test again to verify - timeout at 9000ms). ["
+              + " generation (try running test again to verify - timeout at "
+              + SETUP_TIMEOUT + "ms). ["
               + harg + "]");
     }
     new File(fileName).delete();
   }
 
-  @DataProvider(name = "headlessModeOutputParams")
-  public static Object[][] headlessModeOutput()
+  @DataProvider(name = "allInputOpearationsData")
+  public Object[][] getHeadlessModeInputParams()
   {
-    return new Object[][]
-    {
+    return new Object[][] {
+        // headless mode input operations
+        { "CMD [-color zappo] executed successfully!",
+            "Failed command : -color zappo" },
+        { "CMD [-props FILE] executed successfully!",
+            "Failed command : -props File" },
+        { "CMD [-sortbytree] executed successfully!",
+            "Failed command : -sortbytree" },
+        {
+            "CMD [-jabaws http://www.compbio.dundee.ac.uk/jabaws] executed successfully!",
+            "Failed command : -jabaws http://www.compbio.dundee.ac.uk/jabaws" },
+        { "CMD [-open examples/uniref50.fa] executed successfully!",
+            "Failed command : -open examples/uniref50.fa" },
+        { "CMD [-nosortbytree] executed successfully!",
+            "Failed command : -nosortbytree" },
+        { "CMD [-dasserver nickname=www.test.com] executed successfully!",
+            "Failed command : -dasserver nickname=www.test.com" },
+        {
+            "CMD [-features examples/testdata/plantfdx.features]  executed successfully!",
+            "Failed command : -features examples/testdata/plantfdx.features" },
+        {
+            "CMD [-annotations examples/testdata/plantfdx.annotations] executed successfully!",
+            "Failed command : -annotations examples/testdata/plantfdx.annotations" },
+        {
+            "CMD [-tree examples/testdata/uniref50_test_tree] executed successfully!",
+            "Failed command : -tree examples/testdata/uniref50_test_tree" },
+        // non headless mode input operations
+        { "CMD [-nousagestats] executed successfully!",
+            "Failed command : -nousagestats" },
+        { "CMD [-noquestionnaire] executed successfully!",
+            "Failed command : -noquestionnaire nickname=www.test.com" } };
+
+  }
+
+  @DataProvider(name = "headlessModeOutputOperationsData")
+  public static Object[][] getHeadlessModeOutputParams()
+  {
+    return new Object[][] {
         { "nodisplay -open examples/uniref50.fa", " -eps",
-            "test_uniref50_out.eps", true, 4096 },
+            "test_uniref50_out.eps", true, MINFILESIZE_BIG, TEST_TIMEOUT },
         { "nodisplay -open examples/uniref50.fa", " -eps",
-            "test_uniref50_out.eps", false, 4096 },
-        { "headless -open examples/uniref50.fa", " -eps",
-            "test_uniref50_out.eps", true, 4096 },
-        { "headless -open examples/uniref50.fa", " -eps",
-            "test_uniref50_out.eps", false, 4096 },
+            "test_uniref50_out.eps", false, MINFILESIZE_BIG, TEST_TIMEOUT },
         { "nogui -open examples/uniref50.fa", " -eps",
-            "test_uniref50_out.eps", true, 4096 },
+            "test_uniref50_out.eps", true, MINFILESIZE_BIG, TEST_TIMEOUT },
         { "nogui -open examples/uniref50.fa", " -eps",
-            "test_uniref50_out.eps", false, 4096 },
-        { "headless -open examples/uniref50.fa", " -svg",
-            "test_uniref50_out.svg", true, 4096 },
+            "test_uniref50_out.eps", false, MINFILESIZE_BIG, TEST_TIMEOUT },
+        { "headless -open examples/uniref50.fa", " -eps",
+            "test_uniref50_out.eps", true, MINFILESIZE_BIG, TEST_TIMEOUT },
         { "headless -open examples/uniref50.fa", " -svg",
-            "test_uniref50_out.svg", false, 4096 },
+            "test_uniref50_out.svg", false, MINFILESIZE_BIG, TEST_TIMEOUT },
         { "headless -open examples/uniref50.fa", " -png",
-            "test_uniref50_out.png", true, 4096 },
-        { "headless -open examples/uniref50.fa", " -png",
-            "test_uniref50_out.png", false, 4096 },
-        { "headless -open examples/uniref50.fa", " -html",
-            "test_uniref50_out.html", true, 4096 },
+            "test_uniref50_out.png", true, MINFILESIZE_BIG, TEST_TIMEOUT },
         { "headless -open examples/uniref50.fa", " -html",
-            "test_uniref50_out.html", false, 4096 },
+            "test_uniref50_out.html", true, MINFILESIZE_BIG, TEST_TIMEOUT },
         { "headless -open examples/uniref50.fa", " -fasta",
-            "test_uniref50_out.mfa", true, 2096 },
-        { "headless -open examples/uniref50.fa", " -fasta",
-            "test_uniref50_out.mfa", false, 2096 },
-        { "headless -open examples/uniref50.fa", " -clustal",
-            "test_uniref50_out.aln", true, 2096 },
+            "test_uniref50_out.mfa", true, MINFILESIZE_SMALL, TEST_TIMEOUT },
         { "headless -open examples/uniref50.fa", " -clustal",
-            "test_uniref50_out.aln", false, 2096 },
-        { "headless -open examples/uniref50.fa", " -msf",
-            "test_uniref50_out.msf", true, 2096 },
+            "test_uniref50_out.aln", true, MINFILESIZE_SMALL, TEST_TIMEOUT },
         { "headless -open examples/uniref50.fa", " -msf",
-            "test_uniref50_out.msf", false, 2096 },
+            "test_uniref50_out.msf", true, MINFILESIZE_SMALL, TEST_TIMEOUT },
         { "headless -open examples/uniref50.fa", " -pileup",
-            "test_uniref50_out.aln", true, 2096 },
-        { "headless -open examples/uniref50.fa", " -pileup",
-            "test_uniref50_out.aln", false, 2096 },
-        { "headless -open examples/uniref50.fa", " -pir",
-            "test_uniref50_out.pir", true, 2096 },
+            "test_uniref50_out.aln", true, MINFILESIZE_SMALL, TEST_TIMEOUT },
         { "headless -open examples/uniref50.fa", " -pir",
-            "test_uniref50_out.pir", false, 2096 },
+            "test_uniref50_out.pir", true, MINFILESIZE_SMALL, TEST_TIMEOUT },
         { "headless -open examples/uniref50.fa", " -pfam",
-            "test_uniref50_out.pfam", true, 2096 },
-        { "headless -open examples/uniref50.fa", " -pfam",
-            "test_uniref50_out.pfam", false, 2096 },
-        { "headless -open examples/uniref50.fa", " -blc",
-            "test_uniref50_out.blc", true, 2096 },
+            "test_uniref50_out.pfam", true, MINFILESIZE_SMALL, TEST_TIMEOUT },
         { "headless -open examples/uniref50.fa", " -blc",
-            "test_uniref50_out.blc", false, 2096 },
-        { "headless -open examples/uniref50.fa", " -jalview",
-            "test_uniref50_out.jvp", true, 2096 },
+            "test_uniref50_out.blc", true, MINFILESIZE_SMALL, TEST_TIMEOUT },
         { "headless -open examples/uniref50.fa", " -jalview",
-            "test_uniref50_out.jvp", false, 2096 },
-    };
+            "test_uniref50_out.jvp", true, MINFILESIZE_SMALL, TEST_TIMEOUT }, };
   }
-
-
 }