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