JAL-1315 test for exit and successful generation of EPS using commandline
authorJim Procter <jprocter@compbio.dundee.ac.uk>
Thu, 13 Jun 2013 15:53:10 +0000 (16:53 +0100)
committerJim Procter <jprocter@compbio.dundee.ac.uk>
Thu, 13 Jun 2013 15:53:10 +0000 (16:53 +0100)
test/jalview/bin/CommandLineOperations.java [new file with mode: 0644]

diff --git a/test/jalview/bin/CommandLineOperations.java b/test/jalview/bin/CommandLineOperations.java
new file mode 100644 (file)
index 0000000..19bc165
--- /dev/null
@@ -0,0 +1,79 @@
+package jalview.bin;
+
+import static org.junit.Assert.*;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.InputStreamReader;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class CommandLineOperations
+{
+
+  @BeforeClass
+  public static void setUpBeforeClass() throws Exception
+  {
+  }
+
+  @AfterClass
+  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;
+    }
+  }
+}
+  @Test
+  public void testHeadlessModeEPS() throws Exception
+  {
+    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;
+
+    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()));
+    Worker worker = new Worker(ls2_proc);
+    worker.start();
+    worker.join(9000);
+    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);
+    }
+    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).");
+}
+  }
+
+}