| /******************************************************************************* |
| * Copyright (c) 2012, 2014 Obeo. |
| * 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: |
| * Obeo - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.emf.compare.uml2.tests.executionSpecification; |
| |
| import static com.google.common.base.Predicates.and; |
| import static com.google.common.base.Predicates.instanceOf; |
| import static org.eclipse.emf.compare.utils.EMFComparePredicates.added; |
| import static org.eclipse.emf.compare.utils.EMFComparePredicates.addedToReference; |
| import static org.eclipse.emf.compare.utils.EMFComparePredicates.changedReference; |
| import static org.eclipse.emf.compare.utils.EMFComparePredicates.ofKind; |
| import static org.eclipse.emf.compare.utils.EMFComparePredicates.removed; |
| import static org.eclipse.emf.compare.utils.EMFComparePredicates.removedFromReference; |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertNotNull; |
| import static org.junit.Assert.assertTrue; |
| |
| import com.google.common.base.Predicate; |
| import com.google.common.collect.Iterators; |
| |
| import java.io.IOException; |
| import java.util.List; |
| |
| import org.eclipse.emf.compare.Comparison; |
| import org.eclipse.emf.compare.Diff; |
| import org.eclipse.emf.compare.DifferenceKind; |
| import org.eclipse.emf.compare.uml2.internal.ExecutionSpecificationChange; |
| import org.eclipse.emf.compare.uml2.tests.AbstractUMLInputData; |
| import org.eclipse.emf.compare.uml2.tests.AbstractUMLTest; |
| import org.eclipse.emf.compare.uml2.tests.executionSpecification.data.ExecutionSpecificationInputData; |
| import org.eclipse.emf.ecore.resource.Resource; |
| import org.junit.AfterClass; |
| import org.junit.BeforeClass; |
| import org.junit.Test; |
| |
| @SuppressWarnings("nls") |
| public class AddActionExecutionSpecificationTest extends AbstractUMLTest { |
| |
| private ExecutionSpecificationInputData input = new ExecutionSpecificationInputData(); |
| |
| @BeforeClass |
| public static void setupClass() { |
| fillRegistries(); |
| } |
| |
| @AfterClass |
| public static void teardownClass() { |
| resetRegistries(); |
| } |
| |
| @Test |
| public void testA10UseCase() throws IOException { |
| final Resource left = input.getA1Left(); |
| final Resource right = input.getA1Right(); |
| |
| final Comparison comparison = compare(left, right); |
| testAB1(TestKind.ADD, comparison); |
| |
| testMergeLeftToRight(left, right, null); |
| testMergeRightToLeft(left, right, null); |
| } |
| |
| @Test |
| public void testA11UseCase() throws IOException { |
| final Resource left = input.getA1Left(); |
| final Resource right = input.getA1Right(); |
| |
| final Comparison comparison = compare(right, left); |
| testAB1(TestKind.DELETE, comparison); |
| |
| testMergeLeftToRight(right, left, null); |
| testMergeRightToLeft(right, left, null); |
| } |
| |
| @Test |
| public void testA10UseCase3way() throws IOException { |
| final Resource left = input.getA1Left(); |
| final Resource right = input.getA1Right(); |
| |
| final Comparison comparison = compare(left, right, right); |
| testAB1(TestKind.ADD, comparison); |
| |
| testMergeLeftToRight(left, right, right); |
| testMergeRightToLeft(left, right, right); |
| } |
| |
| @Test |
| public void testA11UseCase3way() throws IOException { |
| final Resource left = input.getA1Left(); |
| final Resource right = input.getA1Right(); |
| |
| final Comparison comparison = compare(left, right, left); |
| testAB1(TestKind.DELETE, comparison); |
| |
| testMergeLeftToRight(left, right, left); |
| testMergeRightToLeft(left, right, left); |
| } |
| |
| private void testAB1(TestKind kind, final Comparison comparison) { |
| final List<Diff> differences = comparison.getDifferences(); |
| |
| // We should have no less and no more than 14 differences |
| assertEquals(14, differences.size()); |
| |
| Predicate<? super Diff> addActionExecSpecDescription = null; |
| Predicate<? super Diff> addCoveredInStartDescription = null; |
| Predicate<? super Diff> addExecutionInStartDescription = null; |
| Predicate<? super Diff> addCoveredInFinishDescription = null; |
| Predicate<? super Diff> addExecutionInFinishDescription = null; |
| Predicate<? super Diff> addCoveredByInLifeline1Description1 = null; |
| Predicate<? super Diff> addCoveredByInLifeline1Description2 = null; |
| Predicate<? super Diff> addCoveredByInLifeline1Description3 = null; |
| Predicate<? super Diff> addFinishInActionExecSpecDescription = null; |
| Predicate<? super Diff> addStartInActionExecSpecDescription = null; |
| Predicate<? super Diff> addStartDescription = null; |
| Predicate<? super Diff> addFinishDescription = null; |
| Predicate<? super Diff> addCoveredInActionExecSpecDescription = null; |
| |
| if (kind.equals(TestKind.DELETE)) { |
| addActionExecSpecDescription = removed("model.interaction0.ActionExecSpec0"); //$NON-NLS-1$ |
| addStartDescription = removed("model.interaction0.ActionExecSpec0Start0"); //$NON-NLS-1$ |
| addFinishDescription = removed("model.interaction0.ActionExecSpec0Finish0"); //$NON-NLS-1$ |
| addCoveredInStartDescription = removedFromReference("model.interaction0.ActionExecSpec0Start0", |
| "covered", "model.interaction0.Lifeline1"); |
| addExecutionInStartDescription = changedReference("model.interaction0.ActionExecSpec0Start0", |
| "execution", "model.interaction0.ActionExecSpec0", null); |
| addCoveredInFinishDescription = removedFromReference("model.interaction0.ActionExecSpec0Finish0", |
| "covered", "model.interaction0.Lifeline1"); |
| addExecutionInFinishDescription = changedReference("model.interaction0.ActionExecSpec0Finish0", |
| "execution", "model.interaction0.ActionExecSpec0", null); |
| addFinishInActionExecSpecDescription = changedReference("model.interaction0.ActionExecSpec0", |
| "finish", "model.interaction0.ActionExecSpec0Finish0", null); |
| addStartInActionExecSpecDescription = changedReference("model.interaction0.ActionExecSpec0", |
| "start", "model.interaction0.ActionExecSpec0Start0", null); |
| addCoveredByInLifeline1Description1 = removedFromReference("model.interaction0.Lifeline1", |
| "coveredBy", "model.interaction0.ActionExecSpec0Start0"); |
| addCoveredByInLifeline1Description2 = removedFromReference("model.interaction0.Lifeline1", |
| "coveredBy", "model.interaction0.ActionExecSpec0Finish0"); |
| addCoveredByInLifeline1Description3 = removedFromReference("model.interaction0.Lifeline1", |
| "coveredBy", "model.interaction0.ActionExecSpec0"); |
| addCoveredInActionExecSpecDescription = removedFromReference("model.interaction0.ActionExecSpec0", |
| "covered", "model.interaction0.Lifeline1"); |
| } else { |
| addActionExecSpecDescription = added("model.interaction0.ActionExecSpec0"); //$NON-NLS-1$ |
| addStartDescription = added("model.interaction0.ActionExecSpec0Start0"); //$NON-NLS-1$ |
| addFinishDescription = added("model.interaction0.ActionExecSpec0Finish0"); |
| addCoveredInStartDescription = addedToReference("model.interaction0.ActionExecSpec0Start0", |
| "covered", "model.interaction0.Lifeline1"); |
| addExecutionInStartDescription = changedReference("model.interaction0.ActionExecSpec0Start0", |
| "execution", null, "model.interaction0.ActionExecSpec0"); |
| addCoveredInFinishDescription = addedToReference("model.interaction0.ActionExecSpec0Finish0", |
| "covered", "model.interaction0.Lifeline1"); |
| addExecutionInFinishDescription = changedReference("model.interaction0.ActionExecSpec0Finish0", |
| "execution", null, "model.interaction0.ActionExecSpec0"); |
| addFinishInActionExecSpecDescription = changedReference("model.interaction0.ActionExecSpec0", |
| "finish", null, "model.interaction0.ActionExecSpec0Finish0"); |
| addStartInActionExecSpecDescription = changedReference("model.interaction0.ActionExecSpec0", |
| "start", null, "model.interaction0.ActionExecSpec0Start0"); |
| addCoveredByInLifeline1Description1 = addedToReference("model.interaction0.Lifeline1", |
| "coveredBy", "model.interaction0.ActionExecSpec0Start0"); |
| addCoveredByInLifeline1Description2 = addedToReference("model.interaction0.Lifeline1", |
| "coveredBy", "model.interaction0.ActionExecSpec0Finish0"); |
| addCoveredByInLifeline1Description3 = addedToReference("model.interaction0.Lifeline1", |
| "coveredBy", "model.interaction0.ActionExecSpec0"); |
| addCoveredInActionExecSpecDescription = addedToReference("model.interaction0.ActionExecSpec0", |
| "covered", "model.interaction0.Lifeline1"); |
| } |
| |
| final Diff addActionExecSpec = Iterators.find(differences.iterator(), addActionExecSpecDescription); |
| final Diff addCoveredInStart = Iterators.find(differences.iterator(), addCoveredInStartDescription); |
| final Diff addExecutionInStart = Iterators.find(differences.iterator(), |
| addExecutionInStartDescription); |
| final Diff addCoveredInFinish = Iterators.find(differences.iterator(), addCoveredInFinishDescription); |
| final Diff addExecutionInFinish = Iterators.find(differences.iterator(), |
| addExecutionInFinishDescription); |
| final Diff addFinishInActionExecSpec = Iterators.find(differences.iterator(), |
| addFinishInActionExecSpecDescription); |
| final Diff addStartInActionExecSpec = Iterators.find(differences.iterator(), |
| addStartInActionExecSpecDescription); |
| final Diff addCoveredByInLifeline1_1 = Iterators.find(differences.iterator(), |
| addCoveredByInLifeline1Description1); |
| final Diff addCoveredByInLifeline1_2 = Iterators.find(differences.iterator(), |
| addCoveredByInLifeline1Description2); |
| final Diff addCoveredByInLifeline1_3 = Iterators.find(differences.iterator(), |
| addCoveredByInLifeline1Description3); |
| final Diff addStart = Iterators.find(differences.iterator(), addStartDescription); |
| final Diff addFinish = Iterators.find(differences.iterator(), addFinishDescription); |
| final Diff addCoveredInActionExecSpec = Iterators.find(differences.iterator(), |
| addCoveredInActionExecSpecDescription); |
| |
| assertNotNull(addActionExecSpec); |
| assertNotNull(addCoveredInStart); |
| assertNotNull(addExecutionInStart); |
| assertNotNull(addCoveredInFinish); |
| assertNotNull(addExecutionInFinish); |
| assertNotNull(addFinishInActionExecSpec); |
| assertNotNull(addStartInActionExecSpec); |
| assertNotNull(addCoveredByInLifeline1_1); |
| assertNotNull(addCoveredByInLifeline1_2); |
| assertNotNull(addCoveredByInLifeline1_3); |
| assertNotNull(addStart); |
| assertNotNull(addFinish); |
| assertNotNull(addCoveredInActionExecSpec); |
| |
| // CHECK EXTENSION |
| assertEquals(1, count(differences, instanceOf(ExecutionSpecificationChange.class))); |
| Diff addUMLMessage = null; |
| if (kind.equals(TestKind.ADD)) { |
| addUMLMessage = Iterators.find(differences.iterator(), |
| and(instanceOf(ExecutionSpecificationChange.class), ofKind(DifferenceKind.ADD))); |
| } else { |
| addUMLMessage = Iterators.find(differences.iterator(), |
| and(instanceOf(ExecutionSpecificationChange.class), ofKind(DifferenceKind.DELETE))); |
| } |
| assertNotNull(addUMLMessage); |
| assertEquals(13, addUMLMessage.getRefinedBy().size()); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addFinishInActionExecSpec)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addStartInActionExecSpec)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addCoveredInFinish)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addCoveredInStart)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addCoveredInActionExecSpec)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addCoveredByInLifeline1_1)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addCoveredByInLifeline1_2)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addStart)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addFinish)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addActionExecSpec)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addExecutionInFinish)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addCoveredByInLifeline1_3)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addExecutionInStart)); |
| |
| // CHECK REQUIREMENT |
| if (kind.equals(TestKind.ADD)) { |
| |
| assertEquals(0, addActionExecSpec.getRequires().size()); |
| |
| assertEquals(1, addCoveredInStart.getRequires().size()); |
| assertTrue(addCoveredInStart.getRequires().contains(addStart)); |
| |
| assertEquals(2, addExecutionInStart.getRequires().size()); |
| assertTrue(addExecutionInStart.getRequires().contains(addStart)); |
| assertTrue(addExecutionInStart.getRequires().contains(addActionExecSpec)); |
| |
| assertEquals(1, addCoveredInFinish.getRequires().size()); |
| assertTrue(addCoveredInFinish.getRequires().contains(addFinish)); |
| |
| assertEquals(2, addExecutionInFinish.getRequires().size()); |
| assertTrue(addExecutionInFinish.getRequires().contains(addFinish)); |
| assertTrue(addExecutionInFinish.getRequires().contains(addActionExecSpec)); |
| |
| assertEquals(2, addFinishInActionExecSpec.getRequires().size()); |
| assertTrue(addFinishInActionExecSpec.getRequires().contains(addActionExecSpec)); |
| assertTrue(addFinishInActionExecSpec.getRequires().contains(addFinish)); |
| |
| assertEquals(2, addStartInActionExecSpec.getRequires().size()); |
| assertTrue(addStartInActionExecSpec.getRequires().contains(addActionExecSpec)); |
| assertTrue(addStartInActionExecSpec.getRequires().contains(addStart)); |
| |
| assertEquals(1, addCoveredByInLifeline1_1.getRequires().size()); |
| assertTrue(addCoveredByInLifeline1_1.getRequires().contains(addStart)); |
| |
| assertEquals(1, addCoveredByInLifeline1_2.getRequires().size()); |
| assertTrue(addCoveredByInLifeline1_2.getRequires().contains(addFinish)); |
| |
| assertEquals(1, addCoveredByInLifeline1_3.getRequires().size()); |
| assertTrue(addCoveredByInLifeline1_3.getRequires().contains(addActionExecSpec)); |
| |
| assertEquals(0, addStart.getRequires().size()); |
| |
| assertEquals(0, addFinish.getRequires().size()); |
| |
| assertEquals(1, addCoveredInActionExecSpec.getRequires().size()); |
| assertTrue(addCoveredInActionExecSpec.getRequires().contains(addActionExecSpec)); |
| |
| } else { |
| assertEquals(6, addActionExecSpec.getRequires().size()); |
| assertTrue(addActionExecSpec.getRequires().contains(addFinishInActionExecSpec)); |
| assertTrue(addActionExecSpec.getRequires().contains(addStartInActionExecSpec)); |
| assertTrue(addActionExecSpec.getRequires().contains(addCoveredInActionExecSpec)); |
| assertTrue(addActionExecSpec.getRequires().contains(addExecutionInFinish)); |
| assertTrue(addActionExecSpec.getRequires().contains(addExecutionInStart)); |
| assertTrue(addActionExecSpec.getRequires().contains(addCoveredByInLifeline1_3)); |
| |
| assertEquals(0, addCoveredInStart.getRequires().size()); |
| |
| assertEquals(0, addExecutionInStart.getRequires().size()); |
| |
| assertEquals(0, addCoveredInFinish.getRequires().size()); |
| |
| assertEquals(0, addExecutionInFinish.getRequires().size()); |
| |
| assertEquals(0, addFinishInActionExecSpec.getRequires().size()); |
| |
| assertEquals(0, addStartInActionExecSpec.getRequires().size()); |
| |
| assertEquals(0, addCoveredByInLifeline1_1.getRequires().size()); |
| |
| assertEquals(0, addCoveredByInLifeline1_2.getRequires().size()); |
| |
| assertEquals(0, addCoveredByInLifeline1_3.getRequires().size()); |
| |
| assertEquals(4, addStart.getRequires().size()); |
| assertTrue(addStart.getRequires().contains(addStartInActionExecSpec)); |
| assertTrue(addStart.getRequires().contains(addCoveredByInLifeline1_1)); |
| assertTrue(addStart.getRequires().contains(addCoveredInStart)); |
| assertTrue(addStart.getRequires().contains(addExecutionInStart)); |
| |
| assertEquals(4, addFinish.getRequires().size()); |
| assertTrue(addFinish.getRequires().contains(addFinishInActionExecSpec)); |
| assertTrue(addFinish.getRequires().contains(addCoveredByInLifeline1_2)); |
| assertTrue(addFinish.getRequires().contains(addCoveredInFinish)); |
| assertTrue(addFinish.getRequires().contains(addExecutionInFinish)); |
| |
| assertEquals(0, addCoveredInActionExecSpec.getRequires().size()); |
| } |
| |
| // CHECK EQUIVALENCE |
| assertEquals(3, comparison.getEquivalences().size()); |
| |
| assertNotNull(addCoveredInStart.getEquivalence()); |
| assertEquals(2, addCoveredInStart.getEquivalence().getDifferences().size()); |
| assertTrue(addCoveredInStart.getEquivalence().getDifferences().contains(addCoveredInStart)); |
| assertTrue(addCoveredInStart.getEquivalence().getDifferences().contains(addCoveredByInLifeline1_1)); |
| |
| assertNotNull(addCoveredInFinish.getEquivalence()); |
| assertEquals(2, addCoveredInFinish.getEquivalence().getDifferences().size()); |
| assertTrue(addCoveredInFinish.getEquivalence().getDifferences().contains(addCoveredInFinish)); |
| assertTrue(addCoveredInFinish.getEquivalence().getDifferences().contains(addCoveredByInLifeline1_2)); |
| |
| assertNotNull(addCoveredInActionExecSpec.getEquivalence()); |
| assertEquals(2, addCoveredInActionExecSpec.getEquivalence().getDifferences().size()); |
| assertTrue(addCoveredInActionExecSpec.getEquivalence().getDifferences() |
| .contains(addCoveredInActionExecSpec)); |
| assertTrue(addCoveredInActionExecSpec.getEquivalence().getDifferences() |
| .contains(addCoveredByInLifeline1_3)); |
| |
| testIntersections(comparison); |
| |
| } |
| |
| @Override |
| protected AbstractUMLInputData getInput() { |
| return input; |
| } |
| |
| } |