/**
* 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.Iterators;
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.GenFeature;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.xcore.XClass;
import org.eclipse.emf.ecore.xcore.XGenericType;
import org.eclipse.emf.ecore.xcore.XMember;
import org.eclipse.emf.ecore.xcore.XReference;
import org.eclipse.emf.ecore.xcore.XStructuralFeature;
import org.eclipse.emf.ecore.xcore.mappings.XcoreMapper;
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.validation.ValidationTestHelper;
import org.eclipse.xtext.resource.XtextResourceSet;
import org.eclipse.xtext.util.StringInputStream;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.IteratorExtensions;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(XtextRunner.class)
@InjectWith(XcoreStandaloneInjectorProvider.class)
@SuppressWarnings("all")
public class MultiFileTest {
@Inject
private XtextResourceSet resourceSet;
@Inject
private ValidationTestHelper validator;
@Inject
@Extension
private XcoreMapper mapper;
@Test
public void testReferenceBetweenTwoModels() {
try {
URI _createURI = URI.createURI("file:/modelA.xcore");
final Resource resourceA = this.resourceSet.createResource(_createURI);
URI _createURI_1 = URI.createURI("file:/modelB.xcore");
final Resource resourceB = this.resourceSet.createResource(_createURI_1);
StringConcatenation _builder = new StringConcatenation();
_builder.append("package packB");
_builder.newLine();
_builder.newLine();
_builder.append("class TypeB {");
_builder.newLine();
_builder.append("}");
_builder.newLine();
String _string = _builder.toString();
StringInputStream _stringInputStream = new StringInputStream(_string);
resourceB.load(_stringInputStream, null);
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("package packA");
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("class TypeA {");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("refers packB.TypeB refToB ");
_builder_1.newLine();
_builder_1.append("}");
_builder_1.newLine();
String _string_1 = _builder_1.toString();
StringInputStream _stringInputStream_1 = new StringInputStream(_string_1);
resourceA.load(_stringInputStream_1, null);
EList<EObject> _contents = resourceA.getContents();
EObject _head = IterableExtensions.<EObject>head(_contents);
this.validator.assertNoErrors(_head);
EList<EObject> _contents_1 = resourceB.getContents();
EObject _head_1 = IterableExtensions.<EObject>head(_contents_1);
this.validator.assertNoErrors(_head_1);
final TreeIterator<EObject> allContents = resourceA.getAllContents();
Iterator<XClass> _filter = Iterators.<XClass>filter(allContents, XClass.class);
final XClass xclass = IteratorExtensions.<XClass>head(_filter);
EList<XMember> _members = xclass.getMembers();
XMember _head_2 = IterableExtensions.<XMember>head(_members);
XGenericType _type = _head_2.getType();
final GenBase referencedGenClass = _type.getType();
String _name = ((GenClass) referencedGenClass).getName();
Assert.assertEquals("TypeB", _name);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testBidirectionalReferenceBetweenTwoModels() {
try {
URI _createURI = URI.createURI("file:/modelA.xcore");
final Resource resourceA = this.resourceSet.createResource(_createURI);
URI _createURI_1 = URI.createURI("file:/modelB.xcore");
final Resource resourceB = this.resourceSet.createResource(_createURI_1);
StringConcatenation _builder = new StringConcatenation();
_builder.append("package packB");
_builder.newLine();
_builder.newLine();
_builder.append("class TypeB {");
_builder.newLine();
_builder.append("\t");
_builder.append("refers packA.TypeA refToA opposite refToB");
_builder.newLine();
_builder.append("}");
_builder.newLine();
String _string = _builder.toString();
StringInputStream _stringInputStream = new StringInputStream(_string);
resourceB.load(_stringInputStream, null);
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("package packA");
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("class TypeA {");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("refers packB.TypeB refToB opposite refToA");
_builder_1.newLine();
_builder_1.append("}");
_builder_1.newLine();
String _string_1 = _builder_1.toString();
StringInputStream _stringInputStream_1 = new StringInputStream(_string_1);
resourceA.load(_stringInputStream_1, null);
EList<EObject> _contents = resourceA.getContents();
EObject _head = IterableExtensions.<EObject>head(_contents);
this.validator.assertNoErrors(_head);
EList<EObject> _contents_1 = resourceB.getContents();
EObject _head_1 = IterableExtensions.<EObject>head(_contents_1);
this.validator.assertNoErrors(_head_1);
final TreeIterator<EObject> allContents = resourceA.getAllContents();
Iterator<XClass> _filter = Iterators.<XClass>filter(allContents, XClass.class);
final XClass xclass = IteratorExtensions.<XClass>head(_filter);
EList<XMember> _members = xclass.getMembers();
XMember _head_2 = IterableExtensions.<XMember>head(_members);
XGenericType _type = _head_2.getType();
final GenBase referencedGenClass = _type.getType();
String _name = ((GenClass) referencedGenClass).getName();
Assert.assertEquals("TypeB", _name);
EList<XMember> _members_1 = xclass.getMembers();
XMember _head_3 = IterableExtensions.<XMember>head(_members_1);
final XReference ref = ((XReference) _head_3);
GenFeature _opposite = ref.getOpposite();
XStructuralFeature _xFeature = this.mapper.getXFeature(_opposite);
GenFeature _opposite_1 = ((XReference) _xFeature).getOpposite();
XStructuralFeature _xFeature_1 = this.mapper.getXFeature(_opposite_1);
Assert.assertEquals(ref, _xFeature_1);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
}