/* * 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 . * 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; 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; } } } 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); 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); } 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); 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 + "]"); } } 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+"]"); // } // } }