From: Jim Procter Date: Wed, 17 Jun 2020 12:24:09 +0000 (+0100) Subject: Merge branch 'cherrypicks/JAL-3660_JAL-3561_JAL-3662_cli_outputformat' into Jalview... X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=9f571b5ee8e8b3eac245460d95c2a19b39283f8f;hp=84be38a183e5c51a5759b7a88362198b2687907c;p=jalview.git Merge branch 'cherrypicks/JAL-3660_JAL-3561_JAL-3662_cli_outputformat' into Jalview-JS/develop --- diff --git a/src/jalview/bin/Jalview.java b/src/jalview/bin/Jalview.java index fea99fb..b8aa928 100755 --- a/src/jalview/bin/Jalview.java +++ b/src/jalview/bin/Jalview.java @@ -73,7 +73,6 @@ import jalview.schemes.ColourSchemeProperty; import jalview.util.MessageManager; import jalview.util.Platform; import jalview.ws.jws2.Jws2Discoverer; -//import netscape.javascript.JSObject; /** * Main class for Jalview Application
@@ -1038,28 +1037,43 @@ public class Jalview implements ApplicationSingletonI "Creating image map: " + imageFile.getAbsolutePath()); continue; default: - format = FileFormats.getInstance().forName(outputFormat); - if (format == null) - { - System.out.println("Invalid file format: " + outputFormat); - break; - } - fname = new File(aparser.nextValue()).getAbsolutePath(); - af.saveAlignment(fname, format); - if (!af.isSaveAlignmentSuccessful()) - { - System.out.println("Error writing file " + fname + " in " + format - + " format!!"); - break; - } - continue; + // fall through - try to parse as an alignment data export format + FileFormatI outFormat=null; + try { + outFormat = FileFormats.getInstance().forName(outputFormat); + } catch (Exception formatP) { + } + if (outFormat==null) { + System.out.println("Couldn't parse "+outputFormat+" as a valid Jalview format string."); + continue; + } + if (!outFormat.isWritable()) + { + System.out.println( + "This version of Jalview does not support alignment export as " + + outputFormat); + continue; + } + // record file as it was passed to Jalview so it is recognisable to the CLI caller + String file; + fname = new File(file=aparser.nextValue()).getAbsolutePath(); + // JBPNote - yuck - really wish we did have a bean returned from this which gave success/fail like before ! + af.saveAlignment(fname, outFormat); + if (!af.isSaveAlignmentSuccessful()) + { + System.out.println("Written alignment in " + outputFormat + + " format to " + file); + continue; + } else { + System.out.println("Error writing file " + file + " in " + + outputFormat + " format!!"); + } } - System.out.println("Unknown arg: " + outputFormat); - break; } + // ??? Should report - 'ignoring' extra args here... while (aparser.getSize() > 0) { - System.out.println("Unknown arg: " + aparser.nextValue()); + System.out.println("Ignoring extra argument: " + aparser.nextValue()); } } diff --git a/test/jalview/bin/CommandLineOperations.java b/test/jalview/bin/CommandLineOperations.java index 59fc79d..a5067be 100644 --- a/test/jalview/bin/CommandLineOperations.java +++ b/test/jalview/bin/CommandLineOperations.java @@ -20,10 +20,17 @@ */ package jalview.bin; +import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; import jalview.gui.JvOptionPane; +import jalview.io.DataSourceType; +import jalview.io.FileFormat; +import jalview.io.FileFormatException; +import jalview.io.FileFormatI; +import jalview.io.FileFormats; +import jalview.io.IdentifyFile; import java.io.BufferedReader; import java.io.File; @@ -279,7 +286,7 @@ public class CommandLineOperations dataProvider = "headlessModeOutputOperationsData") public void testHeadlessModeOutputOperations(String harg, String type, String fileName, boolean withAWT, int expectedMinFileSize, - int timeout) + int timeout, String fileFormatType) { String cmd = harg + type + " " + fileName; // System.out.println(">>>>>>>>>>>>>>>> Command : " + cmd); @@ -291,6 +298,25 @@ public class CommandLineOperations assertTrue(file.exists(), msg); FileAssert.assertFile(file, msg); FileAssert.assertMinLength(file, expectedMinFileSize); + if (fileFormatType!=null && fileFormatType.length()>0) + { + FileFormatI format = FileFormats.getInstance() + .forName(fileFormatType); + if (format!=null) + { + try + { + FileFormatI exportedType = new IdentifyFile() + .identify(file.getAbsolutePath(), DataSourceType.FILE); + assertEquals(exportedType, format, + "Exported file type was wrong"); + } catch (FileFormatException e) + { + Assert.fail("Couldn't identify file " + file + + " as an alignment format", e); + } + } + } if (worker != null && worker.exit == null) { worker.interrupt(); @@ -343,51 +369,51 @@ public class CommandLineOperations String workingDir = "test/jalview/bin/"; return new Object[][] { { "nodisplay -open examples/uniref50.fa", " -eps", workingDir + "test_uniref50_out.eps", true, - MINFILESIZE_BIG, TEST_TIMEOUT }, + MINFILESIZE_BIG, TEST_TIMEOUT, null }, { "nodisplay -open examples/uniref50.fa", " -eps", workingDir + "test_uniref50_out.eps", false, - MINFILESIZE_BIG, TEST_TIMEOUT }, + MINFILESIZE_BIG, TEST_TIMEOUT, null }, { "nogui -open examples/uniref50.fa", " -eps", workingDir + "test_uniref50_out.eps", true, MINFILESIZE_BIG, - TEST_TIMEOUT }, + TEST_TIMEOUT, null }, { "nogui -open examples/uniref50.fa", " -eps", workingDir + "test_uniref50_out.eps", false, - MINFILESIZE_BIG, TEST_TIMEOUT }, + MINFILESIZE_BIG, TEST_TIMEOUT, null }, { "headless -open examples/uniref50.fa", " -eps", workingDir + "test_uniref50_out.eps", true, MINFILESIZE_BIG, - TEST_TIMEOUT }, + TEST_TIMEOUT, null }, { "headless -open examples/uniref50.fa", " -svg", workingDir + "test_uniref50_out.svg", false, - MINFILESIZE_BIG, TEST_TIMEOUT }, + MINFILESIZE_BIG, TEST_TIMEOUT, null }, { "headless -open examples/uniref50.fa", " -png", workingDir + "test_uniref50_out.png", true, MINFILESIZE_BIG, - TEST_TIMEOUT }, + TEST_TIMEOUT, null }, { "headless -open examples/uniref50.fa", " -html", workingDir + "test_uniref50_out.html", true, - MINFILESIZE_BIG, TEST_TIMEOUT }, + MINFILESIZE_BIG, TEST_TIMEOUT, null }, { "headless -open examples/uniref50.fa", " -fasta", workingDir + "test_uniref50_out.mfa", true, MINFILESIZE_SMALL, - TEST_TIMEOUT }, + TEST_TIMEOUT, FileFormat.Fasta.toString() }, { "headless -open examples/uniref50.fa", " -clustal", workingDir + "test_uniref50_out.aln", true, MINFILESIZE_SMALL, - TEST_TIMEOUT }, + TEST_TIMEOUT, FileFormat.Clustal.toString() }, { "headless -open examples/uniref50.fa", " -msf", workingDir + "test_uniref50_out.msf", true, MINFILESIZE_SMALL, - TEST_TIMEOUT }, + TEST_TIMEOUT, FileFormat.MSF.toString() }, { "headless -open examples/uniref50.fa", " -pileup", workingDir + "test_uniref50_out.aln", true, MINFILESIZE_SMALL, - TEST_TIMEOUT }, + TEST_TIMEOUT, FileFormat.Pileup.toString() }, { "headless -open examples/uniref50.fa", " -pir", workingDir + "test_uniref50_out.pir", true, MINFILESIZE_SMALL, - TEST_TIMEOUT }, + TEST_TIMEOUT, FileFormat.PIR.toString() }, { "headless -open examples/uniref50.fa", " -pfam", workingDir + "test_uniref50_out.pfam", true, MINFILESIZE_SMALL, - TEST_TIMEOUT }, + TEST_TIMEOUT, FileFormat.Pfam.toString() }, { "headless -open examples/uniref50.fa", " -blc", workingDir + "test_uniref50_out.blc", true, MINFILESIZE_SMALL, - TEST_TIMEOUT }, + TEST_TIMEOUT, FileFormat.BLC.toString() }, { "headless -open examples/uniref50.fa", " -jalview", workingDir + "test_uniref50_out.jvp", true, MINFILESIZE_SMALL, - TEST_TIMEOUT }, }; + TEST_TIMEOUT, FileFormat.Jalview.toString() }, }; } }