/*******************************************************************************
* Copyright (c) 2017 Obeo 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:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.emf.compare.rcp.ui.tests.structuremergeviewer.groups;
import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.size;
import static com.google.common.collect.Iterables.transform;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
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.ResourceAttachmentChange;
import org.eclipse.emf.compare.rcp.ui.internal.EMFCompareRCPUIMessages;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.ByResourceGroupProvider;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.DefaultGroupProvider;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.KindGroupProvider;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.ThreeWayComparisonGroupProvider;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.nodes.DiffNode;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.nodes.MatchResourceNode;
import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroup;
import org.eclipse.emf.compare.rcp.ui.tests.structuremergeviewer.groups.data.nodes.resourceattachmentchange.ResourceAttachmentChangeInGroupsInputData;
import org.eclipse.emf.compare.rcp.ui.tests.structuremergeviewer.groups.provider.AbstractTestTreeNodeItemProviderAdapter;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.tree.TreeNode;
import org.junit.Before;
import org.junit.Test;
import com.google.common.collect.Iterables;
@SuppressWarnings("restriction")
public class ResourceAttachmentChangeInGroupsTest extends AbstractTestTreeNodeItemProviderAdapter {
private Comparison comp;
@Before
public void setUp() throws Exception {
comp = getComparison(new ResourceAttachmentChangeInGroupsInputData());
}
/**
* Test that a {@link ResourceAttachmentChange} is only display once in
* {@link ThreeWayComparisonGroupProvider}. This test is related to <a
* href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=508294"</a>
*/
@Test
public void testResourceAttachmentChangeInThreeWayComparisonGroupProvider() {
ThreeWayComparisonGroupProvider threeWayComparisonGroup = new ThreeWayComparisonGroupProvider();
Collection<? extends IDifferenceGroup> groups = threeWayComparisonGroup.getGroups(comp);
assertNotNull(groups);
assertEquals(3, groups.size());
IDifferenceGroup[] groupsArray = groups.toArray(new IDifferenceGroup[3]);
// Conflicts group
IDifferenceGroup conflictsGroup = groupsArray[0];
assertEquals(EMFCompareRCPUIMessages.getString("ThreeWayComparisonGroupProvider.conflicts.label"), //$NON-NLS-1$
conflictsGroup.getName());
List<? extends TreeNode> children = conflictsGroup.getChildren();
assertEquals(0, children.size());
// Left group
IDifferenceGroup leftGroup = groupsArray[1];
assertEquals(EMFCompareRCPUIMessages.getString("ThreeWayComparisonGroupProvider.left.label"), //$NON-NLS-1$
leftGroup.getName());
children = leftGroup.getChildren();
assertEquals(2, children.size());
assertEquals(2, size(filter(children, MatchResourceNode.class)));
TreeNode fragmentMatchResourceNode = children.get(0);
EList<TreeNode> fragmentMatchResourceNodeChildren = fragmentMatchResourceNode.getChildren();
assertEquals(1, fragmentMatchResourceNodeChildren.size());
assertEquals(1, size(filter(fragmentMatchResourceNodeChildren, DiffNode.class)));
Iterable<EObject> fragmentMatchResourceNodeData = transform(fragmentMatchResourceNodeChildren,
TREE_NODE_DATA);
assertEquals(1, Iterables.size(fragmentMatchResourceNodeData));
assertEquals(1, size(filter(fragmentMatchResourceNodeData, ResourceAttachmentChange.class)));
TreeNode rootMatchResourceNode = children.get(1);
assertEquals(0, rootMatchResourceNode.getChildren().size());
// Right group
IDifferenceGroup rightGroup = groupsArray[2];
assertEquals(EMFCompareRCPUIMessages.getString("ThreeWayComparisonGroupProvider.right.label"), //$NON-NLS-1$
rightGroup.getName());
children = rightGroup.getChildren();
assertEquals(2, children.size());
assertEquals(2, size(filter(children, MatchResourceNode.class)));
for (TreeNode treeNode : children) {
children = treeNode.getChildren();
assertEquals(0, children.size());
}
}
/**
* Test that a {@link ResourceAttachmentChange} is only display once in {@link DefaultGroupProvider}. This
* test is related to <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=508294"</a>
*/
@Test
public void testResourceAttachmentChangeInDefaultComparisonGroupProvider() {
DefaultGroupProvider defaultComparisonGroup = new DefaultGroupProvider();
Collection<? extends IDifferenceGroup> groups = defaultComparisonGroup.getGroups(comp);
assertNotNull(groups);
assertEquals(1, groups.size());
IDifferenceGroup defaultGroup = groups.iterator().next();
List<? extends TreeNode> children = defaultGroup.getChildren();
assertEquals(2, children.size());
assertEquals(2, size(filter(children, MatchResourceNode.class)));
TreeNode fragmentMatchResourceNode = children.get(0);
EList<TreeNode> fragmentMatchResourceNodeChildren = fragmentMatchResourceNode.getChildren();
assertEquals(1, fragmentMatchResourceNodeChildren.size());
assertEquals(1, size(filter(fragmentMatchResourceNodeChildren, DiffNode.class)));
Iterable<EObject> fragmentMatchResourceNodeData = transform(fragmentMatchResourceNodeChildren,
TREE_NODE_DATA);
assertEquals(1, Iterables.size(fragmentMatchResourceNodeData));
assertEquals(1, size(filter(fragmentMatchResourceNodeData, ResourceAttachmentChange.class)));
TreeNode rootMatchResourceNode = children.get(1);
assertEquals(0, rootMatchResourceNode.getChildren().size());
}
/**
* Test that a {@link ResourceAttachmentChange} is only display once in {@link KindGroupProvider}. This
* test is related to <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=508294"</a>
*/
@Test
public void testResourceAttachmentChangeInByKindComparisonGroupProvider() {
KindGroupProvider kindComparisonGroup = new KindGroupProvider();
Collection<? extends IDifferenceGroup> groups = kindComparisonGroup.getGroups(comp);
assertNotNull(groups);
assertEquals(4, groups.size());
IDifferenceGroup[] groupsArray = groups.toArray(new IDifferenceGroup[4]);
// Addition group
IDifferenceGroup additionGroup = groupsArray[0];
assertEquals(EMFCompareRCPUIMessages.getString("KindGroupProvider.addition.label"), //$NON-NLS-1$
additionGroup.getName());
List<? extends TreeNode> children = additionGroup.getChildren();
assertEquals(2, children.size());
assertEquals(2, size(filter(children, MatchResourceNode.class)));
for (TreeNode treeNode : children) {
children = treeNode.getChildren();
assertEquals(0, children.size());
}
// Deletion group
IDifferenceGroup deletionGroup = groupsArray[1];
assertEquals(EMFCompareRCPUIMessages.getString("KindGroupProvider.deletion.label"), //$NON-NLS-1$
deletionGroup.getName());
children = deletionGroup.getChildren();
assertEquals(2, children.size());
assertEquals(2, size(filter(children, MatchResourceNode.class)));
TreeNode fragmentMatchResourceNode = children.get(0);
EList<TreeNode> fragmentMatchResourceNodeChildren = fragmentMatchResourceNode.getChildren();
assertEquals(1, fragmentMatchResourceNodeChildren.size());
assertEquals(1, size(filter(fragmentMatchResourceNodeChildren, DiffNode.class)));
Iterable<EObject> fragmentMatchResourceNodeData = transform(fragmentMatchResourceNodeChildren,
TREE_NODE_DATA);
assertEquals(1, Iterables.size(fragmentMatchResourceNodeData));
assertEquals(1, size(filter(fragmentMatchResourceNodeData, ResourceAttachmentChange.class)));
TreeNode rootMatchResourceNode = children.get(1);
assertEquals(0, rootMatchResourceNode.getChildren().size());
// Change group
IDifferenceGroup changeGroup = groupsArray[2];
assertEquals(EMFCompareRCPUIMessages.getString("KindGroupProvider.change.label"), //$NON-NLS-1$
changeGroup.getName());
children = changeGroup.getChildren();
assertEquals(2, children.size());
assertEquals(2, size(filter(children, MatchResourceNode.class)));
for (TreeNode treeNode : children) {
children = treeNode.getChildren();
assertEquals(0, children.size());
}
// Move group
IDifferenceGroup moveGroup = groupsArray[3];
assertEquals(EMFCompareRCPUIMessages.getString("KindGroupProvider.move.label"), //$NON-NLS-1$
moveGroup.getName());
children = moveGroup.getChildren();
assertEquals(2, children.size());
assertEquals(2, size(filter(children, MatchResourceNode.class)));
for (TreeNode treeNode : children) {
children = treeNode.getChildren();
assertEquals(0, children.size());
}
}
/**
* Test that a {@link ResourceAttachmentChange} is only display once in {@link ByResourceGroupProvider}.
* This test is related to <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=508294"</a>
*/
@Test
public void testResourceAttachmentChangeInByResourceComparisonGroupProvider() {
ByResourceGroupProvider resourceComparisonGroup = new ByResourceGroupProvider();
Collection<? extends IDifferenceGroup> groups = resourceComparisonGroup.getGroups(comp);
assertNotNull(groups);
assertEquals(1, groups.size());
IDifferenceGroup byResourceGroup = groups.iterator().next();
List<? extends TreeNode> children = byResourceGroup.getChildren();
assertEquals(2, children.size());
assertEquals(2, size(filter(children, MatchResourceNode.class)));
TreeNode fragmentMatchResourceNode = children.get(0);
EList<TreeNode> fragmentMatchResourceNodeChildren = fragmentMatchResourceNode.getChildren();
assertEquals(1, fragmentMatchResourceNodeChildren.size());
assertEquals(1, size(filter(fragmentMatchResourceNodeChildren, DiffNode.class)));
Iterable<EObject> fragmentMatchResourceNodeData = transform(fragmentMatchResourceNodeChildren,
TREE_NODE_DATA);
assertEquals(1, Iterables.size(fragmentMatchResourceNodeData));
assertEquals(1, size(filter(fragmentMatchResourceNodeData, ResourceAttachmentChange.class)));
TreeNode rootMatchResourceNode = children.get(1);
assertEquals(0, rootMatchResourceNode.getChildren().size());
}
}