blob: c99dfcc44e73d05e0d55497d00894721a301864c [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.dependency;
import static com.google.common.base.Predicates.and;
import static com.google.common.base.Predicates.instanceOf;
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.removedFromReference;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
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.DirectedRelationshipChange;
import org.eclipse.emf.compare.uml2.tests.AbstractUMLInputData;
import org.eclipse.emf.compare.uml2.tests.AbstractUMLTest;
import org.eclipse.emf.compare.uml2.tests.dependency.data.DependencyInputData;
import org.eclipse.emf.ecore.resource.Resource;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@SuppressWarnings("nls")
public class AddInterfaceRealizationTest extends AbstractUMLTest {
private DependencyInputData input = new DependencyInputData();
@BeforeClass
public static void setupClass() {
fillRegistries();
}
@AfterClass
public static void teardownClass() {
resetRegistries();
}
@Test
public void testA50UseCase() throws IOException {
final Resource left = input.getA5Left();
final Resource right = input.getA5Right();
final Comparison comparison = compare(left, right);
testAB1(TestKind.ADD, comparison);
testMergeLeftToRight(left, right, null);
testMergeRightToLeft(left, right, null);
}
@Test
public void testA51UseCase() throws IOException {
final Resource left = input.getA5Left();
final Resource right = input.getA5Right();
final Comparison comparison = compare(right, left);
testAB1(TestKind.DELETE, comparison);
testMergeLeftToRight(right, left, null);
testMergeRightToLeft(right, left, null);
}
@Test
public void testA50UseCase3way() throws IOException {
final Resource left = input.getA5Left();
final Resource right = input.getA5Right();
final Comparison comparison = compare(left, right, right);
testAB1(TestKind.ADD, comparison);
testMergeLeftToRight(left, right, right);
testMergeRightToLeft(left, right, right);
}
@Test
public void testA51UseCase3way() throws IOException {
final Resource left = input.getA5Left();
final Resource right = input.getA5Right();
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 5 differences
// Was 6 with UML 4.0 but NamedElement::clientDependency has been made derived in UML 5.0
assertEquals(5, differences.size());
Predicate<? super Diff> addInterfaceRealizationDescription = null;
Predicate<? super Diff> addClientInInterfaceRealizationDescription = null;
Predicate<? super Diff> addSupplierInInterfaceRealizationDescription = null;
Predicate<? super Diff> addContractInInterfaceRealizationDescription = null;
if (kind.equals(TestKind.DELETE)) {
// addInterfaceRealizationDescription = removed("model.Class0.InterfaceRealization0");
// //$NON-NLS-1$
addInterfaceRealizationDescription = removedFromReference("model.Class0", "interfaceRealization",
"model.Class0.InterfaceRealization0");
addClientInInterfaceRealizationDescription = removedFromReference(
"model.Class0.InterfaceRealization0", "client", "model.Class0");
addSupplierInInterfaceRealizationDescription = removedFromReference(
"model.Class0.InterfaceRealization0", "supplier", "model.Interface0");
addContractInInterfaceRealizationDescription = changedReference(
"model.Class0.InterfaceRealization0", "contract", "model.Interface0", null);
} else {
// addInterfaceRealizationDescription = added("model.Class0.InterfaceRealization0"); //$NON-NLS-1$
addInterfaceRealizationDescription = addedToReference("model.Class0", "interfaceRealization", //$NON-NLS-1$
"model.Class0.InterfaceRealization0");
addClientInInterfaceRealizationDescription = addedToReference(
"model.Class0.InterfaceRealization0", "client", "model.Class0");
addSupplierInInterfaceRealizationDescription = addedToReference(
"model.Class0.InterfaceRealization0", "supplier", "model.Interface0");
addContractInInterfaceRealizationDescription = changedReference(
"model.Class0.InterfaceRealization0", "contract", null, "model.Interface0");
}
final Diff addInterfaceRealization = Iterators.find(differences.iterator(),
addInterfaceRealizationDescription);
final Diff addClientInInterfaceRealization = Iterators.find(differences.iterator(),
addClientInInterfaceRealizationDescription);
final Diff addSupplierInInterfaceRealization = Iterators.find(differences.iterator(),
addSupplierInInterfaceRealizationDescription);
final Diff addContractInInterfaceRealization = Iterators.find(differences.iterator(),
addContractInInterfaceRealizationDescription);
assertNotNull(addInterfaceRealization);
assertNotNull(addClientInInterfaceRealization);
assertNotNull(addSupplierInInterfaceRealization);
assertNotNull(addContractInInterfaceRealization);
// CHECK EXTENSION
assertEquals(1, count(differences, instanceOf(DirectedRelationshipChange.class)));
Diff addUMLDependency = null;
if (kind.equals(TestKind.ADD)) {
addUMLDependency = Iterators.find(differences.iterator(),
and(instanceOf(DirectedRelationshipChange.class), ofKind(DifferenceKind.ADD)));
} else {
addUMLDependency = Iterators.find(differences.iterator(),
and(instanceOf(DirectedRelationshipChange.class), ofKind(DifferenceKind.DELETE)));
}
assertNotNull(addUMLDependency);
assertEquals(4, addUMLDependency.getRefinedBy().size());
assertTrue(addUMLDependency.getRefinedBy().contains(addInterfaceRealization));
assertTrue(addUMLDependency.getRefinedBy().contains(addClientInInterfaceRealization));
assertTrue(addUMLDependency.getRefinedBy().contains(addSupplierInInterfaceRealization));
assertTrue(addUMLDependency.getRefinedBy().contains(addContractInInterfaceRealization));
// CHECK REQUIREMENT
if (kind.equals(TestKind.ADD)) {
assertEquals(1, addClientInInterfaceRealization.getRequires().size());
assertTrue(addClientInInterfaceRealization.getRequires().contains(addInterfaceRealization));
assertEquals(1, addSupplierInInterfaceRealization.getRequires().size());
assertTrue(addSupplierInInterfaceRealization.getRequires().contains(addInterfaceRealization));
assertEquals(1, addContractInInterfaceRealization.getRequires().size());
assertTrue(addContractInInterfaceRealization.getRequires().contains(addInterfaceRealization));
assertEquals(0, addInterfaceRealization.getRequires().size());
assertEquals(0, addUMLDependency.getRequires().size());
} else {
assertEquals(0, addClientInInterfaceRealization.getRequires().size());
assertEquals(0, addSupplierInInterfaceRealization.getRequires().size());
assertEquals(0, addContractInInterfaceRealization.getRequires().size());
assertEquals(3, addInterfaceRealization.getRequires().size());
assertTrue(addInterfaceRealization.getRequires().contains(addClientInInterfaceRealization));
assertTrue(addInterfaceRealization.getRequires().contains(addSupplierInInterfaceRealization));
assertTrue(addInterfaceRealization.getRequires().contains(addContractInInterfaceRealization));
assertEquals(0, addUMLDependency.getRequires().size());
}
// CHECK EQUIVALENCE
assertEquals(0, comparison.getEquivalences().size());
assertNull(addClientInInterfaceRealization.getEquivalence());
testIntersections(comparison);
}
@Override
protected AbstractUMLInputData getInput() {
return input;
}
}