/******************************************************************************* * 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.req; import static com.google.common.collect.Iterables.filter; import static com.google.common.collect.Iterables.getOnlyElement; import static org.eclipse.emf.compare.utils.EMFComparePredicates.added; import static org.eclipse.emf.compare.utils.EMFComparePredicates.addedToReference; import static org.eclipse.emf.compare.utils.EMFComparePredicates.changedReference; import static org.eclipse.emf.compare.utils.EMFComparePredicates.movedInReference; import static org.eclipse.emf.compare.utils.EMFComparePredicates.removed; import static org.eclipse.emf.compare.utils.EMFComparePredicates.removedFromReference; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Collections2; import com.google.common.collect.Iterators; import java.io.IOException; import java.util.Collection; import java.util.List; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.compare.Comparison; import org.eclipse.emf.compare.Diff; import org.eclipse.emf.compare.EMFCompare; import org.eclipse.emf.compare.ReferenceChange; import org.eclipse.emf.compare.ResourceAttachmentChange; import org.eclipse.emf.compare.scope.DefaultComparisonScope; import org.eclipse.emf.compare.scope.IComparisonScope; import org.eclipse.emf.compare.tests.req.data.ReqInputData; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.util.EcoreUtil; import org.junit.Test; @SuppressWarnings("nls") public class ReqComputingTest { enum TestKind { ADD, DELETE; } private ReqInputData input = new ReqInputData(); @Test public void testA1UseCase() throws IOException { final Resource left = input.getA1Left(); final Resource right = input.getA1Right(); final IComparisonScope scope = new DefaultComparisonScope(left, right, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB1(TestKind.DELETE, comparison); } @Test public void testA2UseCase() throws IOException { final Resource left = input.getA2Left(); final Resource right = input.getA2Right(); final IComparisonScope scope = new DefaultComparisonScope(left, right, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB2(TestKind.DELETE, comparison); } @Test public void testA3UseCase() throws IOException { final Resource left = input.getA3Left(); final Resource right = input.getA3Right(); final IComparisonScope scope = new DefaultComparisonScope(left, right, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB3(TestKind.DELETE, comparison); } @Test public void testA4UseCase() throws IOException { final Resource left = input.getA4Left(); final Resource right = input.getA4Right(); final IComparisonScope scope = new DefaultComparisonScope(left, right, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB4(TestKind.DELETE, comparison); } @Test public void testA5UseCase() throws IOException { final Resource left = input.getA5Left(); final Resource right = input.getA5Right(); final IComparisonScope scope = new DefaultComparisonScope(left, right, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB5(TestKind.DELETE, comparison); } @Test public void testA6UseCase() throws IOException { final Resource left = input.getA6Left(); final Resource right = input.getA6Right(); final IComparisonScope scope = new DefaultComparisonScope(left, right, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB6(TestKind.DELETE, comparison); } @Test public void testA7UseCase() throws IOException { final Resource left = input.getA7Left(); final Resource right = input.getA7Right(); final IComparisonScope scope = new DefaultComparisonScope(left, right, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB7(TestKind.ADD, comparison); } @Test public void testA8UseCase() throws IOException { final Resource left = input.getA8Left(); final Resource right = input.getA8Right(); final IComparisonScope scope = new DefaultComparisonScope(left, right, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB8(TestKind.ADD, comparison); } @Test public void testA9UseCase() throws IOException { final Resource left = input.getA9Left(); final Resource right = input.getA9Right(); final IComparisonScope scope = new DefaultComparisonScope(left, right, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB9(TestKind.ADD, comparison); } @Test public void testA10UseCase() throws IOException { final Resource left = input.getA10Left(); final Resource right = input.getA10Right(); final IComparisonScope scope = new DefaultComparisonScope(left, right, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB10(TestKind.ADD, comparison); } @Test public void testA11UseCase() throws IOException { final Resource left = input.getA11Left(); final Resource right = input.getA11Right(); final IComparisonScope scope = new DefaultComparisonScope(left, right, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB11(TestKind.ADD, comparison); } @Test public void testB1UseCase() throws IOException { final Resource left = input.getA1Left(); final Resource right = input.getA1Right(); final IComparisonScope scope = new DefaultComparisonScope(right, left, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB1(TestKind.ADD, comparison); } @Test public void testB2UseCase() throws IOException { final Resource left = input.getA2Left(); final Resource right = input.getA2Right(); final IComparisonScope scope = new DefaultComparisonScope(right, left, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB2(TestKind.ADD, comparison); } @Test public void testB3UseCase() throws IOException { final Resource left = input.getA3Left(); final Resource right = input.getA3Right(); final IComparisonScope scope = new DefaultComparisonScope(right, left, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB3(TestKind.ADD, comparison); } @Test public void testB4UseCase() throws IOException { final Resource left = input.getA4Left(); final Resource right = input.getA4Right(); final IComparisonScope scope = new DefaultComparisonScope(right, left, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB4(TestKind.ADD, comparison); } @Test public void testB5UseCase() throws IOException { final Resource left = input.getA5Left(); final Resource right = input.getA5Right(); final IComparisonScope scope = new DefaultComparisonScope(right, left, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB5(TestKind.ADD, comparison); } @Test public void testB6UseCase() throws IOException { final Resource left = input.getA6Left(); final Resource right = input.getA6Right(); final IComparisonScope scope = new DefaultComparisonScope(right, left, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB6(TestKind.ADD, comparison); } @Test public void testB7UseCase() throws IOException { final Resource left = input.getA7Left(); final Resource right = input.getA7Right(); final IComparisonScope scope = new DefaultComparisonScope(right, left, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB7(TestKind.DELETE, comparison); } @Test public void testB8UseCase() throws IOException { final Resource left = input.getA8Left(); final Resource right = input.getA8Right(); final IComparisonScope scope = new DefaultComparisonScope(right, left, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB8(TestKind.DELETE, comparison); } @Test public void testB9UseCase() throws IOException { final Resource left = input.getA9Left(); final Resource right = input.getA9Right(); final IComparisonScope scope = new DefaultComparisonScope(right, left, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB9(TestKind.DELETE, comparison); } @Test public void testB10UseCase() throws IOException { final Resource left = input.getA10Left(); final Resource right = input.getA10Right(); final IComparisonScope scope = new DefaultComparisonScope(right, left, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB10(TestKind.DELETE, comparison); } @Test public void testB11UseCase() throws IOException { final Resource left = input.getA11Left(); final Resource right = input.getA11Right(); final IComparisonScope scope = new DefaultComparisonScope(right, left, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB11(TestKind.DELETE, comparison); } @Test public void testC1UseCase() throws IOException { final Resource left = input.getC1Left(); final Resource right = input.getC1Right(); final IComparisonScope scope = new DefaultComparisonScope(left, right, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testCD1(TestKind.DELETE, comparison); } @Test public void testC2UseCase() throws IOException { final Resource left = input.getC2Left(); final Resource right = input.getC2Right(); final IComparisonScope scope = new DefaultComparisonScope(left, right, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testCD2(TestKind.DELETE, comparison); } @Test public void testC3UseCase() throws IOException { final Resource left = input.getC3Left(); final Resource right = input.getC3Right(); final IComparisonScope scope = new DefaultComparisonScope(left, right, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testCD3(TestKind.DELETE, comparison); } @Test public void testC4UseCase() throws IOException { final Resource left = input.getC4Left(); final Resource right = input.getC4Right(); final IComparisonScope scope = new DefaultComparisonScope(left, right, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testCD4(TestKind.DELETE, comparison); } @Test public void testC5UseCase() throws IOException { final Resource left = input.getC5Left(); final Resource right = input.getC5Right(); final IComparisonScope scope = new DefaultComparisonScope(left, right, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testCD5(TestKind.DELETE, comparison); } @Test public void testD1UseCase() throws IOException { final Resource left = input.getC1Left(); final Resource right = input.getC1Right(); final IComparisonScope scope = new DefaultComparisonScope(right, left, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testCD1(TestKind.ADD, comparison); } @Test public void testD2UseCase() throws IOException { final Resource left = input.getC2Left(); final Resource right = input.getC2Right(); final IComparisonScope scope = new DefaultComparisonScope(right, left, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testCD2(TestKind.ADD, comparison); } @Test public void testD3UseCase() throws IOException { final Resource left = input.getC3Left(); final Resource right = input.getC3Right(); final IComparisonScope scope = new DefaultComparisonScope(right, left, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testCD3(TestKind.ADD, comparison); } @Test public void testD4UseCase() throws IOException { final Resource left = input.getC4Left(); final Resource right = input.getC4Right(); final IComparisonScope scope = new DefaultComparisonScope(right, left, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testCD4(TestKind.ADD, comparison); } @Test public void testD5UseCase() throws IOException { final Resource left = input.getC5Left(); final Resource right = input.getC5Right(); final IComparisonScope scope = new DefaultComparisonScope(right, left, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); testCD5(TestKind.ADD, comparison); } @Test public void testE1UseCase1() throws IOException { final Resource left = input.getE1Left(); final Resource right = input.getE1Right(); final Resource ancestor = input.getE1Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB1(TestKind.DELETE, comparison); } @Test public void testE2UseCase() throws IOException { final Resource left = input.getE2Left(); final Resource right = input.getE2Right(); final Resource ancestor = input.getE2Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB2(TestKind.DELETE, comparison); } @Test public void testE3UseCase() throws IOException { final Resource left = input.getE3Left(); final Resource right = input.getE3Right(); final Resource ancestor = input.getE3Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB3(TestKind.DELETE, comparison); } @Test public void testE4UseCase() throws IOException { final Resource left = input.getE4Left(); final Resource right = input.getE4Right(); final Resource ancestor = input.getE4Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB4(TestKind.DELETE, comparison); } @Test public void testE5UseCase() throws IOException { final Resource left = input.getE5Left(); final Resource right = input.getE5Right(); final Resource ancestor = input.getE5Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB5(TestKind.DELETE, comparison); } @Test public void testE6UseCase() throws IOException { final Resource left = input.getE6Left(); final Resource right = input.getE6Right(); final Resource ancestor = input.getE6Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB6(TestKind.DELETE, comparison); } @Test public void testE7UseCase() throws IOException { final Resource left = input.getE7Left(); final Resource right = input.getE7Right(); final Resource ancestor = input.getE7Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testCD1(TestKind.DELETE, comparison); } @Test public void testE8UseCase() throws IOException { final Resource left = input.getE8Left(); final Resource right = input.getE8Right(); final Resource ancestor = input.getE8Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testCD2(TestKind.DELETE, comparison); } @Test public void testE9UseCase() throws IOException { final Resource left = input.getE9Left(); final Resource right = input.getE9Right(); final Resource ancestor = input.getE9Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testCD3(TestKind.DELETE, comparison); } @Test public void testE10UseCase() throws IOException { final Resource left = input.getE10Left(); final Resource right = input.getE10Right(); final Resource ancestor = input.getE10Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testCD4(TestKind.DELETE, comparison); } @Test public void testE11UseCase() throws IOException { final Resource left = input.getE11Left(); final Resource right = input.getE11Right(); final Resource ancestor = input.getE11Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testCD5(TestKind.DELETE, comparison); } @Test public void testF1UseCase1() throws IOException { final Resource left = input.getF1Left(); final Resource right = input.getF1Right(); final Resource ancestor = input.getF1Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB1(TestKind.ADD, comparison); } @Test public void testF2UseCase() throws IOException { final Resource left = input.getF2Left(); final Resource right = input.getF2Right(); final Resource ancestor = input.getF2Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB2(TestKind.ADD, comparison); } @Test public void testF3UseCase() throws IOException { final Resource left = input.getF3Left(); final Resource right = input.getF3Right(); final Resource ancestor = input.getF3Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB3(TestKind.ADD, comparison); } @Test public void testF4UseCase() throws IOException { final Resource left = input.getF4Left(); final Resource right = input.getF4Right(); final Resource ancestor = input.getF4Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB4(TestKind.ADD, comparison); } @Test public void testF5UseCase() throws IOException { final Resource left = input.getF5Left(); final Resource right = input.getF5Right(); final Resource ancestor = input.getF5Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB5(TestKind.ADD, comparison); } @Test public void testF6UseCase() throws IOException { final Resource left = input.getF6Left(); final Resource right = input.getF6Right(); final Resource ancestor = input.getF6Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testAB6(TestKind.ADD, comparison); } @Test public void testF7UseCase() throws IOException { final Resource left = input.getF7Left(); final Resource right = input.getF7Right(); final Resource ancestor = input.getF7Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testCD1(TestKind.ADD, comparison); } @Test public void testF8UseCase() throws IOException { final Resource left = input.getF8Left(); final Resource right = input.getF8Right(); final Resource ancestor = input.getF8Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testCD2(TestKind.ADD, comparison); } @Test public void testF9UseCase() throws IOException { final Resource left = input.getF9Left(); final Resource right = input.getF9Right(); final Resource ancestor = input.getF9Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testCD3(TestKind.ADD, comparison); } @Test public void testF10UseCase() throws IOException { final Resource left = input.getF10Left(); final Resource right = input.getF10Right(); final Resource ancestor = input.getF10Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testCD4(TestKind.ADD, comparison); } @Test public void testF11UseCase() throws IOException { final Resource left = input.getF11Left(); final Resource right = input.getF11Right(); final Resource ancestor = input.getF11Ancestor(); final IComparisonScope scope = new DefaultComparisonScope(left, right, ancestor); final Comparison comparison = EMFCompare.builder().build().compare(scope); testCD5(TestKind.ADD, comparison); } @Test public void testG1UseCase() throws IOException { final Resource left = input.getG1Left(); final Resource right = input.getG1Right(); final IComparisonScope scope = new DefaultComparisonScope(left, right, null); final Comparison comparison = EMFCompare.builder().build().compare(scope); String root = "root"; String node1 = root + ".node1"; String node2 = node1 + ".node2"; EList<Diff> differences = comparison.getDifferences(); assertEquals(3, differences.size()); Diff added1 = getOnlyElement(filter(differences, added(node1)), null); assertNotNull(added1); Diff added2 = getOnlyElement(filter(differences, added(node2)), null); assertNotNull(added2); ReferenceChange singleChange = null; for (ReferenceChange change : filter(differences, ReferenceChange.class)) { if ("singleValuedReference".equals(change.getReference().getName())) { singleChange = change; break; } } assertNotNull(singleChange); // Happy compiler assert singleChange != null; assertTrue(singleChange.getValue().eIsProxy()); assertEquals(0, added1.getRequires().size()); assertEquals(1, added2.getRequires().size()); assertTrue(added2.getRequires().contains(added1)); assertEquals(1, singleChange.getRequires().size()); assertTrue(singleChange.getRequires().contains(added2)); } @Test public void testH1UseCase() throws IOException { final Resource left = input.getH1Left(); final Resource origin = input.getH1Ancestor(); final Resource right = input.getH1Right(); final ResourceSet leftSet = left.getResourceSet(); final ResourceSet originSet = origin.getResourceSet(); final ResourceSet rightSet = right.getResourceSet(); assertNotNull(leftSet); assertNotNull(originSet); assertNotNull(rightSet); EcoreUtil.resolveAll(leftSet); EcoreUtil.resolveAll(originSet); EcoreUtil.resolveAll(rightSet); assertEquals(1, leftSet.getResources().size()); assertEquals(2, originSet.getResources().size()); assertEquals(2, rightSet.getResources().size()); IComparisonScope scope = new DefaultComparisonScope(leftSet, rightSet, originSet); Comparison comparison = EMFCompare.builder().build().compare(scope); testH(TestKind.DELETE, comparison); scope = new DefaultComparisonScope(rightSet, leftSet, originSet); comparison = EMFCompare.builder().build().compare(scope); testH(TestKind.DELETE, comparison); } @Test public void testH2UseCase() throws IOException { final Resource left = input.getH2Left(); final Resource origin = input.getH2Ancestor(); final Resource right = input.getH2Right(); final ResourceSet leftSet = left.getResourceSet(); final ResourceSet originSet = origin.getResourceSet(); final ResourceSet rightSet = right.getResourceSet(); assertNotNull(leftSet); assertNotNull(originSet); assertNotNull(rightSet); EcoreUtil.resolveAll(leftSet); EcoreUtil.resolveAll(originSet); EcoreUtil.resolveAll(rightSet); assertEquals(2, leftSet.getResources().size()); assertEquals(1, originSet.getResources().size()); assertEquals(1, rightSet.getResources().size()); IComparisonScope scope = new DefaultComparisonScope(leftSet, rightSet, originSet); Comparison comparison = EMFCompare.builder().build().compare(scope); testH(TestKind.ADD, comparison); scope = new DefaultComparisonScope(rightSet, leftSet, originSet); comparison = EMFCompare.builder().build().compare(scope); testH(TestKind.ADD, comparison); } private void testH(TestKind testKind, Comparison comparison) { EList<Diff> differences = comparison.getDifferences(); Collection<Diff> racs = Collections2.filter(differences, Predicates.instanceOf(ResourceAttachmentChange.class)); assertEquals(1, racs.size()); Diff rac = racs.iterator().next(); Predicate<? super Diff> deleteFragmentedDiffDescription = null; Predicate<? super Diff> deleteInnerNodeDiffDescription = null; if (testKind == TestKind.DELETE) { deleteFragmentedDiffDescription = removed("root.fragmented"); //$NON-NLS-1$ deleteInnerNodeDiffDescription = removed("root.fragmented.innerNode"); //$NON-NLS-1$ } else { deleteFragmentedDiffDescription = added("root.fragmented"); //$NON-NLS-1$ deleteInnerNodeDiffDescription = added("root.fragmented.innerNode"); //$NON-NLS-1$ } final Diff deleteFragmentedDiff = Iterators.find(differences.iterator(), deleteFragmentedDiffDescription); final Diff deleteInnerNodeDiff = Iterators.find(differences.iterator(), deleteInnerNodeDiffDescription); if (testKind == TestKind.DELETE) { assertEquals(1, rac.getRequiredBy().size()); assertEquals(deleteFragmentedDiff, rac.getRequiredBy().get(0)); assertEquals(0, rac.getRequires().size()); assertEquals(1, deleteInnerNodeDiff.getRequiredBy().size()); assertEquals(deleteFragmentedDiff, deleteInnerNodeDiff.getRequiredBy().get(0)); assertEquals(0, deleteInnerNodeDiff.getRequires().size()); } else { assertEquals(1, rac.getRequires().size()); assertEquals(deleteFragmentedDiff, rac.getRequires().get(0)); assertEquals(0, rac.getRequiredBy().size()); assertEquals(1, deleteInnerNodeDiff.getRequires().size()); assertEquals(deleteFragmentedDiff, deleteInnerNodeDiff.getRequires().get(0)); assertEquals(0, deleteInnerNodeDiff.getRequiredBy().size()); } } private void testAB1(TestKind kind, final Comparison comparison) { final List<Diff> differences = comparison.getDifferences(); // We should have no less and no more than 3 differences assertEquals(3, differences.size()); Predicate<? super Diff> deleteSourceDiffDescription = null; Predicate<? super Diff> deleteDestinationDiffDescription = null; Predicate<? super Diff> changedSingleValuedRefDiffDescription = null; if (kind.equals(TestKind.DELETE)) { deleteSourceDiffDescription = removed("Requirements.containerSource.source"); //$NON-NLS-1$ deleteDestinationDiffDescription = removed("Requirements.containerDestination.destination"); //$NON-NLS-1$ changedSingleValuedRefDiffDescription = changedReference("Requirements.containerSource.source", //$NON-NLS-1$ "singleValuedReference", "Requirements.containerDestination.destination", null); //$NON-NLS-1$//$NON-NLS-2$ } else { deleteSourceDiffDescription = added("Requirements.containerSource.source"); //$NON-NLS-1$ deleteDestinationDiffDescription = added("Requirements.containerDestination.destination"); //$NON-NLS-1$ changedSingleValuedRefDiffDescription = changedReference("Requirements.containerSource.source", //$NON-NLS-1$ "singleValuedReference", null, "Requirements.containerDestination.destination"); //$NON-NLS-1$//$NON-NLS-2$ } final Diff deleteSourceDiff = Iterators.find(differences.iterator(), deleteSourceDiffDescription); final Diff deleteDestinationDiff = Iterators.find(differences.iterator(), deleteDestinationDiffDescription); final Diff changedSingleValuedRefDiff = Iterators.find(differences.iterator(), changedSingleValuedRefDiffDescription); assertNotNull(deleteSourceDiff); assertNotNull(deleteDestinationDiff); assertNotNull(changedSingleValuedRefDiff); // CHECK REQUIREMENT if (kind.equals(TestKind.ADD)) { assertEquals(0, deleteSourceDiff.getRequires().size()); assertEquals(0, deleteDestinationDiff.getRequires().size()); assertEquals(2, changedSingleValuedRefDiff.getRequires().size()); assertTrue(changedSingleValuedRefDiff.getRequires().contains(deleteDestinationDiff)); assertTrue(changedSingleValuedRefDiff.getRequires().contains(deleteSourceDiff)); } else { assertEquals(1, deleteSourceDiff.getRequires().size()); assertEquals(1, deleteDestinationDiff.getRequires().size()); assertEquals(0, changedSingleValuedRefDiff.getRequires().size()); } } private void testAB2(TestKind kind, final Comparison comparison) { final List<Diff> differences = comparison.getDifferences(); // We should have no less and no more than 3 differences assertEquals(3, differences.size()); Predicate<? super Diff> deleteSourceDiffDescription = null; Predicate<? super Diff> deleteDestinationDiffDescription = null; Predicate<? super Diff> deleteMultiValuedRefDiffDescription = null; if (kind.equals(TestKind.DELETE)) { deleteSourceDiffDescription = removed("Requirements.containerSource.source"); //$NON-NLS-1$ deleteDestinationDiffDescription = removed("Requirements.containerDestination.destination"); //$NON-NLS-1$ deleteMultiValuedRefDiffDescription = removedFromReference("Requirements.containerSource.source", //$NON-NLS-1$ "multiValuedReference", "Requirements.containerDestination.destination"); //$NON-NLS-1$//$NON-NLS-2$ } else { deleteSourceDiffDescription = added("Requirements.containerSource.source"); //$NON-NLS-1$ deleteDestinationDiffDescription = added("Requirements.containerDestination.destination"); //$NON-NLS-1$ deleteMultiValuedRefDiffDescription = addedToReference("Requirements.containerSource.source", //$NON-NLS-1$ "multiValuedReference", "Requirements.containerDestination.destination"); //$NON-NLS-1$ //$NON-NLS-2$ } final Diff deleteSourceDiff = Iterators.find(differences.iterator(), deleteSourceDiffDescription); final Diff deleteDestinationDiff = Iterators.find(differences.iterator(), deleteDestinationDiffDescription); final Diff deleteMultiValuedRefDiff = Iterators.find(differences.iterator(), deleteMultiValuedRefDiffDescription); assertNotNull(deleteSourceDiff); assertNotNull(deleteDestinationDiff); assertNotNull(deleteMultiValuedRefDiff); // CHECK REQUIREMENT if (kind.equals(TestKind.ADD)) { assertEquals(0, deleteSourceDiff.getRequires().size()); assertEquals(0, deleteDestinationDiff.getRequires().size()); assertEquals(2, deleteMultiValuedRefDiff.getRequires().size()); assertTrue(deleteMultiValuedRefDiff.getRequires().contains(deleteDestinationDiff)); assertTrue(deleteMultiValuedRefDiff.getRequires().contains(deleteSourceDiff)); } else { assertEquals(1, deleteSourceDiff.getRequires().size()); assertTrue(deleteSourceDiff.getRequires().contains(deleteMultiValuedRefDiff)); assertEquals(1, deleteDestinationDiff.getRequires().size()); assertTrue(deleteDestinationDiff.getRequires().contains(deleteMultiValuedRefDiff)); assertEquals(0, deleteMultiValuedRefDiff.getRequires().size()); } } private void testAB3(TestKind kind, final Comparison comparison) { final List<Diff> differences = comparison.getDifferences(); // We should have no less and no more than 2 differences assertEquals(2, differences.size()); Predicate<? super Diff> deleteDestinationDiffDescription = null; Predicate<? super Diff> changedSingleValuedRefDiffDescription = null; if (kind.equals(TestKind.DELETE)) { deleteDestinationDiffDescription = removed("Requirements.containerDestination.destination2"); //$NON-NLS-1$ changedSingleValuedRefDiffDescription = changedReference("Requirements.containerSource.source", //$NON-NLS-1$ "singleValuedReference", "Requirements.containerDestination.destination2", //$NON-NLS-1$ //$NON-NLS-2$ "Requirements.destination1"); //$NON-NLS-1$ } else { deleteDestinationDiffDescription = added("Requirements.containerDestination.destination2"); //$NON-NLS-1$ changedSingleValuedRefDiffDescription = changedReference("Requirements.containerSource.source", //$NON-NLS-1$ "singleValuedReference", "Requirements.destination1", //$NON-NLS-1$ //$NON-NLS-2$ "Requirements.containerDestination.destination2"); //$NON-NLS-1$ } final Diff deleteDestinationDiff = Iterators.find(differences.iterator(), deleteDestinationDiffDescription); final Diff changedSingleValuedRefDiff = Iterators.find(differences.iterator(), changedSingleValuedRefDiffDescription); assertNotNull(deleteDestinationDiff); assertNotNull(changedSingleValuedRefDiff); // CHECK REQUIREMENT if (kind.equals(TestKind.ADD)) { assertEquals(0, deleteDestinationDiff.getRequires().size()); assertEquals(1, changedSingleValuedRefDiff.getRequires().size()); assertTrue(changedSingleValuedRefDiff.getRequires().contains(deleteDestinationDiff)); } else { assertEquals(1, deleteDestinationDiff.getRequires().size()); assertTrue(deleteDestinationDiff.getRequires().contains(changedSingleValuedRefDiff)); assertEquals(0, changedSingleValuedRefDiff.getRequires().size()); } } private void testAB4(TestKind kind, final Comparison comparison) { final List<Diff> differences = comparison.getDifferences(); // We should have no less and no more than 3 differences assertEquals(3, differences.size()); Predicate<? super Diff> deleteDestinationDiffDescription = null; Predicate<? super Diff> deletedMultiValuedRefDiffDescription = null; Predicate<? super Diff> addedMultiValuedRefDiffDescription = null; if (kind.equals(TestKind.DELETE)) { deleteDestinationDiffDescription = removed("Requirements.containerDestination.destination2"); //$NON-NLS-1$ deletedMultiValuedRefDiffDescription = removedFromReference("Requirements.containerSource.source", //$NON-NLS-1$ "multiValuedReference", //$NON-NLS-1$ "Requirements.containerDestination.destination2"); //$NON-NLS-1$ addedMultiValuedRefDiffDescription = addedToReference("Requirements.containerSource.source", //$NON-NLS-1$ "multiValuedReference", "Requirements.destination1"); //$NON-NLS-1$//$NON-NLS-2$ } else { deleteDestinationDiffDescription = added("Requirements.containerDestination.destination2"); //$NON-NLS-1$ deletedMultiValuedRefDiffDescription = addedToReference("Requirements.containerSource.source", //$NON-NLS-1$ "multiValuedReference", "Requirements.containerDestination.destination2"); //$NON-NLS-1$ //$NON-NLS-2$ addedMultiValuedRefDiffDescription = removedFromReference("Requirements.containerSource.source", //$NON-NLS-1$ "multiValuedReference", "Requirements.destination1"); //$NON-NLS-1$ //$NON-NLS-2$ } final Diff deleteDestinationDiff = Iterators.find(differences.iterator(), deleteDestinationDiffDescription); final Diff deletedMultiValuedRefDiff = Iterators.find(differences.iterator(), deletedMultiValuedRefDiffDescription); final Diff addedMultiValuedRefDiff = Iterators.find(differences.iterator(), addedMultiValuedRefDiffDescription); assertNotNull(deleteDestinationDiff); assertNotNull(deletedMultiValuedRefDiff); assertNotNull(addedMultiValuedRefDiffDescription); // CHECK REQUIREMENT if (kind.equals(TestKind.ADD)) { assertEquals(0, deleteDestinationDiff.getRequires().size()); assertEquals(1, deletedMultiValuedRefDiff.getRequires().size()); assertEquals(0, addedMultiValuedRefDiff.getRequires().size()); assertTrue(deletedMultiValuedRefDiff.getRequires().contains(deleteDestinationDiff)); } else { assertEquals(1, deleteDestinationDiff.getRequires().size()); assertTrue(deleteDestinationDiff.getRequires().contains(deletedMultiValuedRefDiff)); assertEquals(0, deletedMultiValuedRefDiff.getRequires().size()); assertEquals(0, addedMultiValuedRefDiff.getRequires().size()); } } private void testAB5(TestKind kind, final Comparison comparison) { final List<Diff> differences = comparison.getDifferences(); // We should have no less and no more than 8 differences assertEquals(8, differences.size()); Predicate<? super Diff> addDest4Description = null; Predicate<? super Diff> delDest2Description = null; Predicate<? super Diff> delDest3Description = null; Predicate<? super Diff> addRefDest1Description = null; Predicate<? super Diff> addRefDest4Description = null; Predicate<? super Diff> delRefDest2Description = null; Predicate<? super Diff> delRefDest3Description = null; Predicate<? super Diff> delRefDest5Description = null; if (kind.equals(TestKind.DELETE)) { addDest4Description = added("Requirements.destination4"); //$NON-NLS-1$ delDest2Description = removed("Requirements.containerDestination.destination2"); //$NON-NLS-1$ delDest3Description = removed("Requirements.containerDestination.destination3"); //$NON-NLS-1$ addRefDest1Description = addedToReference("Requirements.containerSource.source", //$NON-NLS-1$ "multiValuedReference", "Requirements.destination1"); //$NON-NLS-1$ //$NON-NLS-2$ addRefDest4Description = addedToReference("Requirements.containerSource.source", //$NON-NLS-1$ "multiValuedReference", "Requirements.destination4"); //$NON-NLS-1$//$NON-NLS-2$ delRefDest2Description = removedFromReference("Requirements.containerSource.source", //$NON-NLS-1$ "multiValuedReference", "Requirements.containerDestination.destination2"); //$NON-NLS-1$ //$NON-NLS-2$ delRefDest3Description = removedFromReference("Requirements.containerSource.source", //$NON-NLS-1$ "multiValuedReference", "Requirements.containerDestination.destination3"); //$NON-NLS-1$ //$NON-NLS-2$ delRefDest5Description = removedFromReference("Requirements.containerSource.source", //$NON-NLS-1$ "multiValuedReference", "Requirements.destination5"); //$NON-NLS-1$ //$NON-NLS-2$ } else { addDest4Description = removed("Requirements.destination4"); //$NON-NLS-1$ delDest2Description = added("Requirements.containerDestination.destination2"); //$NON-NLS-1$ delDest3Description = added("Requirements.containerDestination.destination3"); //$NON-NLS-1$ addRefDest1Description = removedFromReference("Requirements.containerSource.source", //$NON-NLS-1$ "multiValuedReference", "Requirements.destination1"); //$NON-NLS-1$//$NON-NLS-2$ addRefDest4Description = removedFromReference("Requirements.containerSource.source", //$NON-NLS-1$ "multiValuedReference", "Requirements.destination4"); //$NON-NLS-1$//$NON-NLS-2$ delRefDest2Description = addedToReference("Requirements.containerSource.source", //$NON-NLS-1$ "multiValuedReference", "Requirements.containerDestination.destination2"); //$NON-NLS-1$//$NON-NLS-2$ delRefDest3Description = addedToReference("Requirements.containerSource.source", //$NON-NLS-1$ "multiValuedReference", "Requirements.containerDestination.destination3"); //$NON-NLS-1$ //$NON-NLS-2$ delRefDest5Description = addedToReference("Requirements.containerSource.source", //$NON-NLS-1$ "multiValuedReference", "Requirements.destination5"); //$NON-NLS-1$//$NON-NLS-2$ } final Diff addDest4 = Iterators.find(differences.iterator(), addDest4Description); final Diff delDest2 = Iterators.find(differences.iterator(), delDest2Description); final Diff delDest3 = Iterators.find(differences.iterator(), delDest3Description); final Diff addRefDest1 = Iterators.find(differences.iterator(), addRefDest1Description); final Diff addRefDest4 = Iterators.find(differences.iterator(), addRefDest4Description); final Diff delRefDest2 = Iterators.find(differences.iterator(), delRefDest2Description); final Diff delRefDest3 = Iterators.find(differences.iterator(), delRefDest3Description); final Diff delRefDest5 = Iterators.find(differences.iterator(), delRefDest5Description); assertNotNull(addDest4); assertNotNull(delDest2); assertNotNull(delDest3); assertNotNull(addRefDest1); assertNotNull(addRefDest4); assertNotNull(delRefDest2); assertNotNull(delRefDest3); assertNotNull(delRefDest5); // CHECK REQUIREMENT if (kind.equals(TestKind.ADD)) { assertEquals(1, addDest4.getRequires().size()); assertTrue(addDest4.getRequires().contains(addRefDest4)); assertEquals(0, delDest2.getRequires().size()); assertEquals(0, delDest3.getRequires().size()); assertEquals(0, addRefDest1.getRequires().size()); assertEquals(0, addRefDest4.getRequires().size()); assertEquals(1, delRefDest2.getRequires().size()); assertTrue(delRefDest2.getRequires().contains(delDest2)); assertEquals(1, delRefDest3.getRequires().size()); assertTrue(delRefDest3.getRequires().contains(delDest3)); assertEquals(0, delRefDest5.getRequires().size()); } else { assertEquals(0, addDest4.getRequires().size()); assertEquals(1, delDest2.getRequires().size()); assertTrue(delDest2.getRequires().contains(delRefDest2)); assertEquals(1, delDest3.getRequires().size()); assertTrue(delDest3.getRequires().contains(delRefDest3)); assertEquals(0, addRefDest1.getRequires().size()); assertEquals(1, addRefDest4.getRequires().size()); assertTrue(addRefDest4.getRequires().contains(addDest4)); assertEquals(0, delRefDest2.getRequires().size()); assertEquals(0, delRefDest3.getRequires().size()); assertEquals(0, delRefDest5.getRequires().size()); } } private void testAB6(TestKind kind, final Comparison comparison) { final List<Diff> differences = comparison.getDifferences(); // We should have no less and no more than 7 differences assertEquals(7, differences.size()); Predicate<? super Diff> delDestDescription = null; Predicate<? super Diff> delContainerDescription = null; Predicate<? super Diff> delSubContainerDescription = null; Predicate<? super Diff> delSource1Description = null; Predicate<? super Diff> delSource2Description = null; Predicate<? super Diff> delRefSource1Description = null; Predicate<? super Diff> delRefSource2Description = null; if (kind.equals(TestKind.DELETE)) { delDestDescription = removed("Requirements.destination"); //$NON-NLS-1$ delContainerDescription = removed("Requirements.container"); //$NON-NLS-1$ delSubContainerDescription = removed("Requirements.container.subContainer"); //$NON-NLS-1$ delSource1Description = removed("Requirements.container.subContainer.source1"); //$NON-NLS-1$ delSource2Description = removed("Requirements.container.subContainer.source2"); //$NON-NLS-1$ delRefSource1Description = changedReference("Requirements.container.subContainer.source1", //$NON-NLS-1$ "singleValuedReference", "Requirements.destination", null); //$NON-NLS-1$//$NON-NLS-2$ delRefSource2Description = removedFromReference("Requirements.container.subContainer.source2", //$NON-NLS-1$ "multiValuedReference", "Requirements.destination"); //$NON-NLS-1$ //$NON-NLS-2$ } else { delDestDescription = added("Requirements.destination"); //$NON-NLS-1$ delContainerDescription = added("Requirements.container"); //$NON-NLS-1$ delSubContainerDescription = added("Requirements.container.subContainer"); //$NON-NLS-1$ delSource1Description = added("Requirements.container.subContainer.source1"); //$NON-NLS-1$ delSource2Description = added("Requirements.container.subContainer.source2"); //$NON-NLS-1$ delRefSource1Description = changedReference("Requirements.container.subContainer.source1", //$NON-NLS-1$ "singleValuedReference", null, "Requirements.destination"); //$NON-NLS-1$ //$NON-NLS-2$ delRefSource2Description = addedToReference("Requirements.container.subContainer.source2", //$NON-NLS-1$ "multiValuedReference", "Requirements.destination"); //$NON-NLS-1$//$NON-NLS-2$ } final Diff delDest = Iterators.find(differences.iterator(), delDestDescription); final Diff delContainer = Iterators.find(differences.iterator(), delContainerDescription); final Diff delSubContainer = Iterators.find(differences.iterator(), delSubContainerDescription); final Diff delSource1 = Iterators.find(differences.iterator(), delSource1Description); final Diff delSource2 = Iterators.find(differences.iterator(), delSource2Description); final Diff delRefSource1 = Iterators.find(differences.iterator(), delRefSource1Description); final Diff delRefSource2 = Iterators.find(differences.iterator(), delRefSource2Description); assertNotNull(delDest); assertNotNull(delContainer); assertNotNull(delSubContainer); assertNotNull(delSource1); assertNotNull(delSource2); assertNotNull(delRefSource1); assertNotNull(delRefSource2); // CHECK REQUIREMENT if (kind.equals(TestKind.ADD)) { assertEquals(0, delDest.getRequires().size()); assertEquals(0, delContainer.getRequires().size()); assertEquals(1, delSubContainer.getRequires().size()); assertTrue(delSubContainer.getRequires().contains(delContainer)); assertEquals(1, delSource1.getRequires().size()); assertTrue(delSource1.getRequires().contains(delSubContainer)); assertEquals(1, delSource2.getRequires().size()); assertTrue(delSource2.getRequires().contains(delSubContainer)); assertEquals(2, delRefSource1.getRequires().size()); assertTrue(delRefSource1.getRequires().contains(delSource1)); assertTrue(delRefSource2.getRequires().contains(delSource2)); assertEquals(2, delRefSource2.getRequires().size()); assertTrue(delRefSource1.getRequires().contains(delDest)); assertTrue(delRefSource2.getRequires().contains(delDest)); } else { assertEquals(2, delDest.getRequires().size()); assertTrue(delDest.getRequires().contains(delRefSource1)); assertTrue(delDest.getRequires().contains(delRefSource2)); assertEquals(1, delContainer.getRequires().size()); assertTrue(delContainer.getRequires().contains(delSubContainer)); assertEquals(2, delSubContainer.getRequires().size()); assertTrue(delSubContainer.getRequires().contains(delSource1)); assertTrue(delSubContainer.getRequires().contains(delSource2)); assertEquals(1, delSource1.getRequires().size()); assertTrue(delSource1.getRequires().contains(delRefSource1)); assertEquals(1, delSource2.getRequires().size()); assertTrue(delSource2.getRequires().contains(delRefSource2)); assertEquals(0, delRefSource1.getRequires().size()); assertEquals(0, delRefSource2.getRequires().size()); } } private void testAB7(TestKind kind, final Comparison comparison) { final List<Diff> differences = comparison.getDifferences(); // We should have no less and no more than 4 differences assertEquals(4, differences.size()); Predicate<? super Diff> addBDescription = null; Predicate<? super Diff> delCDescription = null; Predicate<? super Diff> addEDescription = null; Predicate<? super Diff> delFDescription = null; if (kind.equals(TestKind.ADD)) { addBDescription = added("Requirements.A.B"); //$NON-NLS-1$ delCDescription = removed("Requirements.A.C"); //$NON-NLS-1$ addEDescription = added("Requirements.D.E"); //$NON-NLS-1$ delFDescription = removed("Requirements.D.F"); //$NON-NLS-1$ } else { addBDescription = removed("Requirements.A.B"); //$NON-NLS-1$ delCDescription = added("Requirements.A.C"); //$NON-NLS-1$ addEDescription = removed("Requirements.D.E"); //$NON-NLS-1$ delFDescription = added("Requirements.D.F"); //$NON-NLS-1$ } final Diff addB = Iterators.find(differences.iterator(), addBDescription); final Diff delC = Iterators.find(differences.iterator(), delCDescription); final Diff addE = Iterators.find(differences.iterator(), addEDescription); final Diff delF = Iterators.find(differences.iterator(), delFDescription); assertNotNull(addB); assertNotNull(delC); assertNotNull(addE); assertNotNull(delF); // CHECK REQUIREMENT if (kind.equals(TestKind.ADD)) { assertEquals(1, addB.getRequires().size()); assertTrue(addB.getRequires().contains(delC)); assertEquals(0, delC.getRequires().size()); assertEquals(0, addE.getRequires().size()); assertEquals(0, delF.getRequires().size()); } else { assertEquals(0, addB.getRequires().size()); assertEquals(1, delC.getRequires().size()); assertTrue(delC.getRequires().contains(addB)); assertEquals(0, addE.getRequires().size()); assertEquals(0, delF.getRequires().size()); } } private void testAB8(TestKind kind, final Comparison comparison) { final List<Diff> differences = comparison.getDifferences(); // We should have no less and no more than 7 differences assertEquals(7, differences.size()); Predicate<? super Diff> addBDescription = null; Predicate<? super Diff> delCDescription = null; Predicate<? super Diff> changeRefBDescription = null; Predicate<? super Diff> addEDescription = null; Predicate<? super Diff> delFDescription = null; Predicate<? super Diff> addRefEDescription = null; Predicate<? super Diff> delRefFDescription = null; if (kind.equals(TestKind.ADD)) { addBDescription = added("Requirements.B"); //$NON-NLS-1$ delCDescription = removed("Requirements.C"); //$NON-NLS-1$ changeRefBDescription = changedReference("Requirements.A", "singleValuedReference", //$NON-NLS-1$//$NON-NLS-2$ "Requirements.C", "Requirements.B"); //$NON-NLS-1$ //$NON-NLS-2$ addEDescription = added("Requirements.E"); //$NON-NLS-1$ delFDescription = removed("Requirements.F"); //$NON-NLS-1$ addRefEDescription = addedToReference("Requirements.D", "multiValuedReference", "Requirements.E"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ delRefFDescription = removedFromReference("Requirements.D", "multiValuedReference", //$NON-NLS-1$//$NON-NLS-2$ "Requirements.F"); //$NON-NLS-1$ } else { addBDescription = removed("Requirements.B"); //$NON-NLS-1$ delCDescription = added("Requirements.C"); //$NON-NLS-1$ changeRefBDescription = changedReference("Requirements.A", "singleValuedReference", //$NON-NLS-1$ //$NON-NLS-2$ "Requirements.B", "Requirements.C"); //$NON-NLS-1$ //$NON-NLS-2$ addEDescription = removed("Requirements.E"); //$NON-NLS-1$ delFDescription = added("Requirements.F"); //$NON-NLS-1$ addRefEDescription = removedFromReference("Requirements.D", "multiValuedReference", //$NON-NLS-1$//$NON-NLS-2$ "Requirements.E"); //$NON-NLS-1$ delRefFDescription = addedToReference("Requirements.D", "multiValuedReference", "Requirements.F"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ } final Diff addB = Iterators.find(differences.iterator(), addBDescription); final Diff delC = Iterators.find(differences.iterator(), delCDescription); final Diff changeRefB = Iterators.find(differences.iterator(), changeRefBDescription); final Diff addE = Iterators.find(differences.iterator(), addEDescription); final Diff delF = Iterators.find(differences.iterator(), delFDescription); final Diff addRefE = Iterators.find(differences.iterator(), addRefEDescription); final Diff delRefF = Iterators.find(differences.iterator(), delRefFDescription); assertNotNull(addB); assertNotNull(delC); assertNotNull(changeRefB); assertNotNull(addE); assertNotNull(delF); assertNotNull(addRefE); assertNotNull(delRefF); // CHECK REQUIREMENT if (kind.equals(TestKind.ADD)) { assertEquals(0, addB.getRequires().size()); assertEquals(1, delC.getRequires().size()); assertTrue(delC.getRequires().contains(changeRefB)); assertEquals(1, changeRefB.getRequires().size()); assertTrue(changeRefB.getRequires().contains(addB)); assertEquals(0, addE.getRequires().size()); assertEquals(1, delF.getRequires().size()); assertTrue(delF.getRequires().contains(delRefF)); assertEquals(1, addRefE.getRequires().size()); assertTrue(addRefE.getRequires().contains(addE)); assertEquals(0, delRefF.getRequires().size()); } else { assertEquals(1, addB.getRequires().size()); assertTrue(addB.getRequires().contains(changeRefB)); assertEquals(0, delC.getRequires().size()); assertEquals(1, changeRefB.getRequires().size()); assertTrue(changeRefB.getRequires().contains(delC)); assertEquals(1, addE.getRequires().size()); assertTrue(addE.getRequires().contains(addRefE)); assertEquals(0, delF.getRequires().size()); assertEquals(0, addRefE.getRequires().size()); assertEquals(1, delRefF.getRequires().size()); assertTrue(delRefF.getRequires().contains(delF)); } } private void testAB9(TestKind kind, final Comparison comparison) { final List<Diff> differences = comparison.getDifferences(); // We should have no less and no more than 2 differences assertEquals(2, differences.size()); Predicate<? super Diff> addBDescription = null; Predicate<? super Diff> addCDescription = null; if (kind.equals(TestKind.ADD)) { addBDescription = added("Requirements.A.B"); //$NON-NLS-1$ addCDescription = added("Requirements.A.B.C"); //$NON-NLS-1$ } else { addBDescription = removed("Requirements.A.B"); //$NON-NLS-1$ addCDescription = removed("Requirements.A.B.C"); //$NON-NLS-1$ } final Diff addB = Iterators.find(differences.iterator(), addBDescription); final Diff addC = Iterators.find(differences.iterator(), addCDescription); assertNotNull(addB); assertNotNull(addC); // CHECK REQUIREMENT if (kind.equals(TestKind.ADD)) { assertEquals(0, addB.getRequires().size()); assertEquals(1, addC.getRequires().size()); assertTrue(addC.getRequires().contains(addB)); } else { assertEquals(1, addB.getRequires().size()); assertTrue(addB.getRequires().contains(addC)); assertEquals(0, addC.getRequires().size()); } } private void testAB10(TestKind kind, final Comparison comparison) { final List<Diff> differences = comparison.getDifferences(); // We should have no less and no more than 4 differences assertEquals(4, differences.size()); Predicate<? super Diff> addADescription = null; Predicate<? super Diff> addCDescription = null; Predicate<? super Diff> changeRefBDescription = null; Predicate<? super Diff> addRefBDescription = null; if (kind.equals(TestKind.ADD)) { addADescription = added("Requirements.A"); //$NON-NLS-1$ addCDescription = added("Requirements.C"); //$NON-NLS-1$ changeRefBDescription = changedReference("Requirements.A", "singleValuedReference", null, "Requirements.B"); addRefBDescription = addedToReference("Requirements.C", "multiValuedReference", "Requirements.B"); } else { addADescription = removed("Requirements.A"); //$NON-NLS-1$ addCDescription = removed("Requirements.C"); //$NON-NLS-1$ changeRefBDescription = changedReference("Requirements.A", "singleValuedReference", "Requirements.B", null); addRefBDescription = removedFromReference("Requirements.C", "multiValuedReference", "Requirements.B"); } final Diff addA = Iterators.find(differences.iterator(), addADescription); final Diff addC = Iterators.find(differences.iterator(), addCDescription); final Diff changeRefB = Iterators.find(differences.iterator(), changeRefBDescription); final Diff addRefB = Iterators.find(differences.iterator(), addRefBDescription); assertNotNull(addA); assertNotNull(addC); assertNotNull(changeRefB); assertNotNull(addRefB); // CHECK REQUIREMENT if (kind.equals(TestKind.ADD)) { assertEquals(0, addA.getRequires().size()); assertEquals(0, addC.getRequires().size()); assertEquals(1, changeRefB.getRequires().size()); assertTrue(changeRefB.getRequires().contains(addA)); assertEquals(1, addRefB.getRequires().size()); assertTrue(addRefB.getRequires().contains(addC)); } else { assertEquals(1, addA.getRequires().size()); assertTrue(addA.getRequires().contains(changeRefB)); assertEquals(1, addC.getRequires().size()); assertTrue(addC.getRequires().contains(addRefB)); assertEquals(0, changeRefB.getRequires().size()); assertEquals(0, addRefB.getRequires().size()); } } private void testAB11(TestKind kind, final Comparison comparison) { final List<Diff> differences = comparison.getDifferences(); // We should have no less and no more than 4 differences assertEquals(4, differences.size()); Predicate<? super Diff> delBDescription = null; Predicate<? super Diff> moveCDescription = null; Predicate<? super Diff> moveDDescription = null; Predicate<? super Diff> moveEDescription = null; if (kind.equals(TestKind.ADD)) { delBDescription = removed("Requirements.A.B"); //$NON-NLS-1$ moveCDescription = movedInReference("Requirements.A", "containmentRef1", "Requirements.A.C"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ moveDDescription = movedInReference("Requirements.A", "containmentRef1", "Requirements.A.D"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ moveEDescription = movedInReference("Requirements.A.D", "containmentRef1", "Requirements.A.D.E"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } else { delBDescription = added("Requirements.A.B"); //$NON-NLS-1$ moveCDescription = movedInReference("Requirements.A.B", "containmentRef1", "Requirements.A.B.C"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ moveDDescription = movedInReference("Requirements.A.E", "containmentRef1", "Requirements.A.E.D"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ moveEDescription = movedInReference("Requirements.A", "containmentRef1", "Requirements.A.E"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } final Diff delB = Iterators.find(differences.iterator(), delBDescription); final Diff moveC = Iterators.find(differences.iterator(), moveCDescription); final Diff moveD = Iterators.find(differences.iterator(), moveDDescription); final Diff moveE = Iterators.find(differences.iterator(), moveEDescription); assertNotNull(delB); assertNotNull(moveC); assertNotNull(moveD); assertNotNull(moveE); // CHECK REQUIREMENT if (kind.equals(TestKind.ADD)) { assertEquals(1, delB.getRequires().size()); assertTrue(delB.getRequires().contains(moveC)); assertEquals(0, moveC.getRequires().size()); assertEquals(0, moveD.getRequires().size()); assertEquals(1, moveE.getRequires().size()); assertTrue(moveE.getRequires().contains(moveD)); } else { assertEquals(0, delB.getRequires().size()); assertEquals(1, moveC.getRequires().size()); assertTrue(moveC.getRequires().contains(delB)); assertEquals(1, moveD.getRequires().size()); assertTrue(moveD.getRequires().contains(moveE)); assertEquals(0, moveE.getRequires().size()); } } private void testCD1(TestKind kind, final Comparison comparison) { final List<Diff> differences = comparison.getDifferences(); // We should have no less and no more than 5 differences assertEquals(5, differences.size()); Predicate<? super Diff> deleteADiffDescription = null; Predicate<? super Diff> deleteBDiffDescription = null; Predicate<? super Diff> deleteCDiffDescription = null; Predicate<? super Diff> deleteRefBDiffDescription = null; Predicate<? super Diff> deleteRefCDiffDescription = null; if (kind.equals(TestKind.DELETE)) { deleteADiffDescription = removed("Requirements.A"); //$NON-NLS-1$ deleteBDiffDescription = removed("Requirements.B"); //$NON-NLS-1$ deleteCDiffDescription = removed("Requirements.C"); //$NON-NLS-1$ deleteRefBDiffDescription = removedFromReference("Requirements.A", "multiValuedReference", //$NON-NLS-1$ //$NON-NLS-2$ "Requirements.B"); //$NON-NLS-1$ deleteRefCDiffDescription = removedFromReference("Requirements.A", "multiValuedReference", //$NON-NLS-1$ //$NON-NLS-2$ "Requirements.C"); //$NON-NLS-1$ } else { deleteADiffDescription = added("Requirements.A"); //$NON-NLS-1$ deleteBDiffDescription = added("Requirements.B"); //$NON-NLS-1$ deleteCDiffDescription = added("Requirements.C"); //$NON-NLS-1$ deleteRefBDiffDescription = addedToReference("Requirements.A", "multiValuedReference", //$NON-NLS-1$ //$NON-NLS-2$ "Requirements.B"); //$NON-NLS-1$ deleteRefCDiffDescription = addedToReference("Requirements.A", "multiValuedReference", //$NON-NLS-1$ //$NON-NLS-2$ "Requirements.C"); //$NON-NLS-1$ } final Diff deleteADiff = Iterators.find(differences.iterator(), deleteADiffDescription); final Diff deleteBDiff = Iterators.find(differences.iterator(), deleteBDiffDescription); final Diff deleteCDiff = Iterators.find(differences.iterator(), deleteCDiffDescription); final Diff deleteRefBDiff = Iterators.find(differences.iterator(), deleteRefBDiffDescription); final Diff deleteRefCDiff = Iterators.find(differences.iterator(), deleteRefCDiffDescription); assertNotNull(deleteADiff); assertNotNull(deleteBDiff); assertNotNull(deleteCDiff); assertNotNull(deleteRefBDiff); assertNotNull(deleteRefCDiff); // CHECK REQUIREMENT if (kind.equals(TestKind.ADD)) { assertEquals(0, deleteADiff.getRequires().size()); assertEquals(0, deleteBDiff.getRequires().size()); assertEquals(0, deleteCDiff.getRequires().size()); assertEquals(2, deleteRefBDiff.getRequires().size()); assertTrue(deleteRefBDiff.getRequires().contains(deleteBDiff)); assertTrue(deleteRefBDiff.getRequires().contains(deleteADiff)); assertEquals(2, deleteRefCDiff.getRequires().size()); assertTrue(deleteRefCDiff.getRequires().contains(deleteCDiff)); assertTrue(deleteRefCDiff.getRequires().contains(deleteADiff)); } else { assertEquals(2, deleteADiff.getRequires().size()); assertTrue(deleteADiff.getRequires().contains(deleteRefBDiff)); assertTrue(deleteADiff.getRequires().contains(deleteRefCDiff)); assertEquals(1, deleteBDiff.getRequires().size()); assertTrue(deleteBDiff.getRequires().contains(deleteRefBDiff)); assertEquals(1, deleteCDiff.getRequires().size()); assertTrue(deleteCDiff.getRequires().contains(deleteRefCDiff)); assertEquals(0, deleteRefBDiff.getRequires().size()); assertEquals(0, deleteRefCDiff.getRequires().size()); } } private void testCD2(TestKind kind, final Comparison comparison) { final List<Diff> differences = comparison.getDifferences(); // We should have no less and no more than 5 differences assertEquals(4, differences.size()); Predicate<? super Diff> deleteADiffDescription = null; Predicate<? super Diff> deleteCDiffDescription = null; Predicate<? super Diff> deleteRefBDiffDescription = null; Predicate<? super Diff> deleteRefCDiffDescription = null; if (kind.equals(TestKind.DELETE)) { deleteADiffDescription = removed("Requirements.A"); //$NON-NLS-1$ deleteCDiffDescription = removed("Requirements.C"); //$NON-NLS-1$ deleteRefBDiffDescription = removedFromReference("Requirements.A", "multiValuedReference", //$NON-NLS-1$ //$NON-NLS-2$ "Requirements.B"); //$NON-NLS-1$ deleteRefCDiffDescription = removedFromReference("Requirements.A", "multiValuedReference", //$NON-NLS-1$//$NON-NLS-2$ "Requirements.C"); //$NON-NLS-1$ } else { deleteADiffDescription = added("Requirements.A"); //$NON-NLS-1$ deleteCDiffDescription = added("Requirements.C"); //$NON-NLS-1$ deleteRefBDiffDescription = addedToReference("Requirements.A", "multiValuedReference", //$NON-NLS-1$//$NON-NLS-2$ "Requirements.B"); //$NON-NLS-1$ deleteRefCDiffDescription = addedToReference("Requirements.A", "multiValuedReference", //$NON-NLS-1$ //$NON-NLS-2$ "Requirements.C"); //$NON-NLS-1$ } final Diff deleteADiff = Iterators.find(differences.iterator(), deleteADiffDescription); final Diff deleteCDiff = Iterators.find(differences.iterator(), deleteCDiffDescription); final Diff deleteRefBDiff = Iterators.find(differences.iterator(), deleteRefBDiffDescription); final Diff deleteRefCDiff = Iterators.find(differences.iterator(), deleteRefCDiffDescription); assertNotNull(deleteADiff); assertNotNull(deleteCDiff); assertNotNull(deleteRefBDiff); assertNotNull(deleteRefCDiff); // CHECK REQUIREMENT if (kind.equals(TestKind.ADD)) { assertEquals(0, deleteADiff.getRequires().size()); assertEquals(0, deleteCDiff.getRequires().size()); assertEquals(1, deleteRefBDiff.getRequires().size()); assertTrue(deleteRefBDiff.getRequires().contains(deleteADiff)); assertEquals(2, deleteRefCDiff.getRequires().size()); assertTrue(deleteRefCDiff.getRequires().contains(deleteCDiff)); assertTrue(deleteRefCDiff.getRequires().contains(deleteADiff)); } else { assertEquals(2, deleteADiff.getRequires().size()); assertTrue(deleteADiff.getRequires().contains(deleteRefBDiff)); assertTrue(deleteADiff.getRequires().contains(deleteRefCDiff)); assertEquals(1, deleteCDiff.getRequires().size()); assertTrue(deleteCDiff.getRequires().contains(deleteRefCDiff)); assertEquals(0, deleteRefBDiff.getRequires().size()); assertEquals(0, deleteRefCDiff.getRequires().size()); } } private void testCD3(TestKind kind, final Comparison comparison) { final List<Diff> differences = comparison.getDifferences(); // We should have no less and no more than 5 differences assertEquals(4, differences.size()); Predicate<? super Diff> deleteBDiffDescription = null; Predicate<? super Diff> deleteCDiffDescription = null; Predicate<? super Diff> deleteRefBDiffDescription = null; Predicate<? super Diff> deleteRefCDiffDescription = null; if (kind.equals(TestKind.DELETE)) { deleteBDiffDescription = removed("Requirements.B"); //$NON-NLS-1$ deleteCDiffDescription = removed("Requirements.C"); //$NON-NLS-1$ deleteRefBDiffDescription = removedFromReference("Requirements.A", "multiValuedReference", //$NON-NLS-1$ //$NON-NLS-2$ "Requirements.B"); //$NON-NLS-1$ deleteRefCDiffDescription = removedFromReference("Requirements.A", "multiValuedReference", //$NON-NLS-1$ //$NON-NLS-2$ "Requirements.C"); //$NON-NLS-1$ } else { deleteBDiffDescription = added("Requirements.B"); //$NON-NLS-1$ deleteCDiffDescription = added("Requirements.C"); //$NON-NLS-1$ deleteRefBDiffDescription = addedToReference("Requirements.A", "multiValuedReference", //$NON-NLS-1$ //$NON-NLS-2$ "Requirements.B"); //$NON-NLS-1$ deleteRefCDiffDescription = addedToReference("Requirements.A", "multiValuedReference", //$NON-NLS-1$ //$NON-NLS-2$ "Requirements.C"); //$NON-NLS-1$ } final Diff deleteBDiff = Iterators.find(differences.iterator(), deleteBDiffDescription); final Diff deleteCDiff = Iterators.find(differences.iterator(), deleteCDiffDescription); final Diff deleteRefBDiff = Iterators.find(differences.iterator(), deleteRefBDiffDescription); final Diff deleteRefCDiff = Iterators.find(differences.iterator(), deleteRefCDiffDescription); assertNotNull(deleteBDiff); assertNotNull(deleteCDiff); assertNotNull(deleteRefBDiff); assertNotNull(deleteRefCDiff); // CHECK REQUIREMENT if (kind.equals(TestKind.ADD)) { assertEquals(0, deleteBDiff.getRequires().size()); assertEquals(0, deleteCDiff.getRequires().size()); assertEquals(1, deleteRefBDiff.getRequires().size()); assertTrue(deleteRefBDiff.getRequires().contains(deleteBDiff)); assertEquals(1, deleteRefCDiff.getRequires().size()); assertTrue(deleteRefCDiff.getRequires().contains(deleteCDiff)); } else { assertEquals(1, deleteBDiff.getRequires().size()); assertTrue(deleteBDiff.getRequires().contains(deleteRefBDiff)); assertEquals(1, deleteCDiff.getRequires().size()); assertTrue(deleteCDiff.getRequires().contains(deleteRefCDiff)); assertEquals(0, deleteRefBDiff.getRequires().size()); assertEquals(0, deleteRefCDiff.getRequires().size()); } } private void testCD4(TestKind kind, final Comparison comparison) { final List<Diff> differences = comparison.getDifferences(); // We should have no less and no more than 5 differences assertEquals(3, differences.size()); Predicate<? super Diff> deleteCDiffDescription = null; Predicate<? super Diff> deleteRefBDiffDescription = null; Predicate<? super Diff> deleteRefCDiffDescription = null; if (kind.equals(TestKind.DELETE)) { deleteCDiffDescription = removed("Requirements.C"); //$NON-NLS-1$ deleteRefBDiffDescription = removedFromReference("Requirements.A", "multiValuedReference", //$NON-NLS-1$//$NON-NLS-2$ "Requirements.B"); //$NON-NLS-1$ deleteRefCDiffDescription = removedFromReference("Requirements.A", "multiValuedReference", //$NON-NLS-1$ //$NON-NLS-2$ "Requirements.C"); //$NON-NLS-1$ } else { deleteCDiffDescription = added("Requirements.C"); //$NON-NLS-1$ deleteRefBDiffDescription = addedToReference("Requirements.A", "multiValuedReference", //$NON-NLS-1$//$NON-NLS-2$ "Requirements.B"); //$NON-NLS-1$ deleteRefCDiffDescription = addedToReference("Requirements.A", "multiValuedReference", //$NON-NLS-1$//$NON-NLS-2$ "Requirements.C"); //$NON-NLS-1$ } final Diff deleteCDiff = Iterators.find(differences.iterator(), deleteCDiffDescription); final Diff deleteRefBDiff = Iterators.find(differences.iterator(), deleteRefBDiffDescription); final Diff deleteRefCDiff = Iterators.find(differences.iterator(), deleteRefCDiffDescription); assertNotNull(deleteCDiff); assertNotNull(deleteRefBDiff); assertNotNull(deleteRefCDiff); // CHECK REQUIREMENT if (kind.equals(TestKind.ADD)) { assertEquals(0, deleteCDiff.getRequires().size()); assertEquals(0, deleteRefBDiff.getRequires().size()); assertEquals(1, deleteRefCDiff.getRequires().size()); assertTrue(deleteRefCDiff.getRequires().contains(deleteCDiff)); } else { assertEquals(1, deleteCDiff.getRequires().size()); assertTrue(deleteCDiff.getRequires().contains(deleteRefCDiff)); assertEquals(0, deleteRefBDiff.getRequires().size()); assertEquals(0, deleteRefCDiff.getRequires().size()); } } private void testCD5(TestKind kind, final Comparison comparison) { final List<Diff> differences = comparison.getDifferences(); // We should have no less and no more than 2 differences assertEquals(2, differences.size()); Predicate<? super Diff> deleteCDiffDescription = null; Predicate<? super Diff> deleteRefCDiffDescription = null; if (kind.equals(TestKind.DELETE)) { deleteCDiffDescription = removed("Requirements.C"); //$NON-NLS-1$ deleteRefCDiffDescription = removedFromReference("Requirements.A", "multiValuedReference", //$NON-NLS-1$//$NON-NLS-2$ "Requirements.C"); //$NON-NLS-1$ } else { deleteCDiffDescription = added("Requirements.C"); //$NON-NLS-1$ deleteRefCDiffDescription = addedToReference("Requirements.A", "multiValuedReference", //$NON-NLS-1$//$NON-NLS-2$ "Requirements.C"); //$NON-NLS-1$ } final Diff deleteCDiff = Iterators.find(differences.iterator(), deleteCDiffDescription); final Diff deleteRefCDiff = Iterators.find(differences.iterator(), deleteRefCDiffDescription); assertNotNull(deleteCDiff); assertNotNull(deleteRefCDiff); // CHECK REQUIREMENT if (kind.equals(TestKind.ADD)) { assertEquals(0, deleteCDiff.getRequires().size()); assertEquals(1, deleteRefCDiff.getRequires().size()); assertTrue(deleteRefCDiff.getRequires().contains(deleteCDiff)); } else { assertEquals(1, deleteCDiff.getRequires().size()); assertTrue(deleteCDiff.getRequires().contains(deleteRefCDiff)); assertEquals(0, deleteRefCDiff.getRequires().size()); } } }