/******************************************************************************* * Copyright (c) 2017 EclipseSource Services GmbH and others. * 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: * Philip Langer - initial API and implementation *******************************************************************************/ package org.eclipse.emf.compare.internal.utils; import static org.eclipse.emf.compare.DifferenceSource.LEFT; import static org.eclipse.emf.compare.DifferenceSource.RIGHT; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.Arrays; import org.eclipse.emf.compare.CompareFactory; import org.eclipse.emf.compare.Comparison; import org.eclipse.emf.compare.Conflict; import org.eclipse.emf.compare.Diff; import org.eclipse.emf.compare.DifferenceSource; import org.eclipse.emf.compare.Equivalence; import org.eclipse.emf.compare.Match; import org.junit.Before; import org.junit.Test; public class ComparisonUtilDeleteTest { private static final CompareFactory COMPARE_FACTORY = CompareFactory.eINSTANCE; private Match match; private Diff diffToDelete; @Before public void setUp() { match = createMatch(COMPARE_FACTORY.createComparison()); diffToDelete = createDiff(LEFT); } private Match createMatch(Comparison comparison) { Match newMatch = COMPARE_FACTORY.createMatch(); comparison.getMatches().add(newMatch); return newMatch; } private Diff createDiff(DifferenceSource side) { Diff newDiff = COMPARE_FACTORY.createDiff(); match.getDifferences().add(newDiff); newDiff.setSource(side); return newDiff; } private Conflict createConflict(Diff... diffs) { Conflict newConflict = COMPARE_FACTORY.createConflict(); newConflict.getDifferences().addAll(Arrays.asList(diffs)); match.getComparison().getConflicts().add(newConflict); return newConflict; } private Equivalence createEquivalence(Diff... diffs) { Equivalence newEquivalence = COMPARE_FACTORY.createEquivalence(); newEquivalence.getDifferences().addAll(Arrays.asList(diffs)); match.getComparison().getEquivalences().add(newEquivalence); return newEquivalence; } @Test public void testDeleteDiff() { ComparisonUtil.delete(diffToDelete); assertFalse(match.getDifferences().contains(diffToDelete)); } @Test public void testDeleteDiff_WithConflictsToDelete() { final Diff conflictingDiff = createDiff(RIGHT); Conflict conflictToDelete = createConflict(diffToDelete, conflictingDiff); Conflict otherConflict = createConflict(createDiff(LEFT), createDiff(RIGHT)); ComparisonUtil.delete(diffToDelete); assertFalse(match.getDifferences().contains(diffToDelete)); assertNull(conflictingDiff.getConflict()); assertFalse(match.getComparison().getConflicts().contains(conflictToDelete)); assertTrue(match.getComparison().getConflicts().contains(otherConflict)); assertEquals(2, otherConflict.getDifferences().size()); } @Test public void testDeleteDiff_WithConflictToKeep() { Conflict conflictToKeep = createConflict(diffToDelete, createDiff(LEFT), createDiff(RIGHT)); ComparisonUtil.delete(diffToDelete); assertFalse(match.getDifferences().contains(diffToDelete)); assertFalse(conflictToKeep.getDifferences().contains(diffToDelete)); assertTrue(match.getComparison().getConflicts().contains(conflictToKeep)); assertEquals(1, conflictToKeep.getLeftDifferences().size()); assertEquals(1, conflictToKeep.getRightDifferences().size()); } @Test public void testDeleteDiff_WithEquivalencesToDelete() { Diff equivalentDiff = createDiff(RIGHT); Equivalence equivalenceToDelete = createEquivalence(diffToDelete, equivalentDiff); Equivalence otherEquivalence = createEquivalence(createDiff(LEFT), createDiff(RIGHT)); ComparisonUtil.delete(diffToDelete); assertFalse(match.getDifferences().contains(diffToDelete)); assertNull(equivalentDiff.getEquivalence()); assertFalse(match.getComparison().getEquivalences().contains(equivalenceToDelete)); assertTrue(match.getComparison().getEquivalences().contains(otherEquivalence)); assertEquals(2, otherEquivalence.getDifferences().size()); } @Test public void testDeleteDiff_WithEquivalenceToKeep() { Equivalence equivalenceToKeep = createEquivalence(diffToDelete, createDiff(LEFT), createDiff(RIGHT)); ComparisonUtil.delete(diffToDelete); assertFalse(match.getDifferences().contains(diffToDelete)); assertFalse(equivalenceToKeep.getDifferences().contains(diffToDelete)); assertTrue(match.getComparison().getEquivalences().contains(equivalenceToKeep)); assertEquals(2, equivalenceToKeep.getDifferences().size()); } }