Merge branch 'releases/Release_2_11_3_Branch'
[jalview.git] / test / jalview / bin / CommandsTest2.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.bin;
22
23 import java.util.Date;
24 import java.util.List;
25
26 import org.testng.Assert;
27 import org.testng.annotations.AfterClass;
28 import org.testng.annotations.AfterMethod;
29 import org.testng.annotations.BeforeClass;
30 import org.testng.annotations.DataProvider;
31 import org.testng.annotations.Test;
32
33 import jalview.api.AlignViewportI;
34 import jalview.datamodel.AlignmentAnnotation;
35 import jalview.datamodel.AlignmentI;
36 import jalview.datamodel.SequenceI;
37 import jalview.gui.AlignFrame;
38 import jalview.gui.AlignmentPanel;
39 import jalview.gui.Desktop;
40 import jalview.gui.JvOptionPane;
41 import jalview.gui.StructureViewerBase;
42
43 @Test
44 public class CommandsTest2
45 {
46   @BeforeClass(alwaysRun = true)
47   public static void setUpBeforeClass() throws Exception
48   {
49     Cache.loadProperties("test/jalview/bin/commandsTest.jvprops");
50     Date oneHourFromNow = new Date(
51             System.currentTimeMillis() + 3600 * 1000);
52     Cache.setDateProperty("JALVIEW_NEWS_RSS_LASTMODIFIED", oneHourFromNow);
53     if (Desktop.instance != null)
54       Desktop.instance.closeAll_actionPerformed(null);
55
56   }
57
58   @AfterClass(alwaysRun = true)
59   public static void resetProps()
60   {
61     Cache.loadProperties("test/jalview/testProps.jvprops");
62   }
63
64   @BeforeClass(alwaysRun = true)
65   public void setUpJvOptionPane()
66   {
67     JvOptionPane.setInteractiveMode(false);
68     JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
69   }
70
71   @AfterMethod(alwaysRun = true)
72   public void tearDown()
73   {
74     Desktop.closeDesktop();
75   }
76
77   @Test(
78     groups =
79     { "Functional", "testTask1" },
80     dataProvider = "structureOpeningArgsParams",
81     singleThreaded = true)
82   public void structureOpeningArgsTest(String cmdLine, int seqNum,
83           int annNum, int viewerNum)
84   {
85     String[] args = cmdLine.split("\\s+");
86
87     CommandsTest.callJalviewMain(args);
88     while (Desktop.instance != null
89             && Desktop.instance.operationsAreInProgress())
90     {
91       try
92       {
93         // sleep for slow build server to open annotations and viewer windows
94         Thread.sleep(viewerNum * 50);
95       } catch (InterruptedException e)
96       {
97         e.printStackTrace();
98       }
99     }
100     ;
101
102     AlignFrame[] afs = Desktop.getDesktopAlignFrames();
103     Assert.assertNotNull(afs);
104     Assert.assertTrue(afs.length > 0);
105
106     AlignFrame af = afs[0];
107     Assert.assertNotNull(af);
108
109     AlignmentPanel ap = af.alignPanel;
110     Assert.assertNotNull(ap);
111
112     AlignmentI al = ap.getAlignment();
113     Assert.assertNotNull(al);
114
115     List<SequenceI> seqs = al.getSequences();
116     Assert.assertNotNull(seqs);
117
118     Assert.assertEquals(seqs.size(), seqNum, "Wrong number of sequences");
119
120     AlignViewportI av = ap.getAlignViewport();
121     Assert.assertNotNull(av);
122
123     AlignmentAnnotation[] aas = al.getAlignmentAnnotation();
124     int visibleAnn = 0;
125     int dcount = 0;
126     for (AlignmentAnnotation aa : aas)
127     {
128       if (aa.visible)
129         visibleAnn++;
130     }
131
132     Assert.assertEquals(visibleAnn, annNum,
133             "Wrong number of visible annotations");
134
135     if (viewerNum > -1)
136     {
137       List<StructureViewerBase> openViewers = Desktop.instance
138               .getStructureViewers(ap, null);
139       Assert.assertNotNull(openViewers);
140       int count = 0;
141       for (StructureViewerBase svb : openViewers)
142       {
143         if (svb.isVisible())
144           count++;
145       }
146       Assert.assertEquals(count, viewerNum,
147               "Wrong number of structure viewers opened");
148     }
149   }
150
151   @DataProvider(name = "structureOpeningArgsParams")
152   public Object[][] structureOpeningArgsParams()
153   {
154     /*
155       String cmdLine,
156       int seqNum,
157       int annNum,
158       int structureViewerNum,
159      */
160     return new Object[][] {
161         //
162         /*
163          */
164         { "--gui --nonews --nosplash --debug "
165                 + "--append=examples/uniref50.fa "
166                 + "--colour=gecos-flower "
167                 + "--structure=[seqid=FER1_SPIOL]examples/AlphaFold/AF-P00221-F1-model_v4.cif "
168                 + "--paematrix=examples/AlphaFold/AF-P00221-F1-predicted_aligned_error_v4.json "
169                 + "--props=test/jalview/bin/commandsTest2.jvprops1 ",
170             15, 7, 1 },
171         { "--gui --nonews --nosplash --debug "
172                 + "--append=examples/uniref50.fa "
173                 + "--colour=gecos-flower "
174                 + "--structure=[seqid=FER1_SPIOL]examples/AlphaFold/AF-P00221-F1-model_v4.cif "
175                 + "--paematrix=examples/AlphaFold/AF-P00221-F1-predicted_aligned_error_v4.json "
176                 + "--props=test/jalview/bin/commandsTest2.jvprops2 ",
177             15, 4, 1 },
178         { "--gui --nonews --nosplash --debug "
179                 + "--append=examples/uniref50.fa "
180                 + "--colour=gecos-flower "
181                 + "--structure=[seqid=FER1_SPIOL]examples/AlphaFold/AF-P00221-F1-model_v4.cif "
182                 + "--paematrix=examples/AlphaFold/AF-P00221-F1-predicted_aligned_error_v4.json "
183                 + "--noshowssannotations "
184                 + "--props=test/jalview/bin/commandsTest2.jvprops1 ",
185             15, 4, 1 },
186         { "--gui --nonews --nosplash --debug "
187                 + "--append=examples/uniref50.fa "
188                 + "--colour=gecos-flower "
189                 + "--structure=[seqid=FER1_SPIOL]examples/AlphaFold/AF-P00221-F1-model_v4.cif "
190                 + "--paematrix=examples/AlphaFold/AF-P00221-F1-predicted_aligned_error_v4.json "
191                 + "--noshowannotations "
192                 + "--props=test/jalview/bin/commandsTest2.jvprops1 ",
193             15, 3, 1 },
194         { "--gui --nonews --nosplash --debug "
195                 + "--append=examples/uniref50.fa "
196                 + "--colour=gecos-flower "
197                 + "--structure=[seqid=FER1_SPIOL]examples/AlphaFold/AF-P00221-F1-model_v4.cif "
198                 + "--paematrix=examples/AlphaFold/AF-P00221-F1-predicted_aligned_error_v4.json "
199                 + "--noshowannotations " + "--noshowssannotations "
200                 + "--props=test/jalview/bin/commandsTest2.jvprops1 ",
201             15, 0, 1 },
202         { "--gui --nonews --nosplash --debug "
203                 + "--append=examples/uniref50.fa "
204                 + "--colour=gecos-flower "
205                 + "--structure=[seqid=FER1_SPIOL]examples/AlphaFold/AF-P00221-F1-model_v4.cif "
206                 + "--paematrix=examples/AlphaFold/AF-P00221-F1-predicted_aligned_error_v4.json "
207                 + "--noshowannotations " + "--noshowssannotations "
208                 + "--props=test/jalview/bin/commandsTest2.jvprops1 ",
209             15, 0, 1 },
210         { "--gui --nonews --nosplash --debug --nowebservicediscovery --props=test/jalview/bin/commandsTest.jvprops --argfile=test/jalview/bin/commandsTest2.argfile1 ",
211             16, 19, 3 },
212         { "--gui --nonews --nosplash --debug --nowebservicediscovery --props=test/jalview/bin/commandsTest.jvprops --argfile=test/jalview/bin/commandsTest2.argfile2 ",
213             16, 0, 2 },
214         { "--gui --nonews --nosplash --debug --nowebservicediscovery --props=test/jalview/bin/commandsTest.jvprops --open=./examples/test_fab41.result/sample.a2m "
215                 + "--allstructures "
216                 + "--structure=./examples/test_fab41.result/test_fab41_unrelaxed_rank_1_model_3.pdb "
217                 + "--structureviewer=none "
218                 + "--structure=./examples/test_fab41.result/test_fab41_unrelaxed_rank_2_model_4.pdb "
219                 + "--structure=./examples/test_fab41.result/test_fab41_unrelaxed_rank_3_model_2.pdb",
220             16, 10, 0 },
221         { "--gui --nonews --nosplash --debug --nowebservicediscovery --props=test/jalview/bin/commandsTest.jvprops --open=./examples/test_fab41.result/sample.a2m "
222                 + "--allstructures "
223                 + "--structure=./examples/test_fab41.result/test_fab41_unrelaxed_rank_1_model_3.pdb "
224                 + "--noallstructures " + "--structureviewer=none "
225                 + "--structure=./examples/test_fab41.result/test_fab41_unrelaxed_rank_2_model_4.pdb "
226                 + "--structure=./examples/test_fab41.result/test_fab41_unrelaxed_rank_3_model_2.pdb",
227             16, 10, 2 },
228         /*
229          */
230         //
231     };
232   }
233 }