package org.eclipse.emf.ecore.xcore.tests.interpreter; import com.google.inject.Inject; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.common.util.BasicEList; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EDataType; import org.eclipse.emf.ecore.EEnum; import org.eclipse.emf.ecore.EEnumLiteral; import org.eclipse.emf.ecore.EFactory; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EOperation; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.xcore.XPackage; import org.eclipse.emf.ecore.xcore.XcoreInjectorProvider; import org.eclipse.xtext.junit4.InjectWith; import org.eclipse.xtext.junit4.XtextRunner; import org.eclipse.xtext.junit4.util.ParseHelper; import org.eclipse.xtext.junit4.validation.ValidationTestHelper; import org.eclipse.xtext.xbase.lib.CollectionLiterals; import org.eclipse.xtext.xbase.lib.IterableExtensions; import org.eclipse.xtext.xtend2.lib.StringConcatenation; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @SuppressWarnings("all") @RunWith(XtextRunner.class) @InjectWith(XcoreInjectorProvider.class) public class XcoreInterpreterTest { @Inject private ParseHelper<XPackage> parse; @Inject private ValidationTestHelper validator; @Test public void testInterpretation() throws Exception, InvocationTargetException { StringConcatenation _builder = new StringConcatenation(); _builder.append("package foo.bar"); _builder.newLine(); _builder.newLine(); _builder.append("class Foo {"); _builder.newLine(); _builder.append("\t"); _builder.append("op String doStuff(String msg) {"); _builder.newLine(); _builder.append("\t\t"); _builder.append("return \"Foo says hi to \"+msg"); _builder.newLine(); _builder.append("\t"); _builder.append("}"); _builder.newLine(); _builder.append("}"); _builder.newLine(); XPackage _parse = this.parse.parse(_builder); final XPackage pack = _parse; this.validator.assertNoErrors(pack); Resource _eResource = pack.eResource(); EList<EObject> _contents = _eResource.getContents(); EObject _get = _contents.get(2); final EPackage ePackage = ((EPackage) _get); EClassifier _eClassifier = ePackage.getEClassifier("Foo"); final EClass fooClass = ((EClass) _eClassifier); EFactory _eFactoryInstance = ePackage.getEFactoryInstance(); EObject _create = _eFactoryInstance.create(fooClass); final EObject foo = _create; EList<EOperation> _eOperations = fooClass.getEOperations(); EOperation _head = IterableExtensions.<EOperation>head(_eOperations); ArrayList<String> _newArrayList = CollectionLiterals.<String>newArrayList("Bar"); BasicEList<String> _basicEList = new BasicEList<String>(_newArrayList); Object _eInvoke = foo.eInvoke(_head, _basicEList); Assert.assertEquals("Foo says hi to Bar", _eInvoke); } @Test public void testInterpretation_2() throws Exception, InvocationTargetException { StringConcatenation _builder = new StringConcatenation(); _builder.append("package foo.bar"); _builder.newLine(); _builder.newLine(); _builder.append("class Foo {"); _builder.newLine(); _builder.append("\t"); _builder.append("op String call1(String msg) {"); _builder.newLine(); _builder.append("\t\t"); _builder.append("return \"call1\"+call2(\"call1\"+msg)"); _builder.newLine(); _builder.append("\t"); _builder.append("}"); _builder.newLine(); _builder.append("\t"); _builder.newLine(); _builder.append("\t"); _builder.append("op String call2(String msg) {"); _builder.newLine(); _builder.append("\t\t"); _builder.append("return \"call2\"+msg"); _builder.newLine(); _builder.append("\t"); _builder.append("}"); _builder.newLine(); _builder.append("}"); _builder.newLine(); XPackage _parse = this.parse.parse(_builder); final XPackage pack = _parse; this.validator.assertNoErrors(pack); Resource _eResource = pack.eResource(); EList<EObject> _contents = _eResource.getContents(); EObject _get = _contents.get(2); final EPackage ePackage = ((EPackage) _get); EClassifier _eClassifier = ePackage.getEClassifier("Foo"); final EClass fooClass = ((EClass) _eClassifier); EFactory _eFactoryInstance = ePackage.getEFactoryInstance(); EObject _create = _eFactoryInstance.create(fooClass); final EObject foo = _create; EList<EOperation> _eOperations = fooClass.getEOperations(); EOperation _head = IterableExtensions.<EOperation>head(_eOperations); ArrayList<String> _newArrayList = CollectionLiterals.<String>newArrayList("Bar"); BasicEList<String> _basicEList = new BasicEList<String>(_newArrayList); Object _eInvoke = foo.eInvoke(_head, _basicEList); Assert.assertEquals("call1call2call1Bar", _eInvoke); } @Test public void testFeatureAccessors() throws Exception, InvocationTargetException { StringConcatenation _builder = new StringConcatenation(); _builder.append("package foo.bar"); _builder.newLine(); _builder.newLine(); _builder.append("class Foo {"); _builder.newLine(); _builder.append("\t"); _builder.append("String value"); _builder.newLine(); _builder.append("\t"); _builder.append("op void storeValue(String newValue) {"); _builder.newLine(); _builder.append("\t\t"); _builder.append("value = newValue"); _builder.newLine(); _builder.append("\t"); _builder.append("}"); _builder.newLine(); _builder.append("\t"); _builder.newLine(); _builder.append("\t"); _builder.append("op String fetchValue() {"); _builder.newLine(); _builder.append("\t\t"); _builder.append("return value"); _builder.newLine(); _builder.append("\t"); _builder.append("}"); _builder.newLine(); _builder.append("}"); _builder.newLine(); XPackage _parse = this.parse.parse(_builder); final XPackage pack = _parse; this.validator.assertNoErrors(pack); Resource _eResource = pack.eResource(); EList<EObject> _contents = _eResource.getContents(); EObject _get = _contents.get(2); final EPackage ePackage = ((EPackage) _get); EClassifier _eClassifier = ePackage.getEClassifier("Foo"); final EClass fooClass = ((EClass) _eClassifier); EFactory _eFactoryInstance = ePackage.getEFactoryInstance(); EObject _create = _eFactoryInstance.create(fooClass); final EObject foo = _create; EList<EOperation> _eOperations = fooClass.getEOperations(); EOperation _head = IterableExtensions.<EOperation>head(_eOperations); ArrayList<String> _newArrayList = CollectionLiterals.<String>newArrayList("Bar"); BasicEList<String> _basicEList = new BasicEList<String>(_newArrayList); foo.eInvoke(_head, _basicEList); EList<EOperation> _eOperations_1 = fooClass.getEOperations(); EOperation _get_1 = _eOperations_1.get(1); Object _eInvoke = foo.eInvoke(_get_1, null); Assert.assertEquals("Bar", _eInvoke); } @Test public void testConversionDelegates() throws Exception { StringConcatenation _builder = new StringConcatenation(); _builder.append("package foo.bar "); _builder.newLine(); _builder.newLine(); _builder.append("type URI wraps org.eclipse.emf.common.util.URI "); _builder.newLine(); _builder.append("create { if (it == null) null else org::eclipse::emf::common::util::URI::createURI(it) } "); _builder.newLine(); _builder.append("convert { it?.toString }"); _builder.newLine(); XPackage _parse = this.parse.parse(_builder); final XPackage pack = _parse; this.validator.assertNoErrors(pack); Resource _eResource = pack.eResource(); EList<EObject> _contents = _eResource.getContents(); EObject _get = _contents.get(2); final EPackage ePackage = ((EPackage) _get); EClassifier _eClassifier = ePackage.getEClassifier("URI"); final EDataType uriDataType = ((EDataType) _eClassifier); final String literal = "http://www.eclipse.org"; EFactory _eFactoryInstance = ePackage.getEFactoryInstance(); Object _createFromString = _eFactoryInstance.createFromString(uriDataType, literal); final URI uri = ((URI) _createFromString); EFactory _eFactoryInstance_1 = ePackage.getEFactoryInstance(); String _convertToString = _eFactoryInstance_1.convertToString(uriDataType, uri); Assert.assertEquals(literal, _convertToString); } @Test public void testSettingDelegates() throws Exception { StringConcatenation _builder = new StringConcatenation(); _builder.append("package foo.bar"); _builder.newLine(); _builder.append("class Foo"); _builder.newLine(); _builder.append("{"); _builder.newLine(); _builder.append("\t"); _builder.append("String name"); _builder.newLine(); _builder.append("\t"); _builder.append("String alias get { name}"); _builder.newLine(); _builder.append("}"); _builder.newLine(); XPackage _parse = this.parse.parse(_builder); final XPackage pack = _parse; this.validator.assertNoErrors(pack); Resource _eResource = pack.eResource(); EList<EObject> _contents = _eResource.getContents(); EObject _get = _contents.get(2); final EPackage ePackage = ((EPackage) _get); EClassifier _eClassifier = ePackage.getEClassifier("Foo"); final EClass fooClass = ((EClass) _eClassifier); EFactory _eFactoryInstance = ePackage.getEFactoryInstance(); EObject _create = _eFactoryInstance.create(fooClass); final EObject foo = _create; EStructuralFeature _eStructuralFeature = fooClass.getEStructuralFeature("name"); foo.eSet(_eStructuralFeature, "Sven"); EStructuralFeature _eStructuralFeature_1 = fooClass.getEStructuralFeature("alias"); Object _eGet = foo.eGet(_eStructuralFeature_1); Assert.assertEquals("Sven", _eGet); } @Test public void testEnum() throws Exception { StringConcatenation _builder = new StringConcatenation(); _builder.append("package foo.bar"); _builder.newLine(); _builder.append("enum NodeKind { Singleton Root Intermediate Leaf }"); _builder.newLine(); _builder.append("class Node"); _builder.newLine(); _builder.append("{"); _builder.newLine(); _builder.append("\t"); _builder.append("refers Node parent opposite children"); _builder.newLine(); _builder.append("\t"); _builder.append("contains Node[0..*] children opposite parent"); _builder.newLine(); _builder.append("\t"); _builder.append("op boolean hasChildren() { !children.empty }"); _builder.newLine(); _builder.append("\t"); _builder.append("transient volatile derived readonly NodeKind nodeKind"); _builder.newLine(); _builder.append("\t"); _builder.append("get"); _builder.newLine(); _builder.append("\t"); _builder.append("{"); _builder.newLine(); _builder.append("\t\t"); _builder.append("if (hasChildren()) {if (parent == null) {NodeKind::ROOT} else {NodeKind::INTERMEDIATE}}"); _builder.newLine(); _builder.append("\t\t"); _builder.append("else {if (parent == null) {NodeKind::SINGLETON} else {NodeKind::LEAF}}"); _builder.newLine(); _builder.append("\t"); _builder.append("}"); _builder.newLine(); _builder.append("}"); _builder.newLine(); XPackage _parse = this.parse.parse(_builder); final XPackage pack = _parse; this.validator.assertNoErrors(pack); Resource _eResource = pack.eResource(); EList<EObject> _contents = _eResource.getContents(); EObject _get = _contents.get(2); final EPackage ePackage = ((EPackage) _get); EClassifier _eClassifier = ePackage.getEClassifier("NodeKind"); final EEnum nodeKindEnum = ((EEnum) _eClassifier); EClassifier _eClassifier_1 = ePackage.getEClassifier("Node"); final EClass nodeClass = ((EClass) _eClassifier_1); EFactory _eFactoryInstance = ePackage.getEFactoryInstance(); EObject _create = _eFactoryInstance.create(nodeClass); final EObject node = _create; EEnumLiteral _eEnumLiteral = nodeKindEnum.getEEnumLiteral("Singleton"); EStructuralFeature _eStructuralFeature = nodeClass.getEStructuralFeature("nodeKind"); Object _eGet = node.eGet(_eStructuralFeature); Assert.assertEquals(_eEnumLiteral, _eGet); EFactory _eFactoryInstance_1 = ePackage.getEFactoryInstance(); EObject _create_1 = _eFactoryInstance_1.create(nodeClass); final EObject childNode = _create_1; EStructuralFeature _eStructuralFeature_1 = nodeClass.getEStructuralFeature("children"); Object _eGet_1 = node.eGet(_eStructuralFeature_1); ((List) _eGet_1).add(childNode); EEnumLiteral _eEnumLiteral_1 = nodeKindEnum.getEEnumLiteral("Root"); EStructuralFeature _eStructuralFeature_2 = nodeClass.getEStructuralFeature("nodeKind"); Object _eGet_2 = node.eGet(_eStructuralFeature_2); Assert.assertEquals(_eEnumLiteral_1, _eGet_2); } }