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[] 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 = "java "+(withAwt ? "-Djava.awt.headless=true":"")+" -Djava.ext.dirs=./lib -classpath ./classes jalview.bin.Jalview -"+_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###############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.["+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(); ls2_proc.destroy(); fail("Jalview did not exit after EPS generation (try running test again to verify - timeout at 9000ms). ["+harg+"]"); } } while (!withAwt); } } }