Patch from Heiko

Common Compatible Type of two EClasses is always EObject
see https://bugs.eclipse.org/bugs/attachment.cgi?id=113712
This commit is contained in:
jkohnlein 2008-09-29 11:56:32 +00:00 committed by sefftinge
parent ffc6edc234
commit 0cee786b1c
2 changed files with 30 additions and 2 deletions

View file

@ -11,11 +11,14 @@ import junit.framework.TestCase;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EcoreFactory;
import org.eclipse.emf.ecore.EcorePackage;
/**
* @author Heiko Behrens - Initial contribution and API
*/
public class EcoreUtil2Tests extends TestCase {
static private final EClass EOBJECT = EcorePackage.Literals.EOBJECT;
private EClass createEClass(String name) {
EClass result = EcoreFactory.eINSTANCE.createEClass();
result.setName(name);
@ -39,10 +42,10 @@ public class EcoreUtil2Tests extends TestCase {
f.getESuperTypes().add(e);
assertSame(a, EcoreUtil2.getCompatibleType(a, a));
assertSame(null, EcoreUtil2.getCompatibleType(d, f));
assertSame(EOBJECT, EcoreUtil2.getCompatibleType(d, f));
assertSame(c, EcoreUtil2.getCompatibleType(d, e));
assertSame(b, EcoreUtil2.getCompatibleType(b, f));
assertSame(null, EcoreUtil2.getCompatibleType(b, c));
assertSame(EOBJECT, EcoreUtil2.getCompatibleType(b, c));
}
public void testCommonCompatibleType02() {

View file

@ -594,4 +594,29 @@ public class Xtext2EcoreTransformerTests extends AbstractGeneratorTest {
assertReferenceConfiguration(typeA, 0, "featureA", "RuleC", true, 0, 1);
}
public void testAddingDifferentFeaturesWithSameName03() throws Exception {
// independent rules are combined as EObject
String grammar = "language test generate test 'http://test'";
grammar += " RuleA returns TypeA: featureA1=ID featureA2=RuleD featureA3=RuleC;";
grammar += " RuleB returns TypeA: featureA2=RuleC featureA4=INT;";
grammar += " RuleC: featureC=INT;";
grammar += " RuleD: featureD=ID;";
EPackage ePackage = getEPackageFromGrammar(grammar);
assertEquals(3, ePackage.getEClassifiers().size());
EClass typeA = (EClass) ePackage.getEClassifier("TypeA");
assertNotNull(typeA);
EClass ruleC = (EClass) ePackage.getEClassifier("RuleC");
assertNotNull(ruleC);
EClass ruleD = (EClass) ePackage.getEClassifier("RuleD");
assertNotNull(ruleD);
assertEquals(2, typeA.getEAllAttributes().size());
assertAttributeConfiguration(typeA, 0, "featureA1", "EString");
assertAttributeConfiguration(typeA, 1, "featureA4", "EInt");
assertEquals(2, typeA.getEReferences().size());
assertReferenceConfiguration(typeA, 0, "featureA2", "EObject", true, 0, 1);
assertReferenceConfiguration(typeA, 1, "featureA3", "RuleC", true, 0, 1);
}
}