blob: 2e4f036090d97e6a13650e43be2563c9fd6f9797 [file] [log] [blame]
/*******************************************************************************
* 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;
}
}