From b4abe1ffdea4b7711cdc72c6c95af4356187302b Mon Sep 17 00:00:00 2001 From: tcofoegbu Date: Mon, 6 Jul 2015 16:58:20 +0100 Subject: [PATCH] JAL-1769 fixed headless execution mode and created test for all possible outputs --- src/jalview/bin/Jalview.java | 13 +- src/jalview/gui/AlignExportSettings.java | 3 +- src/jalview/gui/AlignFrame.java | 12 +- src/jalview/gui/ProgressBar.java | 4 +- src/jalview/util/ImageMaker.java | 13 ++ test/jalview/bin/CommandLineOperations.java | 184 +++++++++++++++++---------- 6 files changed, 150 insertions(+), 79 deletions(-) diff --git a/src/jalview/bin/Jalview.java b/src/jalview/bin/Jalview.java index f4b38d4..f6d0099 100755 --- a/src/jalview/bin/Jalview.java +++ b/src/jalview/bin/Jalview.java @@ -225,10 +225,13 @@ public class Jalview desktop.checkForNews(); } - BioJsHTMLOutput.updateBioJS(); + if (!isHeadlessMode()) + { + BioJsHTMLOutput.updateBioJS(); + } String file = null, protocol = null, format = null, data = null; - jalview.io.FileLoader fileLoader = new jalview.io.FileLoader(); + jalview.io.FileLoader fileLoader = new jalview.io.FileLoader(!headless); Vector getFeatures = null; // vector of das source nicknames to fetch // features from // loading is done. @@ -518,8 +521,10 @@ public class Jalview } else if (format.equalsIgnoreCase("eps")) { - System.out.println("Creating EPS file: " + file); - af.createEPS(new java.io.File(file)); + File outputFile = new java.io.File(file); + System.out.println("Creating EPS file: " + + outputFile.getAbsolutePath()); + af.createEPS(outputFile); continue; } diff --git a/src/jalview/gui/AlignExportSettings.java b/src/jalview/gui/AlignExportSettings.java index 40128af..49bb64a 100644 --- a/src/jalview/gui/AlignExportSettings.java +++ b/src/jalview/gui/AlignExportSettings.java @@ -1,6 +1,7 @@ package jalview.gui; import jalview.api.AlignExportSettingI; +import jalview.bin.Jalview; import jalview.jbgui.GAlignExportSettings; import java.awt.event.ActionEvent; @@ -23,7 +24,7 @@ public class AlignExportSettings extends GAlignExportSettings implements String alignFileFormat) { super(hasHiddenSeq, hasHiddenCols, alignFileFormat); - if (isShowDialog()) + if (!Jalview.isHeadlessMode() && isShowDialog()) { JOptionPane pane = new JOptionPane(null, JOptionPane.DEFAULT_OPTION, JOptionPane.DEFAULT_OPTION, null, new Object[] diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index cc900e0..8144738 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -37,6 +37,7 @@ import jalview.api.SplitContainerI; import jalview.api.ViewStyleI; import jalview.api.analysis.ScoreModelI; import jalview.bin.Cache; +import jalview.bin.Jalview; import jalview.commands.CommandI; import jalview.commands.EditCommand; import jalview.commands.EditCommand.Action; @@ -335,7 +336,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, */ void init() { - progressBar = new ProgressBar(this.statusPanel, this.statusBar); + if (!Jalview.isHeadlessMode()) + { + progressBar = new ProgressBar(this.statusPanel, this.statusBar); + } avc = new jalview.controller.AlignViewController(this, viewport, alignPanel); @@ -1135,8 +1139,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { warningMessage("Cannot save file " + fileName + " using format " + format, "Alignment output format not supported"); - saveAs_actionPerformed(null); - // JBPNote need to have a raise_gui flag here + if (!Jalview.isHeadlessMode()) + { + saveAs_actionPerformed(null); + } return false; } diff --git a/src/jalview/gui/ProgressBar.java b/src/jalview/gui/ProgressBar.java index 5307f26..c7db535 100644 --- a/src/jalview/gui/ProgressBar.java +++ b/src/jalview/gui/ProgressBar.java @@ -1,5 +1,7 @@ package jalview.gui; +import jalview.util.MessageManager; + import java.awt.BorderLayout; import java.awt.Component; import java.awt.GridLayout; @@ -14,8 +16,6 @@ import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.SwingUtilities; -import jalview.util.MessageManager; - /** * A class to manage multiple progress bars embedded in a JPanel. */ diff --git a/src/jalview/util/ImageMaker.java b/src/jalview/util/ImageMaker.java index 100ecf5..8abe965 100755 --- a/src/jalview/util/ImageMaker.java +++ b/src/jalview/util/ImageMaker.java @@ -20,6 +20,7 @@ */ package jalview.util; +import jalview.bin.Jalview; import jalview.gui.EPSOptions; import jalview.gui.SVGOptions; import jalview.io.JalviewFileChooser; @@ -259,6 +260,10 @@ public class ImageMaker static JalviewFileChooser getPNGChooser() { + if (Jalview.isHeadlessMode()) + { + return null; + } return new jalview.io.JalviewFileChooser( jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[] { "png" }, new String[] @@ -267,6 +272,10 @@ public class ImageMaker static JalviewFileChooser getEPSChooser() { + if (Jalview.isHeadlessMode()) + { + return null; + } return new jalview.io.JalviewFileChooser( jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[] { "eps" }, new String[] @@ -275,6 +284,10 @@ public class ImageMaker static JalviewFileChooser getSVGChooser() { + if (Jalview.isHeadlessMode()) + { + return null; + } return new jalview.io.JalviewFileChooser( jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[] { "svg" }, new String[] diff --git a/test/jalview/bin/CommandLineOperations.java b/test/jalview/bin/CommandLineOperations.java index d9d3bb3..05ada31 100644 --- a/test/jalview/bin/CommandLineOperations.java +++ b/test/jalview/bin/CommandLineOperations.java @@ -26,9 +26,11 @@ import java.io.IOException; import java.io.InputStreamReader; import org.testng.Assert; -import org.testng.AssertJUnit; +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 @@ -81,7 +83,7 @@ public class CommandLineOperations String _cmd = "java " + (withAwt ? "-Djava.awt.headless=true" : "") + " -Djava.ext.dirs=./lib -classpath ./classes jalview.bin.Jalview "; - System.out.println("###############Jalview CMD: " + _cmd + cmd); + 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())); @@ -91,81 +93,125 @@ public class CommandLineOperations 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("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 { - System.out.println(ln); + worker = jalviewDesktopRunner(withAWT, cmd, 9000); + } catch (InterruptedException e) + { + e.printStackTrace(); + } catch (IOException e) + { + e.printStackTrace(); } - System.out.println("Error: "); - while ((ln = errorReader.readLine()) != null) + FileAssert.assertFile(file, "Didn't create an output" + type + + " file.[" + harg + "]"); + FileAssert.assertMinLength(new File(fileName), expectedMinFileSize); + if (worker != null && worker.exit == null) { - System.out.println(ln); + 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 + "]"); } - return worker; + new File(fileName).delete(); } - @Test - public void testHeadlessModeEPS() throws Exception + @DataProvider(name = "headlessModeOutputParams") + public static Object[][] headlessModeOutput() { - String[] headlessArgs = new String[] - { "nodisplay", "headless", "nogui" }; - for (String _harg : headlessArgs) + return new Object[][] { - 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); - } + { "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 }, + }; } - // @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+"]"); - // } - // } + + } -- 1.7.10.2