blob: c148a4e5fdcca8a529f836a48da06a0f6baff268 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008-2011 Chair for Applied Software Engineering,
* Technische Universitaet Muenchen.
* 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
*
* Contributors:
* Edgar Mueller - intial API and implementation
******************************************************************************/
package org.eclipse.emf.emfstore.client.conflictdetection.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Callable;
import org.eclipse.core.runtime.Platform;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.emfstore.client.test.common.util.TestLogListener;
import org.eclipse.emf.emfstore.client.util.ESVoidCallable;
import org.eclipse.emf.emfstore.client.util.RunESCommand;
import org.eclipse.emf.emfstore.internal.client.model.ProjectSpace;
import org.eclipse.emf.emfstore.internal.client.model.exceptions.ChangeConflictException;
import org.eclipse.emf.emfstore.internal.common.model.ModelElementId;
import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil;
import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.AbstractOperation;
import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.CreateDeleteOperation;
import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.SingleReferenceOperation;
import org.eclipse.emf.emfstore.test.model.TestElement;
import org.eclipse.emf.emfstore.test.model.TestmodelFactory;
import org.eclipse.emf.emfstore.test.model.impl.TestElementToStringMapImpl;
import org.eclipse.emf.emfstore.test.model.impl.TestmodelFactoryImpl;
import org.junit.Test;
/**
* Conflict detection tests for map entries.
*
* @author emueller
*/
public class ConflictDetectionMapTest extends ConflictDetectionTest {
private static final String HELLO2 = "hello2"; //$NON-NLS-1$
private static final String HELLO1 = "hello1"; //$NON-NLS-1$
private static final String BAR2 = "bar2"; //$NON-NLS-1$
private static final String KEY_IS_NULL_CAN_NOT_BE_USED_FOR_CONFLICT_DETECTION = "Key is null. Can not be used for conflict detection."; //$NON-NLS-1$
private static final String FOO = "foo"; //$NON-NLS-1$
private static final String ORG_ECLIPSE_EMF_EMFSTORE_COMMON_MODEL = "org.eclipse.emf.emfstore.common.model"; //$NON-NLS-1$
private static final String SINGLE_REFERENCE_SUB_OPERATION_OF_CREATE_OPERATION = "Single reference sub operation of create operation"; //$NON-NLS-1$
private static final String QUUX = "quux"; //$NON-NLS-1$
private static final String BAR = "bar"; //$NON-NLS-1$
/**
* Tests if creating map entries with the same key conflict.
*
* @throws ChangeConflictException
*/
@Test
public void testConflictCreateVSCreateMapEntryNonContainedKey() throws ChangeConflictException {
final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
final TestElement key = TestmodelFactory.eINSTANCE.createTestElement();
addTestElement(testElement);
addTestElement(key);
final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
final ModelElementId keyId = getProjectSpace().getProject().getModelElementId(key);
final ProjectSpace clonedProjectSpace = cloneProjectSpace(getProjectSpace());
final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
modelElementId);
final TestElement clonedKey = (TestElement) clonedProjectSpace.getProject().getModelElement(keyId);
updateMapEntryNonContainedKey(testElement, key, BAR);
updateMapEntryNonContainedKey(clonedTestElement, clonedKey, QUUX);
final Set<AbstractOperation> conflicts = getConflicts(
getProjectSpace().getLocalChangePackage().getOperations(), getProjectSpace().getContentEditingDomain(),
clonedProjectSpace.getLocalChangePackage().getOperations(), clonedProjectSpace.getContentEditingDomain(),
getProject());
assertTrue(conflicts.size() > 0);
}
/**
* Tests if creating map entries with the same key conflict.
*
* @throws ChangeConflictException
*/
@Test
public void testConflictCreateVsMoveNonContainedKey() throws ChangeConflictException {
final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
final TestElement key = TestmodelFactory.eINSTANCE.createTestElement();
final TestmodelFactoryImpl factory = (TestmodelFactoryImpl) TestmodelFactory.eINSTANCE;
final TestElementToStringMapImpl newEntry = (TestElementToStringMapImpl) factory.createTestElementToStringMap();
addTestElement(testElement);
addTestElement(key);
RunESCommand.run(new Callable<Void>() {
public Void call() throws Exception {
getProject().getModelElements().add(newEntry);
clearOperations();
return null;
}
}, getProjectSpace().getContentEditingDomain());
final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
final ModelElementId keyId = getProjectSpace().getProject().getModelElementId(key);
final ModelElementId newEntryId = getProjectSpace().getProject().getModelElementId(newEntry);
final ProjectSpace clonedProjectSpace = cloneProjectSpace(getProjectSpace());
final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
modelElementId);
final TestElementToStringMapImpl clonedNewEntry = (TestElementToStringMapImpl) clonedProjectSpace.getProject()
.getModelElement(newEntryId);
final TestElement clonedKey = (TestElement) clonedProjectSpace.getProject().getModelElement(keyId);
RunESCommand.run(new Callable<Void>() {
public Void call() throws Exception {
newEntry.setKey(key);
testElement.getElementToStringMap().add(newEntry);
return null;
}
}, getProjectSpace().getContentEditingDomain());
RunESCommand.run(new Callable<Void>() {
public Void call() throws Exception {
clonedNewEntry.setKey(clonedKey);
clonedTestElement.getElementToStringMap().add(clonedNewEntry);
return null;
}
}, clonedProjectSpace.getContentEditingDomain());
final Set<AbstractOperation> conflicts = getConflicts(
getProjectSpace().getLocalChangePackage().getOperations(), getProjectSpace().getContentEditingDomain(),
clonedProjectSpace.getLocalChangePackage().getOperations(), clonedProjectSpace.getContentEditingDomain(),
getProject());
assertTrue(conflicts.size() > 0);
}
/**
* Tests if creating map entries with the same key conflict.
*
* @throws ChangeConflictException
*/
@Test
public void testConflictCreateVSCreateMapEntryNonContainedKeySingleRefSubOpMissing() throws ChangeConflictException {
final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
final TestElement key = TestmodelFactory.eINSTANCE.createTestElement();
addTestElement(testElement);
addTestElement(key);
final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
final ModelElementId keyId = getProjectSpace().getProject().getModelElementId(key);
final ProjectSpace clonedProjectSpace = cloneProjectSpace(getProjectSpace());
final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
modelElementId);
final TestElement clonedKey = (TestElement) clonedProjectSpace.getProject().getModelElement(keyId);
updateMapEntryNonContainedKey(testElement, key, BAR);
updateMapEntryNonContainedKey(clonedTestElement, clonedKey, QUUX);
final EList<AbstractOperation> operations = getProjectSpace().getLocalChangePackage().getOperations();
final CreateDeleteOperation createDeleteOperation = CreateDeleteOperation.class.cast(operations.get(0));
RunESCommand.run(new ESVoidCallable() {
@Override
public void run() {
createDeleteOperation.getSubOperations().clear();
}
}, getProjectSpace().getContentEditingDomain());
// expect part of the log message
final TestLogListener logListener = new TestLogListener(SINGLE_REFERENCE_SUB_OPERATION_OF_CREATE_OPERATION);
Platform.getLog(Platform
.getBundle(ORG_ECLIPSE_EMF_EMFSTORE_COMMON_MODEL)).addLogListener(logListener);
getConflicts(
getProjectSpace().getLocalChangePackage().getOperations(), getProjectSpace().getContentEditingDomain(),
clonedProjectSpace.getLocalChangePackage().getOperations(), clonedProjectSpace.getContentEditingDomain(),
getProject());
assertTrue(logListener.didReceive());
}
/**
* Tests if creating map entries with the same key conflict.
*
* @throws ChangeConflictException
*/
@Test
public void testConflictCreateVSCreateMapEntryNonContainedKeyKeyIsNull() throws ChangeConflictException {
final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
final TestElement key = TestmodelFactory.eINSTANCE.createTestElement();
addTestElement(testElement);
addTestElement(key);
final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
final ModelElementId keyId = getProjectSpace().getProject().getModelElementId(key);
final ProjectSpace clonedProjectSpace = cloneProjectSpace(getProjectSpace());
final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
modelElementId);
final TestElement clonedKey = (TestElement) clonedProjectSpace.getProject().getModelElement(keyId);
updateMapEntryNonContainedKey(testElement, key, BAR);
updateMapEntryNonContainedKey(clonedTestElement, clonedKey, QUUX);
final List<AbstractOperation> operations = ModelUtil.clone(
getProjectSpace().getLocalChangePackage().getOperations());
final CreateDeleteOperation createDeleteOperation = CreateDeleteOperation.class.cast(operations.get(0));
final SingleReferenceOperation singleReferenceOperation = SingleReferenceOperation.class.cast(
createDeleteOperation.getSubOperations().get(0));
// causes null to be returned when trying to find the key
singleReferenceOperation.getOtherInvolvedModelElements().iterator().next().setId(FOO);
final List<AbstractOperation> operations2 = ModelUtil.clone(
clonedProjectSpace.getLocalChangePackage().getOperations());
// causes null to be returned when trying to find the key
singleReferenceOperation.getOtherInvolvedModelElements().iterator().next().setId(BAR);
RunESCommand.run(new Callable<Void>() {
public Void call() throws Exception {
getProject().getModelElements().remove(key);
return null;
}
}, getProjectSpace().getContentEditingDomain());
RunESCommand.run(new Callable<Void>() {
public Void call() throws Exception {
clonedProjectSpace.getProject().getModelElements().remove(clonedKey);
return null;
}
}, clonedProjectSpace.getContentEditingDomain());
// expect part of the log message
final TestLogListener logListener = new TestLogListener(KEY_IS_NULL_CAN_NOT_BE_USED_FOR_CONFLICT_DETECTION);
Platform.getLog(Platform
.getBundle(ORG_ECLIPSE_EMF_EMFSTORE_COMMON_MODEL)).addLogListener(logListener);
getConflicts(operations, getProjectSpace().getContentEditingDomain(), operations2,
clonedProjectSpace.getContentEditingDomain(), getProject());
assertTrue(logListener.didReceive());
}
@Test
public void testNonConflictingCreateVsCreate() {
final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
final TestElement key = TestmodelFactory.eINSTANCE.createTestElement();
final TestElement secondKey = TestmodelFactory.eINSTANCE.createTestElement();
addTestElement(testElement);
addTestElement(key);
addTestElement(secondKey);
final ModelElementId testElementId = getProject().getModelElementId(testElement);
final ModelElementId secondKeyId = getProject().getModelElementId(secondKey);
final ProjectSpace clonedProjectSpace = cloneProjectSpace(getProjectSpace());
final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
testElementId);
final TestElement clonedSecondKey = (TestElement) clonedProjectSpace.getProject().getModelElement(secondKeyId);
updateMapEntryNonContainedKey(testElement, key, FOO);
updateMapEntryNonContainedKey(clonedTestElement, clonedSecondKey, BAR);
final List<AbstractOperation> ops1 = getProjectSpace().getOperations();
final List<AbstractOperation> ops2 = clonedProjectSpace.getOperations();
final Set<AbstractOperation> conflicts = getConflicts(ops1, getProjectSpace().getContentEditingDomain(), ops2,
clonedProjectSpace.getContentEditingDomain(), getProject());
assertEquals(0, conflicts.size());
}
@Test
public void testNonConflictingRemoveVsRemove() {
final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
final TestElement key = TestmodelFactory.eINSTANCE.createTestElement();
final TestElement secondKey = TestmodelFactory.eINSTANCE.createTestElement();
addTestElement(testElement);
addTestElement(key);
addTestElement(secondKey);
final ModelElementId testElementId = getProject().getModelElementId(testElement);
final ModelElementId secondKeyId = getProject().getModelElementId(secondKey);
final ProjectSpace clonedProjectSpace = cloneProjectSpace(getProjectSpace());
final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
testElementId);
final TestElement clonedSecondKey = (TestElement) clonedProjectSpace.getProject().getModelElement(secondKeyId);
updateMapEntryNonContainedKey(testElement, key, FOO);
updateMapEntryNonContainedKey(clonedTestElement, clonedSecondKey, BAR);
clearOperations();
RunESCommand.run(new Callable<Void>() {
public Void call() throws Exception {
testElement.getElementToStringMap().clear();
return null;
}
}, getProjectSpace().getContentEditingDomain());
RunESCommand.run(new Callable<Void>() {
public Void call() throws Exception {
clonedTestElement.getElementToStringMap().clear();
return null;
}
}, clonedProjectSpace.getContentEditingDomain());
final List<AbstractOperation> ops1 = getProjectSpace().getOperations();
final List<AbstractOperation> ops2 = clonedProjectSpace.getOperations();
final Set<AbstractOperation> conflicts = getConflicts(ops1, getProjectSpace().getContentEditingDomain(), ops2,
clonedProjectSpace.getContentEditingDomain(), getProject());
assertEquals(0, conflicts.size());
}
@Test
public void testConflictCreateVSDeleteMapEntryNonContainedKey() throws ChangeConflictException {
final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
final TestElement key = TestmodelFactory.eINSTANCE.createTestElement();
addTestElement(testElement);
addTestElement(key);
final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
final ModelElementId keyId = getProjectSpace().getProject().getModelElementId(key);
updateMapEntryNonContainedKey(testElement, key, BAR);
clearOperations();
final ProjectSpace clonedProjectSpace = cloneProjectSpace(getProjectSpace());
final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
modelElementId);
final TestElement clonedKey = (TestElement) clonedProjectSpace.getProject().getModelElement(keyId);
updateMapEntryNonContainedKey(testElement, key, BAR2);
deleteMapEntryNonContainedKey(clonedTestElement, clonedKey);
final List<AbstractOperation> ops1 = getProjectSpace().getOperations();
final List<AbstractOperation> ops2 = clonedProjectSpace.getOperations();
final Set<AbstractOperation> conflicts = getConflicts(ops1, getProjectSpace().getContentEditingDomain(), ops2,
clonedProjectSpace.getContentEditingDomain(), getProject());
assertTrue(conflicts.size() > 0);
}
@Test
public void testConflictUpdateVSUpdateMapEntryNonContainedKey() {
final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
final TestElement key = TestmodelFactory.eINSTANCE.createTestElement();
addTestElement(testElement);
addTestElement(key);
final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
final ModelElementId keyId = getProjectSpace().getProject().getModelElementId(key);
updateMapEntryNonContainedKey(testElement, key, BAR);
clearOperations();
final ProjectSpace clonedProjectSpace = cloneProjectSpace(getProjectSpace());
final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
modelElementId);
final TestElement clonedKey = (TestElement) clonedProjectSpace.getProject().getModelElement(
keyId);
updateMapEntryNonContainedKey(testElement, key, HELLO1);
updateMapEntryNonContainedKey(clonedTestElement, clonedKey, HELLO2);
final List<AbstractOperation> ops1 = getProjectSpace().getOperations();
final List<AbstractOperation> ops2 = clonedProjectSpace.getOperations();
final Set<AbstractOperation> conflicts = getConflicts(ops1, getProjectSpace().getContentEditingDomain(), ops2,
clonedProjectSpace.getContentEditingDomain(), getProject());
assertTrue(conflicts.size() > 0);
}
@Test
public void testConflictUpdateVSDeleteMapEntryNonContainedKey() throws ChangeConflictException {
final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
final TestElement key = TestmodelFactory.eINSTANCE.createTestElement();
addTestElement(testElement);
addTestElement(key);
final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
final ModelElementId keyId = getProjectSpace().getProject().getModelElementId(key);
updateMapEntryNonContainedKey(testElement, key, BAR);
clearOperations();
final ProjectSpace clonedProjectSpace = cloneProjectSpace(getProjectSpace());
final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
modelElementId);
final TestElement clonedKey = (TestElement) clonedProjectSpace.getProject().getModelElement(
keyId);
updateMapEntryNonContainedKey(testElement, key, HELLO1);
deleteMapEntryNonContainedKey(clonedTestElement, clonedKey);
final List<AbstractOperation> ops1 = getProjectSpace().getOperations();
final List<AbstractOperation> ops2 = clonedProjectSpace.getOperations();
final Set<AbstractOperation> conflicts = getConflicts(ops1, getProjectSpace().getContentEditingDomain(), ops2,
clonedProjectSpace.getContentEditingDomain(), getProject());
assertTrue(conflicts.size() > 0);
}
@Test
public void testConflictDeleteVSDeleteMapEntryNonContainedKey() {
final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
final TestElement key = TestmodelFactory.eINSTANCE.createTestElement();
addTestElement(testElement);
addTestElement(key);
final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
final ModelElementId keyId = getProjectSpace().getProject().getModelElementId(key);
updateMapEntryNonContainedKey(testElement, key, BAR);
clearOperations();
final ProjectSpace clonedProjectSpace = cloneProjectSpace(getProjectSpace());
final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
modelElementId);
final TestElement clonedKey = (TestElement) clonedProjectSpace.getProject().getModelElement(
keyId);
deleteMapEntryNonContainedKey(testElement, key);
deleteMapEntryNonContainedKey(clonedTestElement, clonedKey);
final List<AbstractOperation> ops1 = getProjectSpace().getOperations();
final List<AbstractOperation> ops2 = clonedProjectSpace.getOperations();
final Set<AbstractOperation> conflicts = getConflicts(ops1, getProjectSpace().getContentEditingDomain(), ops2,
clonedProjectSpace.getContentEditingDomain(), getProject());
assertEquals(1, conflicts.size());
}
/**
* Tests if creating map entries with the same key conflict.
*
* @throws ChangeConflictException
*/
@Test
public void testConflictCreateVSCreateMapEntry() throws ChangeConflictException {
final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
addTestElement(testElement);
final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
final ProjectSpace clonedProjectSpace = cloneProjectSpace(getProjectSpace());
final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
modelElementId);
updateMapEntry(testElement, FOO, BAR);
updateMapEntry(clonedTestElement, FOO, QUUX);
final Set<AbstractOperation> conflicts = getConflicts(
getProjectSpace().getLocalChangePackage().getOperations(), getProjectSpace().getContentEditingDomain(),
clonedProjectSpace.getLocalChangePackage().getOperations(), clonedProjectSpace.getContentEditingDomain());
assertTrue(conflicts.size() > 0);
}
@Test
public void testConflictCreateVSDeleteMapEntry() throws ChangeConflictException {
final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
addTestElement(testElement);
final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
updateMapEntry(testElement, FOO, BAR);
clearOperations();
final ProjectSpace clonedProjectSpace = cloneProjectSpace(getProjectSpace());
final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
modelElementId);
updateMapEntry(testElement, FOO, BAR2);
deleteMapEntry(clonedTestElement, FOO);
final List<AbstractOperation> ops1 = getProjectSpace().getOperations();
final List<AbstractOperation> ops2 = clonedProjectSpace.getOperations();
final Set<AbstractOperation> conflicts = getConflicts(ops1, getProjectSpace().getContentEditingDomain(), ops2,
clonedProjectSpace.getContentEditingDomain());
assertTrue(conflicts.size() > 0);
}
@Test
public void testConflictUpdateVSUpdateMapEntry() {
final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
addTestElement(testElement);
final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
updateMapEntry(testElement, FOO, BAR);
clearOperations();
final ProjectSpace clonedProjectSpace = cloneProjectSpace(getProjectSpace());
final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
modelElementId);
updateMapEntry(testElement, FOO, HELLO1);
updateMapEntry(clonedTestElement, FOO, HELLO2);
final List<AbstractOperation> ops1 = getProjectSpace().getOperations();
final List<AbstractOperation> ops2 = clonedProjectSpace.getOperations();
final Set<AbstractOperation> conflicts = getConflicts(ops1, getProjectSpace().getContentEditingDomain(), ops2,
clonedProjectSpace.getContentEditingDomain());
assertTrue(conflicts.size() > 0);
}
@Test
public void testConflictUpdateVSDeleteMapEntry() throws ChangeConflictException {
final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
addTestElement(testElement);
final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
updateMapEntry(testElement, FOO, BAR);
clearOperations();
final ProjectSpace clonedProjectSpace = cloneProjectSpace(getProjectSpace());
final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
modelElementId);
updateMapEntry(testElement, FOO, HELLO1);
deleteMapEntry(clonedTestElement, FOO);
final List<AbstractOperation> ops1 = getProjectSpace().getOperations();
final List<AbstractOperation> ops2 = clonedProjectSpace.getOperations();
final Set<AbstractOperation> conflicts = getConflicts(ops1, getProjectSpace().getContentEditingDomain(), ops2,
clonedProjectSpace.getContentEditingDomain());
assertTrue(conflicts.size() > 0);
}
@Test
public void testConflictDeleteVSDeleteMapEntry() {
final TestElement testElement = TestmodelFactory.eINSTANCE.createTestElement();
addTestElement(testElement);
final ModelElementId modelElementId = getProjectSpace().getProject().getModelElementId(testElement);
updateMapEntry(testElement, FOO, BAR);
clearOperations();
final ProjectSpace clonedProjectSpace = cloneProjectSpace(getProjectSpace());
final TestElement clonedTestElement = (TestElement) clonedProjectSpace.getProject().getModelElement(
modelElementId);
deleteMapEntry(testElement, FOO);
deleteMapEntry(clonedTestElement, FOO);
final List<AbstractOperation> ops1 = getProjectSpace().getOperations();
final List<AbstractOperation> ops2 = clonedProjectSpace.getOperations();
final Set<AbstractOperation> conflicts = getConflicts(ops1, getProjectSpace().getContentEditingDomain(), ops2,
clonedProjectSpace.getContentEditingDomain());
assertEquals(1, conflicts.size());
}
private void deleteMapEntry(final TestElement testElement, final String key) {
RunESCommand.run(new Callable<Void>() {
public Void call() throws Exception {
testElement.getStringToStringMap().remove(key);
return null;
}
}, getProjectSpace().getContentEditingDomain());
}
private void deleteMapEntryNonContainedKey(final TestElement testElement, final TestElement key) {
RunESCommand.run(new Callable<Void>() {
public Void call() throws Exception {
testElement.getElementToStringMap().remove(key);
return null;
}
}, getProjectSpace().getContentEditingDomain());
}
private void updateMapEntry(final TestElement testElement, final String key, final String value) {
RunESCommand.run(new Callable<Void>() {
public Void call() throws Exception {
testElement.getStringToStringMap().put(key, value);
return null;
}
}, getProjectSpace().getContentEditingDomain());
}
private void updateMapEntryNonContainedKey(final TestElement testElement, final TestElement key, final String value) {
RunESCommand.run(new Callable<Void>() {
public Void call() throws Exception {
testElement.getElementToStringMap().put(key, value);
return null;
}
}, getProjectSpace().getContentEditingDomain());
}
private void addTestElement(final TestElement testElement) {
RunESCommand.run(new Callable<Void>() {
public Void call() throws Exception {
getProject().addModelElement(testElement);
clearOperations();
return null;
}
}, getProjectSpace().getContentEditingDomain());
}
}