Bug 513736: [UnitTest] Iassertion should support throwOnError()
Change-Id: Ifb0f6d4fa5f68f9d0da9f8713bbf4e75e3a004e8
diff --git a/plugins/org.eclipse.ease.modules.unittest/src/org/eclipse/ease/modules/unittest/modules/DefaultAssertion.java b/plugins/org.eclipse.ease.modules.unittest/src/org/eclipse/ease/modules/unittest/modules/DefaultAssertion.java
index 8bb590e..e8792d0 100644
--- a/plugins/org.eclipse.ease.modules.unittest/src/org/eclipse/ease/modules/unittest/modules/DefaultAssertion.java
+++ b/plugins/org.eclipse.ease.modules.unittest/src/org/eclipse/ease/modules/unittest/modules/DefaultAssertion.java
@@ -12,7 +12,11 @@
import java.util.List;
+import org.eclipse.ease.AbstractScriptEngine;
+import org.eclipse.ease.IScriptEngine;
import org.eclipse.ease.debugging.IScriptDebugFrame;
+import org.eclipse.ease.modules.AbstractEnvironment;
+import org.eclipse.ease.modules.IEnvironment;
/**
* A default implementation for {@link IAssertion} that adds support for error messages.
@@ -20,14 +24,14 @@
public class DefaultAssertion implements IAssertion {
/** Optional error message. */
- private final String fDescription;
+ private final String fErrorMessage;
private final boolean fValid;
private final List<IScriptDebugFrame> fStackTrace;
public DefaultAssertion(final List<IScriptDebugFrame> stackTrace, final boolean valid, final String errorDescription) {
fStackTrace = stackTrace;
fValid = valid;
- fDescription = errorDescription;
+ fErrorMessage = errorDescription;
}
public DefaultAssertion(final boolean valid, final String errorDescription) {
@@ -58,9 +62,30 @@
if (isValid())
return IAssertion.VALID.toString();
- if (fDescription != null)
- return fDescription;
+ if (fErrorMessage != null)
+ return fErrorMessage;
return IAssertion.INVALID.toString();
}
+
+ @Override
+ public void throwOnError() throws Exception {
+ if (!isValid()) {
+ // are we running within the unit test framework?
+ final IScriptEngine scriptEngine = AbstractScriptEngine.getCurrentScriptEngine();
+ if (scriptEngine != null) {
+ final IEnvironment environment = AbstractEnvironment.getEnvironment(scriptEngine);
+ if (environment != null) {
+ final UnitTestModule module = environment.getModule(UnitTestModule.class);
+ if (module != null) {
+ if (module.getTestFile() != null)
+ // running within unit test framework
+ return;
+ }
+ }
+ }
+
+ throw new Exception(toString());
+ }
+ }
}
diff --git a/plugins/org.eclipse.ease.modules.unittest/src/org/eclipse/ease/modules/unittest/modules/IAssertion.java b/plugins/org.eclipse.ease.modules.unittest/src/org/eclipse/ease/modules/unittest/modules/IAssertion.java
index 2b4d07e..7587617 100644
--- a/plugins/org.eclipse.ease.modules.unittest/src/org/eclipse/ease/modules/unittest/modules/IAssertion.java
+++ b/plugins/org.eclipse.ease.modules.unittest/src/org/eclipse/ease/modules/unittest/modules/IAssertion.java
@@ -10,6 +10,11 @@
*******************************************************************************/
package org.eclipse.ease.modules.unittest.modules;
+import org.eclipse.ease.AbstractScriptEngine;
+import org.eclipse.ease.IScriptEngine;
+import org.eclipse.ease.modules.AbstractEnvironment;
+import org.eclipse.ease.modules.IEnvironment;
+
/**
* Return value type that can be checked for validity.
*/
@@ -28,6 +33,11 @@
public String toString() {
return "OK";
}
+
+ @Override
+ public void throwOnError() throws Exception {
+ // nothing to do
+ }
};
/**
@@ -44,6 +54,25 @@
public String toString() {
return "Assertion failed";
}
+
+ @Override
+ public void throwOnError() throws Exception {
+ // are we running within the unit test framework?
+ final IScriptEngine scriptEngine = AbstractScriptEngine.getCurrentScriptEngine();
+ if (scriptEngine != null) {
+ final IEnvironment environment = AbstractEnvironment.getEnvironment(scriptEngine);
+ if (environment != null) {
+ final UnitTestModule module = environment.getModule(UnitTestModule.class);
+ if (module != null) {
+ if (module.getTestFile() != null)
+ // running within unit test framework
+ return;
+ }
+ }
+ }
+
+ throw new Exception(toString());
+ }
};
/**
@@ -52,4 +81,13 @@
* @return <code>true</code> on valid assertion
*/
boolean isValid();
+
+ /**
+ * Throws an exception when the assertion is not valid and run outside of the unit test framework. When run within the unit test framework this method is
+ * not evaluated and will do nothing.
+ *
+ * @throws Exception
+ * thrown when assertion is not valid
+ */
+ void throwOnError() throws Exception;
}
diff --git a/plugins/org.eclipse.ease.modules.unittest/src/org/eclipse/ease/modules/unittest/modules/MergedAssertion.java b/plugins/org.eclipse.ease.modules.unittest/src/org/eclipse/ease/modules/unittest/modules/MergedAssertion.java
index 6e12527..ff73545 100644
--- a/plugins/org.eclipse.ease.modules.unittest/src/org/eclipse/ease/modules/unittest/modules/MergedAssertion.java
+++ b/plugins/org.eclipse.ease.modules.unittest/src/org/eclipse/ease/modules/unittest/modules/MergedAssertion.java
@@ -19,26 +19,15 @@
/**
* An assertion that merges the results of other assertions.
*/
-public class MergedAssertion implements IAssertion {
+public class MergedAssertion extends DefaultAssertion {
/** Child assertions. */
- private final Collection<IAssertion> fAssertions = new ArrayList<IAssertion>();
-
- /** Merged error message. */
- private final String fErrorMessage;
+ private final Collection<IAssertion> fAssertions = new ArrayList<>();
/** Merged valid message. */
private final String fValidMessage;
/**
- * Constructor. Uses default message for valid case and the first error message from all stored assertion in an error case.
- */
- public MergedAssertion() {
- fValidMessage = IAssertion.VALID.toString();
- fErrorMessage = null;
- }
-
- /**
* Constructor. Accepts messages for the valid and for the error case.
*
* @param validMessage
@@ -47,8 +36,15 @@
* message for error case
*/
public MergedAssertion(final String validMessage, final String errorMessage) {
+ super(errorMessage);
fValidMessage = validMessage;
- fErrorMessage = errorMessage;
+ }
+
+ /**
+ * Constructor. Uses default message for valid case and the first error message from all stored assertion in an error case.
+ */
+ public MergedAssertion() {
+ this(IAssertion.VALID.toString(), IAssertion.INVALID.toString());
}
/**
@@ -58,8 +54,7 @@
* message for error case
*/
public MergedAssertion(final String errorMessage) {
- fValidMessage = IAssertion.VALID.toString();
- fErrorMessage = errorMessage;
+ this(IAssertion.VALID.toString(), errorMessage);
}
/**
@@ -86,8 +81,9 @@
if (isValid())
return fValidMessage;
- if (fErrorMessage != null)
- return fErrorMessage;
+ // take user defied error message if set by user
+ if (!IAssertion.INVALID.toString().equals(super.toString()))
+ return super.toString();
final StringBuilder message = new StringBuilder();
for (final IAssertion assertion : fAssertions) {