/* * 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 java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; 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 { @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("############ Testing 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; } @BeforeTest public void initialize() { new CommandLineOperations(); } @Test(dataProvider = "headlessModeOutputParams") public void testHeadlessModeOutputs(String harg, String type, String fileName, boolean withAWT, int expectedMinFileSize) { 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) { worker.interrupt(); Thread.currentThread().interrupt(); worker.process.destroy(); Assert.fail("Jalview did not exit after " + type + " generation (try running test again to verify - timeout at 9000ms). [" + harg + "]"); } 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 }, }; } }