Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian W. Damus2021-04-01 15:33:20 +0000
committerPatrick Tessier2021-04-12 09:23:18 +0000
commit5f60acc76eb5f16c35933809251f32349a5d5e62 (patch)
treee082e9398fc3979e1e5aea4537a5d6642530e62b /tests/junit
parent1098a37bdff21130b69f36329934ea63df14fa71 (diff)
downloadorg.eclipse.papyrus-5f60acc76eb5f16c35933809251f32349a5d5e62.tar.gz
org.eclipse.papyrus-5f60acc76eb5f16c35933809251f32349a5d5e62.tar.xz
org.eclipse.papyrus-5f60acc76eb5f16c35933809251f32349a5d5e62.zip
Bug 572532: [Tests] UML validateCamelCaseRule test fails consistently
OCL Pivot maintains environments on a per-thread basis, which means the Modal Context thread cannot use an environment set up by pre-validation hooks on the main thread. Thus this pre-processing needs to be performed on the Modal Context thread also and the test needs to be updated to use the hook mechanism to inject its OCL constraints from the file. Change-Id: Id3fdb3b9f8ab876d9ad6a7b39500684c18133f28 Signed-off-by: Christian W. Damus <give.a.damus@gmail.com>
Diffstat (limited to 'tests/junit')
-rw-r--r--tests/junit/plugins/uml/validation/org.eclipse.papyrus.uml.validation.tests/build.properties3
-rw-r--r--tests/junit/plugins/uml/validation/org.eclipse.papyrus.uml.validation.tests/plugin.xml13
-rw-r--r--tests/junit/plugins/uml/validation/org.eclipse.papyrus.uml.validation.tests/src/org/eclipse/papyrus/uml/validation/tests/rules/TestOCLValidationRuleFromFile.java99
3 files changed, 86 insertions, 29 deletions
diff --git a/tests/junit/plugins/uml/validation/org.eclipse.papyrus.uml.validation.tests/build.properties b/tests/junit/plugins/uml/validation/org.eclipse.papyrus.uml.validation.tests/build.properties
index 4d4e8d3850e..8016c52afa4 100644
--- a/tests/junit/plugins/uml/validation/org.eclipse.papyrus.uml.validation.tests/build.properties
+++ b/tests/junit/plugins/uml/validation/org.eclipse.papyrus.uml.validation.tests/build.properties
@@ -4,7 +4,8 @@ bin.includes = .,\
resources/,\
META-INF/,\
plugin.properties,\
- about.html
+ about.html,\
+ plugin.xml
jars.compile.order = .
source.. = src/
output.. = bin/
diff --git a/tests/junit/plugins/uml/validation/org.eclipse.papyrus.uml.validation.tests/plugin.xml b/tests/junit/plugins/uml/validation/org.eclipse.papyrus.uml.validation.tests/plugin.xml
new file mode 100644
index 00000000000..325f22b86bf
--- /dev/null
+++ b/tests/junit/plugins/uml/validation/org.eclipse.papyrus.uml.validation.tests/plugin.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.papyrus.infra.services.validation.validationHooks">
+ <validationHook
+ filter="org.eclipse.papyrus.uml.validation.tests.rules.TestOCLValidationRuleFromFile$HookFilter"
+ hook="org.eclipse.papyrus.uml.validation.tests.rules.TestOCLValidationRuleFromFile$Hook"
+ id="org.eclipse.papyrus.uml.validation.tests.OCLRulesFromFile">
+ </validationHook>
+ </extension>
+
+</plugin>
diff --git a/tests/junit/plugins/uml/validation/org.eclipse.papyrus.uml.validation.tests/src/org/eclipse/papyrus/uml/validation/tests/rules/TestOCLValidationRuleFromFile.java b/tests/junit/plugins/uml/validation/org.eclipse.papyrus.uml.validation.tests/src/org/eclipse/papyrus/uml/validation/tests/rules/TestOCLValidationRuleFromFile.java
index 6f3a5470bbb..3aee7c57961 100644
--- a/tests/junit/plugins/uml/validation/org.eclipse.papyrus.uml.validation.tests/src/org/eclipse/papyrus/uml/validation/tests/rules/TestOCLValidationRuleFromFile.java
+++ b/tests/junit/plugins/uml/validation/org.eclipse.papyrus.uml.validation.tests/src/org/eclipse/papyrus/uml/validation/tests/rules/TestOCLValidationRuleFromFile.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2014 CEA LIST.
+ * Copyright (c) 2014, 2021 CEA LIST, Christian W. Damus, and others.
*
*
* All rights reserved. This program and the accompanying materials
@@ -12,6 +12,7 @@
* Contributors:
* Benoit Maggi (CEA LIST) benoit.maggi@cea.fr - Initial API and implementation
* Ansgar Radermacher (CEA) ansgar.radermacher@cea.fr - Extension to validation test suite
+ * Christian W. Damus - bug 572532
*
*****************************************************************************/
package org.eclipse.papyrus.uml.validation.tests.rules;
@@ -20,12 +21,15 @@ import java.util.List;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.transaction.util.TransactionUtil;
import org.eclipse.ocl.pivot.internal.resource.OCLAdapter;
import org.eclipse.ocl.xtext.completeocl.utilities.CompleteOCLLoader;
import org.eclipse.papyrus.infra.emf.gmf.command.GMFtoEMFCommandWrapper;
+import org.eclipse.papyrus.infra.services.validation.IValidationFilter;
+import org.eclipse.papyrus.infra.services.validation.IValidationHook;
import org.eclipse.papyrus.infra.services.validation.commands.ValidateModelCommand;
import org.eclipse.papyrus.uml.validation.tests.Activator;
import org.eclipse.papyrus.uml.validation.tests.Messages;
@@ -33,6 +37,7 @@ import org.eclipse.swt.widgets.Display;
import org.eclipse.uml2.uml.Class;
import org.eclipse.uml2.uml.Model;
import org.eclipse.uml2.uml.Package;
+import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -53,47 +58,25 @@ public class TestOCLValidationRuleFromFile extends AbstractValidationEditorTest
protected final static String CLASS_LOWER_CASE = "lowerCaseClass"; //$NON-NLS-1$
+ private static volatile boolean testRunning;
+
/* class starting with a lower case name (violates constraint in external OCL file) */
protected Class lowerCaseClass;
@Before
public void initModelForValidationTest() throws Exception {
+ testRunning = true;
initModel(PROJECT_PREFIX + MODEL_NAME, MODEL_NAME, Activator.getDefault().getBundle());
Model model = (Model) getRootUMLModel();
Package pkg = (Package) model.getPackagedElement(PKG_OCL_FROM_FILE);
Assert.assertNotNull(String.format(CAN_NOT_FIND_ELEMENT, PKG_OCL_FROM_FILE, model), pkg);
-
+
lowerCaseClass = (Class) pkg.getPackagedElement(CLASS_LOWER_CASE);
Assert.assertNotNull(String.format(CAN_NOT_FIND_ELEMENT, CLASS_LOWER_CASE, model), lowerCaseClass);
- // Registering OCL components
- //
- ResourceSet modelResources = model.eResource().getResourceSet();
- OCLAdapter oclAdapter = OCLAdapter.getAdapter(modelResources);
- CompleteOCLLoader helper = new CompleteOCLLoader(oclAdapter.getEnvironmentFactory()) {
- @Override
- protected boolean error(String primaryMessage, String detailMessage) {
- Assert.fail(Messages.TestOCLValidationRuleFromFile_CanNotGetEnvFactory);
- return false;
- }
- };
- Assert.assertTrue(Messages.TestOCLValidationRuleFromFile_OCLCanNotLoadMM, helper.loadMetamodels());
-
- // load OCL file
- URI oclURI = URI.createPlatformPluginURI(Activator.PLUGIN_ID + RESOURCES_PATH + EXTRA_UML_VALIDATION_OCL, false);
- try {
- if (!helper.loadDocument(oclURI)) {
- Assert.fail("Can not load OCL document with URI: " + oclURI.path()); //$NON-NLS-1$
- }
- } catch (Throwable e) {
- Assert.fail(String.format("Exception %s during loading of OCL document with URI: %s", e.getMessage(), oclURI.path())); //$NON-NLS-1$
- }
- helper.installPackages();
-
- // it's important to create the validate model command after the OCL file has been loaded
final ValidateModelCommand validateModelCommand = new ValidateModelCommand(model);
-
+
final EditingDomain domain = TransactionUtil.getEditingDomain(model);
Display.getDefault().syncExec(new Runnable() {
@Override
@@ -104,6 +87,11 @@ public class TestOCLValidationRuleFromFile extends AbstractValidationEditorTest
globalDiagnostic = validateModelCommand.getDiagnostic();
}
+ @After
+ public void afterTest() {
+ testRunning = false;
+ }
+
/**
* Failing validation for rule defined in ExtraUMLValidation
*/
@@ -115,4 +103,59 @@ public class TestOCLValidationRuleFromFile extends AbstractValidationEditorTest
Messages.TestOCLValidationRuleFromFile_CamelCaseRule, EXTRA_UML_VALIDATION_OCL),
1, diagnostics.size());
}
+
+ //
+ // Nested types
+ //
+
+ /**
+ * A validation filter that matches while our tests are running.
+ */
+ public static final class HookFilter implements IValidationFilter {
+
+ @Override
+ public boolean isApplicable(EObject element) {
+ return testRunning;
+ }
+
+ }
+
+ /**
+ * A validation hook that installs our test OCL resource.
+ */
+ public static final class Hook implements IValidationHook {
+
+ @Override
+ public void beforeValidation(EObject element) {
+ // Registering OCL components
+ //
+ ResourceSet modelResources = element.eResource().getResourceSet();
+ OCLAdapter oclAdapter = OCLAdapter.getAdapter(modelResources);
+ CompleteOCLLoader helper = new CompleteOCLLoader(oclAdapter.getEnvironmentFactory()) {
+ @Override
+ protected boolean error(String primaryMessage, String detailMessage) {
+ Assert.fail(Messages.TestOCLValidationRuleFromFile_CanNotGetEnvFactory);
+ return false;
+ }
+ };
+ Assert.assertTrue(Messages.TestOCLValidationRuleFromFile_OCLCanNotLoadMM, helper.loadMetamodels());
+
+ // load OCL file
+ URI oclURI = URI.createPlatformPluginURI(Activator.PLUGIN_ID + RESOURCES_PATH + EXTRA_UML_VALIDATION_OCL, false);
+ try {
+ if (!helper.loadDocument(oclURI)) {
+ Assert.fail("Can not load OCL document with URI: " + oclURI.path()); //$NON-NLS-1$
+ }
+ } catch (Throwable e) {
+ Assert.fail(String.format("Exception %s during loading of OCL document with URI: %s", e.getMessage(), oclURI.path())); //$NON-NLS-1$
+ }
+ helper.installPackages();
+ }
+
+ @Override
+ public void afterValidation(EObject element) {
+ // Not needed
+ }
+
+ }
}

Back to the top