/*******************************************************************************
* 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.implications;
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.removed;
import static org.eclipse.emf.compare.utils.EMFComparePredicates.removedFromReference;
import static org.junit.Assert.assertEquals;
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.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.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@SuppressWarnings("nls")
public class ImplicationsTransitionTest extends AbstractUMLTest {
private static final int NB_DIFFS = 6;
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> addTransitionDescription = null;
Predicate<? super Diff> addPreConditionDescription = null;
Predicate<? super Diff> addOwnedRuleDescription = null;
Predicate<? super Diff> addGuardDescription = null;
if (kind.equals(TestKind.DELETE)) {
addTransitionDescription = removed("model.StateMachine0.Region0.transition1"); //$NON-NLS-1$
addPreConditionDescription = changedReference("model.StateMachine0.Region0.transition1",
"preCondition", "model.StateMachine0.Region0.transition1.rule1", null);
addOwnedRuleDescription = removedFromReference("model.StateMachine0.Region0.transition1",
"ownedRule", "model.StateMachine0.Region0.transition1.rule1");
addGuardDescription = changedReference("model.StateMachine0.Region0.transition1", "guard",
"model.StateMachine0.Region0.transition1.rule1", null);
} else {
addTransitionDescription = added("model.StateMachine0.Region0.transition1"); //$NON-NLS-1$
addPreConditionDescription = changedReference("model.StateMachine0.Region0.transition1",
"preCondition", null, "model.StateMachine0.Region0.transition1.rule1");
addOwnedRuleDescription = addedToReference("model.StateMachine0.Region0.transition1", "ownedRule",
"model.StateMachine0.Region0.transition1.rule1");
addGuardDescription = changedReference("model.StateMachine0.Region0.transition1", "guard", null,
"model.StateMachine0.Region0.transition1.rule1");
}
DiffsOfInterest diffs = new DiffsOfInterest();
diffs.addTransition = Iterators.find(differences.iterator(), addTransitionDescription, null);
diffs.addPrecondition = Iterators.find(differences.iterator(), addPreConditionDescription, null);
diffs.addOwnedRule = Iterators.find(differences.iterator(), addOwnedRuleDescription, null);
diffs.addGuard = Iterators.find(differences.iterator(), addGuardDescription, null);
return diffs;
}
@Test
public void testA10UseCase() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right);
testAB1(TestKind.ADD, comparison);
}
@Test
// local ADD
public void testA10UseCase3way1() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right, right);
testAB1(TestKind.ADD, comparison);
}
@Test
// remote ADD
public void testA10UseCase3way2() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right, left);
testAB1(TestKind.ADD, comparison);
}
@Test
public void testA10MergeLtR1UseCase() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllLeftToRight(Arrays.asList(diffs.addPrecondition),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeAddPrecondition(comparison, diffs);
}
private void checkMergeAddPrecondition(Comparison comparison, DiffsOfInterest diffs) {
assertEquals(NB_DIFFS - 4, comparison.getDifferences().size());
assertNull(diffs.addPrecondition);
assertNull(diffs.addGuard);
assertNull(diffs.addOwnedRule);
assertNull(diffs.addTransition);
}
@Test
public void testA10MergeLtR1UseCase3way1() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllLeftToRight(Arrays.asList(diffs.addPrecondition),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeAddPrecondition(comparison, diffs);
}
@Test
public void testA10MergeLtR1UseCase3way2() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right, left);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllLeftToRight(Arrays.asList(diffs.addPrecondition),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeDeletePrecondition(comparison, diffs);
}
private void checkMergeDeletePrecondition(Comparison comparison, DiffsOfInterest diffs) {
assertEquals(NB_DIFFS - 3, comparison.getDifferences().size());
assertNull(diffs.addPrecondition);
assertNull(diffs.addGuard);
assertNull(diffs.addOwnedRule);
}
@Test
public void testA10MergeLtR2UseCase() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllLeftToRight(Arrays.asList(diffs.addGuard),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeAddGuard(comparison, diffs);
}
private void checkMergeAddGuard(Comparison comparison, DiffsOfInterest diffs) {
assertEquals(NB_DIFFS - 4, comparison.getDifferences().size());
assertNull(diffs.addGuard);
assertNull(diffs.addOwnedRule);
assertNull(diffs.addPrecondition);
assertNull(diffs.addTransition);
}
@Test
public void testA10MergeLtR2UseCase3way1() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllLeftToRight(Arrays.asList(diffs.addGuard),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeAddGuard(comparison, diffs);
}
@Test
public void testA10MergeLtR2UseCase3way2() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right, left);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllLeftToRight(Arrays.asList(diffs.addGuard),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeDeleteGuard(comparison, diffs);
}
private void checkMergeDeleteGuard(Comparison comparison, DiffsOfInterest diffs) {
assertEquals(NB_DIFFS - 3, comparison.getDifferences().size());
assertNull(diffs.addGuard);
assertNull(diffs.addPrecondition);
assertNull(diffs.addOwnedRule);
}
@Test
public void testA10MergeLtR3UseCase() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllLeftToRight(Arrays.asList(diffs.addOwnedRule),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeAddOwnedRule(comparison, diffs);
}
private void checkMergeAddOwnedRule(Comparison comparison, DiffsOfInterest diffs) {
assertEquals(NB_DIFFS - 4, comparison.getDifferences().size());
assertNull(diffs.addOwnedRule);
assertNull(diffs.addGuard);
assertNull(diffs.addTransition);
assertNull(diffs.addPrecondition);
}
@Test
public void testA10MergeLtR3UseCase3way1() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllLeftToRight(Arrays.asList(diffs.addOwnedRule),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeAddOwnedRule(comparison, diffs);
}
@Test
public void testA10MergeLtR3UseCase3way2() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right, left);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllLeftToRight(Arrays.asList(diffs.addOwnedRule),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeDeleteOwnedRule(comparison, diffs);
}
private void checkMergeDeleteOwnedRule(Comparison comparison, DiffsOfInterest diffs) {
assertEquals(NB_DIFFS - 3, comparison.getDifferences().size());
assertNull(diffs.addOwnedRule);
assertNull(diffs.addGuard);
assertNull(diffs.addPrecondition);
}
@Test
public void testA10MergeRtL1UseCase() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllRightToLeft(Arrays.asList(diffs.addPrecondition),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeDeletePrecondition(comparison, diffs);
}
@Test
public void testA10MergeRtL1UseCase3way1() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllRightToLeft(Arrays.asList(diffs.addPrecondition),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeDeletePrecondition(comparison, diffs);
}
@Test
public void testA10MergeRtL1UseCase3way2() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right, left);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllRightToLeft(Arrays.asList(diffs.addPrecondition),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeAddPrecondition(comparison, diffs);
}
@Test
public void testA10MergeRtL2UseCase() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllRightToLeft(Arrays.asList(diffs.addGuard),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeDeleteGuard(comparison, diffs);
}
@Test
public void testA10MergeRtL2UseCase3way1() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllRightToLeft(Arrays.asList(diffs.addGuard),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeDeleteGuard(comparison, diffs);
}
@Test
public void testA10MergeRtL2UseCase3way2() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right, left);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllRightToLeft(Arrays.asList(diffs.addGuard),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeAddGuard(comparison, diffs);
}
@Test
public void testA10MergeRtL3UseCase() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllRightToLeft(Arrays.asList(diffs.addOwnedRule),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeDeleteOwnedRule(comparison, diffs);
}
@Test
public void testA10MergeRtL3UseCase3way1() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllRightToLeft(Arrays.asList(diffs.addOwnedRule),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeDeleteOwnedRule(comparison, diffs);
}
@Test
public void testA10MergeRtL3UseCase3way2() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right, left);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.ADD);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllRightToLeft(Arrays.asList(diffs.addOwnedRule),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.ADD);
checkMergeAddOwnedRule(comparison, diffs);
}
@Test
public void testA11UseCase() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right);
testAB1(TestKind.DELETE, comparison);
}
@Test
// local DELETE
public void testA11UseCase3way1() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right, right);
testAB1(TestKind.DELETE, comparison);
}
@Test
// remote DELETE
public void testA11UseCase3way2() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right, left);
testAB1(TestKind.DELETE, comparison);
}
@Test
public void testA11MergeLtR1UseCase() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllLeftToRight(Arrays.asList(diffs.addPrecondition),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeDeletePrecondition(comparison, diffs);
}
@Test
public void testA11MergeLtR1UseCase3way1() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllLeftToRight(Arrays.asList(diffs.addPrecondition),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeDeletePrecondition(comparison, diffs);
}
@Test
public void testA11MergeLtR1UseCase3way2() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right, left);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllLeftToRight(Arrays.asList(diffs.addPrecondition),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeAddPrecondition(comparison, diffs);
}
@Test
public void testA11MergeLtR2UseCase() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllLeftToRight(Arrays.asList(diffs.addGuard),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeDeleteGuard(comparison, diffs);
}
@Test
public void testA11MergeLtR2UseCase3way1() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllLeftToRight(Arrays.asList(diffs.addGuard),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeDeleteGuard(comparison, diffs);
}
@Test
public void testA11MergeLtR2UseCase3way2() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right, left);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllLeftToRight(Arrays.asList(diffs.addGuard),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeAddGuard(comparison, diffs);
}
@Test
public void testA11MergeLtR3UseCase() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllLeftToRight(Arrays.asList(diffs.addOwnedRule),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeDeleteOwnedRule(comparison, diffs);
}
@Test
public void testA11MergeLtR3UseCase3way1() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllLeftToRight(Arrays.asList(diffs.addOwnedRule),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeDeleteOwnedRule(comparison, diffs);
}
@Test
public void testA11MergeLtR3UseCase3way2() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right, left);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllLeftToRight(Arrays.asList(diffs.addOwnedRule),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeAddOwnedRule(comparison, diffs);
}
@Test
public void testA11MergeRtL1UseCase() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllRightToLeft(Arrays.asList(diffs.addPrecondition),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeAddPrecondition(comparison, diffs);
}
@Test
public void testA11MergeRtL1UseCase3way1() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllRightToLeft(Arrays.asList(diffs.addPrecondition),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeAddPrecondition(comparison, diffs);
}
@Test
public void testA11MergeRtL1UseCase3way2() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right, left);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllRightToLeft(Arrays.asList(diffs.addPrecondition),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeDeletePrecondition(comparison, diffs);
}
@Test
public void testA11MergeRtL2UseCase() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllRightToLeft(Arrays.asList(diffs.addGuard),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeAddGuard(comparison, diffs);
}
@Test
public void testA11MergeRtL2UseCase3way1() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllRightToLeft(Arrays.asList(diffs.addGuard),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeAddGuard(comparison, diffs);
}
@Test
public void testA11MergeRtL2UseCase3way2() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right, left);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllRightToLeft(Arrays.asList(diffs.addGuard),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeDeleteGuard(comparison, diffs);
}
@Test
public void testA11MergeRtL3UseCase() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllRightToLeft(Arrays.asList(diffs.addOwnedRule),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeAddOwnedRule(comparison, diffs);
}
@Test
public void testA11MergeRtL3UseCase3way1() throws IOException {
final Resource left = input.getA2Right();
final Resource right = input.getA2Left();
Comparison comparison = compare(left, right, right);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllRightToLeft(Arrays.asList(diffs.addOwnedRule),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeAddOwnedRule(comparison, diffs);
}
@Test
public void testA11MergeRtL3UseCase3way2() throws IOException {
final Resource left = input.getA2Left();
final Resource right = input.getA2Right();
Comparison comparison = compare(left, right, left);
DiffsOfInterest diffs = getDiffs(comparison, TestKind.DELETE);
// ** MERGE **
new BatchMerger(getMergerRegistry()).copyAllRightToLeft(Arrays.asList(diffs.addOwnedRule),
new BasicMonitor());
comparison = compare(left, right);
diffs = getDiffs(comparison, TestKind.DELETE);
checkMergeDeleteOwnedRule(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(0, diffs.addPrecondition.getImplies().size());
assertEquals(1, diffs.addPrecondition.getImpliedBy().size());
assertTrue(diffs.addPrecondition.getImpliedBy().contains(diffs.addGuard));
assertEquals(1, diffs.addGuard.getImplies().size());
assertTrue(diffs.addGuard.getImplies().contains(diffs.addPrecondition));
assertEquals(1, diffs.addGuard.getImpliedBy().size());
assertTrue(diffs.addGuard.getImpliedBy().contains(diffs.addOwnedRule));
assertEquals(1, diffs.addOwnedRule.getImplies().size());
assertTrue(diffs.addOwnedRule.getImplies().contains(diffs.addGuard));
assertEquals(0, diffs.addOwnedRule.getImpliedBy().size());
} else {
assertEquals(1, diffs.addPrecondition.getImplies().size());
assertTrue(diffs.addPrecondition.getImplies().contains(diffs.addGuard));
assertEquals(0, diffs.addPrecondition.getImpliedBy().size());
assertEquals(1, diffs.addGuard.getImplies().size());
assertTrue(diffs.addGuard.getImplies().contains(diffs.addOwnedRule));
assertEquals(1, diffs.addGuard.getImpliedBy().size());
assertTrue(diffs.addGuard.getImpliedBy().contains(diffs.addPrecondition));
assertEquals(0, diffs.addOwnedRule.getImplies().size());
assertEquals(1, diffs.addOwnedRule.getImpliedBy().size());
assertTrue(diffs.addOwnedRule.getImpliedBy().contains(diffs.addGuard));
}
}
@Override
protected AbstractUMLInputData getInput() {
return input;
}
private class DiffsOfInterest {
public Diff addTransition;
public Diff addPrecondition;
public Diff addOwnedRule;
public Diff addGuard;
}
}