/******************************************************************************* * Copyright (c) 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.rcp.ui.tests.structuremergeviewer.filters; import static com.google.common.base.Predicates.alwaysTrue; import java.io.IOException; import java.util.List; import org.eclipse.emf.common.util.TreeIterator; import org.eclipse.emf.compare.Comparison; import org.eclipse.emf.compare.FeatureMapChange; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.filters.impl.TechnicalitiesFilter; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.BasicDifferenceGroupImpl; import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroup; import org.eclipse.emf.compare.rcp.ui.tests.structuremergeviewer.groups.provider.AbstractTestTreeNodeItemProviderAdapter; import org.eclipse.emf.compare.tests.edit.data.ResourceScopeProvider; import org.eclipse.emf.compare.tests.framework.AbstractInputData; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.util.ECrossReferenceAdapter; import org.eclipse.emf.edit.tree.TreeNode; import org.eclipse.emf.edit.tree.TreePackage; import org.junit.Assert; import org.junit.Test; import com.google.common.base.Predicate; /** * @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a> */ @SuppressWarnings("restriction") public class TestFeatureMapDifferencesFilter extends AbstractTestTreeNodeItemProviderAdapter { /** * Tests that the feature map differences filter does not hide feature map differences that have no * equivalences. * * @throws IOException */ @Test public void testFeatureMapDifferencesWithNoEquivalences() throws IOException { // Builds the input tree. Comparison comparison = getComparison(new TestFeatureMapFilterScope()); ECrossReferenceAdapter crossReferenceAdapter = new ECrossReferenceAdapter() { /** * {@inheritDoc} * * @see org.eclipse.emf.ecore.util.ECrossReferenceAdapter#isIncluded(org.eclipse.emf.ecore.EReference) */ @Override protected boolean isIncluded(EReference eReference) { return eReference == TreePackage.Literals.TREE_NODE__DATA; } }; IDifferenceGroup group = new BasicDifferenceGroupImpl(comparison, alwaysTrue(), crossReferenceAdapter); List<? extends TreeNode> roots = group.getChildren(); Predicate<? super EObject> featureMapDifferencesFilter = new TechnicalitiesFilter() .getPredicateWhenSelected(); for (TreeNode root : roots) { TreeIterator<EObject> nodeIte = root.eAllContents(); while (nodeIte.hasNext()) { EObject n = nodeIte.next(); if (n instanceof TreeNode) { TreeNode treeNode = (TreeNode)n; EObject data = treeNode.getData(); if (data instanceof FeatureMapChange && ((FeatureMapChange)data).getEquivalence() != null) { Assert.assertTrue(featureMapDifferencesFilter.apply(treeNode)); } else { Assert.assertFalse(featureMapDifferencesFilter.apply(treeNode)); } } } } } /** * Input data for this test. * * @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a> */ public class TestFeatureMapFilterScope extends AbstractInputData implements ResourceScopeProvider { public Resource getLeft() throws IOException { return loadFromClassLoader("data/featuremapfilter/left.nodes");//$NON-NLS-1$ } public Resource getRight() throws IOException { return loadFromClassLoader("data/featuremapfilter/right.nodes");//$NON-NLS-1$ } public Resource getOrigin() throws IOException { return null; } } }