JAL-1769 fixed headless execution mode and created test for all possible outputs
authortcofoegbu <tcnofoegbu@dundee.ac.uk>
Mon, 6 Jul 2015 15:58:20 +0000 (16:58 +0100)
committertcofoegbu <tcnofoegbu@dundee.ac.uk>
Mon, 6 Jul 2015 15:58:20 +0000 (16:58 +0100)
src/jalview/bin/Jalview.java
src/jalview/gui/AlignExportSettings.java
src/jalview/gui/AlignFrame.java
src/jalview/gui/ProgressBar.java
src/jalview/util/ImageMaker.java
test/jalview/bin/CommandLineOperations.java

index f4b38d4..f6d0099 100755 (executable)
@@ -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;
           }
 
index 40128af..49bb64a 100644 (file)
@@ -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[]
index cc900e0..8144738 100644 (file)
@@ -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;
       }
 
index 5307f26..c7db535 100644 (file)
@@ -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.
  */
index 100ecf5..8abe965 100755 (executable)
@@ -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[]
index d9d3bb3..05ada31 100644 (file)
@@ -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+"]");
-  // }
-  // }
+
+
 }