JAL-1759 merge from develop
[jalview.git] / test / jalview / bin / CommandLineOperations.java
index 40263c3..3582dc5 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  */
 package jalview.bin;
 
-import static org.junit.Assert.*;
-
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStreamReader;
 
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
+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;
+import org.testng.annotations.Test;
 
 public class CommandLineOperations
 {
@@ -43,30 +45,46 @@ public class CommandLineOperations
   public static void tearDownAfterClass() throws Exception
   {
   }
-/***
- * from http://stackoverflow.com/questions/808276/how-to-add-a-timeout-value-when-using-javas-runtime-exec
- * @author jimp
- *
- */
-private static class Worker extends Thread {
-  private final Process process;
-  private Integer exit;
-  private Worker(Process process) {
-    this.process = process;
-  }
-  public void run() {
-    try { 
-      exit = process.waitFor();
-    } catch (InterruptedException ignore) {
-      return;
+
+  /***
+   * from
+   * http://stackoverflow.com/questions/808276/how-to-add-a-timeout-value-when
+   * -using-javas-runtime-exec
+   * 
+   * @author jimp
+   * 
+   */
+  private static class Worker extends Thread
+  {
+    private final Process process;
+
+    private Integer exit;
+
+    private Worker(Process process)
+    {
+      this.process = process;
+    }
+
+    public void run()
+    {
+      try
+      {
+        exit = process.waitFor();
+      } catch (InterruptedException ignore)
+      {
+        return;
+      }
     }
   }
-}
-private Worker jalviewDesktopRunner(boolean withAwt, String cmd, int timeout) throws InterruptedException, IOException
+
+  private Worker jalviewDesktopRunner(boolean withAwt, String cmd,
+          int timeout) throws InterruptedException, IOException
   {
-    String _cmd = "java "+(withAwt ? "-Djava.awt.headless=true":"")+" -Djava.ext.dirs=./lib -classpath ./classes jalview.bin.Jalview ";
-    System.out.println("###############Jalview CMD: " + _cmd+cmd);
-    Process ls2_proc = Runtime.getRuntime().exec(_cmd+cmd);
+    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()));
 
@@ -75,66 +93,126 @@ private Worker jalviewDesktopRunner(boolean withAwt, String cmd, int timeout) th
     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);
-    }
+    // 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);
+    // }
     return worker;
   }
-  @Test
-  public void testHeadlessModeEPS() throws Exception
+
+  @BeforeTest
+  public void initialize()
+  {
+    new CommandLineOperations();
+  }
+
+  @Test(groups =
+  { "Functional" }, dataProvider = "headlessModeOutputParams")
+  public void testHeadlessModeOutputs(String harg, String type,
+          String fileName, boolean withAWT, int expectedMinFileSize)
   {
-    String[] headlessArgs=new String[] { "nodisplay","headless","nogui"};
-    for (String _harg:headlessArgs)
+    String cmd = harg + type + " " + fileName;
+    // System.out.println(">>>>>>>>>>>>>>>> Command : " + cmd);
+    File file = new File(fileName);
+    Worker worker = null;
+    try
+    {
+      worker = jalviewDesktopRunner(withAWT, cmd, 9000);
+    } catch (InterruptedException e)
+    {
+      e.printStackTrace();
+    } catch (IOException e)
+    {
+      e.printStackTrace();
+    }
+
+    FileAssert.assertFile(file, "Didn't create an output" + type
+            + " file.[" + harg + "]");
+    FileAssert.assertMinLength(new File(fileName), expectedMinFileSize);
+    if (worker != null && worker.exit == null)
     {
-      boolean _switch=false,withAwt=false;
-      do {
-        if (_switch)
-        {
-          withAwt=true;
-        }
-        _switch=true;
-    String jalview_input = "examples/uniref50.fa";
-    String jalview_output = "test_uniref50_out.eps";
-    String cmd = ""+_harg+" -open "+ jalview_input + " -eps " + jalview_output;
-    String harg = _harg+(withAwt ? "-Djava.awt.headless=true":" NO AWT.HEADLESS");
-    System.out.println("Testing with Headless argument: '"+harg+"'\n");
-    Worker worker = jalviewDesktopRunner(withAwt, cmd, 9000);
-    assertTrue("Didn't create an output EPS file.["+harg+"]", new File("test_uniref50_out.eps").exists());
-    assertTrue("Didn't create an EPS file with any content["+harg+"]", new File("test_uniref50_out.eps").length()>4096);
-    if (worker.exit == null){
       worker.interrupt();
       Thread.currentThread().interrupt();
       worker.process.destroy();
-      fail("Jalview did not exit after EPS generation (try running test again to verify - timeout at 9000ms). ["+harg+"]");
+      Assert.fail("Jalview did not exit after  "
+              + type
+              + " generation (try running test again to verify - timeout at 9000ms). ["
+              + harg + "]");
     }
-    } while (!withAwt);
-    } 
+    new File(fileName).delete();
+  }
+
+  @DataProvider(name = "headlessModeOutputParams")
+  public static Object[][] headlessModeOutput()
+  {
+    return new Object[][]
+    {
+        { "nodisplay -open examples/uniref50.fa", " -eps",
+            "test_uniref50_out.eps", true, 4096 },
+        { "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 },
+        { "nogui -open examples/uniref50.fa", " -eps",
+            "test_uniref50_out.eps", true, 4096 },
+        { "nogui -open examples/uniref50.fa", " -eps",
+            "test_uniref50_out.eps", false, 4096 },
+        { "headless -open examples/uniref50.fa", " -svg",
+            "test_uniref50_out.svg", true, 4096 },
+        { "headless -open examples/uniref50.fa", " -svg",
+            "test_uniref50_out.svg", false, 4096 },
+        { "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 },
+        { "headless -open examples/uniref50.fa", " -html",
+            "test_uniref50_out.html", false, 4096 },
+        { "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 },
+        { "headless -open examples/uniref50.fa", " -clustal",
+            "test_uniref50_out.aln", false, 2096 },
+        { "headless -open examples/uniref50.fa", " -msf",
+            "test_uniref50_out.msf", true, 2096 },
+        { "headless -open examples/uniref50.fa", " -msf",
+            "test_uniref50_out.msf", false, 2096 },
+        { "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 },
+        { "headless -open examples/uniref50.fa", " -pir",
+            "test_uniref50_out.pir", false, 2096 },
+        { "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 },
+        { "headless -open examples/uniref50.fa", " -blc",
+            "test_uniref50_out.blc", false, 2096 },
+        { "headless -open examples/uniref50.fa", " -jalview",
+            "test_uniref50_out.jvp", true, 2096 },
+        { "headless -open examples/uniref50.fa", " -jalview",
+            "test_uniref50_out.jvp", false, 2096 },
+    };
   }
-//  @Test
-//  public void testJalview2XMLDataset() throws Exception
-//  {
-//    String jalview_input = "examples/uniref50.fa";
-//    String jalview_output = "test_uniref50_out.eps";
-//    String cmd = ""+" -open "+ jalview_input + " -eps " + jalview_output;
-//    //String harg = _harg+(withAwt ? "-Djava.awt.headless=true":" NO AWT.HEADLESS");
-//    System.out.println("Testing with Headless argument: '"+harg+"'\n");
-//    Worker worker = jalviewDesktopRunner(withAwt, cmd, 9000);
-//    assertTrue("Didn't create an output EPS file.["+harg+"]", new File("test_uniref50_out.eps").exists());
-//    assertTrue("Didn't create an EPS file with any content["+harg+"]", new File("test_uniref50_out.eps").length()>4096);
-//    if (worker.exit == null){
-//      worker.interrupt();
-//      Thread.currentThread().interrupt();
-//      worker.process.destroy();
-//      fail("Jalview did not exit after EPS generation (try running test again to verify - timeout at 9000ms). ["+harg+"]");
-//    }
-//  }
+
+
 }