| /******************************************************************************* |
| * 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.message; |
| |
| import static com.google.common.base.Predicates.and; |
| import static com.google.common.base.Predicates.instanceOf; |
| import static com.google.common.base.Predicates.not; |
| 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.assertFalse; |
| 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.ArrayList; |
| import java.util.Iterator; |
| 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.MessageChange; |
| import org.eclipse.emf.compare.uml2.tests.AbstractUMLInputData; |
| import org.eclipse.emf.compare.uml2.tests.AbstractUMLTest; |
| import org.eclipse.emf.compare.uml2.tests.message.data.MessageInputData; |
| import org.eclipse.emf.ecore.resource.Resource; |
| import org.junit.AfterClass; |
| import org.junit.BeforeClass; |
| import org.junit.Test; |
| |
| @SuppressWarnings("nls") |
| public class AddMessageTest extends AbstractUMLTest { |
| |
| private MessageInputData input = new MessageInputData(); |
| |
| @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); |
| } |
| |
| @Test |
| public void testA20UseCase() throws IOException { |
| final Resource left = input.getA2Left(); |
| final Resource right = input.getA2Right(); |
| |
| final Comparison comparison = compare(left, right); |
| testAB2(TestKind.ADD, comparison); |
| |
| testMergeLeftToRight(left, right, null); |
| testMergeRightToLeft(left, right, null); |
| } |
| |
| @Test |
| public void testA21UseCase() throws IOException { |
| final Resource left = input.getA2Left(); |
| final Resource right = input.getA2Right(); |
| |
| final Comparison comparison = compare(right, left); |
| testAB2(TestKind.DELETE, comparison); |
| |
| testMergeLeftToRight(right, left, null); |
| testMergeRightToLeft(right, left, null); |
| } |
| |
| @Test |
| public void testA20UseCase3way() throws IOException { |
| final Resource left = input.getA2Left(); |
| final Resource right = input.getA2Right(); |
| |
| final Comparison comparison = compare(left, right, right); |
| testAB2(TestKind.ADD, comparison); |
| |
| testMergeLeftToRight(left, right, right); |
| testMergeRightToLeft(left, right, right); |
| } |
| |
| @Test |
| public void testA21UseCase3way() throws IOException { |
| final Resource left = input.getA2Left(); |
| final Resource right = input.getA2Right(); |
| |
| final Comparison comparison = compare(left, right, left); |
| testAB2(TestKind.DELETE, comparison); |
| |
| testMergeLeftToRight(left, right, left); |
| testMergeRightToLeft(left, right, left); |
| } |
| |
| @Test |
| public void testA30UseCase() throws IOException { |
| final Resource left = input.getA3Left(); |
| final Resource right = input.getA3Right(); |
| |
| final Comparison comparison = compare(left, right); |
| testAB3(TestKind.ADD, comparison); |
| |
| testMergeLeftToRight(left, right, null); |
| testMergeRightToLeft(left, right, null); |
| } |
| |
| @Test |
| public void testA31UseCase() throws IOException { |
| final Resource left = input.getA3Left(); |
| final Resource right = input.getA3Right(); |
| |
| final Comparison comparison = compare(right, left); |
| testAB3(TestKind.DELETE, comparison); |
| |
| testMergeLeftToRight(right, left, null); |
| testMergeRightToLeft(right, left, null); |
| } |
| |
| @Test |
| public void testA30UseCase3way() throws IOException { |
| final Resource left = input.getA3Left(); |
| final Resource right = input.getA3Right(); |
| |
| final Comparison comparison = compare(left, right, right); |
| testAB3(TestKind.ADD, comparison); |
| |
| testMergeLeftToRight(left, right, right); |
| testMergeRightToLeft(left, right, right); |
| } |
| |
| @Test |
| public void testA31UseCase3way() throws IOException { |
| final Resource left = input.getA3Left(); |
| final Resource right = input.getA3Right(); |
| |
| final Comparison comparison = compare(left, right, left); |
| testAB3(TestKind.DELETE, comparison); |
| |
| testMergeLeftToRight(left, right, left); |
| testMergeRightToLeft(left, right, left); |
| } |
| |
| @Test |
| public void testA40UseCase() throws IOException { |
| final Resource left = input.getA4Left(); |
| final Resource right = input.getA4Right(); |
| |
| final Comparison comparison = compare(left, right); |
| testAB1(TestKind.ADD, comparison); |
| |
| testMergeLeftToRight(left, right, null); |
| testMergeRightToLeft(left, right, null); |
| } |
| |
| @Test |
| public void testA41UseCase() throws IOException { |
| final Resource left = input.getA4Left(); |
| final Resource right = input.getA4Right(); |
| |
| final Comparison comparison = compare(right, left); |
| testAB1(TestKind.DELETE, comparison); |
| |
| testMergeLeftToRight(right, left, null); |
| testMergeRightToLeft(right, left, null); |
| } |
| |
| @Test |
| public void testA40UseCase3way() throws IOException { |
| final Resource left = input.getA4Left(); |
| final Resource right = input.getA4Right(); |
| |
| final Comparison comparison = compare(left, right, right); |
| testAB1(TestKind.ADD, comparison); |
| |
| testMergeLeftToRight(left, right, right); |
| testMergeRightToLeft(left, right, right); |
| } |
| |
| @Test |
| public void testA41UseCase3way() throws IOException { |
| final Resource left = input.getA4Left(); |
| final Resource right = input.getA4Right(); |
| |
| 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 12 differences |
| assertEquals(12, differences.size()); |
| |
| Predicate<? super Diff> addMessageDescription = null; |
| Predicate<? super Diff> addCoveredInMessage0Send0Description = null; |
| Predicate<? super Diff> addMessageInMessage0Send0Description = null; |
| Predicate<? super Diff> addCoveredInMessage0Recv0Description = null; |
| Predicate<? super Diff> addMessageInMessage0Recv0Description = null; |
| Predicate<? super Diff> addCoveredByInLifeline0Description = null; |
| Predicate<? super Diff> addCoveredByInLifeline1Description = null; |
| Predicate<? super Diff> addReceiveEventInMessageDescription = null; |
| Predicate<? super Diff> addSendEventInMessageDescription = null; |
| Predicate<? super Diff> addMessageSendDescription = null; |
| Predicate<? super Diff> addMessageRecvDescription = null; |
| |
| if (kind.equals(TestKind.DELETE)) { |
| addMessageDescription = removed("model.interaction0.Message0"); //$NON-NLS-1$ |
| addMessageSendDescription = removed("model.interaction0.Message0Send0"); //$NON-NLS-1$ |
| addMessageRecvDescription = removed("model.interaction0.Message0Recv0"); //$NON-NLS-1$ |
| addCoveredInMessage0Send0Description = removedFromReference("model.interaction0.Message0Send0", |
| "covered", "model.interaction0.Lifeline0"); |
| addMessageInMessage0Send0Description = changedReference("model.interaction0.Message0Send0", |
| "message", "model.interaction0.Message0", null); |
| addCoveredInMessage0Recv0Description = removedFromReference("model.interaction0.Message0Recv0", |
| "covered", "model.interaction0.Lifeline1"); |
| addMessageInMessage0Recv0Description = changedReference("model.interaction0.Message0Recv0", |
| "message", "model.interaction0.Message0", null); |
| addReceiveEventInMessageDescription = changedReference("model.interaction0.Message0", |
| "receiveEvent", "model.interaction0.Message0Recv0", null); |
| addSendEventInMessageDescription = changedReference("model.interaction0.Message0", "sendEvent", |
| "model.interaction0.Message0Send0", null); |
| addCoveredByInLifeline0Description = removedFromReference("model.interaction0.Lifeline0", |
| "coveredBy", "model.interaction0.Message0Send0"); |
| addCoveredByInLifeline1Description = removedFromReference("model.interaction0.Lifeline1", |
| "coveredBy", "model.interaction0.Message0Recv0"); |
| } else { |
| addMessageDescription = added("model.interaction0.Message0"); //$NON-NLS-1$ |
| addMessageSendDescription = added("model.interaction0.Message0Send0"); //$NON-NLS-1$ |
| addMessageRecvDescription = added("model.interaction0.Message0Recv0"); |
| addCoveredInMessage0Send0Description = addedToReference("model.interaction0.Message0Send0", |
| "covered", "model.interaction0.Lifeline0"); |
| addMessageInMessage0Send0Description = changedReference("model.interaction0.Message0Send0", |
| "message", null, "model.interaction0.Message0"); |
| addCoveredInMessage0Recv0Description = addedToReference("model.interaction0.Message0Recv0", |
| "covered", "model.interaction0.Lifeline1"); |
| addMessageInMessage0Recv0Description = changedReference("model.interaction0.Message0Recv0", |
| "message", null, "model.interaction0.Message0"); |
| addReceiveEventInMessageDescription = changedReference("model.interaction0.Message0", |
| "receiveEvent", null, "model.interaction0.Message0Recv0"); |
| addSendEventInMessageDescription = changedReference("model.interaction0.Message0", "sendEvent", |
| null, "model.interaction0.Message0Send0"); |
| addCoveredByInLifeline0Description = addedToReference("model.interaction0.Lifeline0", "coveredBy", |
| "model.interaction0.Message0Send0"); |
| addCoveredByInLifeline1Description = addedToReference("model.interaction0.Lifeline1", "coveredBy", |
| "model.interaction0.Message0Recv0"); |
| } |
| |
| final Diff addMessage = Iterators.find(differences.iterator(), addMessageDescription); |
| final Diff addCoveredInMessage0Send0 = Iterators.find(differences.iterator(), |
| addCoveredInMessage0Send0Description); |
| final Diff addMessageInMessage0Send0 = Iterators.find(differences.iterator(), |
| addMessageInMessage0Send0Description); |
| final Diff addCoveredInMessage0Recv0 = Iterators.find(differences.iterator(), |
| addCoveredInMessage0Recv0Description); |
| final Diff addMessageInMessage0Recv0 = Iterators.find(differences.iterator(), |
| addMessageInMessage0Recv0Description); |
| final Diff addReceiveEventInMessage = Iterators.find(differences.iterator(), |
| addReceiveEventInMessageDescription); |
| final Diff addSendEventInMessage = Iterators.find(differences.iterator(), |
| addSendEventInMessageDescription); |
| final Diff addCoveredByInLifeline0 = Iterators.find(differences.iterator(), |
| addCoveredByInLifeline0Description); |
| final Diff addCoveredByInLifeline1 = Iterators.find(differences.iterator(), |
| addCoveredByInLifeline1Description); |
| final Diff addMessageSend = Iterators.find(differences.iterator(), addMessageSendDescription); |
| final Diff addMessageRecv = Iterators.find(differences.iterator(), addMessageRecvDescription); |
| |
| assertNotNull(addMessage); |
| assertNotNull(addCoveredInMessage0Send0); |
| assertNotNull(addMessageInMessage0Send0); |
| assertNotNull(addCoveredInMessage0Recv0); |
| assertNotNull(addMessageInMessage0Recv0); |
| assertNotNull(addReceiveEventInMessage); |
| assertNotNull(addSendEventInMessage); |
| assertNotNull(addCoveredByInLifeline0); |
| assertNotNull(addCoveredByInLifeline1); |
| assertNotNull(addMessageSend); |
| assertNotNull(addMessageRecv); |
| |
| // CHECK EXTENSION |
| assertEquals(1, count(differences, instanceOf(MessageChange.class))); |
| Diff addUMLMessage = null; |
| if (kind.equals(TestKind.ADD)) { |
| addUMLMessage = Iterators.find(differences.iterator(), |
| and(instanceOf(MessageChange.class), ofKind(DifferenceKind.ADD))); |
| } else { |
| addUMLMessage = Iterators.find(differences.iterator(), |
| and(instanceOf(MessageChange.class), ofKind(DifferenceKind.DELETE))); |
| } |
| assertNotNull(addUMLMessage); |
| assertEquals(11, addUMLMessage.getRefinedBy().size()); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addReceiveEventInMessage)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addSendEventInMessage)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addCoveredInMessage0Recv0)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addCoveredInMessage0Send0)); |
| |
| assertTrue(addUMLMessage.getRefinedBy().contains(addMessageSend)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addMessageRecv)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addCoveredByInLifeline0)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addCoveredByInLifeline1)); |
| |
| assertTrue(addUMLMessage.getRefinedBy().contains(addMessage)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addMessageInMessage0Send0)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addMessageInMessage0Recv0)); |
| |
| // CHECK REQUIREMENT |
| if (kind.equals(TestKind.ADD)) { |
| |
| assertEquals(0, addMessage.getRequires().size()); |
| |
| assertEquals(1, addCoveredInMessage0Send0.getRequires().size()); |
| assertTrue(addCoveredInMessage0Send0.getRequires().contains(addMessageSend)); |
| |
| assertEquals(2, addMessageInMessage0Send0.getRequires().size()); |
| assertTrue(addMessageInMessage0Send0.getRequires().contains(addMessageSend)); |
| assertTrue(addMessageInMessage0Send0.getRequires().contains(addMessage)); |
| |
| assertEquals(1, addCoveredInMessage0Recv0.getRequires().size()); |
| assertTrue(addCoveredInMessage0Recv0.getRequires().contains(addMessageRecv)); |
| |
| assertEquals(2, addMessageInMessage0Recv0.getRequires().size()); |
| assertTrue(addMessageInMessage0Recv0.getRequires().contains(addMessageRecv)); |
| assertTrue(addMessageInMessage0Recv0.getRequires().contains(addMessage)); |
| |
| assertEquals(2, addReceiveEventInMessage.getRequires().size()); |
| assertTrue(addReceiveEventInMessage.getRequires().contains(addMessage)); |
| assertTrue(addReceiveEventInMessage.getRequires().contains(addMessageRecv)); |
| |
| assertEquals(2, addSendEventInMessage.getRequires().size()); |
| assertTrue(addSendEventInMessage.getRequires().contains(addMessage)); |
| assertTrue(addSendEventInMessage.getRequires().contains(addMessageSend)); |
| |
| assertEquals(1, addCoveredByInLifeline0.getRequires().size()); |
| assertTrue(addCoveredByInLifeline0.getRequires().contains(addMessageSend)); |
| |
| assertEquals(1, addCoveredByInLifeline1.getRequires().size()); |
| assertTrue(addCoveredByInLifeline1.getRequires().contains(addMessageRecv)); |
| |
| assertEquals(0, addMessageSend.getRequires().size()); |
| |
| assertEquals(0, addMessageRecv.getRequires().size()); |
| |
| } else { |
| assertEquals(4, addMessage.getRequires().size()); |
| assertTrue(addMessage.getRequires().contains(addReceiveEventInMessage)); |
| assertTrue(addMessage.getRequires().contains(addSendEventInMessage)); |
| assertTrue(addMessage.getRequires().contains(addMessageInMessage0Recv0)); |
| assertTrue(addMessage.getRequires().contains(addMessageInMessage0Send0)); |
| |
| assertEquals(0, addCoveredInMessage0Send0.getRequires().size()); |
| |
| assertEquals(0, addMessageInMessage0Send0.getRequires().size()); |
| |
| assertEquals(0, addCoveredInMessage0Recv0.getRequires().size()); |
| |
| assertEquals(0, addMessageInMessage0Recv0.getRequires().size()); |
| |
| assertEquals(0, addReceiveEventInMessage.getRequires().size()); |
| |
| assertEquals(0, addSendEventInMessage.getRequires().size()); |
| |
| assertEquals(0, addCoveredByInLifeline0.getRequires().size()); |
| |
| assertEquals(0, addCoveredByInLifeline1.getRequires().size()); |
| |
| assertEquals(4, addMessageSend.getRequires().size()); |
| assertTrue(addMessageSend.getRequires().contains(addSendEventInMessage)); |
| assertTrue(addMessageSend.getRequires().contains(addCoveredByInLifeline0)); |
| assertTrue(addMessageSend.getRequires().contains(addCoveredInMessage0Send0)); |
| assertTrue(addMessageSend.getRequires().contains(addMessageInMessage0Send0)); |
| |
| assertEquals(4, addMessageRecv.getRequires().size()); |
| assertTrue(addMessageRecv.getRequires().contains(addReceiveEventInMessage)); |
| assertTrue(addMessageRecv.getRequires().contains(addCoveredByInLifeline1)); |
| assertTrue(addMessageRecv.getRequires().contains(addCoveredInMessage0Recv0)); |
| assertTrue(addMessageRecv.getRequires().contains(addMessageInMessage0Recv0)); |
| } |
| |
| // CHECK EQUIVALENCE |
| assertEquals(2, comparison.getEquivalences().size()); |
| |
| assertNotNull(addCoveredInMessage0Send0.getEquivalence()); |
| assertEquals(2, addCoveredInMessage0Send0.getEquivalence().getDifferences().size()); |
| assertTrue(addCoveredInMessage0Send0.getEquivalence().getDifferences() |
| .contains(addCoveredInMessage0Send0)); |
| assertTrue(addCoveredInMessage0Send0.getEquivalence().getDifferences() |
| .contains(addCoveredByInLifeline0)); |
| |
| assertNotNull(addCoveredInMessage0Recv0.getEquivalence()); |
| assertEquals(2, addCoveredInMessage0Recv0.getEquivalence().getDifferences().size()); |
| assertTrue(addCoveredInMessage0Recv0.getEquivalence().getDifferences() |
| .contains(addCoveredInMessage0Recv0)); |
| assertTrue(addCoveredInMessage0Recv0.getEquivalence().getDifferences() |
| .contains(addCoveredByInLifeline1)); |
| |
| testIntersections(comparison); |
| |
| } |
| |
| private void testAB2(TestKind kind, final Comparison comparison) { |
| final List<Diff> differences = comparison.getDifferences(); |
| |
| // We should have no less and no more than 7 differences |
| final Iterator<Diff> itUseFullDiffs = Iterators.filter(differences.iterator(), |
| not(ofKind(DifferenceKind.MOVE))); |
| final List<Diff> useFullDiffs = new ArrayList<Diff>(); |
| while (itUseFullDiffs.hasNext()) { |
| Diff diff = (Diff)itUseFullDiffs.next(); |
| useFullDiffs.add(diff); |
| } |
| |
| assertEquals(7, useFullDiffs.size()); |
| |
| Predicate<? super Diff> addMessageDescription = null; |
| Predicate<? super Diff> addCoveredInMessage0Recv0Description = null; |
| Predicate<? super Diff> addMessageInMessage0Recv0Description = null; |
| Predicate<? super Diff> addCoveredByInLifeline0Description = null; |
| Predicate<? super Diff> addReceiveEventInMessageDescription = null; |
| Predicate<? super Diff> addMessageRecvDescription = null; |
| |
| if (kind.equals(TestKind.DELETE)) { |
| addMessageDescription = removed("model.interaction0.Message0"); //$NON-NLS-1$ |
| addMessageRecvDescription = removed("model.interaction0.Message0Recv0"); //$NON-NLS-1$ |
| addCoveredInMessage0Recv0Description = removedFromReference("model.interaction0.Message0Recv0", |
| "covered", "model.interaction0.Lifeline0"); |
| addMessageInMessage0Recv0Description = changedReference("model.interaction0.Message0Recv0", |
| "message", "model.interaction0.Message0", null); |
| addReceiveEventInMessageDescription = changedReference("model.interaction0.Message0", |
| "receiveEvent", "model.interaction0.Message0Recv0", null); |
| addCoveredByInLifeline0Description = removedFromReference("model.interaction0.Lifeline0", |
| "coveredBy", "model.interaction0.Message0Recv0"); |
| } else { |
| addMessageDescription = added("model.interaction0.Message0"); //$NON-NLS-1$ |
| addMessageRecvDescription = added("model.interaction0.Message0Recv0"); |
| addCoveredInMessage0Recv0Description = addedToReference("model.interaction0.Message0Recv0", |
| "covered", "model.interaction0.Lifeline0"); |
| addMessageInMessage0Recv0Description = changedReference("model.interaction0.Message0Recv0", |
| "message", null, "model.interaction0.Message0"); |
| addReceiveEventInMessageDescription = changedReference("model.interaction0.Message0", |
| "receiveEvent", null, "model.interaction0.Message0Recv0"); |
| addCoveredByInLifeline0Description = addedToReference("model.interaction0.Lifeline0", "coveredBy", |
| "model.interaction0.Message0Recv0"); |
| } |
| |
| final Diff addMessage = Iterators.find(useFullDiffs.iterator(), addMessageDescription); |
| final Diff addCoveredInMessage0Recv0 = Iterators.find(useFullDiffs.iterator(), |
| addCoveredInMessage0Recv0Description); |
| final Diff addMessageInMessage0Recv0 = Iterators.find(useFullDiffs.iterator(), |
| addMessageInMessage0Recv0Description); |
| final Diff addReceiveEventInMessage = Iterators.find(useFullDiffs.iterator(), |
| addReceiveEventInMessageDescription); |
| final Diff addCoveredByInLifeline0 = Iterators.find(useFullDiffs.iterator(), |
| addCoveredByInLifeline0Description); |
| final Diff addMessageRecv = Iterators.find(useFullDiffs.iterator(), addMessageRecvDescription); |
| |
| assertNotNull(addMessage); |
| assertNotNull(addCoveredInMessage0Recv0); |
| assertNotNull(addMessageInMessage0Recv0); |
| assertNotNull(addReceiveEventInMessage); |
| assertNotNull(addCoveredByInLifeline0); |
| assertNotNull(addMessageRecv); |
| |
| // CHECK EXTENSION |
| assertEquals(1, count(useFullDiffs, instanceOf(MessageChange.class))); |
| Diff addUMLMessage = null; |
| if (kind.equals(TestKind.ADD)) { |
| addUMLMessage = Iterators.find(useFullDiffs.iterator(), |
| and(instanceOf(MessageChange.class), ofKind(DifferenceKind.ADD))); |
| } else { |
| addUMLMessage = Iterators.find(useFullDiffs.iterator(), |
| and(instanceOf(MessageChange.class), ofKind(DifferenceKind.DELETE))); |
| } |
| assertNotNull(addUMLMessage); |
| assertEquals(6, addUMLMessage.getRefinedBy().size()); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addReceiveEventInMessage)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addCoveredInMessage0Recv0)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addMessageRecv)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addCoveredByInLifeline0)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addMessage)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addMessageInMessage0Recv0)); |
| |
| // CHECK REQUIREMENT |
| if (kind.equals(TestKind.ADD)) { |
| |
| assertEquals(0, addMessage.getRequires().size()); |
| |
| assertEquals(1, addCoveredInMessage0Recv0.getRequires().size()); |
| assertTrue(addCoveredInMessage0Recv0.getRequires().contains(addMessageRecv)); |
| |
| assertEquals(2, addMessageInMessage0Recv0.getRequires().size()); |
| assertTrue(addMessageInMessage0Recv0.getRequires().contains(addMessageRecv)); |
| assertTrue(addMessageInMessage0Recv0.getRequires().contains(addMessage)); |
| |
| assertEquals(2, addReceiveEventInMessage.getRequires().size()); |
| assertTrue(addReceiveEventInMessage.getRequires().contains(addMessage)); |
| assertTrue(addReceiveEventInMessage.getRequires().contains(addMessageRecv)); |
| |
| assertEquals(1, addCoveredByInLifeline0.getRequires().size()); |
| assertTrue(addCoveredByInLifeline0.getRequires().contains(addMessageRecv)); |
| |
| assertEquals(0, addMessageRecv.getRequires().size()); |
| |
| } else { |
| assertEquals(2, addMessage.getRequires().size()); |
| assertTrue(addMessage.getRequires().contains(addReceiveEventInMessage)); |
| assertTrue(addMessage.getRequires().contains(addMessageInMessage0Recv0)); |
| |
| assertEquals(0, addCoveredInMessage0Recv0.getRequires().size()); |
| |
| assertEquals(0, addMessageInMessage0Recv0.getRequires().size()); |
| |
| assertEquals(0, addReceiveEventInMessage.getRequires().size()); |
| |
| assertEquals(0, addCoveredByInLifeline0.getRequires().size()); |
| |
| assertEquals(4, addMessageRecv.getRequires().size()); |
| assertTrue(addMessageRecv.getRequires().contains(addReceiveEventInMessage)); |
| assertTrue(addMessageRecv.getRequires().contains(addCoveredInMessage0Recv0)); |
| assertTrue(addMessageRecv.getRequires().contains(addMessageInMessage0Recv0)); |
| assertTrue(addMessageRecv.getRequires().contains(addCoveredByInLifeline0)); |
| } |
| |
| // CHECK EQUIVALENCE |
| assertEquals(1, comparison.getEquivalences().size()); |
| |
| assertNotNull(addCoveredInMessage0Recv0.getEquivalence()); |
| assertEquals(2, addCoveredInMessage0Recv0.getEquivalence().getDifferences().size()); |
| assertTrue(addCoveredInMessage0Recv0.getEquivalence().getDifferences() |
| .contains(addCoveredInMessage0Recv0)); |
| assertTrue(addCoveredInMessage0Recv0.getEquivalence().getDifferences() |
| .contains(addCoveredByInLifeline0)); |
| |
| assertFalse("No move expected", |
| Iterators.filter(differences.iterator(), ofKind(DifferenceKind.MOVE)).hasNext()); |
| |
| testIntersections(comparison); |
| } |
| |
| private void testAB3(TestKind kind, final Comparison comparison) { |
| final List<Diff> differences = comparison.getDifferences(); |
| |
| // We should have no less and no more than 7 differences |
| final Iterator<Diff> itUseFullDiffs = Iterators.filter(differences.iterator(), |
| not(ofKind(DifferenceKind.MOVE))); |
| final List<Diff> useFullDiffs = new ArrayList<Diff>(); |
| while (itUseFullDiffs.hasNext()) { |
| Diff diff = (Diff)itUseFullDiffs.next(); |
| useFullDiffs.add(diff); |
| } |
| |
| assertEquals(7, useFullDiffs.size()); |
| |
| Predicate<? super Diff> addMessageDescription = null; |
| Predicate<? super Diff> addCoveredInMessage0Recv0Description = null; |
| Predicate<? super Diff> addMessageInMessage0Recv0Description = null; |
| Predicate<? super Diff> addCoveredByInLifeline0Description = null; |
| Predicate<? super Diff> addReceiveEventInMessageDescription = null; |
| Predicate<? super Diff> addMessageRecvDescription = null; |
| |
| if (kind.equals(TestKind.DELETE)) { |
| addMessageDescription = removed("model.interaction0.Message0"); //$NON-NLS-1$ |
| addMessageRecvDescription = removed("model.interaction0.Message0Send0"); //$NON-NLS-1$ |
| addCoveredInMessage0Recv0Description = removedFromReference("model.interaction0.Message0Send0", |
| "covered", "model.interaction0.Lifeline1"); |
| addMessageInMessage0Recv0Description = changedReference("model.interaction0.Message0Send0", |
| "message", "model.interaction0.Message0", null); |
| addReceiveEventInMessageDescription = changedReference("model.interaction0.Message0", "sendEvent", |
| "model.interaction0.Message0Send0", null); |
| addCoveredByInLifeline0Description = removedFromReference("model.interaction0.Lifeline1", |
| "coveredBy", "model.interaction0.Message0Send0"); |
| } else { |
| addMessageDescription = added("model.interaction0.Message0"); //$NON-NLS-1$ |
| addMessageRecvDescription = added("model.interaction0.Message0Send0"); |
| addCoveredInMessage0Recv0Description = addedToReference("model.interaction0.Message0Send0", |
| "covered", "model.interaction0.Lifeline1"); |
| addMessageInMessage0Recv0Description = changedReference("model.interaction0.Message0Send0", |
| "message", null, "model.interaction0.Message0"); |
| addReceiveEventInMessageDescription = changedReference("model.interaction0.Message0", "sendEvent", |
| null, "model.interaction0.Message0Send0"); |
| addCoveredByInLifeline0Description = addedToReference("model.interaction0.Lifeline1", "coveredBy", |
| "model.interaction0.Message0Send0"); |
| } |
| |
| final Diff addMessage = Iterators.find(useFullDiffs.iterator(), addMessageDescription); |
| final Diff addCoveredInMessage0Recv0 = Iterators.find(useFullDiffs.iterator(), |
| addCoveredInMessage0Recv0Description); |
| final Diff addMessageInMessage0Recv0 = Iterators.find(useFullDiffs.iterator(), |
| addMessageInMessage0Recv0Description); |
| final Diff addReceiveEventInMessage = Iterators.find(useFullDiffs.iterator(), |
| addReceiveEventInMessageDescription); |
| final Diff addCoveredByInLifeline0 = Iterators.find(useFullDiffs.iterator(), |
| addCoveredByInLifeline0Description); |
| final Diff addMessageRecv = Iterators.find(useFullDiffs.iterator(), addMessageRecvDescription); |
| |
| assertNotNull(addMessage); |
| assertNotNull(addCoveredInMessage0Recv0); |
| assertNotNull(addMessageInMessage0Recv0); |
| assertNotNull(addReceiveEventInMessage); |
| assertNotNull(addCoveredByInLifeline0); |
| assertNotNull(addMessageRecv); |
| |
| // CHECK EXTENSION |
| assertEquals(1, count(useFullDiffs, instanceOf(MessageChange.class))); |
| Diff addUMLMessage = null; |
| if (kind.equals(TestKind.ADD)) { |
| addUMLMessage = Iterators.find(useFullDiffs.iterator(), |
| and(instanceOf(MessageChange.class), ofKind(DifferenceKind.ADD))); |
| } else { |
| addUMLMessage = Iterators.find(useFullDiffs.iterator(), |
| and(instanceOf(MessageChange.class), ofKind(DifferenceKind.DELETE))); |
| } |
| assertNotNull(addUMLMessage); |
| assertEquals(6, addUMLMessage.getRefinedBy().size()); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addReceiveEventInMessage)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addCoveredInMessage0Recv0)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addMessageRecv)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addCoveredByInLifeline0)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addMessage)); |
| assertTrue(addUMLMessage.getRefinedBy().contains(addMessageInMessage0Recv0)); |
| |
| // CHECK REQUIREMENT |
| if (kind.equals(TestKind.ADD)) { |
| |
| assertEquals(0, addMessage.getRequires().size()); |
| |
| assertEquals(1, addCoveredInMessage0Recv0.getRequires().size()); |
| assertTrue(addCoveredInMessage0Recv0.getRequires().contains(addMessageRecv)); |
| |
| assertEquals(2, addMessageInMessage0Recv0.getRequires().size()); |
| assertTrue(addMessageInMessage0Recv0.getRequires().contains(addMessageRecv)); |
| assertTrue(addMessageInMessage0Recv0.getRequires().contains(addMessage)); |
| |
| assertEquals(2, addReceiveEventInMessage.getRequires().size()); |
| assertTrue(addReceiveEventInMessage.getRequires().contains(addMessage)); |
| assertTrue(addReceiveEventInMessage.getRequires().contains(addMessageRecv)); |
| |
| assertEquals(1, addCoveredByInLifeline0.getRequires().size()); |
| assertTrue(addCoveredByInLifeline0.getRequires().contains(addMessageRecv)); |
| |
| assertEquals(0, addMessageRecv.getRequires().size()); |
| |
| } else { |
| assertEquals(2, addMessage.getRequires().size()); |
| assertTrue(addMessage.getRequires().contains(addReceiveEventInMessage)); |
| assertTrue(addMessage.getRequires().contains(addMessageInMessage0Recv0)); |
| |
| assertEquals(0, addCoveredInMessage0Recv0.getRequires().size()); |
| |
| assertEquals(0, addMessageInMessage0Recv0.getRequires().size()); |
| |
| assertEquals(0, addReceiveEventInMessage.getRequires().size()); |
| |
| assertEquals(0, addCoveredByInLifeline0.getRequires().size()); |
| |
| assertEquals(4, addMessageRecv.getRequires().size()); |
| assertTrue(addMessageRecv.getRequires().contains(addReceiveEventInMessage)); |
| assertTrue(addMessageRecv.getRequires().contains(addCoveredInMessage0Recv0)); |
| assertTrue(addMessageRecv.getRequires().contains(addMessageInMessage0Recv0)); |
| assertTrue(addMessageRecv.getRequires().contains(addCoveredByInLifeline0)); |
| } |
| |
| // CHECK EQUIVALENCE |
| assertEquals(1, comparison.getEquivalences().size()); |
| |
| assertNotNull(addCoveredInMessage0Recv0.getEquivalence()); |
| assertEquals(2, addCoveredInMessage0Recv0.getEquivalence().getDifferences().size()); |
| assertTrue(addCoveredInMessage0Recv0.getEquivalence().getDifferences() |
| .contains(addCoveredInMessage0Recv0)); |
| assertTrue(addCoveredInMessage0Recv0.getEquivalence().getDifferences() |
| .contains(addCoveredByInLifeline0)); |
| |
| assertFalse("No move expected", |
| Iterators.filter(differences.iterator(), ofKind(DifferenceKind.MOVE)).hasNext()); |
| |
| testIntersections(comparison); |
| } |
| |
| @Override |
| protected AbstractUMLInputData getInput() { |
| return input; |
| } |
| |
| } |