| /******************************************************************************* |
| * 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); |
| } |
| } |