ab245c951aa98e1ac4d69058720f99aa596c6b3e
[jalview.git] / test / jalview / ws / jws2 / ParameterUtilsTest.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.ws.jws2;
22
23 import static org.testng.AssertJUnit.assertEquals;
24 import static org.testng.AssertJUnit.assertFalse;
25 import static org.testng.AssertJUnit.assertTrue;
26
27 import jalview.bin.Cache;
28 import jalview.gui.JvOptionPane;
29 import jalview.ws.api.ServiceWithParameters;
30 import jalview.ws.api.UIinfo;
31 import jalview.ws.jabaws.JalviewJabawsTestUtils;
32 import jalview.ws.jws2.jabaws2.Jws2Instance;
33
34 import java.util.ArrayList;
35 import java.util.Iterator;
36 import java.util.List;
37
38 import org.testng.annotations.BeforeClass;
39 import org.testng.annotations.Test;
40
41 import compbio.metadata.Option;
42 import compbio.metadata.Parameter;
43 import compbio.metadata.Preset;
44 import compbio.metadata.PresetManager;
45 import compbio.metadata.WrongParameterException;
46
47 /*
48  * All methods in this class are set to the Network group because setUpBeforeClass will fail
49  * if there is no network.
50  */
51 @Test(singleThreaded = true)
52 public class ParameterUtilsTest
53 {
54
55   @BeforeClass(alwaysRun = true)
56   public void setUpJvOptionPane()
57   {
58     JvOptionPane.setInteractiveMode(false);
59     JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
60   }
61
62   /*
63    * To limit tests to specify services, add them to this list; leave list empty
64    * to test all
65    */
66   private static List<String> serviceTests = new ArrayList<>();
67
68   private static Jws2Discoverer disc = null;
69
70   @BeforeClass(alwaysRun = true)
71   public static void setUpBeforeClass() throws Exception
72   {
73     serviceTests.add("AAConWS".toLowerCase());
74     Cache.loadProperties("test/jalview/io/testProps.jvprops");
75     Cache.initLogger();
76     disc = JalviewJabawsTestUtils.getJabawsDiscoverer();
77   }
78
79   @Test(groups = { "Network" })
80   public void testWriteParameterSet() throws WrongParameterException
81   {
82     for (ServiceWithParameters _service : disc.getServices())
83     {
84       if (isForTesting(_service))
85       {
86         Jws2Instance service = (Jws2Instance) _service;
87
88         List<Preset> prl = null;
89         PresetManager prman = service.getPresets();
90         if (prman == null)
91         {
92           continue;
93         }
94         prl = prman.getPresets();
95         if (prl == null)
96         {
97           continue;
98         }
99         for (Preset pr : prl)
100         {
101           List<String> writeparam = null;
102           List<String> readparam = null;
103           writeparam = ParameterUtils.writeParameterSet(
104                   pr.getArguments(service.getRunnerConfig()), " ");
105           List<Option> pset = ParameterUtils.processParameters(writeparam,
106                   service.getRunnerConfig(), " ");
107           readparam = ParameterUtils.writeParameterSet(pset, " ");
108           Iterator<String> o = pr.getOptions().iterator();
109           Iterator<String> s = writeparam.iterator();
110           Iterator<String> t = readparam.iterator();
111           boolean failed = false;
112           while (s.hasNext() && t.hasNext())
113           {
114             String on = o.next();
115             String sn = s.next();
116             String st = t.next();
117             final String errorMsg = "Original was " + on
118                     + " Phase 1 wrote " + sn + "\tPhase 2 wrote " + st;
119             assertEquals(errorMsg, sn, st);
120             assertEquals(errorMsg, sn, on);
121           }
122         }
123       }
124     }
125   }
126
127   /**
128    * Returns true if the service is in the list of the ones we chose to test,
129    * _or_ the list is empty (test all)
130    * 
131    * @param service
132    * @return
133    */
134   public boolean isForTesting(UIinfo service)
135   {
136     return serviceTests.size() == 0
137             || serviceTests.contains(service.getName().toLowerCase());
138   }
139
140   @Test(groups = { "Network" })
141   public void testCopyOption()
142   {
143     for (ServiceWithParameters _service : disc.getServices())
144     {
145       if (isForTesting(_service))
146       {
147         Jws2Instance service = (Jws2Instance) _service;
148         List<Option<?>> options = service.getRunnerConfig().getOptions();
149         for (Option<?> o : options)
150         {
151           System.out.println("Testing copyOption for option " + o.getName()
152                   + " of " + service.getActionText());
153           Option<?> cpy = ParameterUtils.copyOption(o);
154           assertTrue(cpy.equals(o));
155           assertEquals(cpy.getName(), o.getName());
156           assertFalse(cpy == o);
157           // todo more assertions?
158         }
159       }
160     }
161   }
162
163   /**
164    */
165   @Test(groups = { "Network" })
166   public void testCopyParameter()
167   {
168     for (ServiceWithParameters _service : disc.getServices())
169     {
170       if (isForTesting(_service))
171       {
172         Jws2Instance service = (Jws2Instance) _service;
173         List<Parameter> parameters = service.getRunnerConfig()
174                 .getParameters();
175         for (Parameter o : parameters)
176         {
177           System.out.println("Testing copyParameter for parameter "
178                   + o.getName() + " of " + service.getActionText());
179           Parameter cpy = ParameterUtils.copyParameter(o);
180           assertTrue(cpy.equals(o));
181           assertFalse(cpy == o);
182           assertEquals(cpy.getName(), o.getName());
183           // todo more assertions?
184         }
185       }
186     }
187   }
188 }