Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxime Porhel2014-11-07 10:19:44 +0000
committerMaxime Porhel2014-11-19 09:59:08 +0000
commitdea709c6bdd029eb54676b2c87087ab484f4bb7a (patch)
tree74d8ec3b30c5f0dacaf74a56e346d22032019acf
parentf6356a72fe997f526563e9f8d6acad05257127f3 (diff)
downloadorg.eclipse.sirius-dea709c6bdd029eb54676b2c87087ab484f4bb7a.tar.gz
org.eclipse.sirius-dea709c6bdd029eb54676b2c87087ab484f4bb7a.tar.xz
org.eclipse.sirius-dea709c6bdd029eb54676b2c87087ab484f4bb7a.zip
[447729] Test to detect invalid variable in interpreted expression
The test checks the variables defined in our metamodels eannotations ("http://www.eclipse.org/sirius/interpreted/expression/variables"). It allows to reveal the issue of Bug 447729 with DiagramVariablesTest Bug: 447729 Change-Id: I05cd0aca52cfdf24023dc7c55cb2894dbb025d4a Signed-off-by: Maxime Porhel <maxime.porhel@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.tests.junit.support/src/org/eclipse/sirius/tests/support/api/AbstractInterpretedExpressionTestCase.java106
-rw-r--r--plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/vsm/interpreted/expression/variables/SiriusVariablesTest.java19
-rw-r--r--plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/diagram/sequence/vsm/interpreted/expression/variables/SequenceVariablesTest.java20
3 files changed, 133 insertions, 12 deletions
diff --git a/plugins/org.eclipse.sirius.tests.junit.support/src/org/eclipse/sirius/tests/support/api/AbstractInterpretedExpressionTestCase.java b/plugins/org.eclipse.sirius.tests.junit.support/src/org/eclipse/sirius/tests/support/api/AbstractInterpretedExpressionTestCase.java
index 2294786082..8e060ff5b6 100644
--- a/plugins/org.eclipse.sirius.tests.junit.support/src/org/eclipse/sirius/tests/support/api/AbstractInterpretedExpressionTestCase.java
+++ b/plugins/org.eclipse.sirius.tests.junit.support/src/org/eclipse/sirius/tests/support/api/AbstractInterpretedExpressionTestCase.java
@@ -11,6 +11,7 @@
package org.eclipse.sirius.tests.support.api;
import java.util.Collection;
+import java.util.LinkedHashSet;
import java.util.List;
import junit.framework.TestCase;
@@ -18,13 +19,17 @@ import junit.framework.TestCase;
import org.eclipse.emf.ecore.EAnnotation;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.sirius.viewpoint.ViewpointPackage;
import org.eclipse.sirius.viewpoint.description.DescriptionPackage;
import org.junit.Assert;
import com.google.common.base.Predicate;
+import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
+import com.google.common.collect.Multimap;
import com.google.common.collect.Sets;
/**
@@ -81,7 +86,106 @@ public abstract class AbstractInterpretedExpressionTestCase extends TestCase {
/**
* Test that all interpreted expression has a variable documentation.
*/
- public void testVariablesInterpretedExpressionEAnnotation() {
+ public void testVariableTypesInterpretedExpressionEAnnotation() {
+ Multimap<EAttribute, String> wrongTypes = ArrayListMultimap.create();
+
+ for (EAttribute attr : interpretedExpressions) {
+ EAnnotation varAnnotations = attr.getEAnnotation(AbstractInterpretedExpressionTestCase.VARIABLES);
+ if (varAnnotations != null) {
+ for (String varName : varAnnotations.getDetails().keySet()) {
+ String doc = varAnnotations.getDetails().get(varName);
+ if (doc != null && doc.indexOf("|") != -1) {
+ String typeName = doc.substring(0, doc.indexOf("|")).trim();
+ String errorMessage = validateVariableType(typeName);
+ if (errorMessage != null) {
+ wrongTypes.put(attr, varName + ":" + typeName + " > " + errorMessage);
+ }
+ }
+ }
+ }
+ }
+
+ Assert.assertTrue(getMessage(wrongTypes), wrongTypes.isEmpty());
+ }
+
+ private String getMessage(Multimap<EAttribute, String> wrongTypes) {
+ StringBuilder sb = new StringBuilder();
+ sb.append(wrongTypes.size());
+ sb.append(" variable(s) available in interpreted expressions need type correction:");
+ for (EAttribute attr : wrongTypes.keySet()) {
+ sb.append("\n . ");
+ sb.append(attr.eResource().getURIFragment(attr));
+ for (String v : wrongTypes.get(attr)) {
+ sb.append("\n . " + v);
+ }
+ }
+ return sb.toString();
+ }
+
+ private String validateVariableType(String typeName) {
+ String errorMessage = "cannot be checked, the test method must be improved";
+ if ("ecore.EObject".equals(typeName) || "EObject".equals(typeName)) {
+ errorMessage = null;
+ } else {
+ int indexOf = typeName.indexOf(".");
+ String pName = typeName.substring(0, indexOf).trim();
+ String cName = typeName.substring(indexOf + 1).trim();
+
+ EPackage ePackage = getEPackage(pName, getAvailablePackages());
+ if (ePackage != null) {
+ EClassifier eClassifier = ePackage.getEClassifier(cName);
+ if (eClassifier == null) {
+ errorMessage = "the EClass " + cName + " has not been found in the indicated EPackage.";
+ } else {
+ // Valid type.
+ errorMessage = null;
+ }
+ } else {
+ errorMessage = "the EPackage" + pName + " might not be accessible for the expression.";
+ }
+ }
+ return errorMessage;
+ }
+
+ private Collection<EPackage> getAvailablePackages() {
+ LinkedHashSet<EPackage> availablePackages = Sets.newLinkedHashSet();
+ availablePackages.add(basePackage);
+ availablePackages.add(getDialectPackage());
+ availablePackages.add(ViewpointPackage.eINSTANCE);
+ return availablePackages;
+ }
+
+ /**
+ * Allow to indicate which is the dialect package (in case of sur diagram
+ * types or dialect extension).
+ *
+ * @return the dialect package (or core base package)
+ */
+ protected EPackage getDialectPackage() {
+ return getBasePackage();
+ }
+
+ private EPackage getEPackage(String pName, Collection<EPackage> packages) {
+ EPackage found = null;
+ for (EPackage p : packages) {
+ if (p.getName().equals(pName)) {
+ found = p;
+ } else {
+ found = getEPackage(pName, p.getESubpackages());
+ }
+
+ if (found != null) {
+ break;
+ }
+ }
+ return found;
+
+ }
+
+ /**
+ * Test that all interpreted expression variables have a known type.
+ */
+ public void testVariablesInInterpretedExpressionEAnnotation() {
List<EAttribute> nonDocumented = Lists.newArrayList();
Predicate<EAttribute> needsDocumentation = new Predicate<EAttribute>() {
diff --git a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/vsm/interpreted/expression/variables/SiriusVariablesTest.java b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/vsm/interpreted/expression/variables/SiriusVariablesTest.java
index 90efd96659..156845b87f 100644
--- a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/vsm/interpreted/expression/variables/SiriusVariablesTest.java
+++ b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/vsm/interpreted/expression/variables/SiriusVariablesTest.java
@@ -10,6 +10,8 @@
*******************************************************************************/
package org.eclipse.sirius.tests.unit.api.vsm.interpreted.expression.variables;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.sirius.diagram.DiagramPackage;
import org.eclipse.sirius.tests.support.api.AbstractInterpretedExpressionTestCase;
import org.eclipse.sirius.viewpoint.ViewpointPackage;
@@ -20,9 +22,16 @@ import org.eclipse.sirius.viewpoint.ViewpointPackage;
*/
public class SiriusVariablesTest extends AbstractInterpretedExpressionTestCase {
- @Override
- protected void setUp() throws Exception {
- setBasePackage(ViewpointPackage.eINSTANCE);
- super.setUp();
- }
+ @Override
+ protected void setUp() throws Exception {
+ setBasePackage(ViewpointPackage.eINSTANCE);
+ super.setUp();
+ }
+
+ @Override
+ protected EPackage getDialectPackage() {
+ // Required until Bug 450473 correction: viewpoint.ecore contains
+ // variables typed with diagram.Diagram
+ return DiagramPackage.eINSTANCE;
+ }
}
diff --git a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/diagram/sequence/vsm/interpreted/expression/variables/SequenceVariablesTest.java b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/diagram/sequence/vsm/interpreted/expression/variables/SequenceVariablesTest.java
index 14341e56a0..af8c0d0c1c 100644
--- a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/diagram/sequence/vsm/interpreted/expression/variables/SequenceVariablesTest.java
+++ b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/diagram/sequence/vsm/interpreted/expression/variables/SequenceVariablesTest.java
@@ -10,6 +10,8 @@
*******************************************************************************/
package org.eclipse.sirius.tests.unit.diagram.sequence.vsm.interpreted.expression.variables;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.sirius.diagram.DiagramPackage;
import org.eclipse.sirius.diagram.sequence.SequencePackage;
import org.eclipse.sirius.tests.support.api.AbstractInterpretedExpressionTestCase;
@@ -18,11 +20,17 @@ import org.eclipse.sirius.tests.support.api.AbstractInterpretedExpressionTestCas
*
* @author mporhel
*/
-public class SequenceVariablesTest extends AbstractInterpretedExpressionTestCase {
+public class SequenceVariablesTest extends
+ AbstractInterpretedExpressionTestCase {
- @Override
- protected void setUp() throws Exception {
- setBasePackage(SequencePackage.eINSTANCE);
- super.setUp();
- }
+ @Override
+ protected void setUp() throws Exception {
+ setBasePackage(SequencePackage.eINSTANCE);
+ super.setUp();
+ }
+
+ @Override
+ protected EPackage getDialectPackage() {
+ return DiagramPackage.eINSTANCE;
+ }
}

Back to the top