mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-16 16:58:56 +00:00
Feature uplift, patch by Heiko
see https://bugs.eclipse.org/bugs/attachment.cgi?id=113753
This commit is contained in:
parent
0cee786b1c
commit
2e8c98c55c
2 changed files with 143 additions and 0 deletions
|
@ -42,6 +42,7 @@ public class AutoTestSuite {
|
|||
suite.addTestSuite(org.eclipse.xtext.reference.CommentOnEofBug_234135_Test.class);
|
||||
suite.addTestSuite(org.eclipse.xtext.reference.LeafNodeBug_234132_Test.class);
|
||||
suite.addTestSuite(org.eclipse.xtext.resource.metamodel.Xtext2EcoreTransformerTests.class);
|
||||
suite.addTestSuite(org.eclipse.xtext.resource.metamodel.TypeHierarchyHelperTests.class);
|
||||
suite.addTestSuite(org.eclipse.xtext.typeresolution.XtextUtilConstructionTest.class);
|
||||
suite.addTestSuite(org.eclipse.xtext.xtext2ecore.ActionTest.class);
|
||||
suite.addTestSuite(org.eclipse.xtext.xtext2ecore.BootstrapModelTest.class);
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
package org.eclipse.xtext.resource.metamodel;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.eclipse.emf.ecore.EAttribute;
|
||||
import org.eclipse.emf.ecore.EClass;
|
||||
import org.eclipse.emf.ecore.EDataType;
|
||||
import org.eclipse.emf.ecore.EcoreFactory;
|
||||
import org.eclipse.xtext.resource.metamodel.EClassifierInfo.EClassInfo;
|
||||
|
||||
public class TypeHierarchyHelperTests extends TestCase {
|
||||
|
||||
private TypeHierarchyHelper helper;
|
||||
private EClassifierInfos infos = new EClassifierInfos();
|
||||
private EDataType INT = EcoreFactory.eINSTANCE.createEDataType();
|
||||
// private EDataType STRING = EcoreFactory.eINSTANCE.createEDataType();
|
||||
|
||||
private void liftUpFeatures() throws Exception {
|
||||
helper = new TypeHierarchyHelper(infos);
|
||||
helper.liftUpFeatures();
|
||||
}
|
||||
|
||||
private EClassInfo addClass(String name, boolean isGenerated) {
|
||||
EClass eClass = EcoreFactory.eINSTANCE.createEClass();
|
||||
eClass.setName(name);
|
||||
EClassInfo info = (EClassInfo) EClassifierInfo.createEClassInfo(eClass, isGenerated);
|
||||
infos.addInfo("", name, info);
|
||||
return info;
|
||||
}
|
||||
|
||||
private EClassInfo addClass(String name) {
|
||||
return addClass(name, true);
|
||||
}
|
||||
|
||||
private void addAttribute(EClassInfo eClass, EDataType eType, String name) {
|
||||
EAttribute feature = EcoreFactory.eINSTANCE.createEAttribute();
|
||||
feature.setName(name);
|
||||
feature.setEType(eType);
|
||||
eClass.getEClass().getEStructuralFeatures().add(feature);
|
||||
}
|
||||
|
||||
public void testSimpeCase01() throws Exception {
|
||||
EClassInfo a = addClass("a");
|
||||
EClassInfo b = addClass("b");
|
||||
EClassInfo c = addClass("c");
|
||||
b.addSupertype(a);
|
||||
c.addSupertype(a);
|
||||
addAttribute(b, INT, "f1");
|
||||
addAttribute(c, INT, "f1");
|
||||
|
||||
assertEquals(0, a.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(1, b.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(1, c.getEClass().getEStructuralFeatures().size());
|
||||
|
||||
liftUpFeatures();
|
||||
|
||||
assertEquals(1, a.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(0, b.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(0, c.getEClass().getEStructuralFeatures().size());
|
||||
}
|
||||
|
||||
public void testSimpeCase02() throws Exception {
|
||||
// no uplift for less than two children
|
||||
EClassInfo a = addClass("a");
|
||||
EClassInfo b = addClass("b");
|
||||
b.addSupertype(a);
|
||||
addAttribute(b, INT, "f1");
|
||||
|
||||
assertEquals(0, a.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(1, b.getEClass().getEStructuralFeatures().size());
|
||||
|
||||
liftUpFeatures();
|
||||
|
||||
assertEquals(0, a.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(1, b.getEClass().getEStructuralFeatures().size());
|
||||
}
|
||||
|
||||
public void testRecursiveUplift01() throws Exception {
|
||||
// no uplift for less than two children
|
||||
EClassInfo a = addClass("a");
|
||||
EClassInfo b = addClass("b");
|
||||
EClassInfo c = addClass("c");
|
||||
EClassInfo d = addClass("d");
|
||||
EClassInfo e = addClass("e");
|
||||
b.addSupertype(a);
|
||||
c.addSupertype(a);
|
||||
d.addSupertype(c);
|
||||
e.addSupertype(c);
|
||||
|
||||
addAttribute(b, INT, "f1");
|
||||
addAttribute(d, INT, "f1");
|
||||
addAttribute(e, INT, "f1");
|
||||
|
||||
assertEquals(0, a.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(1, b.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(0, c.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(1, d.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(1, e.getEClass().getEStructuralFeatures().size());
|
||||
|
||||
liftUpFeatures();
|
||||
|
||||
assertEquals(1, a.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(0, b.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(0, c.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(0, d.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(0, e.getEClass().getEStructuralFeatures().size());
|
||||
}
|
||||
|
||||
public void testNikolaus() throws Exception {
|
||||
// no uplift for less than two children
|
||||
EClassInfo a = addClass("a");
|
||||
EClassInfo b = addClass("b");
|
||||
EClassInfo c = addClass("c");
|
||||
EClassInfo d = addClass("d");
|
||||
EClassInfo e = addClass("e");
|
||||
b.addSupertype(a);
|
||||
c.addSupertype(a);
|
||||
d.addSupertype(b);
|
||||
d.addSupertype(c);
|
||||
e.addSupertype(b);
|
||||
e.addSupertype(c);
|
||||
|
||||
addAttribute(d, INT, "f1");
|
||||
addAttribute(e, INT, "f1");
|
||||
|
||||
assertEquals(0, a.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(0, b.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(0, c.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(1, d.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(1, e.getEClass().getEStructuralFeatures().size());
|
||||
|
||||
liftUpFeatures();
|
||||
|
||||
assertEquals(0, a.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(0, b.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(0, c.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(1, d.getEClass().getEStructuralFeatures().size());
|
||||
assertEquals(1, e.getEClass().getEStructuralFeatures().size());
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
Reference in a new issue