blob: 3f701c83391527b1e3597f8b48af64ac968c0813 [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:
* wesendon
******************************************************************************/
package org.eclipse.emf.emfstore.client.conflictdetection.test.merging;
import org.eclipse.emf.emfstore.client.test.common.dsl.Create;
import org.eclipse.emf.emfstore.internal.client.model.changeTracking.merging.conflict.conflicts.AttributeConflict;
import org.eclipse.emf.emfstore.internal.client.model.util.EMFStoreCommand;
import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.AttributeOperation;
import org.eclipse.emf.emfstore.test.model.TestElement;
import org.junit.Test;
/**
* AttributeOperation merge tests.
*
* @author wesendon
*/
public class AttributeMergeTest extends MergeTest {
// /**
// * Test without the convenience methods.
// */
// @Test
// public void oldAttributeCollision() {
// final ActionItem item = new EMFStoreCommandWithResult<ActionItem>() {
// @Override
// protected ActionItem doRun() {
// Project myProject = getProject();
// ActionItem item = TaskFactory.eINSTANCE.createActionItem();
// myProject.addModelElement(item);
// return item;
// }
// }.run(false);
//
// clearOperations();
//
// ProjectSpace projectSpace2 = cloneProjectSpace(getProjectSpace());
// Project project2 = projectSpace2.getProject();
// final ActionItem theirItem = (ActionItem) project2.getModelElement(getProject().getModelElementId(item));
//
// new EMFStoreCommand() {
// @Override
// protected void doRun() {
// item.setName("Otto");
// }
// }.run(false);
//
// new EMFStoreCommand() {
// @Override
// protected void doRun() {
// theirItem.setName("Max");
// }
// }.run(false);
//
// PrimaryVersionSpec spec = VersioningFactory.eINSTANCE.createPrimaryVersionSpec();
// spec.setIdentifier(2);
//
// DecisionManager manager = new DecisionManager(getProject(), getProjectSpace().getLocalChangePackage(true),
// Arrays.asList(projectSpace2.getLocalChangePackage(true)), spec, spec);
//
// ArrayList<Conflict> conflicts = manager.getConflicts();
//
// assertEquals(conflicts.size(), 1);
// assertTrue(conflicts.get(0) instanceof AttributeConflict);
// Conflict conflict = conflicts.get(0);
// assertTrue(conflict.getMyOperations().size() == 1);
// assertTrue(conflict.getMyOperation() instanceof AttributeOperation);
// assertTrue(conflict.getTheirOperations().size() == 1);
// assertTrue(conflict.getTheirOperation() instanceof AttributeOperation);
// }
private static final String MAX = "Max"; //$NON-NLS-1$
private static final String OTTO = "Otto"; //$NON-NLS-1$
/**
* Simple attribute conflict on name attribute.
*/
@Test
public void simpleAttributeCollision() {
final TestElement item = Create.testElement();
final MergeCase mergeCase = newMergeCase(item);
new EMFStoreCommand() {
@Override
protected void doRun() {
mergeCase.getMyItem(item).setName(OTTO);
}
}.run(false);
new EMFStoreCommand() {
@Override
protected void doRun() {
mergeCase.getTheirItem(item).setName(MAX);
}
}.run(false);
mergeCase.hasConflict(AttributeConflict.class).myIs(AttributeOperation.class)
.theirsIs(AttributeOperation.class);
}
/**
* Simple attribute conflict on name attribute with uninvoled change before.
*/
@Test
public void simpleAttributeCollisionWithUninvolvedBefore() {
final TestElement item = Create.testElement();
final MergeCase mergeCase = newMergeCase(item);
new EMFStoreCommand() {
@Override
protected void doRun() {
mergeCase.getMyItem(item).setDescription("some random description"); //$NON-NLS-1$
mergeCase.getMyItem(item).setName(OTTO);
}
}.run(false);
new EMFStoreCommand() {
@Override
protected void doRun() {
mergeCase.getTheirItem(item).setName(MAX);
}
}.run(false);
mergeCase.execute().getConflicts();
mergeCase.hasConflict(AttributeConflict.class).myIs(AttributeOperation.class)
.theirsIs(AttributeOperation.class);
}
/**
* Simple attribute conflict on name attribute with uninvoled change after.
*/
@Test
public void simpleAttributeCollisionWithUninvolvedAfter() {
final TestElement item = Create.testElement();
final MergeCase mergeCase = newMergeCase(item);
new EMFStoreCommand() {
@Override
protected void doRun() {
mergeCase.getMyItem(item).setName(OTTO);
mergeCase.getMyItem(item).setDescription("some random description"); //$NON-NLS-1$
}
}.run(false);
new EMFStoreCommand() {
@Override
protected void doRun() {
mergeCase.getTheirItem(item).setName(MAX);
}
}.run(false);
mergeCase.hasConflict(AttributeConflict.class).myIs(AttributeOperation.class)
.theirsIs(AttributeOperation.class);
}
/**
* Simple attribute conflict on name attribute with uninvoled change before on their side.
*/
@Test
public void simpleAttributeCollisionWithUninvolvedBeforeTheir() {
final TestElement item = Create.testElement();
final MergeCase mergeCase = newMergeCase(item);
new EMFStoreCommand() {
@Override
protected void doRun() {
mergeCase.getMyItem(item).setName(OTTO);
}
}.run(false);
new EMFStoreCommand() {
@Override
protected void doRun() {
mergeCase.getTheirItem(item).setDescription("some random description"); //$NON-NLS-1$
mergeCase.getTheirItem(item).setName(MAX);
}
}.run(false);
mergeCase.hasConflict(AttributeConflict.class).myIs(AttributeOperation.class)
.theirsIs(AttributeOperation.class);
}
}