blob: a3957820e255081e99b352e8a37a7a99657c2cfa [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015 EclipseSource Muenchen 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:
* Stefan Dirix - initial API and implementation
*******************************************************************************/
package org.eclipse.emf.compare.uml2.tests.conflict;
import static org.eclipse.emf.compare.utils.EMFComparePredicates.hasConflict;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.MatcherAssert.assertThat;
import com.google.common.collect.Iterators;
import java.io.IOException;
import java.util.Iterator;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.compare.Comparison;
import org.eclipse.emf.compare.ConflictKind;
import org.eclipse.emf.compare.Diff;
import org.eclipse.emf.compare.merge.IMerger;
import org.eclipse.emf.compare.merge.IMerger.Registry;
import org.eclipse.emf.compare.merge.PseudoConflictMerger;
import org.eclipse.emf.compare.uml2.tests.AbstractUMLInputData;
import org.eclipse.emf.compare.uml2.tests.AbstractUMLTest;
import org.eclipse.emf.compare.uml2.tests.conflict.data.ConflictInputData;
import org.eclipse.emf.ecore.resource.Resource;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* Tests the handling of pseudo conflicts within UML models.
*
* @author Stefan Dirix <sdirix@eclipsesource.com>
*/
public class PseudoConflictTest extends AbstractUMLTest {
/**
* Test input data.
*/
private ConflictInputData input = new ConflictInputData();
@BeforeClass
public static void setupClass() {
fillRegistries();
}
@AfterClass
public static void teardownClass() {
resetRegistries();
}
/**
* Tests if EMF Compare uses the {@link PseudoConflictMerger} when merging pseudo conflicts of UML models.
*
* @throws IOException
* When an error is thrown while reading the models.
*/
@Test
public void testPseudoConflictMergerPriority() throws IOException {
final Resource left = input.getA1Left();
final Resource right = input.getA1Right();
final Resource origin = input.getA1Origin();
final Comparison comparison = compare(left, right, origin);
final EList<Diff> differences = comparison.getDifferences();
Iterator<Diff> conflicts = Iterators.filter(differences.iterator(), hasConflict(ConflictKind.PSEUDO));
final Registry registry = getMergerRegistry();
while (conflicts.hasNext()) {
Diff conflict = conflicts.next();
IMerger merger = registry.getHighestRankingMerger(conflict);
assertThat(merger, instanceOf(PseudoConflictMerger.class));
}
}
@Override
protected AbstractUMLInputData getInput() {
return input;
}
}