/*******************************************************************************
* Copyright (c) 2012, 2016 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
* Martin Fleck - bug 507177: adapt for refinement behavior
*******************************************************************************/
package org.eclipse.emf.compare.uml2.tests.implications;
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.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.Arrays;
import java.util.List;
import org.eclipse.emf.common.util.BasicMonitor;
import org.eclipse.emf.compare.Comparison;
import org.eclipse.emf.compare.Diff;
import org.eclipse.emf.compare.merge.BatchMerger;
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.implications.data.ImplicationsInputData;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.uml2.uml.UMLPackage;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@SuppressWarnings("nls")
public class ImplicationsInterfaceRealizationTest extends AbstractUMLTest {
private static final int NB_DIFFS = 9;
private static final int NB_INTERFACE_REALIZATION_DIFFS = 5;
private ImplicationsInputData input = new ImplicationsInputData();
@BeforeClass
public static void setupClass() {
fillRegistries();
}
@AfterClass
public static void teardownClass() {
resetRegistries();
}
private DiffsOfInterest getDiffs(Comparison comparison, TestKind kind) {
final List<Diff> differences = comparison.getDifferences();
Predicate<? super Diff> addInterfaceRealizationDescription = null;
Predicate<? super Diff> addClientInInterfaceRealizationDescription = null;
Predicate<? super Diff> addSupplierInInterfaceRealizationDescription = null;
Predicate<? super Diff> addContractInInterfaceRealizationDescription = null;
Predicate<? super Diff> addSubstitutionDescription = null;
Predicate<? super Diff> addClientInSubstitutionDescription = null;
Predicate<? super Diff> addSupplierInSubstitutionDescription = null;
if (kind.equals(TestKind.DELETE)) {
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);
addSubstitutionDescription = removedFromReference("model.Class0", "substitution",
"model.Class0.substitution1");
addClientInSubstitutionDescription = removedFromReference("model.Class0.substitution1", "client",
"model.Class0");
addSupplierInSubstitutionDescription = removedFromReference("model.Class0.substitution1",
"supplier", "model.Interface0");
} else {
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");
addSubstitutionDescription = addedToReference("model.Class0", "substitution",
"model.Class0.substitution1");
addClientInSubstitutionDescription = addedToReference("model.Class0.substitution1", "client",
"model.Class0");
addSupplierInSubstitutionDescription = addedToReference("model.Class0.substitution1", "supplier",
"model.Interface0");
}
DiffsOfInterest diffs = new DiffsOfInterest();
diffs.addInterfaceRealization = Iterators.find(differences.iterator(),
addInterfaceRealizationDescription, null);
diffs.addClientInInterfaceRealization = Iterators.find(differences.iterator(),
addClientInInterfaceRealizationDescription, null);
diffs.addSupplierInInterfaceRealization = Iterators.find(differences.iterator(),
addSupplierInInterfaceRealizationDescription, null);
diffs.addContractInInterfaceRealization = Iterators.find(differences.iterator(),
addContractInInterfaceRealizationDescription, null);
diffs.addSubstitution = Iterators.find(differences.iterator(), addSubstitutionDescription, null);
diffs.addClientInSubstitution = Iterators.find(differences.iterator(),
addClientInSubstitutionDescription, null);
diffs.addSupplierInSubstitution = Iterators.find(differences.iterator(),
addSupplierInSubstitutionDescription, null);
diffs.addUMLInterfaceRealization = Iterators.find(differences.iterator(),
and(instanceOf(DirectedRelationshipChange.class),
discriminantInstanceOf(UMLPackage.Literals.INTERFACE_REALIZATION)),
null);
diffs.addUMLSubstitution = Iterators.find(differences.iterator(),
and(instanceOf(DirectedRelationshipChange.class),
discriminantInstanceOf(UMLPackage.Literals.SUBSTITUTION)),
null);
return diffs;
}
@Test
public void testA10UseCase() throws IOException {
final Resource left = input.getA3Left();
final Resource right = input.getA3Right();
Comparison comparison = compare(left, right);
testAB1(TestKind.ADD, comparison);
}
@Test
// local ADD
public void testA10UseCase3way1() throws IOException {
final Resource left = input.getA3Left();
final Resource right = input.getA3Right();
Comparison comparison = compare(left, right, right);
testAB1(TestKind.ADD, comparison);
}
@Test
// remote ADD
public void testA10UseCase3way2() throws IOException {
final Resource left = input.getA3Right();
final Resource right = input.getA3Left();
Comparison comparison = compare(left, right, left);
testAB1(TestKind.ADD, comparison);
}
@Test
public void testA10MergeLtR1UseCase() throws IOException {
final Resource left = input.getA3Left();
final Resource right = input.getA3Right();
Comparison comparison = compare(left, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addClientInInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addClientInInterfaceRealization)
// .copyLeftToRight(diffs.addClientInInterfaceRealization, new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeInterfaceRealization(comparison, diffs);
}
private void checkMergeInterfaceRealization(Comparison comparison, DiffsOfInterest diffs) {
assertEquals(NB_DIFFS - NB_INTERFACE_REALIZATION_DIFFS, comparison.getDifferences().size());
// interface realization refinement has been merged together as a whole, diffs are null
assertNull(diffs.addUMLInterfaceRealization);
assertNull(diffs.addInterfaceRealization);
assertNull(diffs.addClientInInterfaceRealization);
assertNull(diffs.addContractInInterfaceRealization);
assertNull(diffs.addSupplierInInterfaceRealization);
// substitution not merged as a whole, diffs are still set
assertNotNull(diffs.addUMLSubstitution);
assertNotNull(diffs.addSubstitution);
assertNotNull(diffs.addClientInSubstitution);
assertNotNull(diffs.addSupplierInSubstitution);
}
@Test
public void testA10MergeLtR1UseCase3way1() throws IOException {
final Resource left = input.getA3Left();
final Resource right = input.getA3Right();
Comparison comparison = compare(left, right, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addClientInInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addClientInInterfaceRealization)
// .copyLeftToRight(diffs.addClientInInterfaceRealization, new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA10MergeLtR1UseCase3way2() throws IOException {
final Resource left = input.getA3Right();
final Resource right = input.getA3Left();
Comparison comparison = compare(left, right, left);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addClientInInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addClientInInterfaceRealization)
// .copyLeftToRight(diffs.addClientInInterfaceRealization, new BasicMonitor());
comparison = compare(left, right, left);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA10MergeLtR3UseCase() throws IOException {
final Resource left = input.getA3Left();
final Resource right = input.getA3Right();
Comparison comparison = compare(left, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addInterfaceRealization)
// .copyLeftToRight(diffs.addInterfaceRealization, new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA10MergeLtR3UseCase3way1() throws IOException {
final Resource left = input.getA3Left();
final Resource right = input.getA3Right();
Comparison comparison = compare(left, right, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addInterfaceRealization)
// .copyLeftToRight(diffs.addInterfaceRealization, new BasicMonitor());
comparison = compare(left, right, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA10MergeLtR3UseCase3way2() throws IOException {
final Resource left = input.getA3Right();
final Resource right = input.getA3Left();
Comparison comparison = compare(left, right, left);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addInterfaceRealization)
// .copyLeftToRight(diffs.addInterfaceRealization, new BasicMonitor());
comparison = compare(left, right, left);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA10MergeRtL1UseCase() throws IOException {
final Resource left = input.getA3Left();
final Resource right = input.getA3Right();
Comparison comparison = compare(left, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addClientInInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addClientInInterfaceRealization)
// .copyRightToLeft(diffs.addClientInInterfaceRealization, new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA10MergeRtL1UseCase3way1() throws IOException {
final Resource left = input.getA3Left();
final Resource right = input.getA3Right();
Comparison comparison = compare(left, right, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addClientInInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addClientInInterfaceRealization)
// .copyRightToLeft(diffs.addClientInInterfaceRealization, new BasicMonitor());
comparison = compare(left, right, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA10MergeRtL1UseCase3way2() throws IOException {
final Resource left = input.getA3Right();
final Resource right = input.getA3Left();
Comparison comparison = compare(left, right, left);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addClientInInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addClientInInterfaceRealization)
// .copyRightToLeft(diffs.addClientInInterfaceRealization, new BasicMonitor());
comparison = compare(left, right, left);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA10MergeRtL3UseCase() throws IOException {
final Resource left = input.getA3Left();
final Resource right = input.getA3Right();
Comparison comparison = compare(left, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addInterfaceRealization)
// .copyRightToLeft(diffs.addInterfaceRealization, new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA10MergeRtL3UseCase3way1() throws IOException {
final Resource left = input.getA3Left();
final Resource right = input.getA3Right();
Comparison comparison = compare(left, right, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addInterfaceRealization)
// .copyRightToLeft(diffs.addInterfaceRealization, new BasicMonitor());
comparison = compare(left, right, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA10MergeRtL3UseCase3way2() throws IOException {
final Resource left = input.getA3Right();
final Resource right = input.getA3Left();
Comparison comparison = compare(left, right, left);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addInterfaceRealization)
// .copyRightToLeft(diffs.addInterfaceRealization, new BasicMonitor());
comparison = compare(left, right, left);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA11UseCase() throws IOException {
final Resource left = input.getA3Right();
final Resource right = input.getA3Left();
Comparison comparison = compare(left, right);
testAB1(TestKind.DELETE, comparison);
}
@Test
// local DELETE
public void testA11UseCase3way1() throws IOException {
final Resource left = input.getA3Right();
final Resource right = input.getA3Left();
Comparison comparison = compare(left, right, right);
testAB1(TestKind.DELETE, comparison);
}
@Test
// remote DELETE
public void testA11UseCase3way2() throws IOException {
final Resource left = input.getA3Left();
final Resource right = input.getA3Right();
Comparison comparison = compare(left, right, left);
testAB1(TestKind.DELETE, comparison);
}
@Test
public void testA11MergeLtR1UseCase() throws IOException {
final Resource left = input.getA3Right();
final Resource right = input.getA3Left();
Comparison comparison = compare(left, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addClientInInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addClientInInterfaceRealization)
// .copyLeftToRight(diffs.addClientInInterfaceRealization, new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA11MergeLtR1UseCase3way1() throws IOException {
final Resource left = input.getA3Right();
final Resource right = input.getA3Left();
Comparison comparison = compare(left, right, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addClientInInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addClientInInterfaceRealization)
// .copyLeftToRight(diffs.addClientInInterfaceRealization, new BasicMonitor());
comparison = compare(left, right, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA11MergeLtR1UseCase3way2() throws IOException {
final Resource left = input.getA3Left();
final Resource right = input.getA3Right();
Comparison comparison = compare(left, right, left);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addClientInInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addClientInInterfaceRealization)
// .copyLeftToRight(diffs.addClientInInterfaceRealization, new BasicMonitor());
comparison = compare(left, right, left);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA11MergeLtR3UseCase() throws IOException {
final Resource left = input.getA3Right();
final Resource right = input.getA3Left();
Comparison comparison = compare(left, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addInterfaceRealization)
// .copyLeftToRight(diffs.addInterfaceRealization, new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA11MergeLtR3UseCase3way1() throws IOException {
final Resource left = input.getA3Right();
final Resource right = input.getA3Left();
Comparison comparison = compare(left, right, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addInterfaceRealization)
// .copyLeftToRight(diffs.addInterfaceRealization, new BasicMonitor());
comparison = compare(left, right, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA11MergeLtR3UseCase3way2() throws IOException {
final Resource left = input.getA3Left();
final Resource right = input.getA3Right();
Comparison comparison = compare(left, right, left);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addInterfaceRealization)
// .copyLeftToRight(diffs.addInterfaceRealization, new BasicMonitor());
comparison = compare(left, right, left);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA11MergeRtL1UseCase() throws IOException {
final Resource left = input.getA3Right();
final Resource right = input.getA3Left();
Comparison comparison = compare(left, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addClientInInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addClientInInterfaceRealization)
// .copyRightToLeft(diffs.addClientInInterfaceRealization, new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA11MergeRtL1UseCase3way1() throws IOException {
final Resource left = input.getA3Right();
final Resource right = input.getA3Left();
Comparison comparison = compare(left, right, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addClientInInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addClientInInterfaceRealization)
// .copyRightToLeft(diffs.addClientInInterfaceRealization, new BasicMonitor());
comparison = compare(left, right, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA11MergeRtL1UseCase3way2() throws IOException {
final Resource left = input.getA3Left();
final Resource right = input.getA3Right();
Comparison comparison = compare(left, right, left);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addClientInInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addClientInInterfaceRealization)
// .copyRightToLeft(diffs.addClientInInterfaceRealization, new BasicMonitor());
comparison = compare(left, right, left);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA11MergeRtL3UseCase() throws IOException {
final Resource left = input.getA3Right();
final Resource right = input.getA3Left();
Comparison comparison = compare(left, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addInterfaceRealization)
// .copyRightToLeft(diffs.addInterfaceRealization, new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA11MergeRtL3UseCase3way1() throws IOException {
final Resource left = input.getA3Right();
final Resource right = input.getA3Left();
Comparison comparison = compare(left, right, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addInterfaceRealization)
// .copyRightToLeft(diffs.addInterfaceRealization, new BasicMonitor());
comparison = compare(left, right, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeInterfaceRealization(comparison, diffs);
}
@Test
public void testA11MergeRtL3UseCase3way2() throws IOException {
final Resource left = input.getA3Left();
final Resource right = input.getA3Right();
Comparison comparison = compare(left, right, left);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
BatchMerger bm = new BatchMerger(getMergerRegistry());
bm.copyAllLeftToRight(Arrays.asList(diffs.addInterfaceRealization), new BasicMonitor());
// getMergerRegistry().getHighestRankingMerger(diffs.addInterfaceRealization)
// .copyRightToLeft(diffs.addInterfaceRealization, new BasicMonitor());
comparison = compare(left, right, left);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeInterfaceRealization(comparison, diffs);
}
private void testAB1(TestKind kind, final Comparison comparison) {
final List<Diff> differences = comparison.getDifferences();
assertEquals(NB_DIFFS, differences.size());
DiffsOfInterest diffs = getDiffs(comparison, kind);
if (kind.equals(TestKind.DELETE)) {
assertEquals(1, diffs.addInterfaceRealization.getImpliedBy().size());
assertTrue(diffs.addInterfaceRealization.getImpliedBy()
.contains(diffs.addClientInInterfaceRealization));
assertEquals(1, diffs.addSubstitution.getImpliedBy().size());
assertTrue(diffs.addSubstitution.getImpliedBy().contains(diffs.addClientInSubstitution));
} else {
assertEquals(1, diffs.addInterfaceRealization.getImplies().size());
assertTrue(diffs.addInterfaceRealization.getImplies()
.contains(diffs.addClientInInterfaceRealization));
assertEquals(1, diffs.addSubstitution.getImplies().size());
assertTrue(diffs.addSubstitution.getImplies().contains(diffs.addClientInSubstitution));
}
}
@Override
protected AbstractUMLInputData getInput() {
return input;
}
private class DiffsOfInterest {
public Diff addInterfaceRealization;
public Diff addClientInInterfaceRealization;
public Diff addSupplierInInterfaceRealization;
public Diff addContractInInterfaceRealization;
public Diff addSubstitution;
public Diff addClientInSubstitution;
public Diff addSupplierInSubstitution;
public Diff addUMLInterfaceRealization;
public Diff addUMLSubstitution;
}
}