[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); + } }