| package org.eclipse.emf.compare.ide.ui.tests.unit; |
| |
| import com.google.common.collect.ImmutableSet; |
| import com.google.common.collect.Iterables; |
| import com.google.common.collect.Sets; |
| |
| import java.util.Arrays; |
| import java.util.HashSet; |
| import java.util.LinkedHashSet; |
| import java.util.Set; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IStorage; |
| import org.eclipse.core.runtime.NullProgressMonitor; |
| import org.eclipse.emf.common.util.Diagnostic; |
| import org.eclipse.emf.common.util.URI; |
| import org.eclipse.emf.compare.graph.IGraphView; |
| import org.eclipse.emf.compare.graph.PruningIterator; |
| import org.eclipse.emf.compare.ide.ui.internal.EMFCompareIDEUIPlugin; |
| import org.eclipse.emf.compare.ide.ui.internal.logical.resolver.CrossReferenceResolutionScope; |
| import org.eclipse.emf.compare.ide.ui.internal.logical.resolver.ThreadedModelResolver; |
| import org.eclipse.emf.compare.ide.ui.internal.preferences.EMFCompareUIPreferences; |
| import org.eclipse.emf.compare.ide.ui.tests.egit.CompareGitTestCase; |
| import org.eclipse.emf.compare.ide.utils.ResourceUtil; |
| import org.eclipse.emf.compare.ide.utils.StorageTraversal; |
| import org.eclipse.emf.compare.internal.utils.Graph; |
| import org.eclipse.jface.preference.IPreferenceStore; |
| |
| /** |
| * This captures useful behaviours to facilitate the writing of test cases. |
| * |
| * @author <a href="mailto:laurent.delaigue@obeo.fr">Laurent Delaigue</a> |
| */ |
| @SuppressWarnings("restriction") |
| public class LogicalModelGraphTest extends CompareGitTestCase { |
| |
| protected ResolvingResult resolveTraversalOf(IFile file) throws Exception { |
| ThreadedModelResolver resolver = new ThreadedModelResolver(); |
| resolver.setGraph(new Graph<URI>()); |
| resolver.initialize(); |
| StorageTraversal traversal = resolver.resolveLocalModel(file, new NullProgressMonitor()); |
| Set<Set<URI>> subGraphs = getSubGraphs(resolver.getGraphView()); |
| return new ResolvingResult(subGraphs, traversal); |
| } |
| |
| protected void setResolutionScope(CrossReferenceResolutionScope scope) { |
| final IPreferenceStore store = EMFCompareIDEUIPlugin.getDefault().getPreferenceStore(); |
| store.setValue(EMFCompareUIPreferences.RESOLUTION_SCOPE_PREFERENCE, scope.name()); |
| } |
| |
| protected Set<Set<URI>> getSubGraphs(IGraphView<URI> graph) { |
| PruningIterator<URI> iterator = graph.breadthFirstIterator(); |
| Set<URI> roots = new LinkedHashSet<URI>(); |
| while (iterator.hasNext()) { |
| roots.add(iterator.next()); |
| iterator.prune(); |
| } |
| |
| Set<Set<URI>> subgraphs = new LinkedHashSet<Set<URI>>(); |
| Set<URI> knownURIs = new HashSet<URI>(); |
| for (URI root : roots) { |
| if (!knownURIs.contains(root)) { |
| Set<URI> subgraph = graph.getSubgraphContaining(root); |
| knownURIs.addAll(subgraph); |
| subgraphs.add(subgraph); |
| } |
| } |
| return subgraphs; |
| } |
| |
| public static class ExpectedResult { |
| private final Set<? extends Set<URI>> subGraphs; |
| |
| private final int diagnosticSeverity; |
| |
| private final Set<? extends IStorage> storagesInModel; |
| |
| public ExpectedResult(Set<? extends Set<URI>> subGraphs, Set<? extends IStorage> storagesInModel, |
| int diagnosticSeverity) { |
| this.subGraphs = subGraphs; |
| this.storagesInModel = storagesInModel; |
| this.diagnosticSeverity = diagnosticSeverity; |
| } |
| |
| public Set<? extends Set<URI>> getSubGraphs() { |
| return subGraphs; |
| } |
| |
| public int getDiagnosticSeverity() { |
| return diagnosticSeverity; |
| } |
| |
| public Set<? extends IStorage> getStoragesInModel() { |
| return storagesInModel; |
| } |
| } |
| |
| protected static URI resourceURI(String path) { |
| return URI.createPlatformResourceURI(path, true); |
| } |
| |
| protected static Set<URI> uriSet(IStorage... storages) { |
| return ImmutableSet.copyOf(Iterables.transform(Arrays.asList(storages), ResourceUtil.asURI())); |
| } |
| |
| protected static Set<IStorage> storageSet(IStorage... storages) { |
| return Sets.<IStorage> newLinkedHashSet(Arrays.asList(storages)); |
| } |
| |
| protected static ExpectedResult expectError(Set<? extends Set<URI>> expectedGraph, |
| Set<? extends IStorage> expectedTraversal) { |
| return new ExpectedResult(expectedGraph, expectedTraversal, Diagnostic.ERROR); |
| } |
| |
| protected static ExpectedResult expectOk(Set<? extends Set<URI>> expectedGraph, |
| Set<? extends IStorage> expectedTraversal) { |
| return new ExpectedResult(expectedGraph, expectedTraversal, Diagnostic.OK); |
| } |
| |
| public static class ResolvingResult { |
| private final Set<Set<URI>> subGraphs; |
| |
| private final StorageTraversal traversal; |
| |
| public ResolvingResult(Set<Set<URI>> subGraphs, StorageTraversal traversal) { |
| this.subGraphs = subGraphs; |
| this.traversal = traversal; |
| } |
| |
| public Set<Set<URI>> getSubGraphs() { |
| return subGraphs; |
| } |
| |
| public StorageTraversal getTraversal() { |
| return traversal; |
| } |
| } |
| } |