JAL-1270 JUnit to TestNG refactoring
[jalview.git] / test / jalview / bin / CommandLineOperations.java
index 19bc165..d9d3bb3 100644 (file)
@@ -1,14 +1,35 @@
+/*
+ * 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 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.AssertJUnit;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
 
 public class CommandLineOperations
 {
@@ -22,58 +43,129 @@ 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;
+      }
     }
   }
-}
-  @Test
-  public void testHeadlessModeEPS() throws Exception
+
+  private Worker jalviewDesktopRunner(boolean withAwt, String cmd,
+          int timeout) throws InterruptedException, IOException
   {
-    String jalview_input = "examples/uniref50.fa";
-    String jalview_output = "test_uniref50_out.eps";
-    String cmd = "java -Djava.awt.headless=true -Djava.ext.dirs=./lib -classpath ./classes jalview.bin.Jalview -nodisplay -open "+ jalview_input + " -eps " + jalview_output;
+    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);
+    BufferedReader outputReader = new BufferedReader(new InputStreamReader(
+            ls2_proc.getInputStream()));
 
-    System.out.println("###############Jalview CMD: " + cmd);
-    Process ls2_proc = Runtime.getRuntime().exec(cmd);
-    BufferedReader outputReader = new BufferedReader(new InputStreamReader(ls2_proc.getInputStream()));
-        
-    BufferedReader errorReader = new BufferedReader(new InputStreamReader(ls2_proc.getErrorStream()));
+    BufferedReader errorReader = new BufferedReader(new InputStreamReader(
+            ls2_proc.getErrorStream()));
     Worker worker = new Worker(ls2_proc);
     worker.start();
-    worker.join(9000);
+    worker.join(timeout);
     System.out.println("Output:  ");
-    String ln=null;
-    while ((ln=outputReader.readLine())!=null) {
+    String ln = null;
+    while ((ln = outputReader.readLine()) != null)
+    {
       System.out.println(ln);
     }
-    
-    System.out.println("Error:  " );
-    while ((ln=errorReader.readLine())!=null) {
+
+    System.out.println("Error:  ");
+    while ((ln = errorReader.readLine()) != null)
+    {
       System.out.println(ln);
     }
-    assertTrue("Didn't create an output EPS file.", new File("test_uniref50_out.eps").exists());
-    assertTrue("Didn't create an EPS file with any content", new File("test_uniref50_out.eps").length()>4096);
-    if (worker.exit == null){
-      worker.interrupt();
-      Thread.currentThread().interrupt();
-      ls2_proc.destroy();
-      fail("Jalview did not exit after EPS generation (try running test again to verify - timeout at 9000ms).");
-}
+    return worker;
   }
 
+  @Test
+  public void testHeadlessModeEPS() throws Exception
+  {
+    String[] headlessArgs = new String[]
+    { "nodisplay", "headless", "nogui" };
+    for (String _harg : headlessArgs)
+    {
+      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);
+        AssertJUnit.assertTrue("Didn't create an output EPS file.[" + harg
+                + "]", new File("test_uniref50_out.eps").exists());
+        AssertJUnit.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();
+          Assert.fail("Jalview did not exit after EPS generation (try running test again to verify - timeout at 9000ms). ["
+                  + harg + "]");
+        }
+      } while (!withAwt);
+    }
+  }
+  // @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+"]");
+  // }
+  // }
 }