RNAStruct replaced by RNAStructScoreManager. Why does webservice
[jabaws.git] / testsrc / compbio / runner / structure / RNAalifoldParametersTester.java
index 2168a6c..38fbe8b 100644 (file)
-package compbio.runner.structure;
-
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.fail;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.ValidationException;
-
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import compbio.data.sequence.ScoreManager;
-import compbio.engine.Configurator;
-import compbio.engine.client.ConfiguredExecutable;
-import compbio.engine.client.Executable.ExecProvider;
-import compbio.engine.conf.RunnerConfigMarshaller;
-import compbio.engine.local.ExecutableWrapper;
-import compbio.engine.local.LocalRunner;
-import compbio.metadata.AllTestSuit;
-import compbio.metadata.JobExecutionException;
-import compbio.metadata.JobSubmissionException;
-import compbio.metadata.Option;
-import compbio.metadata.Parameter;
-import compbio.metadata.Preset;
-import compbio.metadata.PresetManager;
-import compbio.metadata.ResultNotAvailableException;
-import compbio.metadata.RunnerConfig;
-import compbio.runner.OptionCombinator;
-import compbio.runner.structure.RNAalifold;
-import compbio.util.FileUtil;
-
-
-public class RNAalifoldParametersTester {
-
-       
-       // should be: AllTestSuit.TEST_DATA_PATH + "RNAalifoldParameters.xml"
-       static final String rnaalifoldConfigFile = 
-                       AllTestSuit.TEST_DATA_PATH + "RNAalifoldParameters.xml";
-       public static String test_outfile = "rnaalifold.out.txt";
-
-       private static Logger log = Logger
-                       .getLogger(AllTestSuit.RUNNER_TEST_LOGGER);
-       
-       static {
-               log.setLevel(Level.INFO);
-       }
-       
-       RunnerConfig<RNAalifold> rnaalifoldConfig = null;
-       OptionCombinator rnaalifoldOpc = null;
-       
-       @BeforeMethod(groups = { AllTestSuit.test_group_runner })
-       @SuppressWarnings("unchecked")
-       public void setup() {
-               try {
-                       RunnerConfigMarshaller<RNAalifold> rnaalifoldmarsh = 
-                                       new RunnerConfigMarshaller<RNAalifold>(RunnerConfig.class);
-                       rnaalifoldConfig = rnaalifoldmarsh.read(new FileInputStream(new File(
-                                       rnaalifoldConfigFile)), RunnerConfig.class);
-                       // set Name value separator
-                       rnaalifoldConfig.setPrmSeparator(" ");
-                       rnaalifoldOpc = new OptionCombinator(rnaalifoldConfig);
-                       
-                       
-                       
-               } catch (JAXBException e) {
-                       e.printStackTrace();
-                       fail(e.getLocalizedMessage());
-               } catch (FileNotFoundException e) {
-                       e.printStackTrace();
-                       fail(e.getLocalizedMessage());
-               }
-       }
-       
-       @Test
-       public void testConfiguration() {
-               try {
-                       this.rnaalifoldConfig.validate();
-               } catch (ValidationException e) {
-                       e.printStackTrace();
-                       fail(e.getLocalizedMessage());
-               } catch (IllegalStateException e) {
-                       e.printStackTrace();
-                       fail(e.getLocalizedMessage());
-               }
-       }
-
-       @Test(groups = { AllTestSuit.test_group_runner })
-       public void testDefaultParameters() {
-               RNAalifold rnaalifold = new RNAalifold();
-               rnaalifold.setInput(AllTestSuit.test_input_aln).setOutput(test_outfile);
-
-               try {
-                       // For local execution use relavive
-                       ConfiguredExecutable<RNAalifold> confRNAalifold = Configurator
-                                       .configureExecutable(rnaalifold);
-                       LocalRunner lr = new LocalRunner(confRNAalifold);
-                       lr.executeJob();
-                       confRNAalifold = (ConfiguredExecutable<RNAalifold>) lr.waitForResult();
-                       assertNotNull(confRNAalifold.getResults());
-               } catch (JobSubmissionException e) {
-                       e.printStackTrace();
-                       fail(e.getLocalizedMessage());
-               } catch (JobExecutionException e) {
-                       e.printStackTrace();
-                       fail(e.getLocalizedMessage());
-               } catch (ResultNotAvailableException e) {
-                       e.printStackTrace();
-                       fail(e.getLocalizedMessage());
-               }
-       }
-       
-       
-       
-       @Test
-       public void testOptions() {
-               // populate list of incompatable pairs by their names. todo
-               List<List<String>> failPairs = new ArrayList<List<String>>();
-
-               
-               // test the parameters without -g option
-               test(removeParam(rnaalifoldOpc.getAllOptions(), "G-Quadruplex"));
-               // now test without -c option
-               test(removeParam(rnaalifoldOpc.getAllOptions(), "Circular"));
-       }
-       
-
-       // Prints all the incompatible option pairs 
-       // (-c, -g) and (-p, -p0)
-       
-       @Test
-       public void testOptionPairs() throws ResultNotAvailableException {
-               List<Option<?>> pair = new ArrayList<Option<?>>();
-               List<Option<?>> options = rnaalifoldOpc.getAllOptions();
-               List<List<String>> failedOptionPairs = new ArrayList<List<String>>();
-               
-               boolean failed = true;
-               for (int i = 0; i<options.size(); i++) {
-                       for (int j = i; j<options.size(); j++) {
-                               if (i != j) {
-                                       pair.clear();
-                                       pair.add(options.get(i)); pair.add(options.get(j));
-                                       List<String> args = rnaalifoldOpc.argumentsToCommandString(pair);
-                                       try { 
-                                               failed = singleRun(args);
-                                       } catch (ResultNotAvailableException e) {
-                                               System.out.println("Results not available: " + e.getMessage());
-                                               failed = true;
-                                       } catch (JobSubmissionException e) {
-                                               e.printStackTrace();
-                                               fail(e.getLocalizedMessage());
-                                       } catch (JobExecutionException e) {
-                                               e.printStackTrace();
-                                               fail(e.getLocalizedMessage());
-                                       } catch (IOException e) {
-                                               e.printStackTrace();
-                                               fail(e.getLocalizedMessage());
-                                       }
-                                       if (failed == true) {
-                                               failedOptionPairs.add(args);
-                                       }
-                               }
-                       }
-               }
-               System.out.println("failedOptionPairs: " + failedOptionPairs);
-               
-       }
-       
-       // tests for incompatible Pairs of Parameters 
-       // there are none however the --betascale parameter requires -p
-       
-       @Test
-       public void testParameterPairs() throws ResultNotAvailableException {
-               List<Parameter<?>> pair = new ArrayList<Parameter<?>>();
-               List<Parameter<?>> Parameters = rnaalifoldOpc.getAllParameters();
-               List<List<String>> failedParameterPairs = new ArrayList<List<String>>();
-               
-               
-               boolean failed = true;
-               for (int i = 0; i<Parameters.size(); i++) {
-                       for (int j = i; j<Parameters.size(); j++) {
-                               if (i != j) {
-                                       pair.clear();
-                                       pair.add(Parameters.get(i)); pair.add(Parameters.get(j));
-                                       List<String> args = rnaalifoldOpc.argumentsToCommandString(pair);
-                                       args.add("-p"); // --betascale requires -p
-                                       try { 
-                                               failed = singleRun(args);
-                                       } catch (ResultNotAvailableException e) {
-                                               System.out.println("Results not available: " + e.getMessage());
-                                               failed = true;
-                                       } catch (JobSubmissionException e) {
-                                               e.printStackTrace();
-                                               fail(e.getLocalizedMessage());
-                                       } catch (JobExecutionException e) {
-                                               e.printStackTrace();
-                                               fail(e.getLocalizedMessage());
-                                       } catch (IOException e) {
-                                               e.printStackTrace();
-                                               fail(e.getLocalizedMessage());
-                                       }
-                                       if (failed == true) {
-                                               failedParameterPairs.add(args);
-                                       }
-                               }
-                       }
-               }
-               System.out.println("failedParameterPairs: " + failedParameterPairs);
-               
-       }
-       
-       
-       // removes an argument from the list by name
-       public <U extends Option<?>> List<U> removeParam(List<U> optionList, String name) {
-               List<U> newL = new ArrayList<U>();
-               for (int i = 0; i < optionList.size(); i++) {
-                       System.out.println(name.equals(optionList.get(i).getName()));
-                       if (!name.equals(optionList.get(i).getName())) {
-                               
-                               newL.add(optionList.get(i));
-                       }
-                               
-               }
-               return newL;
-       }
-       
-       public <U extends Option<?>> List<U> removeParams(List<U> optionList, List<String> names) {
-               for (int i = 0; i < names.size(); i++) {
-                       optionList = removeParam(optionList, names.get(i));
-               }
-               return optionList;
-       }
-       
-       
-       @Test(groups = { AllTestSuit.test_group_runner })
-       public void testParameters() {
-               List<Parameter<?>> params = rnaalifoldOpc.getAllParameters();
-               System.out.println("param list: " + params);
-               Collections.shuffle(params);
-               // test with -p for betascale option
-               List<String> precursor = new ArrayList<String>();
-               precursor.add("-p");
-               
-               test(params, precursor);
-       }
-       
-       // incompatible pairs of arguments are
-       /*
-        * the -c and -g options
-        * the -d2 option and the -d option
-        * the -p and -p0 option
-        */
-
-       @Test(groups = { AllTestSuit.test_group_runner })
-       public void testArguments() {
-               List<Option<?>> options = rnaalifoldOpc.getAllOptions();
-               options.addAll(rnaalifoldOpc.getAllParameters());
-               Collections.shuffle(options);
-               test(options);
-       }
-       
-       // This test supercedes the testParameterPair() and testOptionPair()
-       // tests by testing all pairs of arguments
-       
-       
-       @Test
-       public void testAllPairs() throws ResultNotAvailableException {
-               List<Option<?>> pair = new ArrayList<Option<?>>();
-               List<Option<?>> options = rnaalifoldOpc.getAllOptions();
-               
-               // take out -p options so it can be added to all commands later
-               // options = removeParam(options, "Partition Function");
-               
-               options.addAll(rnaalifoldOpc.getAllParameters());
-               List<List<String>> failedOptionPairs = new ArrayList<List<String>>();
-               
-               boolean failed = true;
-               for (int i = 0; i<options.size(); i++) {
-                       for (int j = i; j<options.size(); j++) {
-                               if (i != j) {
-                                       pair.clear();
-                                       pair.add(options.get(i)); pair.add(options.get(j));
-                                       List<String> args = rnaalifoldOpc.argumentsToCommandString(pair);
-                                       // add -p
-                                       // args.add("-p");
-                                       try { 
-                                               failed = singleRun(args);
-                                       } catch (ResultNotAvailableException e) {
-                                               System.out.println("Results not available: " + e.getMessage());
-                                               failed = true;
-                                       } catch (JobSubmissionException e) {
-                                               e.printStackTrace();
-                                               fail(e.getLocalizedMessage());
-                                       } catch (JobExecutionException e) {
-                                               e.printStackTrace();
-                                               fail(e.getLocalizedMessage());
-                                       } catch (IOException e) {
-                                               e.printStackTrace();
-                                               fail(e.getLocalizedMessage());
-                                       }
-                                       if (failed == true) {
-                                               failedOptionPairs.add(args);
-                                       }
-                               }
-                       }
-               }
-               System.out.println("failedOptionPairs: " + failedOptionPairs);
-       }
-       
-       /*
-        *  This test method stolen from the other parameter testing classes
-        *  the only purpose of the Collections.shuffle(params) and the for loop
-        *  is to test giving the executable the parameters in different orders
-        *  which leads to a lot of (unnecessary?) tests with an argument list
-        *  as long as this one.
-        *  
-        */
-       
-       
-       void test(List<? extends Option<?>> params) {
-               for (int i = 0; i < params.size(); i++) {
-                       List<String> args = rnaalifoldOpc.argumentsToCommandString(params);
-                       singleTest(args);
-                       Collections.shuffle(params);
-               }
-               log.info("NUMBER OF COMBINATION TESTED: " + params.size());
-       }
-       
-       // because some parameters presuppose the -p option
-       
-       void test(List<? extends Option<?>> params, List<String> precursor) {
-
-               for (int i = 0; i < params.size(); i++) {
-                       List<String> args = rnaalifoldOpc.argumentsToCommandString(params);
-                       args.addAll(precursor);
-                       singleTest(args);
-                       Collections.shuffle(params);
-               }
-               log.info("NUMBER OF COMBINATION TESTED: " + params.size());
-       }
-       @Test
-       void singleParamTest() {
-               //List<Parameter<?>> params = rnaalifoldOpc.getAllParameters();
-               //System.out.println("special: params: " + params);
-               
-               //List<String> args = rnaalifoldOpc.argumentsToCommandString(params);
-               List<String> args = new ArrayList<String>();
-               //args.add("-T 37"); args.add("-S 1.07"); args.add("--stochBT_en 10");
-               // replace "=" with " " to fail test
-               args.add("--MEA=1");
-               args.add("-p");
-               singleTest(args);
-               
-       }
-       
-       void singleTest(List<String> params) {
-               try {
-                       log.info("Using arguments: " + params);
-                       RNAalifold rnaalifold = new RNAalifold();
-                       rnaalifold.setInput(AllTestSuit.test_input_aln).setOutput(test_outfile);
-                       
-                       ConfiguredExecutable<RNAalifold> confRNAalifold = Configurator
-                                       .configureExecutable(rnaalifold, ExecProvider.Local);
-                       // Add options to the executable
-                       confRNAalifold.addParameters(params);
-                       LocalRunner lr = new LocalRunner(confRNAalifold);
-                       lr.executeJob();
-                       confRNAalifold = (ConfiguredExecutable<RNAalifold>) lr.waitForResult();
-                       assertNotNull(confRNAalifold.getResults(), "results is null");
-                       
-                       System.out.println("Results: \n" 
-                       + ((ScoreManager) confRNAalifold.getResults()).asRNAStruct().toString());
-                       
-                       File errors = new File(confRNAalifold.getWorkDirectory(),
-                                       ExecutableWrapper.PROC_ERR_FILE);
-                       if (errors.length() != 0) {
-                               log.error("PROBLEMS:\n " + FileUtil.readFileToString(errors));
-                       }
-                       assertTrue(errors.length() == 0, "Run with arguments : " + params
-                                       + " FAILED!");
-                       Collections.shuffle(params);
-               } catch (JobSubmissionException e) {
-                       e.printStackTrace();
-                       fail(e.getLocalizedMessage());
-               } catch (JobExecutionException e) {
-                       e.printStackTrace();
-                       fail(e.getLocalizedMessage());
-               } catch (IOException e) {
-                       e.printStackTrace();
-                       fail(e.getLocalizedMessage());
-               } catch (ResultNotAvailableException e) {
-                       e.printStackTrace();
-                       fail(e.getLocalizedMessage());
-               }
-       }
-       
-       /* A version of singleTest that continues running instead of calling
-        * fail() when it encounters a problem
-        * 
-        * Used to identify incompatible options and parameters
-        * returns -1 on failure
-        * 
-        * Bad Progamming practice? 
-        */
-       
-       
-       boolean singleRun(List<String> params) throws JobSubmissionException,
-                       JobExecutionException, IOException, ResultNotAvailableException {
-               boolean fail = true;
-               log.info("Using arguments: " + params);
-               RNAalifold rnaalifold = new RNAalifold();
-               rnaalifold.setInput(AllTestSuit.test_input_aln).setOutput(test_outfile);
-
-               ConfiguredExecutable<RNAalifold> confRNAalifold = Configurator
-                               .configureExecutable(rnaalifold, ExecProvider.Local);
-               // Add options to the executable
-               confRNAalifold.addParameters(params);
-               LocalRunner lr = new LocalRunner(confRNAalifold);
-               lr.executeJob();
-               confRNAalifold = (ConfiguredExecutable<RNAalifold>) lr.waitForResult();
-               
-               System.out.println("Results: \n" 
-                               + ((ScoreManager) confRNAalifold.getResults()).asRNAStruct().toString());
-               if (confRNAalifold.getResults() != null) fail = false;
-               File errors = new File(confRNAalifold.getWorkDirectory(),
-                               ExecutableWrapper.PROC_ERR_FILE);
-               if (errors.length() != 0) {
-                       log.error("PROBLEMS:\n " + FileUtil.readFileToString(errors));
-               }
-               assertTrue(errors.length() == 0, "Run with arguments : " + params
-                               + " FAILED!");
-               Collections.shuffle(params);
-               return fail;
-               }
-}
+package compbio.runner.structure;\r
+\r
+import static org.testng.Assert.assertFalse;\r
+import static org.testng.Assert.assertNotNull;\r
+import static org.testng.Assert.assertTrue;\r
+import static org.testng.Assert.fail;\r
+\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.FileNotFoundException;\r
+import java.io.IOException;\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import javax.xml.bind.JAXBException;\r
+import javax.xml.bind.ValidationException;\r
+\r
+import org.apache.log4j.Level;\r
+import org.apache.log4j.Logger;\r
+import org.testng.annotations.BeforeMethod;\r
+import org.testng.annotations.Test;\r
+\r
+import compbio.data.sequence.RNAStructScoreManager;\r
+import compbio.data.sequence.ScoreManager;\r
+import compbio.engine.Configurator;\r
+import compbio.engine.client.ConfiguredExecutable;\r
+import compbio.engine.client.Executable.ExecProvider;\r
+import compbio.engine.conf.RunnerConfigMarshaller;\r
+import compbio.engine.local.ExecutableWrapper;\r
+import compbio.engine.local.LocalRunner;\r
+import compbio.metadata.AllTestSuit;\r
+import compbio.metadata.JobExecutionException;\r
+import compbio.metadata.JobSubmissionException;\r
+import compbio.metadata.Option;\r
+import compbio.metadata.Parameter;\r
+import compbio.metadata.Preset;\r
+import compbio.metadata.PresetManager;\r
+import compbio.metadata.ResultNotAvailableException;\r
+import compbio.metadata.RunnerConfig;\r
+import compbio.runner.OptionCombinator;\r
+import compbio.runner.structure.RNAalifold;\r
+import compbio.util.FileUtil;\r
+\r
+\r
+public class RNAalifoldParametersTester {\r
+\r
+       \r
+       // should be: AllTestSuit.TEST_DATA_PATH + "RNAalifoldParameters.xml"\r
+       static final String rnaalifoldConfigFile = \r
+                       AllTestSuit.TEST_DATA_PATH + "RNAalifoldParameters.xml";\r
+       public static String test_outfile = "rnaalifold.out.txt";\r
+\r
+       private static Logger log = Logger\r
+                       .getLogger(AllTestSuit.RUNNER_TEST_LOGGER);\r
+       \r
+       static {\r
+               log.setLevel(Level.INFO);\r
+       }\r
+       \r
+       RunnerConfig<RNAalifold> rnaalifoldConfig = null;\r
+       OptionCombinator rnaalifoldOpc = null;\r
+       \r
+       @BeforeMethod(groups = { AllTestSuit.test_group_runner })\r
+       @SuppressWarnings("unchecked")\r
+       public void setup() {\r
+               try {\r
+                       RunnerConfigMarshaller<RNAalifold> rnaalifoldmarsh = \r
+                                       new RunnerConfigMarshaller<RNAalifold>(RunnerConfig.class);\r
+                       rnaalifoldConfig = rnaalifoldmarsh.read(new FileInputStream(new File(\r
+                                       rnaalifoldConfigFile)), RunnerConfig.class);\r
+                       // set Name value separator\r
+                       rnaalifoldConfig.setPrmSeparator(" ");\r
+                       rnaalifoldOpc = new OptionCombinator(rnaalifoldConfig);\r
+                       \r
+                       \r
+                       \r
+               } catch (JAXBException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (FileNotFoundException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               }\r
+       }\r
+       \r
+       @Test\r
+       public void testConfiguration() {\r
+               try {\r
+                       this.rnaalifoldConfig.validate();\r
+               } catch (ValidationException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (IllegalStateException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               }\r
+       }\r
+\r
+       @Test(groups = { AllTestSuit.test_group_runner })\r
+       public void testDefaultParameters() {\r
+               RNAalifold rnaalifold = new RNAalifold();\r
+               rnaalifold.setInput(AllTestSuit.test_input_aln).setOutput(test_outfile);\r
+\r
+               try {\r
+                       // For local execution use relavive\r
+                       ConfiguredExecutable<RNAalifold> confRNAalifold = Configurator\r
+                                       .configureExecutable(rnaalifold);\r
+                       LocalRunner lr = new LocalRunner(confRNAalifold);\r
+                       lr.executeJob();\r
+                       confRNAalifold = (ConfiguredExecutable<RNAalifold>) lr.waitForResult();\r
+                       assertNotNull(confRNAalifold.getResults());\r
+               } catch (JobSubmissionException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (JobExecutionException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (ResultNotAvailableException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               }\r
+       }\r
+       \r
+       \r
+       \r
+       @Test\r
+       public void testOptions() {\r
+               // populate list of incompatable pairs by their names. todo\r
+               List<List<String>> failPairs = new ArrayList<List<String>>();\r
+\r
+               \r
+               // test the parameters without -g option\r
+               test(removeParam(rnaalifoldOpc.getAllOptions(), "G-Quadruplex"));\r
+               // now test without -c option\r
+               test(removeParam(rnaalifoldOpc.getAllOptions(), "Circular"));\r
+       }\r
+       \r
+\r
+       // Prints all the incompatible option pairs \r
+       // (-c, -g) and (-p, -p0)\r
+       \r
+       @Test\r
+       public void testOptionPairs() throws ResultNotAvailableException {\r
+               List<Option<?>> pair = new ArrayList<Option<?>>();\r
+               List<Option<?>> options = rnaalifoldOpc.getAllOptions();\r
+               List<List<String>> failedOptionPairs = new ArrayList<List<String>>();\r
+               \r
+               boolean failed = true;\r
+               for (int i = 0; i<options.size(); i++) {\r
+                       for (int j = i; j<options.size(); j++) {\r
+                               if (i != j) {\r
+                                       pair.clear();\r
+                                       pair.add(options.get(i)); pair.add(options.get(j));\r
+                                       List<String> args = rnaalifoldOpc.argumentsToCommandString(pair);\r
+                                       try { \r
+                                               failed = singleRun(args);\r
+                                       } catch (ResultNotAvailableException e) {\r
+                                               System.out.println("Results not available: " + e.getMessage());\r
+                                               failed = true;\r
+                                       } catch (JobSubmissionException e) {\r
+                                               e.printStackTrace();\r
+                                               fail(e.getLocalizedMessage());\r
+                                       } catch (JobExecutionException e) {\r
+                                               e.printStackTrace();\r
+                                               fail(e.getLocalizedMessage());\r
+                                       } catch (IOException e) {\r
+                                               e.printStackTrace();\r
+                                               fail(e.getLocalizedMessage());\r
+                                       }\r
+                                       if (failed == true) {\r
+                                               failedOptionPairs.add(args);\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+               System.out.println("failedOptionPairs: " + failedOptionPairs);\r
+               \r
+       }\r
+       \r
+       // tests for incompatible Pairs of Parameters \r
+       // there are none however the --betascale parameter requires -p\r
+       \r
+       @Test\r
+       public void testParameterPairs() throws ResultNotAvailableException {\r
+               List<Parameter<?>> pair = new ArrayList<Parameter<?>>();\r
+               List<Parameter<?>> Parameters = rnaalifoldOpc.getAllParameters();\r
+               List<List<String>> failedParameterPairs = new ArrayList<List<String>>();\r
+               \r
+               \r
+               boolean failed = true;\r
+               for (int i = 0; i<Parameters.size(); i++) {\r
+                       for (int j = i; j<Parameters.size(); j++) {\r
+                               if (i != j) {\r
+                                       pair.clear();\r
+                                       pair.add(Parameters.get(i)); pair.add(Parameters.get(j));\r
+                                       List<String> args = rnaalifoldOpc.argumentsToCommandString(pair);\r
+                                       args.add("-p"); // --betascale requires -p\r
+                                       try { \r
+                                               failed = singleRun(args);\r
+                                       } catch (ResultNotAvailableException e) {\r
+                                               System.out.println("Results not available: " + e.getMessage());\r
+                                               failed = true;\r
+                                       } catch (JobSubmissionException e) {\r
+                                               e.printStackTrace();\r
+                                               fail(e.getLocalizedMessage());\r
+                                       } catch (JobExecutionException e) {\r
+                                               e.printStackTrace();\r
+                                               fail(e.getLocalizedMessage());\r
+                                       } catch (IOException e) {\r
+                                               e.printStackTrace();\r
+                                               fail(e.getLocalizedMessage());\r
+                                       }\r
+                                       if (failed == true) {\r
+                                               failedParameterPairs.add(args);\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+               System.out.println("failedParameterPairs: " + failedParameterPairs);\r
+               \r
+       }\r
+       \r
+       \r
+       // removes an argument from the list by name\r
+       public <U extends Option<?>> List<U> removeParam(List<U> optionList, String name) {\r
+               List<U> newL = new ArrayList<U>();\r
+               for (int i = 0; i < optionList.size(); i++) {\r
+                       System.out.println(name.equals(optionList.get(i).getName()));\r
+                       if (!name.equals(optionList.get(i).getName())) {\r
+                               \r
+                               newL.add(optionList.get(i));\r
+                       }\r
+                               \r
+               }\r
+               return newL;\r
+       }\r
+       \r
+       public <U extends Option<?>> List<U> removeParams(List<U> optionList, List<String> names) {\r
+               for (int i = 0; i < names.size(); i++) {\r
+                       optionList = removeParam(optionList, names.get(i));\r
+               }\r
+               return optionList;\r
+       }\r
+       \r
+       \r
+       @Test(groups = { AllTestSuit.test_group_runner })\r
+       public void testParameters() {\r
+               List<Parameter<?>> params = rnaalifoldOpc.getAllParameters();\r
+               System.out.println("param list: " + params);\r
+               Collections.shuffle(params);\r
+               // test with -p for betascale option\r
+               List<String> precursor = new ArrayList<String>();\r
+               precursor.add("-p");\r
+               \r
+               test(params, precursor);\r
+       }\r
+       \r
+       // incompatible pairs of arguments are\r
+       /*\r
+        * the -c and -g options\r
+        * the -d2 option and the -d option\r
+        * the -p and -p0 option\r
+        */\r
+\r
+       @Test(groups = { AllTestSuit.test_group_runner })\r
+       public void testArguments() {\r
+               List<Option<?>> options = rnaalifoldOpc.getAllOptions();\r
+               options.addAll(rnaalifoldOpc.getAllParameters());\r
+               Collections.shuffle(options);\r
+               test(options);\r
+       }\r
+       \r
+       // This test supercedes the testParameterPair() and testOptionPair()\r
+       // tests by testing all pairs of arguments\r
+       \r
+       \r
+       @Test\r
+       public void testAllPairs() throws ResultNotAvailableException {\r
+               List<Option<?>> pair = new ArrayList<Option<?>>();\r
+               List<Option<?>> options = rnaalifoldOpc.getAllOptions();\r
+               \r
+               // take out -p options so it can be added to all commands later\r
+               // options = removeParam(options, "Partition Function");\r
+               \r
+               options.addAll(rnaalifoldOpc.getAllParameters());\r
+               List<List<String>> failedOptionPairs = new ArrayList<List<String>>();\r
+               \r
+               boolean failed = true;\r
+               for (int i = 0; i<options.size(); i++) {\r
+                       for (int j = i; j<options.size(); j++) {\r
+                               if (i != j) {\r
+                                       pair.clear();\r
+                                       pair.add(options.get(i)); pair.add(options.get(j));\r
+                                       List<String> args = rnaalifoldOpc.argumentsToCommandString(pair);\r
+                                       // add -p\r
+                                       // args.add("-p");\r
+                                       try { \r
+                                               failed = singleRun(args);\r
+                                       } catch (ResultNotAvailableException e) {\r
+                                               System.out.println("Results not available: " + e.getMessage());\r
+                                               failed = true;\r
+                                       } catch (JobSubmissionException e) {\r
+                                               e.printStackTrace();\r
+                                               fail(e.getLocalizedMessage());\r
+                                       } catch (JobExecutionException e) {\r
+                                               e.printStackTrace();\r
+                                               fail(e.getLocalizedMessage());\r
+                                       } catch (IOException e) {\r
+                                               e.printStackTrace();\r
+                                               fail(e.getLocalizedMessage());\r
+                                       }\r
+                                       if (failed == true) {\r
+                                               failedOptionPairs.add(args);\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+               System.out.println("failedOptionPairs: " + failedOptionPairs);\r
+       }\r
+       \r
+       /*\r
+        *  This test method stolen from the other parameter testing classes\r
+        *  the only purpose of the Collections.shuffle(params) and the for loop\r
+        *  is to test giving the executable the parameters in different orders\r
+        *  which leads to a lot of (unnecessary?) tests with an argument list\r
+        *  as long as this one.\r
+        *  \r
+        */\r
+       \r
+       \r
+       void test(List<? extends Option<?>> params) {\r
+               for (int i = 0; i < params.size(); i++) {\r
+                       List<String> args = rnaalifoldOpc.argumentsToCommandString(params);\r
+                       singleTest(args);\r
+                       Collections.shuffle(params);\r
+               }\r
+               log.info("NUMBER OF COMBINATION TESTED: " + params.size());\r
+       }\r
+       \r
+       // because some parameters presuppose the -p option\r
+       \r
+       void test(List<? extends Option<?>> params, List<String> precursor) {\r
+\r
+               for (int i = 0; i < params.size(); i++) {\r
+                       List<String> args = rnaalifoldOpc.argumentsToCommandString(params);\r
+                       args.addAll(precursor);\r
+                       singleTest(args);\r
+                       Collections.shuffle(params);\r
+               }\r
+               log.info("NUMBER OF COMBINATION TESTED: " + params.size());\r
+       }\r
+       @Test\r
+       void singleParamTest() {\r
+               //List<Parameter<?>> params = rnaalifoldOpc.getAllParameters();\r
+               //System.out.println("special: params: " + params);\r
+               \r
+               //List<String> args = rnaalifoldOpc.argumentsToCommandString(params);\r
+               List<String> args = new ArrayList<String>();\r
+               //args.add("-T 37"); args.add("-S 1.07"); args.add("--stochBT_en 10");\r
+               // replace "=" with " " to fail test\r
+               args.add("--MEA=1");\r
+               args.add("-p");\r
+               singleTest(args);\r
+               \r
+       }\r
+       \r
+       void singleTest(List<String> params) {\r
+               try {\r
+                       log.info("Using arguments: " + params);\r
+                       RNAalifold rnaalifold = new RNAalifold();\r
+                       rnaalifold.setInput(AllTestSuit.test_input_aln).setOutput(test_outfile);\r
+                       \r
+                       ConfiguredExecutable<RNAalifold> confRNAalifold = Configurator\r
+                                       .configureExecutable(rnaalifold, ExecProvider.Local);\r
+                       // Add options to the executable\r
+                       confRNAalifold.addParameters(params);\r
+                       LocalRunner lr = new LocalRunner(confRNAalifold);\r
+                       lr.executeJob();\r
+                       confRNAalifold = (ConfiguredExecutable<RNAalifold>) lr.waitForResult();\r
+                       assertNotNull(confRNAalifold.getResults(), "results is null");\r
+                       \r
+                       System.out.println("Results: \n" \r
+                       + ((RNAStructScoreManager) confRNAalifold.getResults()).toString());\r
+                       \r
+                       File errors = new File(confRNAalifold.getWorkDirectory(),\r
+                                       ExecutableWrapper.PROC_ERR_FILE);\r
+                       if (errors.length() != 0) {\r
+                               log.error("PROBLEMS:\n " + FileUtil.readFileToString(errors));\r
+                       }\r
+                       assertTrue(errors.length() == 0, "Run with arguments : " + params\r
+                                       + " FAILED!");\r
+                       Collections.shuffle(params);\r
+               } catch (JobSubmissionException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (JobExecutionException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (IOException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (ResultNotAvailableException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               }\r
+       }\r
+       \r
+       /* A version of singleTest that continues running instead of calling\r
+        * fail() when it encounters a problem\r
+        * \r
+        * Used to identify incompatible options and parameters\r
+        * returns -1 on failure\r
+        * \r
+        * Bad Progamming practice? \r
+        */\r
+       \r
+       \r
+       boolean singleRun(List<String> params) throws JobSubmissionException,\r
+                       JobExecutionException, IOException, ResultNotAvailableException {\r
+               boolean fail = true;\r
+               log.info("Using arguments: " + params);\r
+               RNAalifold rnaalifold = new RNAalifold();\r
+               rnaalifold.setInput(AllTestSuit.test_input_aln).setOutput(test_outfile);\r
+\r
+               ConfiguredExecutable<RNAalifold> confRNAalifold = Configurator\r
+                               .configureExecutable(rnaalifold, ExecProvider.Local);\r
+               // Add options to the executable\r
+               confRNAalifold.addParameters(params);\r
+               LocalRunner lr = new LocalRunner(confRNAalifold);\r
+               lr.executeJob();\r
+               confRNAalifold = (ConfiguredExecutable<RNAalifold>) lr.waitForResult();\r
+               \r
+               System.out.println("Results: \n" \r
+                               + ((RNAStructScoreManager) confRNAalifold.getResults()).toString());\r
+               if (confRNAalifold.getResults() != null) fail = false;\r
+               File errors = new File(confRNAalifold.getWorkDirectory(),\r
+                               ExecutableWrapper.PROC_ERR_FILE);\r
+               if (errors.length() != 0) {\r
+                       log.error("PROBLEMS:\n " + FileUtil.readFileToString(errors));\r
+               }\r
+               assertTrue(errors.length() == 0, "Run with arguments : " + params\r
+                               + " FAILED!");\r
+               Collections.shuffle(params);\r
+               return fail;\r
+               }\r
+}\r