package de.hub.emffrag.fragmentation; import java.util.Iterator; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EStructuralFeature; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import de.hub.emffrag.EmfFragActivator; import de.hub.emffrag.testmodels.testmodel.TestObject; import de.hub.emffrag.testmodels.testmodel.TestObjectWithIndexes; import de.hub.emffrag.testmodels.testmodel.frag.meta.TestModelPackage; public class IndexedReferenceValueSetTests extends AbstractFragmentationTests { protected TestObject testObject; protected TestObject testObject2; @Before public void indexInitialization() { testObject = Assertions.createTestObjectWithIndexes(0); testObject2 = Assertions.createTestObjectWithIndexes(0); } @Test public void emptySetTest() { root.getContents().add(testObject); assertValueSet(valueSet(), 0); model.save(null); reinitializeModel(); testObject = Assertions.root(model).assertId(0).value(); assertValueSet(valueSet(), 0); model.assertFragmentsIndex(0l, 1l); model.assertIdIndex(0l, 0l); model.assertValueSetIndex(testObject, testFeature(), -1, -1); } @Test public void addTest() { root.getContents().add(testObject); root.getContents().add(object1); object1.getFragmentedContents().add(object2); object1.getRegularContents().add(object3); valueSet().add(object1); valueSet().add(object2); valueSet().add(object3); model.save(null); reinitializeModel(); testObject = assertTestObject(); assertValueSet(valueSet(), 3); assertObjectInValueSet(valueSet(), 0); assertObjectInValueSet(valueSet(), 1); assertObjectInValueSet(valueSet(), 2); assertFragmentsIndex(); assertIdIndex(); model.assertValueSetIndex(testObject, testFeature(), 0l, 2l); } @Test public void indexOfTest() { root.getContents().add(testObject); root.getContents().add(object1); object1.getFragmentedContents().add(object2); object1.getRegularContents().add(object3); valueSet().add(object1); valueSet().add(object2); valueSet().add(object3); Assert.assertEquals(0, valueSet().indexOf(object1)); Assert.assertEquals(1, valueSet().indexOf(object2)); Assert.assertEquals(2, valueSet().indexOf(object3)); } @Test public void removeValueTest() { root.getContents().add(testObject); root.getContents().add(object1); object1.getFragmentedContents().add(object2); object1.getRegularContents().add(object3); valueSet().add(object1); valueSet().add(object2); valueSet().add(object3); Assert.assertTrue(valueSet().remove(object1)); Assert.assertTrue(valueSet().remove(object3)); Assert.assertFalse(valueSet().remove(object1)); Assert.assertFalse(valueSet().remove(object3)); Assert.assertEquals(-1, valueSet().indexOf(object1)); Assert.assertEquals(1, valueSet().indexOf(object2)); Assert.assertEquals(-1, valueSet().indexOf(object3)); } @Test public void containsTest() { root.getContents().add(testObject); root.getContents().add(object1); object1.getFragmentedContents().add(object2); object1.getRegularContents().add(object3); valueSet().add(object1); valueSet().add(object2); valueSet().add(object3); Assert.assertTrue(valueSet().contains(object1)); Assert.assertTrue(valueSet().contains(object2)); Assert.assertTrue(valueSet().contains(object3)); valueSet().remove(object2); Assert.assertFalse(valueSet().contains(object2)); valueSet().add(object2); Assert.assertTrue(valueSet().contains(object2)); } @Test public void moveValueTest1() { root.getContents().add(testObject); root.getContents().add(object1); object1.getFragmentedContents().add(object2); object1.getRegularContents().add(object3); valueSet().add(object1); valueSet().add(object2); valueSet().add(object3); valueSet().add(object2); Assert.assertEquals(0, valueSet().indexOf(object1)); Assert.assertEquals(3, valueSet().indexOf(object2)); Assert.assertEquals(2, valueSet().indexOf(object3)); Assert.assertEquals(object2, valueSet().get(1)); EmfFragActivator.instance.assertWarningsAndErrors(true); } @Test public void moveValueTest2() { root.getContents().add(testObject); root.getContents().add(object1); object1.getFragmentedContents().add(object2); object1.getRegularContents().add(object3); valueSet().add(object1); valueSet().add(object2); valueSet().add(object3); valueSet().remove(object2); valueSet().add(object2); Assert.assertEquals(0, valueSet().indexOf(object1)); Assert.assertEquals(3, valueSet().indexOf(object2)); Assert.assertEquals(2, valueSet().indexOf(object3)); boolean exceptionThrown = false; try { Assert.assertNull(valueSet().get(1)); } catch (IndexOutOfBoundsException e) { exceptionThrown = true; } Assert.assertTrue(exceptionThrown); EmfFragActivator.instance.assertWarningsAndErrors(true); } protected EList<TestObject> valueSet() { return ((TestObjectWithIndexes)testObject).getIndexedReferences(); } protected EStructuralFeature testFeature() { return TestModelPackage.eINSTANCE.getTestObjectWithIndexes_IndexedReferences(); } @Test public void iteratorTest() { addTest(); Iterator<TestObject> iterator = valueSet().iterator(); assertIterator(iterator, 3); } @Test public void boundedIteratorTest1() { performBoundedIteratorTest(0, 3); } @Test public void boundedIteratorTest2() { performBoundedIteratorTest(1, 2); } @Test public void boundedIteratorTest3() { performBoundedIteratorTest(2, 1); } @Test public void boundedIteratorTest4() { performBoundedIteratorTest(3, 0); } private void performBoundedIteratorTest(int first, int size) { addTest(); Iterator<TestObject> iterator = valueSet().listIterator(first); assertIterator(iterator, size); } @Test public void removeTest() { addTest(); Assert.assertEquals(3, valueSet().size()); valueSet().remove(2); model.save(null); reinitializeModel(); testObject = assertTestObject(); assertObjectInValueSet(valueSet(), 1); TestObject object = null; try { object = valueSet().get(2); } catch (IndexOutOfBoundsException e) { } Assert.assertNull("Object is not null.", object); Assert.assertEquals(2, valueSet().size()); assertIterator(valueSet().iterator(), 2); assertFragmentsIndex(); assertIdIndex(); model.assertValueSetIndex(testObject, testFeature(), 0l, 1l); } protected void assertFragmentsIndex() { model.assertFragmentsIndex(0l, 3l); } @Test public void setTest() { addTest(); valueSet().set(1, valueSet().get(1)); model.save(null); reinitializeModel(); testObject = assertTestObject(); assertObjectInValueSet(valueSet(), 1); assertIterator(valueSet().iterator(), 3); assertFragmentsIndex(); assertIdIndex(); model.assertValueSetIndex(testObject, testFeature(), 0l, 2l); } @Test public void testMandantoryId() { root.getContents().add(testObject); Assert.assertNotNull("Mandantory ID not present.", ((IndexBasedIdSemantics)EmfFragActivator.instance.idSemantics).getId(((FObjectImpl)testObject).fInternalObject(), false)); } protected void assertIdIndex() { model.assertIdIndex(0l, 3l); } protected void assertIterator(Iterator<TestObject> iterator, int size) { Assert.assertTrue("Iterator is emtpy.", iterator.hasNext() || size == 0); int i = 0; while (iterator.hasNext()) { assertObject(iterator.next()); i++; } Assert.assertEquals("Iterator has the wrong size.", size, i); } protected void assertObject(Object value) { Assert.assertNotNull("Value is null.", value); Assert.assertTrue("Value has wrong type.", value instanceof TestObject); Assert.assertTrue("Value is broken", ((TestObject)value).getName().startsWith("testValue")); } protected void assertObjectInValueSet(EList<TestObject> valueSet, int index) { TestObject value = valueSet.get(index); assertObject(value); } protected void assertValueSet(EList<TestObject> valueSet, int size) { Assert.assertNotNull("Index is null.", valueSet); Assert.assertEquals("Wrong size", size, valueSet.size()); } protected TestObject assertTestObject() { return Assertions.root(model, 2, 0, false).assertId(0).value(); } }