[397429] - Committing codegen test cases fix
- https://bugs.eclipse.org/bugs/show_bug.cgi?id=397429
diff --git a/tests/org.eclipse.ocl.examples.codegen.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.ocl.examples.codegen.tests/META-INF/MANIFEST.MF
index b38e458..d250d3e 100644
--- a/tests/org.eclipse.ocl.examples.codegen.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.ocl.examples.codegen.tests/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.ocl.examples.codegen.tests;singleton:=true
+Bundle-SymbolicName: org.eclipse.ocl.examples.codegen.tests
Bundle-Version: 1.2.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Require-Bundle: org.eclipse.core.resources,
diff --git a/tests/org.eclipse.ocl.examples.codegen.tests/src/org/eclipse/ocl/examples/codegen/tests/interactive/TestExpr.java b/tests/org.eclipse.ocl.examples.codegen.tests/src/org/eclipse/ocl/examples/codegen/tests/interactive/TestExpr.java
index 2ca184a..ccf81b3 100644
--- a/tests/org.eclipse.ocl.examples.codegen.tests/src/org/eclipse/ocl/examples/codegen/tests/interactive/TestExpr.java
+++ b/tests/org.eclipse.ocl.examples.codegen.tests/src/org/eclipse/ocl/examples/codegen/tests/interactive/TestExpr.java
@@ -21,22 +21,33 @@
import org.eclipse.emf.codegen.ecore.genmodel.GenModel;
import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EcoreFactory;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.examples.codegen.common.CodeGenHelper;
+import org.eclipse.ocl.examples.codegen.dynamic.JavaGenModelCodeGenHelper;
//import org.eclipse.ocl.examples.codegen.dynamic.GenModelCodeGenHelper;
import org.eclipse.ocl.examples.domain.evaluation.DomainEvaluator;
import org.eclipse.ocl.examples.domain.library.LibraryOperation;
+import org.eclipse.ocl.examples.domain.types.IdResolver;
import org.eclipse.ocl.examples.domain.utilities.StandaloneProjectMap;
import org.eclipse.ocl.examples.domain.values.util.ValuesUtil;
import org.eclipse.ocl.examples.library.ecore.EcoreExecutorManager;
+import org.eclipse.ocl.examples.pivot.DataType;
import org.eclipse.ocl.examples.pivot.ExpressionInOCL;
import org.eclipse.ocl.examples.pivot.OCL;
import org.eclipse.ocl.examples.pivot.OperationCallExp;
+import org.eclipse.ocl.examples.pivot.Package;
import org.eclipse.ocl.examples.pivot.PivotFactory;
+import org.eclipse.ocl.examples.pivot.PivotPackage;
import org.eclipse.ocl.examples.pivot.PivotTables;
+import org.eclipse.ocl.examples.pivot.Root;
+import org.eclipse.ocl.examples.pivot.Type;
+import org.eclipse.ocl.examples.pivot.ecore.Ecore2Pivot;
import org.eclipse.ocl.examples.pivot.helper.OCLHelper;
import org.eclipse.ocl.examples.pivot.manager.MetaModelManager;
import org.eclipse.ocl.examples.pivot.model.OCLstdlib;
@@ -50,31 +61,54 @@
public class TestExpr extends TestCase
{
// private Logger log = Logger.getLogger(getClass());
- private ResourceSet resourceSet = null;
+ private ResourceSet resourceSet = null;
+ OCL ocl = OCL.newInstance();
// private boolean genOCLstdlib = false;
// protected String genModelFile;
- private void assertCgEquals(Object expectedResult, String expression) throws Exception {
- OCL ocl = OCL.newInstance();
+ private void assertCgEquals(Object expectedResult, String expression, Object contextObject) throws Exception {
+
OCLHelper helper = ocl.createOCLHelper();
- MetaModelManager metaModelManager = ocl.getMetaModelManager();
- helper.setContext(metaModelManager.getOclAnyType());
+ MetaModelManager metaModelManager = ocl.getMetaModelManager();
+ IdResolver idResolver = metaModelManager.getIdResolver();
+ Type contextType = contextObject == null ? metaModelManager.getOclAnyType()
+ : metaModelManager.getType(idResolver.getStaticTypeOf(contextObject));
+
+ helper.setContext(contextType);
+
ExpressionInOCL query = helper.createQuery(expression);
CodeGenHelper genModelHelper = getCodeGenHelper(metaModelManager);
- File targetFolder = new File("src-gen");
- String packageName = "test_package";
String className = getName();
+ String packageName = "test_package";
+ String tmpRootFolder = "junitTests/";
- LibraryOperation testInstance = genModelHelper.loadClass(query, targetFolder, packageName, className, true);
- DomainEvaluator evaluator = new EcoreExecutorManager(metaModelManager.getOclAnyType(), PivotTables.LIBRARY);
- OperationCallExp callExp = PivotFactory.eINSTANCE.createOperationCallExp();
- callExp.setType(query.getType());
- Object result = testInstance.evaluate(evaluator, callExp, testInstance);
- assertEquals(expectedResult, result);
+ String tmpRootFolderPath = System.getProperty("java.io.tmpdir") + tmpRootFolder;
+ File tmpFolder = new File (tmpRootFolderPath);
+
+
+ File finalClassFolder = new File(tmpRootFolderPath + packageName);
+ if (!finalClassFolder.exists()) {
+ finalClassFolder.mkdirs();
+ }
+
+ try {
+ LibraryOperation testInstance = genModelHelper.loadClass(query, tmpFolder, packageName, className, false); // FIXME genModelHelper.loadClass needs to be fixed
+ DomainEvaluator evaluator = new EcoreExecutorManager(metaModelManager.getOclAnyType(), PivotTables.LIBRARY);
+ OperationCallExp callExp = PivotFactory.eINSTANCE.createOperationCallExp();
+ callExp.setType(query.getType());
+ Object result = testInstance.evaluate(evaluator, callExp, testInstance);
+ assertEquals(expectedResult, result);
+ } finally {
+ tmpFolder.deleteOnExit();
+ }
}
+ private void assertCgEquals(Object expectedResult, String expression) throws Exception {
+ assertCgEquals(expectedResult, expression, null);
+ }
+
public CodeGenHelper getCodeGenHelper(@NonNull MetaModelManager metaModelManager) throws IOException {
URI genModelURI = URI.createPlatformResourceURI(
"/org.eclipse.ocl.examples.pivot/model/Pivot.merged.genmodel",
@@ -88,8 +122,7 @@
return null;
}
GenModel genModel = (GenModel) genModelResource.getContents().get(0);
-// return new GenModelCodeGenHelper(genModel,metaModelManager);
- return null;
+ return new JavaGenModelCodeGenHelper(genModel,metaModelManager);
}
public ResourceSet getResourceSet() {
@@ -120,4 +153,38 @@
public void testTrue() throws Exception, IllegalArgumentException, ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
assertCgEquals(Boolean.TRUE, "true");
}
+
+ public void testExists() throws Exception {
+ assertCgEquals(Boolean.TRUE, "Sequence{'foo'}->exists(x | x = 'foo')");
+ }
+
+ public void testBugXXXX2() throws Exception {
+// EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
+// ePackage.setName("CodegenBugXXXXXX");
+// ePackage.setNsPrefix(ePackage.getName());
+// ePackage.setNsURI("http://"+ePackage.getName());
+//
+// EDataType dataType = EcoreFactory.eINSTANCE.createEDataType();
+// dataType.setSerializable(true);
+// dataType.setInstanceTypeName("java.lanag.String");
+//
+ MetaModelManager mmManager = ocl.getMetaModelManager();
+//
+// mmManager.createPackage(pivotClass, pivotEClass, name, nsURI)
+ Root root = mmManager.createRoot("testBugXXXXX", "http://testBugXXXXX");
+ Package pPackage = mmManager.createPackage(Package.class, PivotPackage.Literals.PACKAGE, "testBugXXXXX_P1", "http://testBugXXXX/p1");
+ DataType customDataType = PivotFactory.eINSTANCE.createDataType();
+ customDataType.setInstanceClassName("java.lang.String");
+ customDataType.setName("MyString");
+ customDataType.setIsSerializable(true);
+
+ root.getNestedPackage().add(pPackage);
+ pPackage.getOwnedType().add(customDataType);
+
+
+ mmManager.installRoot(root);
+
+ String instance = "foo";
+ assertCgEquals(Boolean.TRUE, "let seq : Sequence(MyString) = Sequence{'foo'} in seq->exists(x | x = self)", instance);
+ }
}