JAL-4269 Now using --width, --height, --scale for both --image and --structureimage...
[jalview.git] / test / jalview / bin / CommandsTest.java
1 package jalview.bin;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.nio.file.Files;
6 import java.util.Date;
7 import java.util.HashSet;
8 import java.util.Set;
9
10 import org.testng.Assert;
11 import org.testng.annotations.AfterClass;
12 import org.testng.annotations.AfterMethod;
13 import org.testng.annotations.BeforeClass;
14 import org.testng.annotations.DataProvider;
15 import org.testng.annotations.Test;
16
17 import jalview.gui.AlignFrame;
18 import jalview.gui.Desktop;
19 import jalview.gui.JvOptionPane;
20 import jalview.util.ArrayUtils;
21
22 public class CommandsTest
23 {
24   private static final String testfiles = "test/jalview/bin/argparser/testfiles";
25
26   @BeforeClass(alwaysRun = true)
27   public static void setUpBeforeClass() throws Exception
28   {
29     Cache.loadProperties("test/jalview/gui/quitProps.jvprops");
30     Date oneHourFromNow = new Date(
31             System.currentTimeMillis() + 3600 * 1000);
32     Cache.setDateProperty("JALVIEW_NEWS_RSS_LASTMODIFIED", oneHourFromNow);
33   }
34
35   @AfterClass(alwaysRun = true)
36   public static void resetProps()
37   {
38     Cache.loadProperties("test/jalview/testProps.jvprops");
39   }
40
41   @BeforeClass(alwaysRun = true)
42   public void setUpJvOptionPane()
43   {
44     JvOptionPane.setInteractiveMode(false);
45     JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
46   }
47
48   @AfterMethod(alwaysRun = true)
49   public void tearDown()
50   {
51     Desktop.closeDesktop();
52   }
53
54   public static void callJalviewMain(String[] args)
55   {
56     if (Jalview.getInstance() != null)
57     {
58       Jalview.getInstance().doMain(args);
59     }
60     else
61     {
62       Jalview.main(args);
63     }
64   }
65
66   /* --setprops is currently disabled so this test won't work
67   @Test(groups = "Functional")
68   public void setpropsTest()
69   {
70     final String MOSTLY_HARMLESS = "MOSTLY_HARMLESS";
71     String cmdLine = "--setprop=" + MOSTLY_HARMLESS + "=Earth";
72     String[] args = cmdLine.split("\\s+");
73     Jalview.main(args);
74     Assert.assertEquals(Cache.getDefault(MOSTLY_HARMLESS, "Magrathea"),
75             "Earth");
76   }
77   */
78
79   @Test(groups = "Functional", dataProvider = "cmdLines")
80   public void commandsOpenTest(String cmdLine, boolean cmdArgs,
81           int numFrames, String[] sequences)
82   {
83     try
84     {
85       String[] args = (cmdLine + " --gui").split("\\s+");
86       callJalviewMain(args);
87       Commands cmds = Jalview.getInstance().getCommands();
88       Assert.assertNotNull(cmds);
89       Assert.assertEquals(cmds.commandArgsProvided(), cmdArgs,
90               "Commands were not provided in the args");
91       Assert.assertEquals(cmds.argsWereParsed(), cmdArgs,
92               "Overall command parse and operation is false");
93
94       Assert.assertEquals(Desktop.getAlignFrames().length, numFrames,
95               "Wrong number of AlignFrames");
96
97       if (sequences != null)
98       {
99         Set<String> openedSequenceNames = new HashSet<>();
100         AlignFrame[] afs = Desktop.getAlignFrames();
101         for (AlignFrame af : afs)
102         {
103           openedSequenceNames.addAll(
104                   af.getViewport().getAlignment().getSequenceNames());
105         }
106         for (String sequence : sequences)
107         {
108           Assert.assertTrue(openedSequenceNames.contains(sequence),
109                   "Sequence '" + sequence
110                           + "' was not found in opened alignment files: "
111                           + cmdLine + ".\nOpened sequence names are:\n"
112                           + String.join("\n", openedSequenceNames));
113         }
114       }
115
116       Assert.assertFalse(
117               lookForSequenceName("THIS_SEQUENCE_ID_DOESN'T_EXIST"));
118     } catch (Exception x)
119     {
120       Assert.fail("Unexpected exception during commandsOpenTest", x);
121     } finally
122     {
123       tearDown();
124
125     }
126   }
127
128   @Test(
129     groups =
130     { "Functional", "testTask1" },
131     dataProvider = "structureImageOutputFiles")
132   public void structureImageOutputTest(String cmdLine, String[] filenames)
133           throws IOException
134   {
135     cleanupFiles(filenames);
136     String[] args = (cmdLine + " --gui").split("\\s+");
137     try
138     {
139       callJalviewMain(args);
140       Commands cmds = Jalview.getInstance().getCommands();
141       Assert.assertNotNull(cmds);
142       File lastFile = null;
143       for (String filename : filenames)
144       {
145         File file = new File(filename);
146         Assert.assertTrue(file.exists(), "File '" + filename
147                 + "' was not created by '" + cmdLine + "'");
148         Assert.assertTrue(file.isFile(), "File '" + filename
149                 + "' is not a file from '" + cmdLine + "'");
150         Assert.assertTrue(Files.size(file.toPath()) > 0, "File '" + filename
151                 + "' has no content from '" + cmdLine + "'");
152         // make sure the successive output files get bigger!
153         if (lastFile != null)
154           Assert.assertTrue(Files.size(file.toPath()) > Files
155                   .size(lastFile.toPath()));
156       }
157     } catch (Exception x)
158     {
159       Assert.fail("Unexpected exception during structureImageOutputTest",
160               x);
161     } finally
162     {
163       cleanupFiles(filenames);
164       tearDown();
165     }
166   }
167
168   @Test(groups = "Functional", dataProvider = "argfileOutputFiles")
169   public void argFilesGlobAndSubstitutionsTest(String cmdLine,
170           String[] filenames) throws IOException
171   {
172     cleanupFiles(filenames);
173     String[] args = (cmdLine + " --gui").split("\\s+");
174     try
175     {
176       callJalviewMain(args);
177       Commands cmds = Jalview.getInstance().getCommands();
178       Assert.assertNotNull(cmds);
179       File lastFile = null;
180       for (String filename : filenames)
181       {
182         File file = new File(filename);
183         Assert.assertTrue(file.exists(), "File '" + filename
184                 + "' was not created by '" + cmdLine + "'");
185         Assert.assertTrue(file.isFile(), "File '" + filename
186                 + "' is not a file from '" + cmdLine + "'");
187         Assert.assertTrue(Files.size(file.toPath()) > 0, "File '" + filename
188                 + "' has no content from '" + cmdLine + "'");
189         // make sure the successive output files get bigger!
190         if (lastFile != null)
191           Assert.assertTrue(Files.size(file.toPath()) > Files
192                   .size(lastFile.toPath()));
193       }
194     } catch (Exception x)
195     {
196       Assert.fail(
197               "Unexpected exception during argFilesGlobAndSubstitutions",
198               x);
199     } finally
200     {
201       cleanupFiles(filenames);
202       tearDown();
203     }
204   }
205
206   @DataProvider(name = "structureImageOutputFiles")
207   public Object[][] structureImageOutputFiles()
208   {
209     return new Object[][] {
210         //
211         { "--gui --nonews --nosplash --open=./examples/test_fab41.result/sample.a2m "
212                 + "--structure=./examples/test_fab41.result/test_fab41_unrelaxed_rank_1_model_3.pdb "
213                 + "--structureimage=" + testfiles + "/structureimage1.png "
214                 + "--open=./examples/test_fab41.result/sample.a2m "
215                 + "--structure=./examples/test_fab41.result/test_fab41_unrelaxed_rank_1_model_3.pdb "
216                 + "--structureimage=" + testfiles
217                 + "/structureimage2.png --scale=1.5 "
218                 + "--open=./examples/test_fab41.result/sample.a2m "
219                 + "--structure=./examples/test_fab41.result/test_fab41_unrelaxed_rank_1_model_3.pdb "
220                 + "--structureimage=" + testfiles
221                 + "/structureimage3.png --scale=2.0 ",
222             new String[]
223             { testfiles + "/structureimage1.png",
224                 testfiles + "/structureimage2.png",
225                 testfiles + "/structureimage3.png" } },
226         { "--headless --noquit --open=./examples/test_fab41.result/sample.a2m "
227                 + "--structure=./examples/test_fab41.result/test_fab41_unrelaxed_rank_1_model_3.pdb "
228                 + "--structureimage=" + testfiles + "/structureimage1.png "
229                 + "--open=./examples/test_fab41.result/sample.a2m "
230                 + "--structure=./examples/test_fab41.result/test_fab41_unrelaxed_rank_1_model_3.pdb "
231                 + "--structureimage=" + testfiles
232                 + "/structureimage2.png --scale=1.5 "
233                 + "--open=./examples/test_fab41.result/sample.a2m "
234                 + "--structure=./examples/test_fab41.result/test_fab41_unrelaxed_rank_1_model_3.pdb "
235                 + "--structureimage=" + testfiles
236                 + "/structureimage3.png --scale=2.0 ",
237             new String[]
238             { testfiles + "/structureimage1.png",
239                 testfiles + "/structureimage2.png",
240                 testfiles + "/structureimage3.png" } },
241         /*
242                 */
243         //
244     };
245
246   }
247
248   @DataProvider(name = "argfileOutputFiles")
249   public Object[][] argfileOutputFiles()
250   {
251     return new Object[][] {
252         //
253         { "--gui --argfile=" + testfiles + "/**/*.txt", new String[]
254         { testfiles + "/dir1/test1.png", testfiles + "/dir2/test1.png",
255             testfiles + "/dir3/subdir/test0.png" } },
256         { "--gui --argfile=" + testfiles + "/**/argfile.txt", new String[]
257         { testfiles + "/dir1/test1.png", testfiles + "/dir2/test1.png" } },
258         { "--gui --argfile=" + testfiles + "/dir*/argfile.txt", new String[]
259         { testfiles + "/dir1/test1.png", testfiles + "/dir2/test1.png" } },
260         { "--gui --initsubstitutions --append examples/uniref50.fa --image "
261                 + testfiles + "/{basename}.png",
262             new String[]
263             { testfiles + "/uniref50.png" } },
264         { "--gui --append examples/uniref50.fa --nosubstitutions --image "
265                 + testfiles + "/{basename}.png",
266             new String[]
267             { testfiles + "/{basename}.png" } }
268         //
269     };
270
271   }
272
273   @DataProvider(name = "cmdLines")
274   public Object[][] cmdLines()
275   {
276     String[] someUniref50Seqs = new String[] { "FER_CAPAA", "FER_CAPAN",
277         "FER1_MAIZE", "FER1_SPIOL", "O80429_MAIZE" };
278     String[] t1 = new String[] { "TEST1" };
279     String[] t2 = new String[] { "TEST2" };
280     String[] t3 = new String[] { "TEST3" };
281     return new Object[][] {
282         /*
283         */
284         { "--append=examples/uniref50.fa", true, 1, someUniref50Seqs },
285         { "--append examples/uniref50.fa", true, 1, someUniref50Seqs },
286         { "--append=examples/uniref50*.fa", true, 1, someUniref50Seqs },
287         // NOTE we cannot use shell expansion in tests, so list all files!
288         { "--append examples/uniref50.fa examples/uniref50_mz.fa", true, 1,
289             someUniref50Seqs },
290         { "--append=[new]examples/uniref50*.fa", true, 2,
291             someUniref50Seqs },
292         { "--open=examples/uniref50*.fa", true, 2, someUniref50Seqs },
293         { "examples/uniref50.fa", true, 1, someUniref50Seqs },
294         { "examples/uniref50.fa " + testfiles + "/test1.fa", true, 2,
295             ArrayUtils.concatArrays(someUniref50Seqs, t1) },
296         { "examples/uniref50.fa " + testfiles + "/test1.fa", true, 2, t1 },
297         { "--gui --argfile=" + testfiles + "/argfile0.txt", true, 1,
298             ArrayUtils.concatArrays(t1, t3) },
299         { "--gui --argfile=" + testfiles + "/argfile*.txt", true, 5,
300             ArrayUtils.concatArrays(t1, t2, t3) },
301         { "--gui --argfile=" + testfiles + "/argfile.autocounter", true, 3,
302             ArrayUtils.concatArrays(t1, t2) } };
303
304   }
305
306   public static boolean lookForSequenceName(String sequenceName)
307   {
308     AlignFrame[] afs = Desktop.getAlignFrames();
309     for (AlignFrame af : afs)
310     {
311       for (String name : af.getViewport().getAlignment().getSequenceNames())
312       {
313         if (sequenceName.equals(name))
314         {
315           return true;
316         }
317       }
318     }
319     return false;
320   }
321
322   public static void cleanupFiles(String[] filenames)
323   {
324     for (String filename : filenames)
325     {
326       File file = new File(filename);
327       if (file.exists())
328       {
329         file.delete();
330       }
331     }
332   }
333
334   private final String deleteDir = "test/deleteAfter";
335
336   @Test(
337     groups = "Functional",
338     dataProvider = "allLinkedIdsData",
339     singleThreaded = true)
340   public void allLinkedIdsTest(String cmdLine, String[] filenames,
341           String[] nonfilenames)
342   {
343     String[] args = (cmdLine + " --gui").split("\\s+");
344     callJalviewMain(args);
345     Commands cmds = Jalview.getInstance().getCommands();
346     Assert.assertNotNull(cmds);
347     for (String filename : filenames)
348     {
349       Assert.assertTrue(new File(filename).exists(),
350               "File '" + filename + "' was not created");
351     }
352     cleanupFiles(filenames);
353     if (nonfilenames != null)
354     {
355       for (String nonfilename : nonfilenames)
356       {
357         File nonfile = new File(nonfilename);
358         Assert.assertFalse(nonfile.exists(),
359                 "File " + nonfilename + " exists when it shouldn't!");
360       }
361     }
362
363     File deleteDirF = new File(deleteDir);
364     if (deleteDirF.exists())
365     {
366       deleteDirF.delete();
367     }
368   }
369
370   @DataProvider(name = "allLinkedIdsData")
371   public Object[][] allLinkedIdsData()
372   {
373     return new Object[][] {
374         //
375         { "--gui --open=test/jalview/bin/argparser/testfiles/*.fa --substitutions --all --output={dirname}/{basename}.stk --close",
376             new String[]
377             { "test/jalview/bin/argparser/testfiles/test1.stk",
378                 "test/jalview/bin/argparser/testfiles/test2.stk",
379                 "test/jalview/bin/argparser/testfiles/test3.stk", },
380             null },
381         { "--gui --open=test/jalview/bin/argparser/testfiles/*.fa --substitutions --all --image={dirname}/{basename}.png --close",
382             new String[]
383             { "test/jalview/bin/argparser/testfiles/test1.png",
384                 "test/jalview/bin/argparser/testfiles/test2.png",
385                 "test/jalview/bin/argparser/testfiles/test3.png", },
386             null },
387         { "--gui --open=test/jalview/bin/argparser/testfiles/*.fa --all --output={dirname}/{basename}.stk --close",
388             new String[]
389             { "test/jalview/bin/argparser/testfiles/test1.stk",
390                 "test/jalview/bin/argparser/testfiles/test2.stk",
391                 "test/jalview/bin/argparser/testfiles/test3.stk", },
392             new String[]
393             { "test/jalview/bin/argparser/testfiles/dir1/test1.stk",
394                 "test/jalview/bin/argparser/testfiles/dir1/test2.stk",
395                 "test/jalview/bin/argparser/testfiles/dir2/test1.stk",
396                 "test/jalview/bin/argparser/testfiles/dir2/test2.stk",
397                 "test/jalview/bin/argparser/testfiles/dir2/test3.stk",
398                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test0.stk",
399                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test1.stk",
400                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test2.stk",
401                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test3.stk", }, },
402         { "--gui --open=test/jalview/bin/argparser/**/*.fa --all --output={dirname}/{basename}.stk --close",
403             new String[]
404             { "test/jalview/bin/argparser/testfiles/test1.stk",
405                 "test/jalview/bin/argparser/testfiles/test2.stk",
406                 "test/jalview/bin/argparser/testfiles/test3.stk",
407                 "test/jalview/bin/argparser/testfiles/dir1/test1.stk",
408                 "test/jalview/bin/argparser/testfiles/dir1/test2.stk",
409                 "test/jalview/bin/argparser/testfiles/dir2/test1.stk",
410                 "test/jalview/bin/argparser/testfiles/dir2/test2.stk",
411                 "test/jalview/bin/argparser/testfiles/dir2/test3.stk",
412                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test0.stk",
413                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test1.stk",
414                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test2.stk",
415                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test3.stk", },
416             null },
417         { "--gui --open=test/jalview/bin/argparser/**/*.fa --output=*/*.stk --close",
418             new String[]
419             { "test/jalview/bin/argparser/testfiles/test1.stk",
420                 "test/jalview/bin/argparser/testfiles/test2.stk",
421                 "test/jalview/bin/argparser/testfiles/test3.stk",
422                 "test/jalview/bin/argparser/testfiles/dir1/test1.stk",
423                 "test/jalview/bin/argparser/testfiles/dir1/test2.stk",
424                 "test/jalview/bin/argparser/testfiles/dir2/test1.stk",
425                 "test/jalview/bin/argparser/testfiles/dir2/test2.stk",
426                 "test/jalview/bin/argparser/testfiles/dir2/test3.stk",
427                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test0.stk",
428                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test1.stk",
429                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test2.stk",
430                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test3.stk", },
431             null },
432         { "--gui --open=test/jalview/bin/argparser/testfiles/dir1/*.fa --open=test/jalview/bin/argparser/testfiles/dir2/*.fa --all --output=*/*.stk --close",
433             new String[]
434             { "test/jalview/bin/argparser/testfiles/dir1/test1.stk",
435                 "test/jalview/bin/argparser/testfiles/dir1/test2.stk",
436                 "test/jalview/bin/argparser/testfiles/dir2/test1.stk",
437                 "test/jalview/bin/argparser/testfiles/dir2/test2.stk",
438                 "test/jalview/bin/argparser/testfiles/dir2/test3.stk", },
439             new String[]
440             { "test/jalview/bin/argparser/testfiles/test1.stk",
441                 "test/jalview/bin/argparser/testfiles/test2.stk",
442                 "test/jalview/bin/argparser/testfiles/test3.stk",
443                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test0.stk",
444                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test1.stk",
445                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test2.stk",
446                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test3.stk", }, },
447         { "--gui --open=test/jalview/bin/argparser/testfiles/dir1/*.fa --open=test/jalview/bin/argparser/testfiles/dir2/*.fa --output=*/*.stk --close",
448             new String[]
449             { "test/jalview/bin/argparser/testfiles/dir2/test1.stk",
450                 "test/jalview/bin/argparser/testfiles/dir2/test2.stk",
451                 "test/jalview/bin/argparser/testfiles/dir2/test3.stk", },
452             new String[]
453             { "test/jalview/bin/argparser/testfiles/test1.stk",
454                 "test/jalview/bin/argparser/testfiles/test2.stk",
455                 "test/jalview/bin/argparser/testfiles/test3.stk",
456                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test0.stk",
457                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test1.stk",
458                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test2.stk",
459                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test3.stk", }, },
460         { "--gui --open=test/jalview/bin/argparser/testfiles/dir1/*.fa --open=test/jalview/bin/argparser/testfiles/dir2/*.fa --output={dirname}/{basename}.stk --close",
461             new String[]
462             { "test/jalview/bin/argparser/testfiles/dir2/test1.stk",
463                 "test/jalview/bin/argparser/testfiles/dir2/test2.stk",
464                 "test/jalview/bin/argparser/testfiles/dir2/test3.stk", },
465             new String[]
466             { "test/jalview/bin/argparser/testfiles/test1.stk",
467                 "test/jalview/bin/argparser/testfiles/test2.stk",
468                 "test/jalview/bin/argparser/testfiles/test3.stk",
469                 "test/jalview/bin/argparser/testfiles/dir1/test1.stk",
470                 "test/jalview/bin/argparser/testfiles/dir1/test2.stk",
471                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test0.stk",
472                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test1.stk",
473                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test2.stk",
474                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test3.stk", }, },
475         { "--gui --open=test/jalview/bin/argparser/testfiles/dir1/*.fa --open=test/jalview/bin/argparser/testfiles/dir2/*.fa --output={dirname}/{basename}.stk --close",
476             new String[]
477             { "test/jalview/bin/argparser/testfiles/dir2/test1.stk",
478                 "test/jalview/bin/argparser/testfiles/dir2/test2.stk",
479                 "test/jalview/bin/argparser/testfiles/dir2/test3.stk", },
480             new String[]
481             { "test/jalview/bin/argparser/testfiles/test1.stk",
482                 "test/jalview/bin/argparser/testfiles/test2.stk",
483                 "test/jalview/bin/argparser/testfiles/test3.stk",
484                 "test/jalview/bin/argparser/testfiles/dir1/test1.stk",
485                 "test/jalview/bin/argparser/testfiles/dir1/test2.stk",
486                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test0.stk",
487                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test1.stk",
488                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test2.stk",
489                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test3.stk", }, },
490         { "--gui --open=test/jalview/bin/argparser/testfiles/dir1/*.fa --output {dirname}/{basename}.stk --open=test/jalview/bin/argparser/testfiles/dir2/*.fa --output={dirname}/{basename}.aln --close",
491             new String[]
492             { "test/jalview/bin/argparser/testfiles/dir1/test1.stk",
493                 "test/jalview/bin/argparser/testfiles/dir1/test2.stk",
494                 "test/jalview/bin/argparser/testfiles/dir2/test1.aln",
495                 "test/jalview/bin/argparser/testfiles/dir2/test2.aln",
496                 "test/jalview/bin/argparser/testfiles/dir2/test3.aln", },
497             new String[]
498             { "test/jalview/bin/argparser/testfiles/test1.stk",
499                 "test/jalview/bin/argparser/testfiles/test2.stk",
500                 "test/jalview/bin/argparser/testfiles/test3.stk",
501                 "test/jalview/bin/argparser/testfiles/dir2/test1.stk",
502                 "test/jalview/bin/argparser/testfiles/dir2/test2.stk",
503                 "test/jalview/bin/argparser/testfiles/dir2/test3.stk",
504                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test0.stk",
505                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test1.stk",
506                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test2.stk",
507                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test3.stk",
508                 "test/jalview/bin/argparser/testfiles/test1.aln",
509                 "test/jalview/bin/argparser/testfiles/test2.aln",
510                 "test/jalview/bin/argparser/testfiles/test3.aln",
511                 "test/jalview/bin/argparser/testfiles/dir1/test1.aln",
512                 "test/jalview/bin/argparser/testfiles/dir1/test2.aln",
513                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test0.aln",
514                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test1.aln",
515                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test2.aln",
516                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test3.aln", }, },
517         // --mkdirs
518         { "--headless --open=test/jalview/bin/argparser/testfiles/dir1/*.fa --output "
519                 + deleteDir
520                 + "/{dirname}/{basename}.stk --open=test/jalview/bin/argparser/testfiles/dir2/*.fa --output="
521                 + deleteDir
522                 + "/{dirname}/{basename}.aln --close --all --mkdirs",
523             new String[]
524             { deleteDir
525                     + "/test/jalview/bin/argparser/testfiles/dir1/test1.stk",
526                 deleteDir
527                         + "/test/jalview/bin/argparser/testfiles/dir1/test2.stk",
528                 deleteDir
529                         + "/test/jalview/bin/argparser/testfiles/dir2/test1.aln",
530                 deleteDir
531                         + "/test/jalview/bin/argparser/testfiles/dir2/test2.aln",
532                 deleteDir
533                         + "/test/jalview/bin/argparser/testfiles/dir2/test3.aln", },
534             new String[]
535             { "test/jalview/bin/argparser/testfiles/test1.stk",
536                 "test/jalview/bin/argparser/testfiles/test2.stk",
537                 "test/jalview/bin/argparser/testfiles/test3.stk",
538                 "test/jalview/bin/argparser/testfiles/dir2/test1.stk",
539                 "test/jalview/bin/argparser/testfiles/dir2/test2.stk",
540                 "test/jalview/bin/argparser/testfiles/dir2/test3.stk",
541                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test0.stk",
542                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test1.stk",
543                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test2.stk",
544                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test3.stk",
545                 "test/jalview/bin/argparser/testfiles/test1.aln",
546                 "test/jalview/bin/argparser/testfiles/test2.aln",
547                 "test/jalview/bin/argparser/testfiles/test3.aln",
548                 "test/jalview/bin/argparser/testfiles/dir1/test1.aln",
549                 "test/jalview/bin/argparser/testfiles/dir1/test2.aln",
550                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test0.aln",
551                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test1.aln",
552                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test2.aln",
553                 "test/jalview/bin/argparser/testfiles/dir3/subdir/test3.aln",
554                 deleteDir
555                         + "test/jalview/bin/argparser/testfiles/test1.stk",
556                 deleteDir
557                         + "test/jalview/bin/argparser/testfiles/test2.stk",
558                 deleteDir
559                         + "test/jalview/bin/argparser/testfiles/test3.stk",
560                 deleteDir
561                         + "test/jalview/bin/argparser/testfiles/dir2/test1.stk",
562                 deleteDir
563                         + "test/jalview/bin/argparser/testfiles/dir2/test2.stk",
564                 deleteDir
565                         + "test/jalview/bin/argparser/testfiles/dir2/test3.stk",
566                 deleteDir
567                         + "test/jalview/bin/argparser/testfiles/dir3/subdir/test0.stk",
568                 deleteDir
569                         + "test/jalview/bin/argparser/testfiles/dir3/subdir/test1.stk",
570                 deleteDir
571                         + "test/jalview/bin/argparser/testfiles/dir3/subdir/test2.stk",
572                 deleteDir
573                         + "test/jalview/bin/argparser/testfiles/dir3/subdir/test3.stk",
574                 deleteDir
575                         + "test/jalview/bin/argparser/testfiles/test1.aln",
576                 deleteDir
577                         + "test/jalview/bin/argparser/testfiles/test2.aln",
578                 deleteDir
579                         + "test/jalview/bin/argparser/testfiles/test3.aln",
580                 deleteDir
581                         + "test/jalview/bin/argparser/testfiles/dir1/test1.aln",
582                 deleteDir
583                         + "test/jalview/bin/argparser/testfiles/dir1/test2.aln",
584                 deleteDir
585                         + "test/jalview/bin/argparser/testfiles/dir3/subdir/test0.aln",
586                 deleteDir
587                         + "test/jalview/bin/argparser/testfiles/dir3/subdir/test1.aln",
588                 deleteDir
589                         + "test/jalview/bin/argparser/testfiles/dir3/subdir/test2.aln",
590                 deleteDir
591                         + "test/jalview/bin/argparser/testfiles/dir3/subdir/test3.aln", }, },
592         //
593     };
594   }
595
596 }