/******************************************************************************* * 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 static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.io.IOException; import java.util.List; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.compare.Comparison; import org.eclipse.emf.compare.DifferenceKind; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.filters.impl.CascadingDifferencesFilter; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.BasicDifferenceGroupImpl; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.nodes.DiffNode; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.nodes.MatchNode; 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.Test; import com.google.common.base.Predicate; /** * This test is related to <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=435365"</a>. * * @author <a href="mailto:arthur.daussy@obeo.fr">Arthur Daussy</a> */ @SuppressWarnings("restriction") public class TestBug435365 extends AbstractTestTreeNodeItemProviderAdapter { /** * Tests that the cascading filter does not hide cascading differences if the parent difference is a * {@link DifferenceKind#MOVE}. * * @throws IOException */ @Test public void testCascadingFilterNotHidingDiffUnderMove() throws IOException { // Builds the input tree. Comparison comparison = getComparison(new Bug435365Scope()); 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(); // Gets the node matching the move diff. TreeNode movingNode = roots.get(0).getChildren().get(0).getChildren().get(0); Predicate<? super EObject> cascadingFilter = new CascadingDifferencesFilter() .getPredicateWhenSelected(); assertFalse(cascadingFilter.apply(movingNode)); EList<TreeNode> children = movingNode.getChildren(); assertEquals(2, children.size()); DiffNode diffNode = (DiffNode)children.get(0); // Checks that its child is not hidden by the filter. assertFalse(cascadingFilter.apply(diffNode)); MatchNode matchNode = (MatchNode)children.get(1); assertFalse(cascadingFilter.apply(matchNode)); assertEquals(1, matchNode.getChildren().size()); diffNode = (DiffNode)matchNode.getChildren().get(0); assertFalse(cascadingFilter.apply(diffNode)); } /** * Input data for this bug. * * @author <a href="mailto:arthur.daussy@obeo.fr">Arthur Daussy</a> */ public class Bug435365Scope extends AbstractInputData implements ResourceScopeProvider { public Resource getLeft() throws IOException { return loadFromClassLoader("data/_435365/afterMove.nodes");//$NON-NLS-1$ } public Resource getRight() throws IOException { return loadFromClassLoader("data/_435365/beforeMove.nodes");//$NON-NLS-1$ } public Resource getOrigin() throws IOException { return null; } } }