/**
* Copyright (c) 2011-2012 Eclipse contributors and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.eclipse.emf.test.ecore.xcore;
import com.google.common.collect.Iterables;
import com.google.inject.Inject;
import java.util.Iterator;
import org.eclipse.emf.codegen.ecore.genmodel.GenBase;
import org.eclipse.emf.codegen.ecore.genmodel.GenClass;
import org.eclipse.emf.codegen.ecore.genmodel.GenClassifier;
import org.eclipse.emf.codegen.ecore.genmodel.GenFeature;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.xcore.XAnnotation;
import org.eclipse.emf.ecore.xcore.XAnnotationDirective;
import org.eclipse.emf.ecore.xcore.XAttribute;
import org.eclipse.emf.ecore.xcore.XClass;
import org.eclipse.emf.ecore.xcore.XClassifier;
import org.eclipse.emf.ecore.xcore.XGenericType;
import org.eclipse.emf.ecore.xcore.XMember;
import org.eclipse.emf.ecore.xcore.XOperation;
import org.eclipse.emf.ecore.xcore.XPackage;
import org.eclipse.emf.ecore.xcore.XReference;
import org.eclipse.emf.ecore.xcore.XcoreExtensions;
import org.eclipse.emf.test.ecore.xcore.XcoreStandaloneInjectorProvider;
import org.eclipse.xtend2.lib.StringConcatenation;
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.resource.XtextResource;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(XtextRunner.class)
@InjectWith(XcoreStandaloneInjectorProvider.class)
@SuppressWarnings("all")
public class ParsingTest {
@Inject
private ParseHelper<XPackage> parser;
@Inject
@Extension
private XcoreExtensions exts;
@Inject
@Extension
private ValidationTestHelper vth;
@Test
public void parseSimpleFile() {
try {
final XPackage parse = this.parser.parse("package foo");
String _name = parse.getName();
Assert.assertEquals("foo", _name);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testJvmTypes() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package foo ");
_builder.newLine();
_builder.append("class A ");
_builder.newLine();
_builder.append("{ ");
_builder.newLine();
_builder.append("\t");
_builder.append("refers A a");
_builder.newLine();
_builder.append("} ");
_builder.newLine();
final XPackage pack = this.parser.parse(_builder);
Resource _eResource = pack.eResource();
EcoreUtil.resolveAll(_eResource);
this.vth.assertNoErrors(pack);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testSuperTypeLinking_1() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package foo ");
_builder.newLine();
_builder.append("class A {} ");
_builder.newLine();
_builder.append("class B extends A {}");
_builder.newLine();
final XPackage pack = this.parser.parse(_builder);
EList<XClassifier> _classifiers = pack.getClassifiers();
XClassifier _get = _classifiers.get(1);
final XClass clazz = ((XClass) _get);
EList<XGenericType> _superTypes = clazz.getSuperTypes();
XGenericType _head = IterableExtensions.<XGenericType>head(_superTypes);
GenClass _genClass = this.exts.getGenClass(_head);
String _name = _genClass.getName();
Assert.assertEquals("A", _name);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testSuperTypeLinking_2() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package foo ");
_builder.newLine();
_builder.append("class A {} ");
_builder.newLine();
_builder.append("class B extends foo.A {}");
_builder.newLine();
final XPackage pack = this.parser.parse(_builder);
EList<XClassifier> _classifiers = pack.getClassifiers();
XClassifier _get = _classifiers.get(1);
final XClass clazz = ((XClass) _get);
EList<XGenericType> _superTypes = clazz.getSuperTypes();
XGenericType _head = IterableExtensions.<XGenericType>head(_superTypes);
GenClass _genClass = this.exts.getGenClass(_head);
String _name = _genClass.getName();
Assert.assertEquals("A", _name);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testReferenceToAnnotation() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package foo ");
_builder.newLine();
_builder.append("annotation \'foo/bar\' as foo");
_builder.newLine();
_builder.append("@foo(holla=\'bar\')");
_builder.newLine();
_builder.append("class A {} ");
_builder.newLine();
final XPackage pack = this.parser.parse(_builder);
EList<XClassifier> _classifiers = pack.getClassifiers();
XClassifier _get = _classifiers.get(0);
final XClass clazz = ((XClass) _get);
EList<XAnnotationDirective> _annotationDirectives = pack.getAnnotationDirectives();
XAnnotationDirective _head = IterableExtensions.<XAnnotationDirective>head(_annotationDirectives);
EList<XAnnotation> _annotations = clazz.getAnnotations();
XAnnotation _head_1 = IterableExtensions.<XAnnotation>head(_annotations);
XAnnotationDirective _source = _head_1.getSource();
Assert.assertEquals(_head, _source);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testReferenceToOpposite() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package foo");
_builder.newLine();
_builder.append("class X");
_builder.newLine();
_builder.append("{");
_builder.newLine();
_builder.append("\t");
_builder.append("refers X x opposite y ");
_builder.newLine();
_builder.append("\t");
_builder.append("refers X y opposite x");
_builder.newLine();
_builder.append("\t");
_builder.append("op void foo() {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("val X x = null");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
final String text = _builder.toString();
final XPackage pack = this.parser.parse(text);
{
EList<XClassifier> _classifiers = pack.getClassifiers();
XClassifier _get = _classifiers.get(0);
final XClass clazz = ((XClass) _get);
EList<XMember> _members = clazz.getMembers();
Iterable<XReference> _filter = Iterables.<XReference>filter(_members, XReference.class);
final Iterator<XReference> refs = _filter.iterator();
XReference refX = refs.next();
XReference refY = refs.next();
String _name = refY.getName();
GenFeature _opposite = refX.getOpposite();
String _name_1 = _opposite.getName();
Assert.assertEquals(_name, _name_1);
String _name_2 = refX.getName();
GenFeature _opposite_1 = refY.getOpposite();
String _name_3 = _opposite_1.getName();
Assert.assertEquals(_name_2, _name_3);
}
Resource _eResource = pack.eResource();
final XtextResource resource = ((XtextResource) _eResource);
EList<EObject> _contents = resource.getContents();
final int elements = _contents.size();
int _length = text.length();
resource.update(0, _length, text);
{
EList<EObject> _contents_1 = resource.getContents();
EObject _get = _contents_1.get(0);
EList<XClassifier> _classifiers = ((XPackage) _get).getClassifiers();
XClassifier _get_1 = _classifiers.get(0);
final XClass clazz = ((XClass) _get_1);
EList<XMember> _members = clazz.getMembers();
Iterable<XReference> _filter = Iterables.<XReference>filter(_members, XReference.class);
final Iterator<XReference> refs = _filter.iterator();
XReference refX = refs.next();
XReference refY = refs.next();
String _name = refY.getName();
GenFeature _opposite = refX.getOpposite();
String _name_1 = _opposite.getName();
Assert.assertEquals(_name, _name_1);
String _name_2 = refX.getName();
GenFeature _opposite_1 = refY.getOpposite();
String _name_3 = _opposite_1.getName();
Assert.assertEquals(_name_2, _name_3);
EList<EObject> _contents_2 = resource.getContents();
int _size = _contents_2.size();
Assert.assertEquals(elements, _size);
}
resource.reparse(text);
{
EList<EObject> _contents_1 = resource.getContents();
EObject _get = _contents_1.get(0);
EList<XClassifier> _classifiers = ((XPackage) _get).getClassifiers();
XClassifier _get_1 = _classifiers.get(0);
final XClass clazz = ((XClass) _get_1);
EList<XMember> _members = clazz.getMembers();
Iterable<XReference> _filter = Iterables.<XReference>filter(_members, XReference.class);
final Iterator<XReference> refs = _filter.iterator();
XReference refX = refs.next();
XReference refY = refs.next();
String _name = refY.getName();
GenFeature _opposite = refX.getOpposite();
String _name_1 = _opposite.getName();
Assert.assertEquals(_name, _name_1);
String _name_2 = refX.getName();
GenFeature _opposite_1 = refY.getOpposite();
String _name_3 = _opposite_1.getName();
Assert.assertEquals(_name_2, _name_3);
EList<EObject> _contents_2 = resource.getContents();
int _size = _contents_2.size();
Assert.assertEquals(elements, _size);
}
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void operationReturnsVoid() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package foo");
_builder.newLine();
_builder.append("class Bar {");
_builder.newLine();
_builder.append("\t");
_builder.append("op void operation() {}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
final XPackage pack = this.parser.parse(_builder);
EList<XClassifier> _classifiers = pack.getClassifiers();
XClassifier _head = IterableExtensions.<XClassifier>head(_classifiers);
final XClass clazz = ((XClass) _head);
EList<XMember> _members = clazz.getMembers();
XMember _head_1 = IterableExtensions.<XMember>head(_members);
final XOperation operation = ((XOperation) _head_1);
Resource _eResource = clazz.eResource();
EList<Resource.Diagnostic> _errors = _eResource.getErrors();
boolean _isEmpty = _errors.isEmpty();
Assert.assertTrue(_isEmpty);
XGenericType _type = operation.getType();
Assert.assertNull(_type);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void referenceMayNotBeVoid() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package foo");
_builder.newLine();
_builder.append("class Bar {");
_builder.newLine();
_builder.append("\t");
_builder.append("refers void referenceName");
_builder.newLine();
_builder.append("}");
_builder.newLine();
final XPackage pack = this.parser.parse(_builder);
Resource _eResource = pack.eResource();
EList<Resource.Diagnostic> _errors = _eResource.getErrors();
String _string = _errors.toString();
Resource _eResource_1 = pack.eResource();
EList<Resource.Diagnostic> _errors_1 = _eResource_1.getErrors();
int _size = _errors_1.size();
boolean _lessEqualsThan = (1 <= _size);
Assert.assertTrue(_string, _lessEqualsThan);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void stringResolvesToEString() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package foo");
_builder.newLine();
_builder.append("class Bar {");
_builder.newLine();
_builder.append("\t");
_builder.append("String value");
_builder.newLine();
_builder.append("}");
_builder.newLine();
final XPackage pack = this.parser.parse(_builder);
EList<XClassifier> _classifiers = pack.getClassifiers();
XClassifier _head = IterableExtensions.<XClassifier>head(_classifiers);
final XClass clazz = ((XClass) _head);
EList<XMember> _members = clazz.getMembers();
XMember _head_1 = IterableExtensions.<XMember>head(_members);
final XAttribute attribute = ((XAttribute) _head_1);
XGenericType _type = attribute.getType();
GenBase _type_1 = _type.getType();
Assert.assertTrue((_type_1 instanceof GenClassifier));
XGenericType _type_2 = attribute.getType();
GenBase _type_3 = _type_2.getType();
String _name = ((GenClassifier) _type_3).getName();
Assert.assertEquals("EString", _name);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testEcoreDataTypeAliases() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package foo ");
_builder.newLine();
_builder.append("class A ");
_builder.newLine();
_builder.append("{ ");
_builder.newLine();
_builder.append("\t");
_builder.append("java.math.BigDecimal _bigDecimal");
_builder.newLine();
_builder.append("\t");
_builder.append("java.math.BigInteger _bigInteger");
_builder.newLine();
_builder.append("\t");
_builder.append("boolean _boolean");
_builder.newLine();
_builder.append("\t");
_builder.append("Boolean _Boolean");
_builder.newLine();
_builder.append("\t");
_builder.append("byte _byte");
_builder.newLine();
_builder.append("\t");
_builder.append("Byte _Byte");
_builder.newLine();
_builder.append("\t");
_builder.append("char _char");
_builder.newLine();
_builder.append("\t");
_builder.append("Character _Character");
_builder.newLine();
_builder.append("\t");
_builder.append("java.util.Date _date");
_builder.newLine();
_builder.append("\t");
_builder.append("double _double");
_builder.newLine();
_builder.append("\t");
_builder.append("Double _Double");
_builder.newLine();
_builder.append("\t");
_builder.append("float _float");
_builder.newLine();
_builder.append("\t");
_builder.append("Float _Float");
_builder.newLine();
_builder.append("\t");
_builder.append("int _int");
_builder.newLine();
_builder.append("\t");
_builder.append("Integer _Integer");
_builder.newLine();
_builder.append("\t");
_builder.append("Class _class");
_builder.newLine();
_builder.append("\t");
_builder.append("Object _object");
_builder.newLine();
_builder.append("\t");
_builder.append("long _long");
_builder.newLine();
_builder.append("\t");
_builder.append("Long _Long");
_builder.newLine();
_builder.append("\t");
_builder.append("short _short");
_builder.newLine();
_builder.append("\t");
_builder.append("Short _Short");
_builder.newLine();
_builder.append("\t");
_builder.append("String _String");
_builder.newLine();
_builder.append("} ");
_builder.newLine();
final XPackage pack = this.parser.parse(_builder);
Resource _eResource = pack.eResource();
EcoreUtil.resolveAll(_eResource);
this.vth.assertNoErrors(pack);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testEnumMembersAvailable() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("@GenModel(complianceLevel=\"6.0\")");
_builder.newLine();
_builder.append("package p ");
_builder.newLine();
_builder.append("class A ");
_builder.newLine();
_builder.append("{ ");
_builder.newLine();
_builder.append("\t");
_builder.append("op void m() {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("if (E.ONE != E.TWO && E.ONE_VALUE != E.TWO_VALUE) {");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("var E e = E.valueOf(\'\')");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("var E[] all = E.values()");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("all = E.VALUES");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("e = E.get(1)");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("e = E.get(\'\')");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("e = E.getByName(\'\')");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("var String s = E.ONE.name()");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("s = E.ONE.getName()");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("var int i = E.ONE.value");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("s = E.ONE.literal");
_builder.newLine();
_builder.append("\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.append("enum E {");
_builder.newLine();
_builder.append("\t");
_builder.append("one = 1");
_builder.newLine();
_builder.append("\t");
_builder.append("two = 2");
_builder.newLine();
_builder.append("}");
_builder.newLine();
final XPackage pack = this.parser.parse(_builder);
Resource _eResource = pack.eResource();
EcoreUtil.resolveAll(_eResource);
this.vth.assertNoErrors(pack);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
}