package de.hub.emffrag.fragmentation; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EReference; import org.junit.Test; import de.hub.emffrag.testmodels.testmodel.TestObject; import de.hub.emffrag.testmodels.testmodel.frag.meta.TestModelPackage; public class OppositeFragmentedContentsTests extends AbstractFragmentationTests { @Override protected TestModelPackage getMetaModel() { testedReference().setEOpposite(TestModelPackage.eINSTANCE.getTestObject_CrossReferences()); TestModelPackage.eINSTANCE.getTestObject_CrossReferences().setEOpposite(testedReference()); return TestModelPackage.eINSTANCE; } protected EReference testedReference() { return TestModelPackage.eINSTANCE.getTestObject_FragmentedContents(); } protected void addObjectsToModel() { root.getContents().add(object1); } protected TestObject createTestObject(int id) { return Assertions.createTestObjectWithIndexes(id); } @SuppressWarnings("unchecked") @Test public void testAddOpposite() { addObjectsToModel(); ((EList<TestObject>)object1.eGet(testedReference())).add(object2); Assertions.root(model).get(testedReference()).assertSize(1).get(0).assertId(2).getCrossReferences().assertSize(1).get(0).assertId(1); model.save(null); reinitializeModel(); Assertions.root(model).get(testedReference()).assertSize(1).get(0).assertId(2).getCrossReferences().assertSize(1).get(0).assertId(1); } @Test public void testAddReverseOpposite() { addObjectsToModel(); object2.getCrossReferences().add(object1); Assertions.root(model).get(testedReference()).assertSize(1).get(0).assertId(2).getCrossReferences().assertSize(1).get(0).assertId(1); model.save(null); reinitializeModel(); Assertions.root(model).get(testedReference()).assertSize(1).get(0).assertId(2).getCrossReferences().assertSize(1).get(0).assertId(1); } @SuppressWarnings("unchecked") @Test public void testAddMultipleOpposite() { addObjectsToModel(); ((EList<TestObject>)object1.eGet(testedReference())).add(object2); ((EList<TestObject>)object1.eGet(testedReference())).add(object3); Assertions.root(model).get(testedReference()).assertSize(2).get(0).assertId(2).getCrossReferences().assertSize(1).get(0).assertId(1); Assertions.root(model).get(testedReference()).assertSize(2).get(1).assertId(3).getCrossReferences().assertSize(1).get(0).assertId(1); model.save(null); reinitializeModel(); Assertions.root(model).get(testedReference()).assertSize(2).get(0).assertId(2).getCrossReferences().assertSize(1).get(0).assertId(1); Assertions.root(model).get(testedReference()).assertSize(2).get(1).assertId(3).getCrossReferences().assertSize(1).get(0).assertId(1); } @SuppressWarnings("unchecked") @Test public void testRemoveOpposite() { addObjectsToModel(); ((EList<TestObject>)object1.eGet(testedReference())).add(object2); Assertions.root(model).get(testedReference()).assertSize(1).get(0).assertId(2).getCrossReferences().assertSize(1).get(0).assertId(1); ((EList<TestObject>)object1.eGet(testedReference())).remove(0); Assertions.context(object2).getCrossReferences().assertSize(0); model.save(null); reinitializeModel(); Assertions.root(model).get(testedReference()).assertSize(0); model.assertFragmentsIndex(0l, 1l); } @SuppressWarnings("unchecked") @Test public void testInverseRemoveOpposite() { addObjectsToModel(); ((EList<TestObject>)object1.eGet(testedReference())).add(object2); Assertions.root(model).get(testedReference()).assertSize(1).get(0).assertId(2).getCrossReferences().assertSize(1).get(0).assertId(1); object2.getCrossReferences().remove(0); Assertions.context(object2).getCrossReferences().assertSize(0); model.save(null); reinitializeModel(); Assertions.root(model).get(testedReference()).assertSize(0); model.assertFragmentsIndex(0l, 1l); } }