Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/conflict/ConflictDetectionTest.java')
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/conflict/ConflictDetectionTest.java4336
1 files changed, 2168 insertions, 2168 deletions
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/conflict/ConflictDetectionTest.java b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/conflict/ConflictDetectionTest.java
index ce82aa58e..5fad59357 100644
--- a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/conflict/ConflictDetectionTest.java
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/conflict/ConflictDetectionTest.java
@@ -1,2168 +1,2168 @@
-/*******************************************************************************
- * 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.tests.conflict;
-
-import static com.google.common.base.Predicates.and;
-import static org.eclipse.emf.compare.utils.EMFComparePredicates.added;
-import static org.eclipse.emf.compare.utils.EMFComparePredicates.addedToAttribute;
-import static org.eclipse.emf.compare.utils.EMFComparePredicates.addedToReference;
-import static org.eclipse.emf.compare.utils.EMFComparePredicates.changedAttribute;
-import static org.eclipse.emf.compare.utils.EMFComparePredicates.changedReference;
-import static org.eclipse.emf.compare.utils.EMFComparePredicates.fromSide;
-import static org.eclipse.emf.compare.utils.EMFComparePredicates.moved;
-import static org.eclipse.emf.compare.utils.EMFComparePredicates.movedInAttribute;
-import static org.eclipse.emf.compare.utils.EMFComparePredicates.movedInReference;
-import static org.eclipse.emf.compare.utils.EMFComparePredicates.removed;
-import static org.eclipse.emf.compare.utils.EMFComparePredicates.removedFromAttribute;
-import static org.eclipse.emf.compare.utils.EMFComparePredicates.removedFromReference;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-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.Conflict;
-import org.eclipse.emf.compare.ConflictKind;
-import org.eclipse.emf.compare.Diff;
-import org.eclipse.emf.compare.DifferenceSource;
-import org.eclipse.emf.compare.EMFCompare;
-import org.eclipse.emf.compare.scope.DefaultComparisonScope;
-import org.eclipse.emf.compare.scope.IComparisonScope;
-import org.eclipse.emf.compare.tests.conflict.data.ConflictInputData;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.junit.Test;
-
-@SuppressWarnings("nls")
-public class ConflictDetectionTest {
- private ConflictInputData input = new ConflictInputData();
-
- @Test
- public void testA1UseCaseForAttribute() throws IOException {
- final Resource left = input.getA1AttributeLeft();
- final Resource origin = input.getA1AttributeOrigin();
- final Resource right = input.getA1AttributeRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = changedAttribute("root.conflictHolder",
- "singleValuedAttribute", "origin", "left");
- final Predicate<? super Diff> rightDiffDescription = removed("root.conflictHolder");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testA1UseCaseForReference() throws IOException {
- final Resource left = input.getA1ReferenceLeft();
- final Resource origin = input.getA1ReferenceOrigin();
- final Resource right = input.getA1ReferenceRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- /*
- * We have three diffs here : an object has been deleted on the right side, its reference has been
- * unset, and that same reference has been changed on the left to a new value. The two diffs on the
- * right are in conflict with the only diff on the left.
- */
- assertSame(Integer.valueOf(3), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftReferenceDiffDescription = changedReference("root.conflictHolder",
- "singleValuedReference", "root.origin", "root.left");
- final Predicate<? super Diff> rightReferenceDiffDescription = changedReference("root.conflictHolder",
- "singleValuedReference", "root.origin", null);
- final Predicate<? super Diff> rightDeleteDiffDescription = removed("root.conflictHolder");
-
- final Diff leftReferenceDiff = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.LEFT), leftReferenceDiffDescription));
- final Diff rightReferenceDiff = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), rightReferenceDiffDescription));
- final Diff rightDeleteDiff = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), rightDeleteDiffDescription));
-
- assertNotNull(leftReferenceDiff);
- assertNotNull(rightReferenceDiff);
- assertNotNull(rightDeleteDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(3), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftReferenceDiff));
- assertTrue(conflictDiff.contains(rightReferenceDiff));
- assertTrue(conflictDiff.contains(rightDeleteDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testA2UseCaseForAttribute() throws IOException {
- final Resource left = input.getA2AttributeLeft();
- final Resource origin = input.getA2AttributeOrigin();
- final Resource right = input.getA2AttributeRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = changedAttribute("root.conflictHolder",
- "singleValuedAttribute", null, "left");
- final Predicate<? super Diff> rightDiffDescription = removed("root.conflictHolder");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testA2UseCaseForReference() throws IOException {
- final Resource left = input.getA2ReferenceLeft();
- final Resource origin = input.getA2ReferenceOrigin();
- final Resource right = input.getA2ReferenceRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = changedReference("root.conflictHolder",
- "singleValuedReference", null, "root.left");
- final Predicate<? super Diff> rightDiffDescription = removed("root.conflictHolder");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testA3UseCaseForAttribute() throws IOException {
- final Resource left = input.getA3AttributeLeft();
- final Resource origin = input.getA3AttributeOrigin();
- final Resource right = input.getA3AttributeRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = changedAttribute("root.conflictHolder",
- "singleValuedAttribute", "origin", null);
- final Predicate<? super Diff> rightDiffDescription = removed("root.conflictHolder");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.PSEUDO, conflict.getKind());
- }
-
- @Test
- public void testA3UseCaseForReference() throws IOException {
- final Resource left = input.getA3ReferenceLeft();
- final Resource origin = input.getA3ReferenceOrigin();
- final Resource right = input.getA3ReferenceRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- /*
- * We expect three differences here : an object has been deleted on the right, its reference has been
- * unset, and that same reference has been unset on the left. All three diffs are in pseudo-conflict
- * with each other.
- */
- assertSame(Integer.valueOf(3), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftReferenceDiffDescription = changedReference("root.conflictHolder",
- "singleValuedReference", "root.origin", null);
- final Predicate<? super Diff> rightReferenceDiffDescription = changedReference("root.conflictHolder",
- "singleValuedReference", "root.origin", null);
- final Predicate<? super Diff> rightDeleteDiffDescription = removed("root.conflictHolder");
-
- final Diff leftReferenceDiff = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.LEFT), leftReferenceDiffDescription));
- final Diff rightReferenceDiff = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), rightReferenceDiffDescription));
- final Diff rightDeleteDiff = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), rightDeleteDiffDescription));
-
- assertNotNull(leftReferenceDiff);
- assertNotNull(rightReferenceDiff);
- assertNotNull(rightDeleteDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(3), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftReferenceDiff));
- assertTrue(conflictDiff.contains(rightReferenceDiff));
- assertTrue(conflictDiff.contains(rightDeleteDiff));
- assertSame(ConflictKind.PSEUDO, conflict.getKind());
- }
-
- @Test
- public void testB1UseCaseForAttribute() throws IOException {
- final Resource left = input.getB1AttributeLeft();
- final Resource origin = input.getB1AttributeOrigin();
- final Resource right = input.getB1AttributeRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = changedAttribute("root.conflictHolder",
- "singleValuedAttribute", "origin", "left");
- final Predicate<? super Diff> rightDiffDescription = changedAttribute("root.conflictHolder",
- "singleValuedAttribute", "origin", "right");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testB1UseCaseForReference() throws IOException {
- final Resource left = input.getB1ReferenceLeft();
- final Resource origin = input.getB1ReferenceOrigin();
- final Resource right = input.getB1ReferenceRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = changedReference("root.conflictHolder",
- "singleValuedReference", "root.origin", "root.left");
- final Predicate<? super Diff> rightDiffDescription = changedReference("root.conflictHolder",
- "singleValuedReference", "root.origin", "root.right");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testB2UseCaseForAttribute() throws IOException {
- final Resource left = input.getB2AttributeLeft();
- final Resource origin = input.getB2AttributeOrigin();
- final Resource right = input.getB2AttributeRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = changedAttribute("root.conflictHolder",
- "singleValuedAttribute", "origin", "left");
- final Predicate<? super Diff> rightDiffDescription = changedAttribute("root.conflictHolder",
- "singleValuedAttribute", "origin", null);
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testB2UseCaseForReference() throws IOException {
- final Resource left = input.getB2ReferenceLeft();
- final Resource origin = input.getB2ReferenceOrigin();
- final Resource right = input.getB2ReferenceRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = changedReference("root.conflictHolder",
- "singleValuedReference", "root.origin", "root.left");
- final Predicate<? super Diff> rightDiffDescription = changedReference("root.conflictHolder",
- "singleValuedReference", "root.origin", null);
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testB3UseCaseForAttribute() throws IOException {
- final Resource left = input.getB3AttributeLeft();
- final Resource origin = input.getB3AttributeOrigin();
- final Resource right = input.getB3AttributeRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = changedAttribute("root.conflictHolder",
- "singleValuedAttribute", null, "left");
- final Predicate<? super Diff> rightDiffDescription = changedAttribute("root.conflictHolder",
- "singleValuedAttribute", null, "right");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testB3UseCaseForReference() throws IOException {
- final Resource left = input.getB3ReferenceLeft();
- final Resource origin = input.getB3ReferenceOrigin();
- final Resource right = input.getB3ReferenceRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = changedReference("root.conflictHolder",
- "singleValuedReference", null, "root.left");
- final Predicate<? super Diff> rightDiffDescription = changedReference("root.conflictHolder",
- "singleValuedReference", null, "root.right");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testB4UseCaseForAttribute() throws IOException {
- final Resource left = input.getB4AttributeLeft();
- final Resource origin = input.getB4AttributeOrigin();
- final Resource right = input.getB4AttributeRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = changedAttribute("root.conflictHolder",
- "singleValuedAttribute", "origin", null);
- final Predicate<? super Diff> rightDiffDescription = changedAttribute("root.conflictHolder",
- "singleValuedAttribute", "origin", "right");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testB4UseCaseForReference() throws IOException {
- final Resource left = input.getB4ReferenceLeft();
- final Resource origin = input.getB4ReferenceOrigin();
- final Resource right = input.getB4ReferenceRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = changedReference("root.conflictHolder",
- "singleValuedReference", "root.origin", null);
- final Predicate<? super Diff> rightDiffDescription = changedReference("root.conflictHolder",
- "singleValuedReference", "root.origin", "root.right");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testB5UseCaseForAttribute() throws IOException {
- final Resource left = input.getB5AttributeLeft();
- final Resource origin = input.getB5AttributeOrigin();
- final Resource right = input.getB5AttributeRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = changedAttribute("root.conflictHolder",
- "singleValuedAttribute", null, "leftAndRight");
- final Predicate<? super Diff> rightDiffDescription = changedAttribute("root.conflictHolder",
- "singleValuedAttribute", null, "leftAndRight");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.PSEUDO, conflict.getKind());
- }
-
- @Test
- public void testB5UseCaseForReference() throws IOException {
- final Resource left = input.getB5ReferenceLeft();
- final Resource origin = input.getB5ReferenceOrigin();
- final Resource right = input.getB5ReferenceRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = changedReference("root.conflictHolder",
- "singleValuedReference", null, "root.leftAndRight");
- final Predicate<? super Diff> rightDiffDescription = changedReference("root.conflictHolder",
- "singleValuedReference", null, "root.leftAndRight");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.PSEUDO, conflict.getKind());
- }
-
- @Test
- public void testB6UseCaseForAttribute() throws IOException {
- final Resource left = input.getB6AttributeLeft();
- final Resource origin = input.getB6AttributeOrigin();
- final Resource right = input.getB6AttributeRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = changedAttribute("root.conflictHolder",
- "singleValuedAttribute", "origin", null);
- final Predicate<? super Diff> rightDiffDescription = changedAttribute("root.conflictHolder",
- "singleValuedAttribute", "origin", null);
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.PSEUDO, conflict.getKind());
- }
-
- @Test
- public void testB6UseCaseForReference() throws IOException {
- final Resource left = input.getB6ReferenceLeft();
- final Resource origin = input.getB6ReferenceOrigin();
- final Resource right = input.getB6ReferenceRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = changedReference("root.conflictHolder",
- "singleValuedReference", "root.origin", null);
- final Predicate<? super Diff> rightDiffDescription = changedReference("root.conflictHolder",
- "singleValuedReference", "root.origin", null);
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.PSEUDO, conflict.getKind());
- }
-
- @Test
- public void testC1UseCaseForAttribute() throws IOException {
- final Resource left = input.getC1AttributeLeft();
- final Resource origin = input.getC1AttributeOrigin();
- final Resource right = input.getC1AttributeRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = addedToAttribute("root.conflictHolder",
- "multiValuedAttribute", "left1");
- final Predicate<? super Diff> rightDiffDescription = removed("root.conflictHolder");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testC1UseCaseForReference() throws IOException {
- final Resource left = input.getC1ReferenceLeft();
- final Resource origin = input.getC1ReferenceOrigin();
- final Resource right = input.getC1ReferenceRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- /*
- * We should have 5 differences here. An element has been deleted from the right side, all three of
- * its reference's values have been deleted, and finally a value has been added into that same
- * reference on the left side. The addition of a value into the reference conflicts with the removal
- * of the container from the right. The three other diffs do not conflict.
- */
- assertSame(Integer.valueOf(5), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftReferenceDiffDescription = addedToReference("root.conflictHolder",
- "multiValuedReference", "root.left1");
- final Predicate<? super Diff> rightDeleteDiffDescription = removed("root.conflictHolder");
- final Predicate<? super Diff> rightReferenceDiff1Description = removedFromReference(
- "root.conflictHolder", "multiValuedReference", "root.origin1");
- final Predicate<? super Diff> rightReferenceDiff2Description = removedFromReference(
- "root.conflictHolder", "multiValuedReference", "root.origin2");
- final Predicate<? super Diff> rightReferenceDiff3Description = removedFromReference(
- "root.conflictHolder", "multiValuedReference", "root.origin3");
-
- final Diff leftReferenceDiff = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.LEFT), leftReferenceDiffDescription));
- final Diff rightDeleteDiff = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), rightDeleteDiffDescription));
- final Diff rightReferenceDiff1 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), rightReferenceDiff1Description));
- final Diff rightReferenceDiff2 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), rightReferenceDiff2Description));
- final Diff rightReferenceDiff3 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), rightReferenceDiff3Description));
-
- assertNotNull(leftReferenceDiff);
- assertNotNull(rightDeleteDiff);
- assertNotNull(rightReferenceDiff1);
- assertNotNull(rightReferenceDiff2);
- assertNotNull(rightReferenceDiff3);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftReferenceDiff));
- assertTrue(conflictDiff.contains(rightDeleteDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testC2UseCaseForAttribute() throws IOException {
- final Resource left = input.getC2AttributeLeft();
- final Resource origin = input.getC2AttributeOrigin();
- final Resource right = input.getC2AttributeRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = removedFromAttribute("root.conflictHolder",
- "multiValuedAttribute", "origin1");
- final Predicate<? super Diff> rightDiffDescription = removed("root.conflictHolder");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.PSEUDO, conflict.getKind());
- }
-
- @Test
- public void testC2UseCaseForReference() throws IOException {
- final Resource left = input.getC2ReferenceLeft();
- final Resource origin = input.getC2ReferenceOrigin();
- final Resource right = input.getC2ReferenceRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- /*
- * We should have 5 differences here. An element has been deleted from the right side, all three of
- * its reference's values have been deleted, and finally a value has been removed from that same
- * reference on the left side. The deletion of a value into the left reference conflicts with the
- * removal of the container from the right. It is also in pseudo-conflict with the deletion of this
- * same value on the right.
- */
- assertSame(Integer.valueOf(5), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftReferenceDiffDescription = removedFromReference(
- "root.conflictHolder", "multiValuedReference", "root.origin1");
- final Predicate<? super Diff> rightDeleteDiffDescription = removed("root.conflictHolder");
- final Predicate<? super Diff> rightReferenceDiff1Description = removedFromReference(
- "root.conflictHolder", "multiValuedReference", "root.origin1");
- final Predicate<? super Diff> rightReferenceDiff2Description = removedFromReference(
- "root.conflictHolder", "multiValuedReference", "root.origin2");
- final Predicate<? super Diff> rightReferenceDiff3Description = removedFromReference(
- "root.conflictHolder", "multiValuedReference", "root.origin3");
-
- final Diff leftReferenceDiff = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.LEFT), leftReferenceDiffDescription));
- final Diff rightDeleteDiff = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), rightDeleteDiffDescription));
- final Diff rightReferenceDiff1 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), rightReferenceDiff1Description));
- final Diff rightReferenceDiff2 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), rightReferenceDiff2Description));
- final Diff rightReferenceDiff3 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), rightReferenceDiff3Description));
-
- assertNotNull(leftReferenceDiff);
- assertNotNull(rightDeleteDiff);
- assertNotNull(rightReferenceDiff1);
- assertNotNull(rightReferenceDiff2);
- assertNotNull(rightReferenceDiff3);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(3), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftReferenceDiff));
- assertTrue(conflictDiff.contains(rightDeleteDiff));
- assertTrue(conflictDiff.contains(rightReferenceDiff1));
- assertSame(ConflictKind.PSEUDO, conflict.getKind());
- }
-
- @Test
- public void testC3UseCaseForAttribute() throws IOException {
- final Resource left = input.getC3AttributeLeft();
- final Resource origin = input.getC3AttributeOrigin();
- final Resource right = input.getC3AttributeRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = addedToAttribute("root.conflictHolder",
- "multiValuedAttribute", "left1");
- final Predicate<? super Diff> rightDiffDescription = removed("root.conflictHolder");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testC3UseCaseForReference() throws IOException {
- final Resource left = input.getC3ReferenceLeft();
- final Resource origin = input.getC3ReferenceOrigin();
- final Resource right = input.getC3ReferenceRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftReferenceDiffDescription = addedToReference("root.conflictHolder",
- "multiValuedReference", "root.left1");
- final Predicate<? super Diff> rightDeleteDiffDescription = removed("root.conflictHolder");
-
- final Diff leftReferenceDiff = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.LEFT), leftReferenceDiffDescription));
- final Diff rightDeleteDiff = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), rightDeleteDiffDescription));
-
- assertNotNull(leftReferenceDiff);
- assertNotNull(rightDeleteDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftReferenceDiff));
- assertTrue(conflictDiff.contains(rightDeleteDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testC4UseCaseForAttribute() throws IOException {
- final Resource left = input.getC4AttributeLeft();
- final Resource origin = input.getC4AttributeOrigin();
- final Resource right = input.getC4AttributeRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- /*
- * We expect 4 differences here. On the right side, an element has been deleted. On the left side, all
- * three values of one of this element's features have been removed. All three diffs on the left are
- * in conflict with the right diff.
- */
- assertSame(Integer.valueOf(4), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftAttributeDiff1Description = removedFromAttribute(
- "root.conflictHolder", "multiValuedAttribute", "origin1");
- final Predicate<? super Diff> leftAttributeDiff2Description = removedFromAttribute(
- "root.conflictHolder", "multiValuedAttribute", "origin2");
- final Predicate<? super Diff> leftAttributeDiff3Description = removedFromAttribute(
- "root.conflictHolder", "multiValuedAttribute", "origin3");
- final Predicate<? super Diff> rightDiffDescription = removed("root.conflictHolder");
-
- final Diff leftAttributeDiff1 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.LEFT), leftAttributeDiff1Description));
- final Diff leftAttributeDiff2 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.LEFT), leftAttributeDiff2Description));
- final Diff leftAttributeDiff3 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.LEFT), leftAttributeDiff3Description));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftAttributeDiff1);
- assertNotNull(leftAttributeDiff2);
- assertNotNull(leftAttributeDiff3);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(4), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftAttributeDiff1));
- assertTrue(conflictDiff.contains(leftAttributeDiff2));
- assertTrue(conflictDiff.contains(leftAttributeDiff3));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.PSEUDO, conflict.getKind());
- }
-
- @Test
- public void testC4UseCaseForReference() throws IOException {
- final Resource left = input.getC4ReferenceLeft();
- final Resource origin = input.getC4ReferenceOrigin();
- final Resource right = input.getC4ReferenceRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- /*
- * We expect 7 differences here. On the right, an element has been deleted. All three values of this
- * element's reference have been removed. On the left, we've also removed all three values of that
- * same reference. All 7 differences are in pseudo-conflict with each other.
- */
- assertSame(Integer.valueOf(7), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> referenceDiff1Description = removedFromReference("root.conflictHolder",
- "multiValuedReference", "root.origin1");
- final Predicate<? super Diff> referenceDiff2Description = removedFromReference("root.conflictHolder",
- "multiValuedReference", "root.origin2");
- final Predicate<? super Diff> referenceDiff3Description = removedFromReference("root.conflictHolder",
- "multiValuedReference", "root.origin3");
- final Predicate<? super Diff> rightDeleteDiffDescription = removed("root.conflictHolder");
-
- final Diff leftReferenceDiff1 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.LEFT), referenceDiff1Description));
- final Diff leftReferenceDiff2 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.LEFT), referenceDiff2Description));
- final Diff leftReferenceDiff3 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.LEFT), referenceDiff3Description));
- final Diff rightDeleteDiff = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), rightDeleteDiffDescription));
- final Diff rightReferenceDiff1 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), referenceDiff1Description));
- final Diff rightReferenceDiff2 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), referenceDiff2Description));
- final Diff rightReferenceDiff3 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), referenceDiff3Description));
-
- assertNotNull(leftReferenceDiff1);
- assertNotNull(leftReferenceDiff2);
- assertNotNull(leftReferenceDiff3);
- assertNotNull(rightDeleteDiff);
- assertNotNull(rightReferenceDiff1);
- assertNotNull(rightReferenceDiff2);
- assertNotNull(rightReferenceDiff3);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(7), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftReferenceDiff1));
- assertTrue(conflictDiff.contains(leftReferenceDiff2));
- assertTrue(conflictDiff.contains(leftReferenceDiff3));
- assertTrue(conflictDiff.contains(rightDeleteDiff));
- assertTrue(conflictDiff.contains(rightReferenceDiff1));
- assertTrue(conflictDiff.contains(rightReferenceDiff2));
- assertTrue(conflictDiff.contains(rightReferenceDiff3));
- assertSame(ConflictKind.PSEUDO, conflict.getKind());
- }
-
- @Test
- public void testC5UseCaseForAttribute() throws IOException {
- final Resource left = input.getC5AttributeLeft();
- final Resource origin = input.getC5AttributeOrigin();
- final Resource right = input.getC5AttributeRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = movedInAttribute("root.conflictHolder",
- "multiValuedAttribute", "origin1");
- final Predicate<? super Diff> rightDiffDescription = removed("root.conflictHolder");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testC5UseCaseForReference() throws IOException {
- final Resource left = input.getC5ReferenceLeft();
- final Resource origin = input.getC5ReferenceOrigin();
- final Resource right = input.getC5ReferenceRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- /*
- * We expect five differences here. An element has been deleted from the right side, all three values
- * of its reference have been deleted too. In the left, we've moved one of these values to another
- * index. The MOVE conflicts with both the container deletion and the value's removal.
- */
- assertSame(Integer.valueOf(5), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftReferenceDiffDescription = movedInReference("root.conflictHolder",
- "multiValuedReference", "root.origin1");
- final Predicate<? super Diff> rightDeleteDiffDescription = removed("root.conflictHolder");
- final Predicate<? super Diff> rightReferenceDiff1Description = removedFromReference(
- "root.conflictHolder", "multiValuedReference", "root.origin1");
- final Predicate<? super Diff> rightReferenceDiff2Description = removedFromReference(
- "root.conflictHolder", "multiValuedReference", "root.origin2");
- final Predicate<? super Diff> rightReferenceDiff3Description = removedFromReference(
- "root.conflictHolder", "multiValuedReference", "root.origin2");
-
- final Diff leftReferenceDiff = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.LEFT), leftReferenceDiffDescription));
- final Diff rightDeleteDiff = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), rightDeleteDiffDescription));
- final Diff rightReferenceDiff1 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), rightReferenceDiff1Description));
- final Diff rightReferenceDiff2 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), rightReferenceDiff2Description));
- final Diff rightReferenceDiff3 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), rightReferenceDiff3Description));
-
- assertNotNull(leftReferenceDiff);
- assertNotNull(rightDeleteDiff);
- assertNotNull(rightReferenceDiff1);
- assertNotNull(rightReferenceDiff2);
- assertNotNull(rightReferenceDiff3);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(3), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftReferenceDiff));
- assertTrue(conflictDiff.contains(rightDeleteDiff));
- assertTrue(conflictDiff.contains(rightReferenceDiff1));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testD1UseCaseForAttribute() throws IOException {
- final Resource left = input.getD1AttributeLeft();
- final Resource origin = input.getD1AttributeOrigin();
- final Resource right = input.getD1AttributeRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = removedFromAttribute("root.conflictHolder",
- "multiValuedAttribute", "origin1");
- final Predicate<? super Diff> rightDiffDescription = movedInAttribute("root.conflictHolder",
- "multiValuedAttribute", "origin1");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testD1UseCaseForReference() throws IOException {
- final Resource left = input.getD1ReferenceLeft();
- final Resource origin = input.getD1ReferenceOrigin();
- final Resource right = input.getD1ReferenceRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = removedFromReference("root.conflictHolder",
- "multiValuedReference", "root.origin1");
- final Predicate<? super Diff> rightDiffDescription = movedInReference("root.conflictHolder",
- "multiValuedReference", "root.origin1");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testD2UseCaseForAttribute() throws IOException {
- final Resource left = input.getD2AttributeLeft();
- final Resource origin = input.getD2AttributeOrigin();
- final Resource right = input.getD2AttributeRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = movedInAttribute("root.conflictHolder",
- "multiValuedAttribute", "origin1");
- final Predicate<? super Diff> rightDiffDescription = removedFromAttribute("root.conflictHolder",
- "multiValuedAttribute", "origin1");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testD2UseCaseForReference() throws IOException {
- final Resource left = input.getD2ReferenceLeft();
- final Resource origin = input.getD2ReferenceOrigin();
- final Resource right = input.getD2ReferenceRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = movedInReference("root.conflictHolder",
- "multiValuedReference", "root.origin1");
- final Predicate<? super Diff> rightDiffDescription = removedFromReference("root.conflictHolder",
- "multiValuedReference", "root.origin1");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testD3UseCaseForAttribute() throws IOException {
- final Resource left = input.getD3AttributeLeft();
- final Resource origin = input.getD3AttributeOrigin();
- final Resource right = input.getD3AttributeRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = movedInAttribute("root.conflictHolder",
- "multiValuedAttribute", "origin1");
- final Predicate<? super Diff> rightDiffDescription = movedInAttribute("root.conflictHolder",
- "multiValuedAttribute", "origin1");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testD3UseCaseForReference() throws IOException {
- final Resource left = input.getD3ReferenceLeft();
- final Resource origin = input.getD3ReferenceOrigin();
- final Resource right = input.getD3ReferenceRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = movedInReference("root.conflictHolder",
- "multiValuedReference", "root.origin1");
- final Predicate<? super Diff> rightDiffDescription = movedInReference("root.conflictHolder",
- "multiValuedReference", "root.origin1");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testD4UseCaseForAttribute() throws IOException {
- final Resource left = input.getD4AttributeLeft();
- final Resource origin = input.getD4AttributeOrigin();
- final Resource right = input.getD4AttributeRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- /*
- * We expect 6 differences here. On both right and left, we've emptied an attribute from its 3 values.
- * This should give use 3 pseudo-conflict, each removal conflicting with its other side.
- */
- assertSame(Integer.valueOf(6), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(3), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> AttributeDiff1Description = removedFromAttribute("root.conflictHolder",
- "multiValuedAttribute", "origin1");
- final Predicate<? super Diff> AttributeDiff2Description = removedFromAttribute("root.conflictHolder",
- "multiValuedAttribute", "origin2");
- final Predicate<? super Diff> AttributeDiff3Description = removedFromAttribute("root.conflictHolder",
- "multiValuedAttribute", "origin3");
-
- final Diff leftAttributeDiff1 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.LEFT), AttributeDiff1Description));
- final Diff leftAttributeDiff2 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.LEFT), AttributeDiff2Description));
- final Diff leftAttributeDiff3 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.LEFT), AttributeDiff3Description));
-
- final Diff rightAttributeDiff1 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), AttributeDiff1Description));
- final Diff rightAttributeDiff2 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), AttributeDiff2Description));
- final Diff rightAttributeDiff3 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), AttributeDiff3Description));
-
- assertNotNull(leftAttributeDiff1);
- assertNotNull(leftAttributeDiff2);
- assertNotNull(leftAttributeDiff3);
- assertNotNull(rightAttributeDiff1);
- assertNotNull(rightAttributeDiff2);
- assertNotNull(rightAttributeDiff3);
-
- // We know we have three conflicts
- final Conflict conflict1 = conflicts.get(0);
-
- final List<Diff> conflictDiffs1 = conflict1.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiffs1.size()));
- assertTrue(conflictDiffs1.contains(leftAttributeDiff1));
- assertTrue(conflictDiffs1.contains(rightAttributeDiff1));
- assertSame(ConflictKind.PSEUDO, conflict1.getKind());
-
- final Conflict conflict2 = conflicts.get(1);
-
- final List<Diff> conflictDiffs2 = conflict2.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiffs2.size()));
- assertTrue(conflictDiffs2.contains(leftAttributeDiff2));
- assertTrue(conflictDiffs2.contains(rightAttributeDiff2));
- assertSame(ConflictKind.PSEUDO, conflict2.getKind());
-
- final Conflict conflict3 = conflicts.get(2);
-
- final List<Diff> conflictDiffs3 = conflict3.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiffs3.size()));
- assertTrue(conflictDiffs3.contains(leftAttributeDiff3));
- assertTrue(conflictDiffs3.contains(rightAttributeDiff3));
- assertSame(ConflictKind.PSEUDO, conflict3.getKind());
- }
-
- @Test
- public void testD4UseCaseForReference() throws IOException {
- final Resource left = input.getD4ReferenceLeft();
- final Resource origin = input.getD4ReferenceOrigin();
- final Resource right = input.getD4ReferenceRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- /*
- * We expect 6 differences here. On both right and left, we've emptied a reference from its 3 values.
- * This should give use 3 pseudo-conflict, each removal conflicting with its other side.
- */
- assertSame(Integer.valueOf(6), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(3), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> referenceDiff1Description = removedFromReference("root.conflictHolder",
- "multiValuedReference", "root.origin1");
- final Predicate<? super Diff> referenceDiff2Description = removedFromReference("root.conflictHolder",
- "multiValuedReference", "root.origin2");
- final Predicate<? super Diff> referenceDiff3Description = removedFromReference("root.conflictHolder",
- "multiValuedReference", "root.origin3");
-
- final Diff leftReferenceDiff1 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.LEFT), referenceDiff1Description));
- final Diff leftReferenceDiff2 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.LEFT), referenceDiff2Description));
- final Diff leftReferenceDiff3 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.LEFT), referenceDiff3Description));
-
- final Diff rightReferenceDiff1 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), referenceDiff1Description));
- final Diff rightReferenceDiff2 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), referenceDiff2Description));
- final Diff rightReferenceDiff3 = Iterators.find(differences.iterator(), and(
- fromSide(DifferenceSource.RIGHT), referenceDiff3Description));
-
- assertNotNull(leftReferenceDiff1);
- assertNotNull(leftReferenceDiff2);
- assertNotNull(leftReferenceDiff3);
- assertNotNull(rightReferenceDiff1);
- assertNotNull(rightReferenceDiff2);
- assertNotNull(rightReferenceDiff3);
-
- // We know we have three conflicts
- final Conflict conflict1 = conflicts.get(0);
-
- final List<Diff> conflictDiffs1 = conflict1.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiffs1.size()));
- assertTrue(conflictDiffs1.contains(leftReferenceDiff1));
- assertTrue(conflictDiffs1.contains(rightReferenceDiff1));
- assertSame(ConflictKind.PSEUDO, conflict1.getKind());
-
- final Conflict conflict2 = conflicts.get(1);
-
- final List<Diff> conflictDiffs2 = conflict2.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiffs2.size()));
- assertTrue(conflictDiffs2.contains(leftReferenceDiff2));
- assertTrue(conflictDiffs2.contains(rightReferenceDiff2));
- assertSame(ConflictKind.PSEUDO, conflict2.getKind());
-
- final Conflict conflict3 = conflicts.get(2);
-
- final List<Diff> conflictDiffs3 = conflict3.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiffs3.size()));
- assertTrue(conflictDiffs3.contains(leftReferenceDiff3));
- assertTrue(conflictDiffs3.contains(rightReferenceDiff3));
- assertSame(ConflictKind.PSEUDO, conflict3.getKind());
- }
-
- @Test
- public void testD5UseCaseForAttribute() throws IOException {
- final Resource left = input.getD5AttributeLeft();
- final Resource origin = input.getD5AttributeOrigin();
- final Resource right = input.getD5AttributeRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> diffDescription = removedFromAttribute("root.conflictHolder",
- "multiValuedAttribute", "origin1");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- diffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- diffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.PSEUDO, conflict.getKind());
- }
-
- @Test
- public void testD5UseCaseForReference() throws IOException {
- final Resource left = input.getD5ReferenceLeft();
- final Resource origin = input.getD5ReferenceOrigin();
- final Resource right = input.getD5ReferenceRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> diffDescription = removedFromReference("root.conflictHolder",
- "multiValuedReference", "root.origin1");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- diffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- diffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.PSEUDO, conflict.getKind());
- }
-
- @Test
- public void testD6UseCaseForAttribute() throws IOException {
- final Resource left = input.getD6AttributeLeft();
- final Resource origin = input.getD6AttributeOrigin();
- final Resource right = input.getD6AttributeRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> diffDescription = movedInAttribute("root.conflictHolder",
- "multiValuedAttribute", "origin1");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- diffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- diffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.PSEUDO, conflict.getKind());
- }
-
- @Test
- public void testD6UseCaseForReference() throws IOException {
- final Resource left = input.getD6ReferenceLeft();
- final Resource origin = input.getD6ReferenceOrigin();
- final Resource right = input.getD6ReferenceRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> diffDescription = movedInReference("root.conflictHolder",
- "multiValuedReference", "root.origin1");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- diffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- diffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.PSEUDO, conflict.getKind());
- }
-
- @Test
- public void testE1UseCase() throws IOException {
- final Resource left = input.getE1Left();
- final Resource origin = input.getE1Origin();
- final Resource right = input.getE1Right();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = changedReference("root.conflictHolder",
- "singleValuedReference", null, "root.origin");
- final Predicate<? super Diff> rightDiffDescription = removed("root.origin");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testE2UseCase() throws IOException {
- final Resource left = input.getE2Left();
- final Resource origin = input.getE2Origin();
- final Resource right = input.getE2Right();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = addedToReference("root.conflictHolder",
- "multiValuedReference", "root.origin");
- final Predicate<? super Diff> rightDiffDescription = removed("root.origin");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testFUseCase() throws IOException {
- final Resource left = input.getFLeft();
- final Resource origin = input.getFOrigin();
- final Resource right = input.getFRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = moved("root.conflictHolder.origin",
- "containmentRef2");
- final Predicate<? super Diff> rightDiffDescription = moved("root.conflictHolder.origin",
- "containmentRef3");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testGUseCase() throws IOException {
- final Resource left = input.getGLeft();
- final Resource origin = input.getGOrigin();
- final Resource right = input.getGRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = moved("root.leftContainer.conflictNode",
- "containmentRef1");
- final Predicate<? super Diff> rightDiffDescription = moved("root.rightContainer.conflictNode",
- "containmentRef1");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testH1UseCase() throws IOException {
- final Resource left = input.getH1Left();
- final Resource origin = input.getH1Origin();
- final Resource right = input.getH1Right();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = moved("root.left.conflictNode",
- "singleValueContainment");
- final Predicate<? super Diff> rightDiffDescription = removed("root.left");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testH2UseCase() throws IOException {
- final Resource left = input.getH2Left();
- final Resource origin = input.getH2Origin();
- final Resource right = input.getH2Right();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- // We should have no less and no more than 2 differences, composing a single conflict
- assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiffDescription = moved("root.leftContainer.conflictNode",
- "containmentRef1");
- final Predicate<? super Diff> rightDiffDescription = removed("root.leftContainer");
-
- final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiffDescription));
- final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiffDescription));
-
- assertNotNull(leftDiff);
- assertNotNull(rightDiff);
-
- // We know there's only one conflict
- final Conflict conflict = conflicts.get(0);
-
- final List<Diff> conflictDiff = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
- assertTrue(conflictDiff.contains(leftDiff));
- assertTrue(conflictDiff.contains(rightDiff));
- assertSame(ConflictKind.REAL, conflict.getKind());
- }
-
- @Test
- public void testIUseCase() throws IOException {
- final Resource left = input.getILeft();
- final Resource origin = input.getIOrigin();
- final Resource right = input.getIRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- assertSame(Integer.valueOf(5), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- Conflict soleConflict = conflicts.get(0);
- assertSame(ConflictKind.PSEUDO, soleConflict.getKind());
- }
-
- @Test
- public void testJUseCase() throws IOException {
- final Resource left = input.getJLeft();
- final Resource origin = input.getJOrigin();
- final Resource right = input.getJRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- assertSame(Integer.valueOf(5), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
-
- Conflict soleConflict = conflicts.get(0);
- assertSame(ConflictKind.PSEUDO, soleConflict.getKind());
- }
-
- @Test
- public void testComplexUseCase() throws IOException {
- final Resource left = input.getComplexLeft();
- final Resource origin = input.getComplexOrigin();
- final Resource right = input.getComplexRight();
-
- final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
- final Comparison comparison = EMFCompare.builder().build().compare(scope);
-
- final List<Diff> differences = comparison.getDifferences();
- final List<Conflict> conflicts = comparison.getConflicts();
-
- /*
- * This use case features 12 distinct differences of all types, adding up to 4 real conflict and 1
- * pseudo conflicts.
- */
- // 1 - Left : Node8 added
- // 2 - Left : Node9 added
- // 3 - Left : Node1 moved
- // 4 - Left : Node0 added
- // 5 - Left : Node5 removed
- // 6 - Left : Node6 removed
- // 7 - Left : Node7 removed
-
- // 8 - Right : Node6 moved
- // 9 - Right : Node9 added
- // 10 - Right : Node0 added
- // 11 - Right : Node1 moved
- // 12 - Right : Node5 removed
-
- // Real conflict : 6 and 8 (Moving and deleting the same value)
- // Real conflict : 2 and 9 (Adding the same value at different indices)
- // Real conflict : 4 and 10 (Adding the same value at different indices)
- // Real conflict : 3 and 11 (Moving the same value to different indices)
-
- // Pseudo conflict : 5 and 12 (Removing the same value on both sides)
-
- assertSame(Integer.valueOf(12), Integer.valueOf(differences.size()));
- assertSame(Integer.valueOf(5), Integer.valueOf(conflicts.size()));
-
- final Predicate<? super Diff> leftDiff1Description = added("Root.Node8");
- final Predicate<? super Diff> leftDiff2Description = added("Root.Node9");
- final Predicate<? super Diff> leftDiff3Description = moved("Root.Node1", "containmentRef1");
- final Predicate<? super Diff> leftDiff4Description = added("Root.Node0");
- final Predicate<? super Diff> leftDiff5Description = removed("Root.Node5");
- final Predicate<? super Diff> leftDiff6Description = removed("Root.Node6");
- final Predicate<? super Diff> leftDiff7Description = removed("Root.Node7");
-
- final Predicate<? super Diff> rightDiff8Description = moved("Root.Node6", "containmentRef1");
- final Predicate<? super Diff> rightDiff9Description = added("Root.Node9");
- final Predicate<? super Diff> rightDiff10Description = added("Root.Node0");
- final Predicate<? super Diff> rightDiff11Description = moved("Root.Node1", "containmentRef1");
- final Predicate<? super Diff> rightDiff12Description = removed("Root.Node5");
-
- final Diff leftDiff1 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiff1Description));
- final Diff leftDiff2 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiff2Description));
- final Diff leftDiff3 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiff3Description));
- final Diff leftDiff4 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiff4Description));
- final Diff leftDiff5 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiff5Description));
- final Diff leftDiff6 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiff6Description));
- final Diff leftDiff7 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
- leftDiff7Description));
-
- final Diff rightDiff8 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiff8Description));
- final Diff rightDiff9 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiff9Description));
- final Diff rightDiff10 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiff10Description));
- final Diff rightDiff11 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiff11Description));
- final Diff rightDiff12 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
- rightDiff12Description));
-
- assertNotNull(leftDiff1);
- assertNotNull(leftDiff2);
- assertNotNull(leftDiff3);
- assertNotNull(leftDiff4);
- assertNotNull(leftDiff5);
- assertNotNull(leftDiff6);
- assertNotNull(leftDiff7);
-
- assertNotNull(rightDiff8);
- assertNotNull(rightDiff9);
- assertNotNull(rightDiff10);
- assertNotNull(rightDiff11);
- assertNotNull(rightDiff12);
-
- // We know there are 5 conflicts here
- for (Conflict conflict : conflicts) {
- final List<Diff> conflictDiffs = conflict.getDifferences();
- assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiffs.size()));
- if (conflictDiffs.contains(leftDiff6)) {
- assertTrue(conflictDiffs.contains(rightDiff8));
- assertSame(ConflictKind.REAL, conflict.getKind());
- } else if (conflictDiffs.contains(leftDiff2)) {
- assertTrue(conflictDiffs.contains(rightDiff9));
- assertSame(ConflictKind.REAL, conflict.getKind());
- } else if (conflictDiffs.contains(leftDiff4)) {
- assertTrue(conflictDiffs.contains(rightDiff10));
- assertSame(ConflictKind.REAL, conflict.getKind());
- } else if (conflictDiffs.contains(leftDiff3)) {
- assertTrue(conflictDiffs.contains(rightDiff11));
- assertSame(ConflictKind.REAL, conflict.getKind());
- } else if (conflictDiffs.contains(leftDiff5)) {
- assertTrue(conflictDiffs.contains(rightDiff12));
- assertSame(ConflictKind.PSEUDO, conflict.getKind());
- } else {
- fail("unexpected conflict");
- }
- }
- }
-}
+/*******************************************************************************
+ * 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.tests.conflict;
+
+import static com.google.common.base.Predicates.and;
+import static org.eclipse.emf.compare.utils.EMFComparePredicates.added;
+import static org.eclipse.emf.compare.utils.EMFComparePredicates.addedToAttribute;
+import static org.eclipse.emf.compare.utils.EMFComparePredicates.addedToReference;
+import static org.eclipse.emf.compare.utils.EMFComparePredicates.changedAttribute;
+import static org.eclipse.emf.compare.utils.EMFComparePredicates.changedReference;
+import static org.eclipse.emf.compare.utils.EMFComparePredicates.fromSide;
+import static org.eclipse.emf.compare.utils.EMFComparePredicates.moved;
+import static org.eclipse.emf.compare.utils.EMFComparePredicates.movedInAttribute;
+import static org.eclipse.emf.compare.utils.EMFComparePredicates.movedInReference;
+import static org.eclipse.emf.compare.utils.EMFComparePredicates.removed;
+import static org.eclipse.emf.compare.utils.EMFComparePredicates.removedFromAttribute;
+import static org.eclipse.emf.compare.utils.EMFComparePredicates.removedFromReference;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+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.Conflict;
+import org.eclipse.emf.compare.ConflictKind;
+import org.eclipse.emf.compare.Diff;
+import org.eclipse.emf.compare.DifferenceSource;
+import org.eclipse.emf.compare.EMFCompare;
+import org.eclipse.emf.compare.scope.DefaultComparisonScope;
+import org.eclipse.emf.compare.scope.IComparisonScope;
+import org.eclipse.emf.compare.tests.conflict.data.ConflictInputData;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.junit.Test;
+
+@SuppressWarnings("nls")
+public class ConflictDetectionTest {
+ private ConflictInputData input = new ConflictInputData();
+
+ @Test
+ public void testA1UseCaseForAttribute() throws IOException {
+ final Resource left = input.getA1AttributeLeft();
+ final Resource origin = input.getA1AttributeOrigin();
+ final Resource right = input.getA1AttributeRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = changedAttribute("root.conflictHolder",
+ "singleValuedAttribute", "origin", "left");
+ final Predicate<? super Diff> rightDiffDescription = removed("root.conflictHolder");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testA1UseCaseForReference() throws IOException {
+ final Resource left = input.getA1ReferenceLeft();
+ final Resource origin = input.getA1ReferenceOrigin();
+ final Resource right = input.getA1ReferenceRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ /*
+ * We have three diffs here : an object has been deleted on the right side, its reference has been
+ * unset, and that same reference has been changed on the left to a new value. The two diffs on the
+ * right are in conflict with the only diff on the left.
+ */
+ assertSame(Integer.valueOf(3), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftReferenceDiffDescription = changedReference("root.conflictHolder",
+ "singleValuedReference", "root.origin", "root.left");
+ final Predicate<? super Diff> rightReferenceDiffDescription = changedReference("root.conflictHolder",
+ "singleValuedReference", "root.origin", null);
+ final Predicate<? super Diff> rightDeleteDiffDescription = removed("root.conflictHolder");
+
+ final Diff leftReferenceDiff = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.LEFT), leftReferenceDiffDescription));
+ final Diff rightReferenceDiff = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), rightReferenceDiffDescription));
+ final Diff rightDeleteDiff = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), rightDeleteDiffDescription));
+
+ assertNotNull(leftReferenceDiff);
+ assertNotNull(rightReferenceDiff);
+ assertNotNull(rightDeleteDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(3), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftReferenceDiff));
+ assertTrue(conflictDiff.contains(rightReferenceDiff));
+ assertTrue(conflictDiff.contains(rightDeleteDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testA2UseCaseForAttribute() throws IOException {
+ final Resource left = input.getA2AttributeLeft();
+ final Resource origin = input.getA2AttributeOrigin();
+ final Resource right = input.getA2AttributeRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = changedAttribute("root.conflictHolder",
+ "singleValuedAttribute", null, "left");
+ final Predicate<? super Diff> rightDiffDescription = removed("root.conflictHolder");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testA2UseCaseForReference() throws IOException {
+ final Resource left = input.getA2ReferenceLeft();
+ final Resource origin = input.getA2ReferenceOrigin();
+ final Resource right = input.getA2ReferenceRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = changedReference("root.conflictHolder",
+ "singleValuedReference", null, "root.left");
+ final Predicate<? super Diff> rightDiffDescription = removed("root.conflictHolder");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testA3UseCaseForAttribute() throws IOException {
+ final Resource left = input.getA3AttributeLeft();
+ final Resource origin = input.getA3AttributeOrigin();
+ final Resource right = input.getA3AttributeRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = changedAttribute("root.conflictHolder",
+ "singleValuedAttribute", "origin", null);
+ final Predicate<? super Diff> rightDiffDescription = removed("root.conflictHolder");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.PSEUDO, conflict.getKind());
+ }
+
+ @Test
+ public void testA3UseCaseForReference() throws IOException {
+ final Resource left = input.getA3ReferenceLeft();
+ final Resource origin = input.getA3ReferenceOrigin();
+ final Resource right = input.getA3ReferenceRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ /*
+ * We expect three differences here : an object has been deleted on the right, its reference has been
+ * unset, and that same reference has been unset on the left. All three diffs are in pseudo-conflict
+ * with each other.
+ */
+ assertSame(Integer.valueOf(3), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftReferenceDiffDescription = changedReference("root.conflictHolder",
+ "singleValuedReference", "root.origin", null);
+ final Predicate<? super Diff> rightReferenceDiffDescription = changedReference("root.conflictHolder",
+ "singleValuedReference", "root.origin", null);
+ final Predicate<? super Diff> rightDeleteDiffDescription = removed("root.conflictHolder");
+
+ final Diff leftReferenceDiff = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.LEFT), leftReferenceDiffDescription));
+ final Diff rightReferenceDiff = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), rightReferenceDiffDescription));
+ final Diff rightDeleteDiff = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), rightDeleteDiffDescription));
+
+ assertNotNull(leftReferenceDiff);
+ assertNotNull(rightReferenceDiff);
+ assertNotNull(rightDeleteDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(3), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftReferenceDiff));
+ assertTrue(conflictDiff.contains(rightReferenceDiff));
+ assertTrue(conflictDiff.contains(rightDeleteDiff));
+ assertSame(ConflictKind.PSEUDO, conflict.getKind());
+ }
+
+ @Test
+ public void testB1UseCaseForAttribute() throws IOException {
+ final Resource left = input.getB1AttributeLeft();
+ final Resource origin = input.getB1AttributeOrigin();
+ final Resource right = input.getB1AttributeRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = changedAttribute("root.conflictHolder",
+ "singleValuedAttribute", "origin", "left");
+ final Predicate<? super Diff> rightDiffDescription = changedAttribute("root.conflictHolder",
+ "singleValuedAttribute", "origin", "right");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testB1UseCaseForReference() throws IOException {
+ final Resource left = input.getB1ReferenceLeft();
+ final Resource origin = input.getB1ReferenceOrigin();
+ final Resource right = input.getB1ReferenceRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = changedReference("root.conflictHolder",
+ "singleValuedReference", "root.origin", "root.left");
+ final Predicate<? super Diff> rightDiffDescription = changedReference("root.conflictHolder",
+ "singleValuedReference", "root.origin", "root.right");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testB2UseCaseForAttribute() throws IOException {
+ final Resource left = input.getB2AttributeLeft();
+ final Resource origin = input.getB2AttributeOrigin();
+ final Resource right = input.getB2AttributeRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = changedAttribute("root.conflictHolder",
+ "singleValuedAttribute", "origin", "left");
+ final Predicate<? super Diff> rightDiffDescription = changedAttribute("root.conflictHolder",
+ "singleValuedAttribute", "origin", null);
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testB2UseCaseForReference() throws IOException {
+ final Resource left = input.getB2ReferenceLeft();
+ final Resource origin = input.getB2ReferenceOrigin();
+ final Resource right = input.getB2ReferenceRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = changedReference("root.conflictHolder",
+ "singleValuedReference", "root.origin", "root.left");
+ final Predicate<? super Diff> rightDiffDescription = changedReference("root.conflictHolder",
+ "singleValuedReference", "root.origin", null);
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testB3UseCaseForAttribute() throws IOException {
+ final Resource left = input.getB3AttributeLeft();
+ final Resource origin = input.getB3AttributeOrigin();
+ final Resource right = input.getB3AttributeRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = changedAttribute("root.conflictHolder",
+ "singleValuedAttribute", null, "left");
+ final Predicate<? super Diff> rightDiffDescription = changedAttribute("root.conflictHolder",
+ "singleValuedAttribute", null, "right");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testB3UseCaseForReference() throws IOException {
+ final Resource left = input.getB3ReferenceLeft();
+ final Resource origin = input.getB3ReferenceOrigin();
+ final Resource right = input.getB3ReferenceRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = changedReference("root.conflictHolder",
+ "singleValuedReference", null, "root.left");
+ final Predicate<? super Diff> rightDiffDescription = changedReference("root.conflictHolder",
+ "singleValuedReference", null, "root.right");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testB4UseCaseForAttribute() throws IOException {
+ final Resource left = input.getB4AttributeLeft();
+ final Resource origin = input.getB4AttributeOrigin();
+ final Resource right = input.getB4AttributeRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = changedAttribute("root.conflictHolder",
+ "singleValuedAttribute", "origin", null);
+ final Predicate<? super Diff> rightDiffDescription = changedAttribute("root.conflictHolder",
+ "singleValuedAttribute", "origin", "right");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testB4UseCaseForReference() throws IOException {
+ final Resource left = input.getB4ReferenceLeft();
+ final Resource origin = input.getB4ReferenceOrigin();
+ final Resource right = input.getB4ReferenceRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = changedReference("root.conflictHolder",
+ "singleValuedReference", "root.origin", null);
+ final Predicate<? super Diff> rightDiffDescription = changedReference("root.conflictHolder",
+ "singleValuedReference", "root.origin", "root.right");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testB5UseCaseForAttribute() throws IOException {
+ final Resource left = input.getB5AttributeLeft();
+ final Resource origin = input.getB5AttributeOrigin();
+ final Resource right = input.getB5AttributeRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = changedAttribute("root.conflictHolder",
+ "singleValuedAttribute", null, "leftAndRight");
+ final Predicate<? super Diff> rightDiffDescription = changedAttribute("root.conflictHolder",
+ "singleValuedAttribute", null, "leftAndRight");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.PSEUDO, conflict.getKind());
+ }
+
+ @Test
+ public void testB5UseCaseForReference() throws IOException {
+ final Resource left = input.getB5ReferenceLeft();
+ final Resource origin = input.getB5ReferenceOrigin();
+ final Resource right = input.getB5ReferenceRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = changedReference("root.conflictHolder",
+ "singleValuedReference", null, "root.leftAndRight");
+ final Predicate<? super Diff> rightDiffDescription = changedReference("root.conflictHolder",
+ "singleValuedReference", null, "root.leftAndRight");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.PSEUDO, conflict.getKind());
+ }
+
+ @Test
+ public void testB6UseCaseForAttribute() throws IOException {
+ final Resource left = input.getB6AttributeLeft();
+ final Resource origin = input.getB6AttributeOrigin();
+ final Resource right = input.getB6AttributeRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = changedAttribute("root.conflictHolder",
+ "singleValuedAttribute", "origin", null);
+ final Predicate<? super Diff> rightDiffDescription = changedAttribute("root.conflictHolder",
+ "singleValuedAttribute", "origin", null);
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.PSEUDO, conflict.getKind());
+ }
+
+ @Test
+ public void testB6UseCaseForReference() throws IOException {
+ final Resource left = input.getB6ReferenceLeft();
+ final Resource origin = input.getB6ReferenceOrigin();
+ final Resource right = input.getB6ReferenceRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = changedReference("root.conflictHolder",
+ "singleValuedReference", "root.origin", null);
+ final Predicate<? super Diff> rightDiffDescription = changedReference("root.conflictHolder",
+ "singleValuedReference", "root.origin", null);
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.PSEUDO, conflict.getKind());
+ }
+
+ @Test
+ public void testC1UseCaseForAttribute() throws IOException {
+ final Resource left = input.getC1AttributeLeft();
+ final Resource origin = input.getC1AttributeOrigin();
+ final Resource right = input.getC1AttributeRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = addedToAttribute("root.conflictHolder",
+ "multiValuedAttribute", "left1");
+ final Predicate<? super Diff> rightDiffDescription = removed("root.conflictHolder");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testC1UseCaseForReference() throws IOException {
+ final Resource left = input.getC1ReferenceLeft();
+ final Resource origin = input.getC1ReferenceOrigin();
+ final Resource right = input.getC1ReferenceRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ /*
+ * We should have 5 differences here. An element has been deleted from the right side, all three of
+ * its reference's values have been deleted, and finally a value has been added into that same
+ * reference on the left side. The addition of a value into the reference conflicts with the removal
+ * of the container from the right. The three other diffs do not conflict.
+ */
+ assertSame(Integer.valueOf(5), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftReferenceDiffDescription = addedToReference("root.conflictHolder",
+ "multiValuedReference", "root.left1");
+ final Predicate<? super Diff> rightDeleteDiffDescription = removed("root.conflictHolder");
+ final Predicate<? super Diff> rightReferenceDiff1Description = removedFromReference(
+ "root.conflictHolder", "multiValuedReference", "root.origin1");
+ final Predicate<? super Diff> rightReferenceDiff2Description = removedFromReference(
+ "root.conflictHolder", "multiValuedReference", "root.origin2");
+ final Predicate<? super Diff> rightReferenceDiff3Description = removedFromReference(
+ "root.conflictHolder", "multiValuedReference", "root.origin3");
+
+ final Diff leftReferenceDiff = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.LEFT), leftReferenceDiffDescription));
+ final Diff rightDeleteDiff = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), rightDeleteDiffDescription));
+ final Diff rightReferenceDiff1 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), rightReferenceDiff1Description));
+ final Diff rightReferenceDiff2 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), rightReferenceDiff2Description));
+ final Diff rightReferenceDiff3 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), rightReferenceDiff3Description));
+
+ assertNotNull(leftReferenceDiff);
+ assertNotNull(rightDeleteDiff);
+ assertNotNull(rightReferenceDiff1);
+ assertNotNull(rightReferenceDiff2);
+ assertNotNull(rightReferenceDiff3);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftReferenceDiff));
+ assertTrue(conflictDiff.contains(rightDeleteDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testC2UseCaseForAttribute() throws IOException {
+ final Resource left = input.getC2AttributeLeft();
+ final Resource origin = input.getC2AttributeOrigin();
+ final Resource right = input.getC2AttributeRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = removedFromAttribute("root.conflictHolder",
+ "multiValuedAttribute", "origin1");
+ final Predicate<? super Diff> rightDiffDescription = removed("root.conflictHolder");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.PSEUDO, conflict.getKind());
+ }
+
+ @Test
+ public void testC2UseCaseForReference() throws IOException {
+ final Resource left = input.getC2ReferenceLeft();
+ final Resource origin = input.getC2ReferenceOrigin();
+ final Resource right = input.getC2ReferenceRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ /*
+ * We should have 5 differences here. An element has been deleted from the right side, all three of
+ * its reference's values have been deleted, and finally a value has been removed from that same
+ * reference on the left side. The deletion of a value into the left reference conflicts with the
+ * removal of the container from the right. It is also in pseudo-conflict with the deletion of this
+ * same value on the right.
+ */
+ assertSame(Integer.valueOf(5), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftReferenceDiffDescription = removedFromReference(
+ "root.conflictHolder", "multiValuedReference", "root.origin1");
+ final Predicate<? super Diff> rightDeleteDiffDescription = removed("root.conflictHolder");
+ final Predicate<? super Diff> rightReferenceDiff1Description = removedFromReference(
+ "root.conflictHolder", "multiValuedReference", "root.origin1");
+ final Predicate<? super Diff> rightReferenceDiff2Description = removedFromReference(
+ "root.conflictHolder", "multiValuedReference", "root.origin2");
+ final Predicate<? super Diff> rightReferenceDiff3Description = removedFromReference(
+ "root.conflictHolder", "multiValuedReference", "root.origin3");
+
+ final Diff leftReferenceDiff = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.LEFT), leftReferenceDiffDescription));
+ final Diff rightDeleteDiff = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), rightDeleteDiffDescription));
+ final Diff rightReferenceDiff1 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), rightReferenceDiff1Description));
+ final Diff rightReferenceDiff2 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), rightReferenceDiff2Description));
+ final Diff rightReferenceDiff3 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), rightReferenceDiff3Description));
+
+ assertNotNull(leftReferenceDiff);
+ assertNotNull(rightDeleteDiff);
+ assertNotNull(rightReferenceDiff1);
+ assertNotNull(rightReferenceDiff2);
+ assertNotNull(rightReferenceDiff3);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(3), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftReferenceDiff));
+ assertTrue(conflictDiff.contains(rightDeleteDiff));
+ assertTrue(conflictDiff.contains(rightReferenceDiff1));
+ assertSame(ConflictKind.PSEUDO, conflict.getKind());
+ }
+
+ @Test
+ public void testC3UseCaseForAttribute() throws IOException {
+ final Resource left = input.getC3AttributeLeft();
+ final Resource origin = input.getC3AttributeOrigin();
+ final Resource right = input.getC3AttributeRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = addedToAttribute("root.conflictHolder",
+ "multiValuedAttribute", "left1");
+ final Predicate<? super Diff> rightDiffDescription = removed("root.conflictHolder");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testC3UseCaseForReference() throws IOException {
+ final Resource left = input.getC3ReferenceLeft();
+ final Resource origin = input.getC3ReferenceOrigin();
+ final Resource right = input.getC3ReferenceRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftReferenceDiffDescription = addedToReference("root.conflictHolder",
+ "multiValuedReference", "root.left1");
+ final Predicate<? super Diff> rightDeleteDiffDescription = removed("root.conflictHolder");
+
+ final Diff leftReferenceDiff = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.LEFT), leftReferenceDiffDescription));
+ final Diff rightDeleteDiff = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), rightDeleteDiffDescription));
+
+ assertNotNull(leftReferenceDiff);
+ assertNotNull(rightDeleteDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftReferenceDiff));
+ assertTrue(conflictDiff.contains(rightDeleteDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testC4UseCaseForAttribute() throws IOException {
+ final Resource left = input.getC4AttributeLeft();
+ final Resource origin = input.getC4AttributeOrigin();
+ final Resource right = input.getC4AttributeRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ /*
+ * We expect 4 differences here. On the right side, an element has been deleted. On the left side, all
+ * three values of one of this element's features have been removed. All three diffs on the left are
+ * in conflict with the right diff.
+ */
+ assertSame(Integer.valueOf(4), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftAttributeDiff1Description = removedFromAttribute(
+ "root.conflictHolder", "multiValuedAttribute", "origin1");
+ final Predicate<? super Diff> leftAttributeDiff2Description = removedFromAttribute(
+ "root.conflictHolder", "multiValuedAttribute", "origin2");
+ final Predicate<? super Diff> leftAttributeDiff3Description = removedFromAttribute(
+ "root.conflictHolder", "multiValuedAttribute", "origin3");
+ final Predicate<? super Diff> rightDiffDescription = removed("root.conflictHolder");
+
+ final Diff leftAttributeDiff1 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.LEFT), leftAttributeDiff1Description));
+ final Diff leftAttributeDiff2 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.LEFT), leftAttributeDiff2Description));
+ final Diff leftAttributeDiff3 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.LEFT), leftAttributeDiff3Description));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftAttributeDiff1);
+ assertNotNull(leftAttributeDiff2);
+ assertNotNull(leftAttributeDiff3);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(4), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftAttributeDiff1));
+ assertTrue(conflictDiff.contains(leftAttributeDiff2));
+ assertTrue(conflictDiff.contains(leftAttributeDiff3));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.PSEUDO, conflict.getKind());
+ }
+
+ @Test
+ public void testC4UseCaseForReference() throws IOException {
+ final Resource left = input.getC4ReferenceLeft();
+ final Resource origin = input.getC4ReferenceOrigin();
+ final Resource right = input.getC4ReferenceRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ /*
+ * We expect 7 differences here. On the right, an element has been deleted. All three values of this
+ * element's reference have been removed. On the left, we've also removed all three values of that
+ * same reference. All 7 differences are in pseudo-conflict with each other.
+ */
+ assertSame(Integer.valueOf(7), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> referenceDiff1Description = removedFromReference("root.conflictHolder",
+ "multiValuedReference", "root.origin1");
+ final Predicate<? super Diff> referenceDiff2Description = removedFromReference("root.conflictHolder",
+ "multiValuedReference", "root.origin2");
+ final Predicate<? super Diff> referenceDiff3Description = removedFromReference("root.conflictHolder",
+ "multiValuedReference", "root.origin3");
+ final Predicate<? super Diff> rightDeleteDiffDescription = removed("root.conflictHolder");
+
+ final Diff leftReferenceDiff1 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.LEFT), referenceDiff1Description));
+ final Diff leftReferenceDiff2 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.LEFT), referenceDiff2Description));
+ final Diff leftReferenceDiff3 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.LEFT), referenceDiff3Description));
+ final Diff rightDeleteDiff = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), rightDeleteDiffDescription));
+ final Diff rightReferenceDiff1 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), referenceDiff1Description));
+ final Diff rightReferenceDiff2 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), referenceDiff2Description));
+ final Diff rightReferenceDiff3 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), referenceDiff3Description));
+
+ assertNotNull(leftReferenceDiff1);
+ assertNotNull(leftReferenceDiff2);
+ assertNotNull(leftReferenceDiff3);
+ assertNotNull(rightDeleteDiff);
+ assertNotNull(rightReferenceDiff1);
+ assertNotNull(rightReferenceDiff2);
+ assertNotNull(rightReferenceDiff3);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(7), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftReferenceDiff1));
+ assertTrue(conflictDiff.contains(leftReferenceDiff2));
+ assertTrue(conflictDiff.contains(leftReferenceDiff3));
+ assertTrue(conflictDiff.contains(rightDeleteDiff));
+ assertTrue(conflictDiff.contains(rightReferenceDiff1));
+ assertTrue(conflictDiff.contains(rightReferenceDiff2));
+ assertTrue(conflictDiff.contains(rightReferenceDiff3));
+ assertSame(ConflictKind.PSEUDO, conflict.getKind());
+ }
+
+ @Test
+ public void testC5UseCaseForAttribute() throws IOException {
+ final Resource left = input.getC5AttributeLeft();
+ final Resource origin = input.getC5AttributeOrigin();
+ final Resource right = input.getC5AttributeRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = movedInAttribute("root.conflictHolder",
+ "multiValuedAttribute", "origin1");
+ final Predicate<? super Diff> rightDiffDescription = removed("root.conflictHolder");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testC5UseCaseForReference() throws IOException {
+ final Resource left = input.getC5ReferenceLeft();
+ final Resource origin = input.getC5ReferenceOrigin();
+ final Resource right = input.getC5ReferenceRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ /*
+ * We expect five differences here. An element has been deleted from the right side, all three values
+ * of its reference have been deleted too. In the left, we've moved one of these values to another
+ * index. The MOVE conflicts with both the container deletion and the value's removal.
+ */
+ assertSame(Integer.valueOf(5), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftReferenceDiffDescription = movedInReference("root.conflictHolder",
+ "multiValuedReference", "root.origin1");
+ final Predicate<? super Diff> rightDeleteDiffDescription = removed("root.conflictHolder");
+ final Predicate<? super Diff> rightReferenceDiff1Description = removedFromReference(
+ "root.conflictHolder", "multiValuedReference", "root.origin1");
+ final Predicate<? super Diff> rightReferenceDiff2Description = removedFromReference(
+ "root.conflictHolder", "multiValuedReference", "root.origin2");
+ final Predicate<? super Diff> rightReferenceDiff3Description = removedFromReference(
+ "root.conflictHolder", "multiValuedReference", "root.origin2");
+
+ final Diff leftReferenceDiff = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.LEFT), leftReferenceDiffDescription));
+ final Diff rightDeleteDiff = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), rightDeleteDiffDescription));
+ final Diff rightReferenceDiff1 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), rightReferenceDiff1Description));
+ final Diff rightReferenceDiff2 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), rightReferenceDiff2Description));
+ final Diff rightReferenceDiff3 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), rightReferenceDiff3Description));
+
+ assertNotNull(leftReferenceDiff);
+ assertNotNull(rightDeleteDiff);
+ assertNotNull(rightReferenceDiff1);
+ assertNotNull(rightReferenceDiff2);
+ assertNotNull(rightReferenceDiff3);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(3), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftReferenceDiff));
+ assertTrue(conflictDiff.contains(rightDeleteDiff));
+ assertTrue(conflictDiff.contains(rightReferenceDiff1));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testD1UseCaseForAttribute() throws IOException {
+ final Resource left = input.getD1AttributeLeft();
+ final Resource origin = input.getD1AttributeOrigin();
+ final Resource right = input.getD1AttributeRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = removedFromAttribute("root.conflictHolder",
+ "multiValuedAttribute", "origin1");
+ final Predicate<? super Diff> rightDiffDescription = movedInAttribute("root.conflictHolder",
+ "multiValuedAttribute", "origin1");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testD1UseCaseForReference() throws IOException {
+ final Resource left = input.getD1ReferenceLeft();
+ final Resource origin = input.getD1ReferenceOrigin();
+ final Resource right = input.getD1ReferenceRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = removedFromReference("root.conflictHolder",
+ "multiValuedReference", "root.origin1");
+ final Predicate<? super Diff> rightDiffDescription = movedInReference("root.conflictHolder",
+ "multiValuedReference", "root.origin1");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testD2UseCaseForAttribute() throws IOException {
+ final Resource left = input.getD2AttributeLeft();
+ final Resource origin = input.getD2AttributeOrigin();
+ final Resource right = input.getD2AttributeRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = movedInAttribute("root.conflictHolder",
+ "multiValuedAttribute", "origin1");
+ final Predicate<? super Diff> rightDiffDescription = removedFromAttribute("root.conflictHolder",
+ "multiValuedAttribute", "origin1");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testD2UseCaseForReference() throws IOException {
+ final Resource left = input.getD2ReferenceLeft();
+ final Resource origin = input.getD2ReferenceOrigin();
+ final Resource right = input.getD2ReferenceRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = movedInReference("root.conflictHolder",
+ "multiValuedReference", "root.origin1");
+ final Predicate<? super Diff> rightDiffDescription = removedFromReference("root.conflictHolder",
+ "multiValuedReference", "root.origin1");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testD3UseCaseForAttribute() throws IOException {
+ final Resource left = input.getD3AttributeLeft();
+ final Resource origin = input.getD3AttributeOrigin();
+ final Resource right = input.getD3AttributeRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = movedInAttribute("root.conflictHolder",
+ "multiValuedAttribute", "origin1");
+ final Predicate<? super Diff> rightDiffDescription = movedInAttribute("root.conflictHolder",
+ "multiValuedAttribute", "origin1");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testD3UseCaseForReference() throws IOException {
+ final Resource left = input.getD3ReferenceLeft();
+ final Resource origin = input.getD3ReferenceOrigin();
+ final Resource right = input.getD3ReferenceRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = movedInReference("root.conflictHolder",
+ "multiValuedReference", "root.origin1");
+ final Predicate<? super Diff> rightDiffDescription = movedInReference("root.conflictHolder",
+ "multiValuedReference", "root.origin1");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testD4UseCaseForAttribute() throws IOException {
+ final Resource left = input.getD4AttributeLeft();
+ final Resource origin = input.getD4AttributeOrigin();
+ final Resource right = input.getD4AttributeRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ /*
+ * We expect 6 differences here. On both right and left, we've emptied an attribute from its 3 values.
+ * This should give use 3 pseudo-conflict, each removal conflicting with its other side.
+ */
+ assertSame(Integer.valueOf(6), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(3), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> AttributeDiff1Description = removedFromAttribute("root.conflictHolder",
+ "multiValuedAttribute", "origin1");
+ final Predicate<? super Diff> AttributeDiff2Description = removedFromAttribute("root.conflictHolder",
+ "multiValuedAttribute", "origin2");
+ final Predicate<? super Diff> AttributeDiff3Description = removedFromAttribute("root.conflictHolder",
+ "multiValuedAttribute", "origin3");
+
+ final Diff leftAttributeDiff1 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.LEFT), AttributeDiff1Description));
+ final Diff leftAttributeDiff2 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.LEFT), AttributeDiff2Description));
+ final Diff leftAttributeDiff3 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.LEFT), AttributeDiff3Description));
+
+ final Diff rightAttributeDiff1 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), AttributeDiff1Description));
+ final Diff rightAttributeDiff2 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), AttributeDiff2Description));
+ final Diff rightAttributeDiff3 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), AttributeDiff3Description));
+
+ assertNotNull(leftAttributeDiff1);
+ assertNotNull(leftAttributeDiff2);
+ assertNotNull(leftAttributeDiff3);
+ assertNotNull(rightAttributeDiff1);
+ assertNotNull(rightAttributeDiff2);
+ assertNotNull(rightAttributeDiff3);
+
+ // We know we have three conflicts
+ final Conflict conflict1 = conflicts.get(0);
+
+ final List<Diff> conflictDiffs1 = conflict1.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiffs1.size()));
+ assertTrue(conflictDiffs1.contains(leftAttributeDiff1));
+ assertTrue(conflictDiffs1.contains(rightAttributeDiff1));
+ assertSame(ConflictKind.PSEUDO, conflict1.getKind());
+
+ final Conflict conflict2 = conflicts.get(1);
+
+ final List<Diff> conflictDiffs2 = conflict2.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiffs2.size()));
+ assertTrue(conflictDiffs2.contains(leftAttributeDiff2));
+ assertTrue(conflictDiffs2.contains(rightAttributeDiff2));
+ assertSame(ConflictKind.PSEUDO, conflict2.getKind());
+
+ final Conflict conflict3 = conflicts.get(2);
+
+ final List<Diff> conflictDiffs3 = conflict3.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiffs3.size()));
+ assertTrue(conflictDiffs3.contains(leftAttributeDiff3));
+ assertTrue(conflictDiffs3.contains(rightAttributeDiff3));
+ assertSame(ConflictKind.PSEUDO, conflict3.getKind());
+ }
+
+ @Test
+ public void testD4UseCaseForReference() throws IOException {
+ final Resource left = input.getD4ReferenceLeft();
+ final Resource origin = input.getD4ReferenceOrigin();
+ final Resource right = input.getD4ReferenceRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ /*
+ * We expect 6 differences here. On both right and left, we've emptied a reference from its 3 values.
+ * This should give use 3 pseudo-conflict, each removal conflicting with its other side.
+ */
+ assertSame(Integer.valueOf(6), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(3), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> referenceDiff1Description = removedFromReference("root.conflictHolder",
+ "multiValuedReference", "root.origin1");
+ final Predicate<? super Diff> referenceDiff2Description = removedFromReference("root.conflictHolder",
+ "multiValuedReference", "root.origin2");
+ final Predicate<? super Diff> referenceDiff3Description = removedFromReference("root.conflictHolder",
+ "multiValuedReference", "root.origin3");
+
+ final Diff leftReferenceDiff1 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.LEFT), referenceDiff1Description));
+ final Diff leftReferenceDiff2 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.LEFT), referenceDiff2Description));
+ final Diff leftReferenceDiff3 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.LEFT), referenceDiff3Description));
+
+ final Diff rightReferenceDiff1 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), referenceDiff1Description));
+ final Diff rightReferenceDiff2 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), referenceDiff2Description));
+ final Diff rightReferenceDiff3 = Iterators.find(differences.iterator(), and(
+ fromSide(DifferenceSource.RIGHT), referenceDiff3Description));
+
+ assertNotNull(leftReferenceDiff1);
+ assertNotNull(leftReferenceDiff2);
+ assertNotNull(leftReferenceDiff3);
+ assertNotNull(rightReferenceDiff1);
+ assertNotNull(rightReferenceDiff2);
+ assertNotNull(rightReferenceDiff3);
+
+ // We know we have three conflicts
+ final Conflict conflict1 = conflicts.get(0);
+
+ final List<Diff> conflictDiffs1 = conflict1.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiffs1.size()));
+ assertTrue(conflictDiffs1.contains(leftReferenceDiff1));
+ assertTrue(conflictDiffs1.contains(rightReferenceDiff1));
+ assertSame(ConflictKind.PSEUDO, conflict1.getKind());
+
+ final Conflict conflict2 = conflicts.get(1);
+
+ final List<Diff> conflictDiffs2 = conflict2.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiffs2.size()));
+ assertTrue(conflictDiffs2.contains(leftReferenceDiff2));
+ assertTrue(conflictDiffs2.contains(rightReferenceDiff2));
+ assertSame(ConflictKind.PSEUDO, conflict2.getKind());
+
+ final Conflict conflict3 = conflicts.get(2);
+
+ final List<Diff> conflictDiffs3 = conflict3.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiffs3.size()));
+ assertTrue(conflictDiffs3.contains(leftReferenceDiff3));
+ assertTrue(conflictDiffs3.contains(rightReferenceDiff3));
+ assertSame(ConflictKind.PSEUDO, conflict3.getKind());
+ }
+
+ @Test
+ public void testD5UseCaseForAttribute() throws IOException {
+ final Resource left = input.getD5AttributeLeft();
+ final Resource origin = input.getD5AttributeOrigin();
+ final Resource right = input.getD5AttributeRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> diffDescription = removedFromAttribute("root.conflictHolder",
+ "multiValuedAttribute", "origin1");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ diffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ diffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.PSEUDO, conflict.getKind());
+ }
+
+ @Test
+ public void testD5UseCaseForReference() throws IOException {
+ final Resource left = input.getD5ReferenceLeft();
+ final Resource origin = input.getD5ReferenceOrigin();
+ final Resource right = input.getD5ReferenceRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> diffDescription = removedFromReference("root.conflictHolder",
+ "multiValuedReference", "root.origin1");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ diffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ diffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.PSEUDO, conflict.getKind());
+ }
+
+ @Test
+ public void testD6UseCaseForAttribute() throws IOException {
+ final Resource left = input.getD6AttributeLeft();
+ final Resource origin = input.getD6AttributeOrigin();
+ final Resource right = input.getD6AttributeRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> diffDescription = movedInAttribute("root.conflictHolder",
+ "multiValuedAttribute", "origin1");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ diffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ diffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.PSEUDO, conflict.getKind());
+ }
+
+ @Test
+ public void testD6UseCaseForReference() throws IOException {
+ final Resource left = input.getD6ReferenceLeft();
+ final Resource origin = input.getD6ReferenceOrigin();
+ final Resource right = input.getD6ReferenceRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> diffDescription = movedInReference("root.conflictHolder",
+ "multiValuedReference", "root.origin1");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ diffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ diffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.PSEUDO, conflict.getKind());
+ }
+
+ @Test
+ public void testE1UseCase() throws IOException {
+ final Resource left = input.getE1Left();
+ final Resource origin = input.getE1Origin();
+ final Resource right = input.getE1Right();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = changedReference("root.conflictHolder",
+ "singleValuedReference", null, "root.origin");
+ final Predicate<? super Diff> rightDiffDescription = removed("root.origin");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testE2UseCase() throws IOException {
+ final Resource left = input.getE2Left();
+ final Resource origin = input.getE2Origin();
+ final Resource right = input.getE2Right();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = addedToReference("root.conflictHolder",
+ "multiValuedReference", "root.origin");
+ final Predicate<? super Diff> rightDiffDescription = removed("root.origin");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testFUseCase() throws IOException {
+ final Resource left = input.getFLeft();
+ final Resource origin = input.getFOrigin();
+ final Resource right = input.getFRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = moved("root.conflictHolder.origin",
+ "containmentRef2");
+ final Predicate<? super Diff> rightDiffDescription = moved("root.conflictHolder.origin",
+ "containmentRef3");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testGUseCase() throws IOException {
+ final Resource left = input.getGLeft();
+ final Resource origin = input.getGOrigin();
+ final Resource right = input.getGRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = moved("root.leftContainer.conflictNode",
+ "containmentRef1");
+ final Predicate<? super Diff> rightDiffDescription = moved("root.rightContainer.conflictNode",
+ "containmentRef1");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testH1UseCase() throws IOException {
+ final Resource left = input.getH1Left();
+ final Resource origin = input.getH1Origin();
+ final Resource right = input.getH1Right();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = moved("root.left.conflictNode",
+ "singleValueContainment");
+ final Predicate<? super Diff> rightDiffDescription = removed("root.left");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testH2UseCase() throws IOException {
+ final Resource left = input.getH2Left();
+ final Resource origin = input.getH2Origin();
+ final Resource right = input.getH2Right();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ // We should have no less and no more than 2 differences, composing a single conflict
+ assertSame(Integer.valueOf(2), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiffDescription = moved("root.leftContainer.conflictNode",
+ "containmentRef1");
+ final Predicate<? super Diff> rightDiffDescription = removed("root.leftContainer");
+
+ final Diff leftDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiffDescription));
+ final Diff rightDiff = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiffDescription));
+
+ assertNotNull(leftDiff);
+ assertNotNull(rightDiff);
+
+ // We know there's only one conflict
+ final Conflict conflict = conflicts.get(0);
+
+ final List<Diff> conflictDiff = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiff.size()));
+ assertTrue(conflictDiff.contains(leftDiff));
+ assertTrue(conflictDiff.contains(rightDiff));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ }
+
+ @Test
+ public void testIUseCase() throws IOException {
+ final Resource left = input.getILeft();
+ final Resource origin = input.getIOrigin();
+ final Resource right = input.getIRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ assertSame(Integer.valueOf(5), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ Conflict soleConflict = conflicts.get(0);
+ assertSame(ConflictKind.PSEUDO, soleConflict.getKind());
+ }
+
+ @Test
+ public void testJUseCase() throws IOException {
+ final Resource left = input.getJLeft();
+ final Resource origin = input.getJOrigin();
+ final Resource right = input.getJRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ assertSame(Integer.valueOf(5), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(1), Integer.valueOf(conflicts.size()));
+
+ Conflict soleConflict = conflicts.get(0);
+ assertSame(ConflictKind.PSEUDO, soleConflict.getKind());
+ }
+
+ @Test
+ public void testComplexUseCase() throws IOException {
+ final Resource left = input.getComplexLeft();
+ final Resource origin = input.getComplexOrigin();
+ final Resource right = input.getComplexRight();
+
+ final IComparisonScope scope = new DefaultComparisonScope(left, right, origin);
+ final Comparison comparison = EMFCompare.builder().build().compare(scope);
+
+ final List<Diff> differences = comparison.getDifferences();
+ final List<Conflict> conflicts = comparison.getConflicts();
+
+ /*
+ * This use case features 12 distinct differences of all types, adding up to 4 real conflict and 1
+ * pseudo conflicts.
+ */
+ // 1 - Left : Node8 added
+ // 2 - Left : Node9 added
+ // 3 - Left : Node1 moved
+ // 4 - Left : Node0 added
+ // 5 - Left : Node5 removed
+ // 6 - Left : Node6 removed
+ // 7 - Left : Node7 removed
+
+ // 8 - Right : Node6 moved
+ // 9 - Right : Node9 added
+ // 10 - Right : Node0 added
+ // 11 - Right : Node1 moved
+ // 12 - Right : Node5 removed
+
+ // Real conflict : 6 and 8 (Moving and deleting the same value)
+ // Real conflict : 2 and 9 (Adding the same value at different indices)
+ // Real conflict : 4 and 10 (Adding the same value at different indices)
+ // Real conflict : 3 and 11 (Moving the same value to different indices)
+
+ // Pseudo conflict : 5 and 12 (Removing the same value on both sides)
+
+ assertSame(Integer.valueOf(12), Integer.valueOf(differences.size()));
+ assertSame(Integer.valueOf(5), Integer.valueOf(conflicts.size()));
+
+ final Predicate<? super Diff> leftDiff1Description = added("Root.Node8");
+ final Predicate<? super Diff> leftDiff2Description = added("Root.Node9");
+ final Predicate<? super Diff> leftDiff3Description = moved("Root.Node1", "containmentRef1");
+ final Predicate<? super Diff> leftDiff4Description = added("Root.Node0");
+ final Predicate<? super Diff> leftDiff5Description = removed("Root.Node5");
+ final Predicate<? super Diff> leftDiff6Description = removed("Root.Node6");
+ final Predicate<? super Diff> leftDiff7Description = removed("Root.Node7");
+
+ final Predicate<? super Diff> rightDiff8Description = moved("Root.Node6", "containmentRef1");
+ final Predicate<? super Diff> rightDiff9Description = added("Root.Node9");
+ final Predicate<? super Diff> rightDiff10Description = added("Root.Node0");
+ final Predicate<? super Diff> rightDiff11Description = moved("Root.Node1", "containmentRef1");
+ final Predicate<? super Diff> rightDiff12Description = removed("Root.Node5");
+
+ final Diff leftDiff1 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiff1Description));
+ final Diff leftDiff2 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiff2Description));
+ final Diff leftDiff3 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiff3Description));
+ final Diff leftDiff4 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiff4Description));
+ final Diff leftDiff5 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiff5Description));
+ final Diff leftDiff6 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiff6Description));
+ final Diff leftDiff7 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.LEFT),
+ leftDiff7Description));
+
+ final Diff rightDiff8 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiff8Description));
+ final Diff rightDiff9 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiff9Description));
+ final Diff rightDiff10 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiff10Description));
+ final Diff rightDiff11 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiff11Description));
+ final Diff rightDiff12 = Iterators.find(differences.iterator(), and(fromSide(DifferenceSource.RIGHT),
+ rightDiff12Description));
+
+ assertNotNull(leftDiff1);
+ assertNotNull(leftDiff2);
+ assertNotNull(leftDiff3);
+ assertNotNull(leftDiff4);
+ assertNotNull(leftDiff5);
+ assertNotNull(leftDiff6);
+ assertNotNull(leftDiff7);
+
+ assertNotNull(rightDiff8);
+ assertNotNull(rightDiff9);
+ assertNotNull(rightDiff10);
+ assertNotNull(rightDiff11);
+ assertNotNull(rightDiff12);
+
+ // We know there are 5 conflicts here
+ for (Conflict conflict : conflicts) {
+ final List<Diff> conflictDiffs = conflict.getDifferences();
+ assertSame(Integer.valueOf(2), Integer.valueOf(conflictDiffs.size()));
+ if (conflictDiffs.contains(leftDiff6)) {
+ assertTrue(conflictDiffs.contains(rightDiff8));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ } else if (conflictDiffs.contains(leftDiff2)) {
+ assertTrue(conflictDiffs.contains(rightDiff9));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ } else if (conflictDiffs.contains(leftDiff4)) {
+ assertTrue(conflictDiffs.contains(rightDiff10));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ } else if (conflictDiffs.contains(leftDiff3)) {
+ assertTrue(conflictDiffs.contains(rightDiff11));
+ assertSame(ConflictKind.REAL, conflict.getKind());
+ } else if (conflictDiffs.contains(leftDiff5)) {
+ assertTrue(conflictDiffs.contains(rightDiff12));
+ assertSame(ConflictKind.PSEUDO, conflict.getKind());
+ } else {
+ fail("unexpected conflict");
+ }
+ }
+ }
+}

Back to the top