feature: Updated environment to run methods as test cases

Change-Id: Iea4017aad631ea2d0515b9ba5e4ce3f4473f4df0
diff --git a/org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/TestEnvironment.java b/org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/TestEnvironment.java
index 024531a..b78ef39 100644
--- a/org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/TestEnvironment.java
+++ b/org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/core/environment/TestEnvironment.java
@@ -109,7 +109,7 @@
       this.associatedObjectListeners = new HashMap<>();
       this.associatedObjects = new HashMap<>(100);
       this.batchMode = OteProperties.isOseeOteInBatchModeEnabled();
-
+      
    }
 
    public void init(IServiceConnector connector) {
@@ -592,25 +592,25 @@
    public void prompt() {
       getRunManager().getCurrentScript().prompt();
    }
-   
+
    public void prompt(String message) {
       getRunManager().getCurrentScript().prompt(new TestPrompt(message, PromptResponseType.NONE));
    }
-   
+
    public void promptPassFail(String message) {
       getRunManager().getCurrentScript().promptPassFail(message);
    }
-   
+
    public void promptPause(String message) {
       getRunManager().getCurrentScript().promptPause(message);
    }
-   
+
    public void promptStep(String message) {
       getRunManager().getCurrentScript().prompt(new TestPrompt(message, PromptResponseType.SCRIPT_STEP));
    }
-   
+
    public String promptInput(String message) {
       return getRunManager().getCurrentScript().prompt(new TestPrompt(message, PromptResponseType.USER_INPUT));
    }
-   
+
 }
diff --git a/org.eclipse.ote.simple.test.environment/src/org/eclipse/ote/simple/test/environment/SimpleOteApi.java b/org.eclipse.ote.simple.test.environment/src/org/eclipse/ote/simple/test/environment/SimpleOteApi.java
new file mode 100644
index 0000000..f6d501b
--- /dev/null
+++ b/org.eclipse.ote.simple.test.environment/src/org/eclipse/ote/simple/test/environment/SimpleOteApi.java
@@ -0,0 +1,35 @@
+/*********************************************************************
+ * Copyright (c) 2022 Boeing
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     Boeing - initial API and implementation
+ **********************************************************************/
+package org.eclipse.ote.simple.test.environment;
+
+import org.eclipse.osee.framework.jdk.core.type.NamedId;
+import org.eclipse.osee.ote.core.environment.OteApi;
+import org.eclipse.osee.ote.core.environment.TestEnvironment;
+
+/**
+ * @author Nydia Delgado
+ */
+public class SimpleOteApi implements OteApi {
+
+   private TestEnvironment testEnv;
+
+   @Override
+   public void logTestPoint(boolean isPassed, String testPointName, String expected, String actual) {
+      testEnv.getTestScript().logTestPoint(isPassed, testPointName, expected, actual);
+   }
+
+   @Override
+   public void logTestPoint(boolean isPassed, String testPointName, NamedId expected, NamedId actual) {
+      logTestPoint(isPassed, testPointName, expected.getName(), actual.getName());
+   }
+}
diff --git a/org.eclipse.ote.simple.test.script/META-INF/MANIFEST.MF b/org.eclipse.ote.simple.test.script/META-INF/MANIFEST.MF
index c39723f..da000a1 100644
--- a/org.eclipse.ote.simple.test.script/META-INF/MANIFEST.MF
+++ b/org.eclipse.ote.simple.test.script/META-INF/MANIFEST.MF
@@ -3,13 +3,16 @@
 Bundle-Name: OTE Simple Test Script
 Bundle-SymbolicName: org.eclipse.ote.simple.test.script
 Bundle-Version: 0.26.3.qualifier
-Require-Bundle: org.eclipse.core.runtime
+Require-Bundle: org.eclipse.core.runtime,
+ org.junit
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.ote.simple.test.script
 Import-Package: org.eclipse.osee.framework.jdk.core.persistence,
+ org.eclipse.osee.framework.jdk.core.type,
  org.eclipse.osee.framework.logging,
  org.eclipse.osee.ote.core,
+ org.eclipse.osee.ote.core.annotations,
  org.eclipse.osee.ote.core.enums,
  org.eclipse.osee.ote.core.environment,
  org.eclipse.osee.ote.core.environment.interfaces,
diff --git a/org.eclipse.ote.simple.test.script/src/org/eclipse/ote/simple/test/script/SimpleTestScript.java b/org.eclipse.ote.simple.test.script/src/org/eclipse/ote/simple/test/script/SimpleTestScript.java
index 7e3a0ff..3e37902 100644
--- a/org.eclipse.ote.simple.test.script/src/org/eclipse/ote/simple/test/script/SimpleTestScript.java
+++ b/org.eclipse.ote.simple.test.script/src/org/eclipse/ote/simple/test/script/SimpleTestScript.java
@@ -19,13 +19,11 @@
 import java.nio.ByteBuffer;
 import java.nio.channels.DatagramChannel;
 import java.util.logging.Level;
+
 import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.ote.core.TestCase;
 import org.eclipse.osee.ote.core.TestException;
-import org.eclipse.osee.ote.core.TestScript;
+import org.eclipse.osee.ote.core.annotations.Order;
 import org.eclipse.osee.ote.core.environment.EnvironmentTask;
-import org.eclipse.osee.ote.core.environment.interfaces.ITestEnvironmentAccessor;
-import org.eclipse.osee.ote.core.environment.interfaces.ITestLogger;
 import org.eclipse.osee.ote.core.environment.jini.ITestEnvironmentCommandCallback;
 import org.eclipse.osee.ote.message.MessageSystemTestEnvironment;
 import org.eclipse.ote.io.mux.MuxHeader;
@@ -34,6 +32,8 @@
 import org.eclipse.ote.simple.io.message.HELLO_WORLD;
 import org.eclipse.ote.simple.io.message.SIMPLE_MUX_R_MSG;
 import org.eclipse.ote.simple.io.message.lookup.SimpleMuxReceiverHeader;
+import org.eclipse.ote.simple.test.environment.SimpleOteApi;
+import org.junit.Test;
 
 /**
  * @author Andy Jury
@@ -46,91 +46,52 @@
       super(testEnvironment, callback);
 
       this.writer = getMessageWriter(HELLO_WORLD.class);
-
-      new TestCase1(this);
-      new TestCase2(this);
-      new TestCaseSend(this);
+      setupTestScript((SimpleOteApi) testEnvironment.getOteApi());
    }
 
-   private class LocalSetupTestCase extends TestCase {
-
-      protected LocalSetupTestCase(TestScript parent) {
-
-         super(parent, false, false);
-      }
-
-      @Override
-      public void doTestCase(ITestEnvironmentAccessor environment, ITestLogger logger) {
-         // Intentionally empty block
-      }
+   protected void setupTestScript(SimpleOteApi oteApi) {
+      // Intentionally empty block
    }
 
-   @Override
-   protected TestCase getSetupTestCase() {
-
-      return new LocalSetupTestCase(this);
+   @Test
+   @Order(1)
+   public void testCase1(SimpleOteApi oteApi) {
+      prompt("In TestCase1");
+      promptPause("In TestCase1");
+      promptPassFail("Pass/Fail?");
    }
 
-   public class TestCase1 extends TestCase {
-
-      public TestCase1(TestScript parent) {
-
-         super(parent);
-      }
-
-      @Override
-      public void doTestCase(ITestEnvironmentAccessor environment, ITestLogger logger) {
-         prompt("In TestCase1");
-         promptPause("In TestCase1");
-         promptPassFail("Pass/Fail?");
-      }
+   @Test
+   @Order(2)
+   public void testCase2(SimpleOteApi oteApi) {
+      // This test case will fail when running in an environment with Mux
+      // unless you uncomment the following line to force the message mem type
+      writer.setMemSource(SimpleDataType.SIMPLE);
+      prompt("In the LocalSetupTestCase");
+      writer.PRINT_ME.setNoLog("TEST1");
+      testWait(1000);
+      writer.PRINT_ME.setNoLog("TEST2");
+      testWait(1000);
+      writer.PRINT_ME.setNoLog("TEST3");
+      testWait(1000);
+      writer.PRINT_ME.setNoLog("TEST4");
+      writer.ONLY_IN_SIMPLE.setNoLog(64);
+      writer.send();
+      testWait(1000);
+      writer.unschedule();
    }
 
-   public class TestCase2 extends TestCase {
+   @Test
+   @Order(3)
+   public void testCaseSend(SimpleOteApi oteApi) {
+      try {
+         MuxChannelSender sender = new MuxChannelSender();
+         environment.addTask(sender);
 
-      public TestCase2(TestScript parent) {
-
-         super(parent);
-      }
-
-      @Override
-      public void doTestCase(ITestEnvironmentAccessor environment, ITestLogger logger) {
-         // This test case will fail when running in an environment with Mux
-         // unless you uncomment the following line to force the message mem type
-         writer.setMemSource(SimpleDataType.SIMPLE);
-         prompt("In the LocalSetupTestCase");
-         writer.PRINT_ME.set(this, "TEST1");
-         testWait(1000);
-         writer.PRINT_ME.setNoLog("TEST2");
-         testWait(1000);
-         writer.PRINT_ME.setNoLog("TEST3");
-         testWait(1000);
-         writer.PRINT_ME.setNoLog("TEST4");
-         writer.ONLY_IN_SIMPLE.set(this, 64);
-         writer.send();
-         testWait(1000);
-         writer.unschedule();
-      }
-   }
-
-   public class TestCaseSend extends TestCase {
-
-      public TestCaseSend(TestScript parent) {
-
-         super(parent);
-      }
-
-      @Override
-      public void doTestCase(ITestEnvironmentAccessor environment, ITestLogger logger) {
-         try {
-            MuxChannelSender sender = new MuxChannelSender();
-            environment.addTask(sender);
-
-            testWait(10000);
-            sender.disable();
-         } catch (IOException ex) {
-            logTestPoint(false, "Error starting packet sender", "N/A", ex.getMessage());
-         }
+         testWait(10000);
+         sender.disable();
+      } catch (IOException ex) {
+         logTestPoint(false, "Error starting packet sender", "N/A", ex.getMessage());
       }
    }
 
diff --git a/org.eclipse.ote.simple.test.script/src/org/eclipse/ote/simple/test/script/SimpleTestScriptType.java b/org.eclipse.ote.simple.test.script/src/org/eclipse/ote/simple/test/script/SimpleTestScriptType.java
index 8afc2cd..b861d0e 100644
--- a/org.eclipse.ote.simple.test.script/src/org/eclipse/ote/simple/test/script/SimpleTestScriptType.java
+++ b/org.eclipse.ote.simple.test.script/src/org/eclipse/ote/simple/test/script/SimpleTestScriptType.java
@@ -13,31 +13,44 @@
 
 package org.eclipse.ote.simple.test.script;
 
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import org.eclipse.osee.framework.jdk.core.type.OseeArgumentException;
+import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
+import org.eclipse.osee.ote.core.TestCase;
 import org.eclipse.osee.ote.core.TestScript;
 import org.eclipse.osee.ote.core.enums.ScriptTypeEnum;
+import org.eclipse.osee.ote.core.environment.OteApi;
+import org.eclipse.osee.ote.core.environment.interfaces.ITestEnvironmentAccessor;
+import org.eclipse.osee.ote.core.environment.interfaces.ITestLogger;
 import org.eclipse.osee.ote.core.environment.jini.ITestEnvironmentCommandCallback;
 import org.eclipse.osee.ote.message.Message;
 import org.eclipse.osee.ote.message.MessageSystemTestEnvironment;
 import org.eclipse.osee.ote.message.interfaces.IMessageRequestor;
+import org.eclipse.ote.simple.test.environment.SimpleOteApi;
 
 /**
  * @author Michael P. Masterson
  */
 public class SimpleTestScriptType extends TestScript {
-   
+
    protected IMessageRequestor<Message> messageRequestor;
+   protected OteApi oteApi;
 
    @SuppressWarnings("unchecked")
    public SimpleTestScriptType(MessageSystemTestEnvironment testEnvironment, ITestEnvironmentCommandCallback callback) {
       super(testEnvironment, null, ScriptTypeEnum.FUNCTIONAL_TEST, true);
 
       messageRequestor = testEnvironment.getMsgManager().createMessageRequestor(getClass().getName());
+      this.oteApi = new SimpleOteApi();
+      testEnvironment.setOteApi(oteApi);
    }
-   
+
    protected <CLASSTYPE extends Message> CLASSTYPE getMessageWriter(Class<CLASSTYPE> type) {
       return messageRequestor.getMessageWriter(type);
    }
-   
+
    /**
     * Any time a requestor is created, it should be disposed of when done
     */
@@ -46,5 +59,33 @@
       messageRequestor.dispose();
       super.dispose();
    }
-   
-}
\ No newline at end of file
+
+   @Override
+   protected void addMethodAsTestCase(Method method) {
+      Class<?>[] parameterTypes = method.getParameterTypes();
+      if (parameterTypes.length != 1) {
+         throw new OseeArgumentException("Wrong method signature for test case method %s", method.getName());
+      }
+      if (parameterTypes[0].isAssignableFrom(this.oteApi.getClass()) || parameterTypes[0].equals(OteApi.class)) {
+         addTestCase(new TestCase(this, false, false) {
+
+            @Override
+            public void doTestCase(ITestEnvironmentAccessor environment, ITestLogger logger)
+                  throws InterruptedException {
+               try {
+                  method.invoke(getTestScript(), oteApi);
+               } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
+                  Throwable realThrowable = ex;
+                  while (realThrowable.getCause() != null) {
+                     realThrowable = realThrowable.getCause();
+                  }
+                  ex.printStackTrace(System.err);
+                  OseeCoreException.wrapAndThrow(realThrowable);
+               }
+            }
+         });
+      } else {
+         System.out.println("NOT RUNNING TEST CASE BASED ON CONFIGURATION NOT MATCHING - " + method.getName());
+      }
+   }
+}