/*******************************************************************************
* Copyright (c) 2013 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.groups.provider;
import static com.google.common.base.Predicates.instanceOf;
import static com.google.common.collect.Iterables.all;
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.assertTrue;
import java.io.IOException;
import java.util.Collection;
import org.eclipse.emf.compare.Comparison;
import org.eclipse.emf.compare.Diff;
import org.eclipse.emf.compare.Match;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.DefaultGroupProvider;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.provider.TreeNodeItemProviderSpec;
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.tests.edit.data.ecore.a1.EcoreA1InputData;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.tree.TreeFactory;
import org.eclipse.emf.edit.tree.TreeNode;
import org.junit.Before;
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 TestMatchTreeNodeItemProviderSpec extends AbstractTestTreeNodeItemProviderAdapter {
private static TreeNodeItemProviderSpec itemProvider;
@Override
@Before
public void before() throws IOException {
super.before();
itemProvider = (TreeNodeItemProviderSpec)treeItemProviderAdapterFactory.createTreeNodeAdapter();
}
@Test
public void testGetChildren_EcoreA1() throws IOException {
TreeNode ePackageMatch = getEcoreA1_EPackageMatch();
Collection<?> ePackageMatchChildren = ePackageMatch.getChildren();
assertEquals(10, ePackageMatchChildren.size());
assertTrue(all(ePackageMatchChildren, instanceOf(MatchNode.class)));
Iterable<EObject> ePackageData = transform(ePackageMatchChildren, TREE_NODE_DATA);
assertEquals(10, size(filter(ePackageData, Match.class)));
}
static TreeNode getEcoreA1_EPackageMatch() throws IOException {
Comparison comparison = getComparison(new EcoreA1InputData());
TreeNode treeNode = TreeFactory.eINSTANCE.createTreeNode();
treeNode.setData(comparison);
treeNode.eAdapters().add(new DefaultGroupProvider());
Collection<?> children = itemProvider.getChildren(treeNode);
Iterable<?> matches = filter(children, matchTreeNode);
return (TreeNode)matches.iterator().next();
}
static Predicate<Object> matchTreeNode = new Predicate<Object>() {
public boolean apply(Object object) {
if (object instanceof TreeNode) {
EObject data = ((TreeNode)object).getData();
if (data instanceof Match) {
return true;
}
}
return false;
}
};
@Test
public void testGetChildren_AudioVisualItem() throws IOException {
TreeNode ePackageMatch = getEcoreA1_EPackageMatch();
Collection<TreeNode> ePackage_MatchChildren = ePackageMatch.getChildren();
Iterable<EObject> ePackageData = transform(ePackage_MatchChildren, TREE_NODE_DATA);
Match audioVisualItem_Match = getMatchWithFeatureValue(ePackageData, "name", "AudioVisualItem");
TreeNode audioVisualItem_Match_Node = getTreeNode(ePackageMatch, audioVisualItem_Match);
Collection<?> audioVisualItem_MatchChildren = audioVisualItem_Match_Node.getChildren();
assertEquals(3, audioVisualItem_MatchChildren.size());
Iterable<EObject> audioData = transform(audioVisualItem_MatchChildren, TREE_NODE_DATA);
assertEquals(1, size(filter(audioData, Diff.class)));
assertEquals(2, size(filter(audioData, Match.class)));
}
@Test
public void testGetChildren_AudioVisualItem_length() throws IOException {
TreeNode ePackageMatch = getEcoreA1_EPackageMatch();
Collection<?> ePackage_MatchChildren = ePackageMatch.getChildren();
Iterable<EObject> ePackageData = transform(ePackage_MatchChildren, TREE_NODE_DATA);
Match audioVisualItem_Match = getMatchWithFeatureValue(ePackageData, "name", "AudioVisualItem");
TreeNode audioVisualItem_Match_Node = getTreeNode(ePackageMatch, audioVisualItem_Match);
Collection<?> audioVisualItem_MatchChildren = audioVisualItem_Match_Node.getChildren();
Iterable<EObject> audioData = transform(audioVisualItem_MatchChildren, TREE_NODE_DATA);
Match audioVisualItem_length_Match = getMatchWithFeatureValue(audioData, "name", "length");
TreeNode audioLengthTreeNode = getTreeNode(audioVisualItem_Match_Node, audioVisualItem_length_Match);
Collection<?> audioVisualItem_length_MatchChildren = itemProvider.getChildren(audioLengthTreeNode);
assertEquals(2, audioVisualItem_length_MatchChildren.size());
assertTrue(all(audioVisualItem_length_MatchChildren, instanceOf(DiffNode.class)));
Iterable<EObject> audioLengthData = transform(audioVisualItem_length_MatchChildren, TREE_NODE_DATA);
assertEquals(2, size(filter(audioLengthData, Diff.class)));
assertEquals(0, size(filter(audioLengthData, Match.class)));
}
@Test
public void testGetChildren_Book() throws IOException {
TreeNode ePackageMatch = getEcoreA1_EPackageMatch();
Collection<?> ePackage_MatchChildren = ePackageMatch.getChildren();
Iterable<EObject> ePackage_MatchChildrenData = transform(ePackage_MatchChildren, TREE_NODE_DATA);
Match book_Match = getMatchWithFeatureValue(ePackage_MatchChildrenData, "name", "Book");
TreeNode book_Match_Node = getTreeNode(ePackageMatch, book_Match);
Collection<?> book_MatchChildren = book_Match_Node.getChildren();
assertEquals(3, book_MatchChildren.size());
Iterable<EObject> book_MatchChildrenData = transform(book_MatchChildren, TREE_NODE_DATA);
assertEquals(1, size(filter(book_MatchChildrenData, Diff.class)));
assertEquals(2, size(filter(book_MatchChildrenData, Match.class)));
}
@Test
public void testGetChildren_BookCategory() throws IOException {
TreeNode ePackageMatch = getEcoreA1_EPackageMatch();
Collection<?> ePackage_MatchChildren = ePackageMatch.getChildren();
Iterable<EObject> ePackage_MatchChildrenData = transform(ePackage_MatchChildren, TREE_NODE_DATA);
Match bookCategory_Match = getMatchWithFeatureValue(ePackage_MatchChildrenData, "name",
"BookCategory");
TreeNode bookCategory_Match_Node = getTreeNode(ePackageMatch, bookCategory_Match);
Collection<? extends TreeNode> bookCategory_MatchChildren = bookCategory_Match_Node.getChildren();
assertEquals(4, bookCategory_MatchChildren.size());
assertTrue(all(bookCategory_MatchChildren, instanceOf(MatchNode.class)));
Iterable<EObject> bookCategory_MatchChildrenData = transform(bookCategory_MatchChildren,
TREE_NODE_DATA);
assertEquals(4, size(filter(bookCategory_MatchChildrenData, Match.class)));
for (TreeNode matchNode : bookCategory_MatchChildren) {
assertEquals(1, matchNode.getChildren().size());
}
}
@Test
public void testGetChildren_Borrowable() throws IOException {
TreeNode ePackageMatch = getEcoreA1_EPackageMatch();
Collection<?> ePackage_MatchChildren = ePackageMatch.getChildren();
Iterable<EObject> ePackage_MatchChildrenData = transform(ePackage_MatchChildren, TREE_NODE_DATA);
Match borrowable_Match = getMatchWithFeatureValue(ePackage_MatchChildrenData, "name", "Borrowable");
TreeNode borrowable_Match_Node = getTreeNode(ePackageMatch, borrowable_Match);
Collection<? extends TreeNode> borrowable_MatchChildren = borrowable_Match_Node.getChildren();
assertEquals(1, borrowable_MatchChildren.size());
Iterable<EObject> borrowable_MatchChildrenData = transform(borrowable_MatchChildren, TREE_NODE_DATA);
assertEquals(1, size(filter(borrowable_MatchChildrenData, Diff.class)));
}
@Test
public void testGetChildren_Person() throws IOException {
TreeNode ePackageMatch = getEcoreA1_EPackageMatch();
Collection<?> ePackage_MatchChildren = ePackageMatch.getChildren();
Iterable<EObject> ePackage_MatchChildrenData = transform(ePackage_MatchChildren, TREE_NODE_DATA);
Match person_Match = getMatchWithFeatureValue(ePackage_MatchChildrenData, "name", "Person");
TreeNode person_Match_Node = getTreeNode(ePackageMatch, person_Match);
Collection<? extends TreeNode> person_MatchChildren = person_Match_Node.getChildren();
assertEquals(3, person_MatchChildren.size());
Iterable<EObject> person_MatchChildrenData = transform(person_MatchChildren, TREE_NODE_DATA);
assertEquals(3, size(filter(person_MatchChildrenData, Match.class)));
}
}