| /******************************************************************************* |
| * Copyright (c) 2015 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 |
| *******************************************************************************/ |
| package org.eclipse.emf.compare.ide.ui.tests.unit; |
| |
| import static org.eclipse.emf.compare.ide.ui.internal.logical.resolver.CrossReferenceResolutionScope.CONTAINER; |
| import static org.eclipse.emf.compare.ide.ui.internal.logical.resolver.CrossReferenceResolutionScope.PROJECT; |
| import static org.eclipse.emf.compare.ide.ui.internal.logical.resolver.CrossReferenceResolutionScope.WORKSPACE; |
| import static org.eclipse.emf.compare.ide.ui.internal.logical.resolver.CrossReferenceResolutionScope.OUTGOING; |
| import static org.eclipse.emf.compare.ide.ui.internal.logical.resolver.CrossReferenceResolutionScope.SELF; |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertTrue; |
| |
| import java.io.ByteArrayInputStream; |
| import java.io.File; |
| import java.io.InputStream; |
| import java.util.Arrays; |
| import java.util.Collections; |
| import java.util.HashSet; |
| import java.util.LinkedHashSet; |
| import java.util.List; |
| import java.util.Scanner; |
| import java.util.Set; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.resources.IStorage; |
| import org.eclipse.core.resources.mapping.ModelProvider; |
| 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.ide.ui.internal.EMFCompareIDEUIPlugin; |
| import org.eclipse.emf.compare.ide.ui.internal.logical.EMFModelProvider; |
| 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.ui.tests.workspace.TestProject; |
| import org.eclipse.emf.compare.ide.utils.ResourceUtil; |
| import org.eclipse.emf.compare.ide.utils.StorageTraversal; |
| import org.eclipse.emf.compare.internal.utils.PruningIterator; |
| import org.eclipse.emf.compare.internal.utils.ReadOnlyGraph; |
| import org.eclipse.emf.ecore.resource.Resource; |
| import org.eclipse.emf.ecore.resource.ResourceSet; |
| import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; |
| import org.eclipse.jface.preference.IPreferenceStore; |
| import org.junit.After; |
| import org.junit.Before; |
| import org.junit.Test; |
| |
| import com.google.common.collect.ImmutableSet; |
| import com.google.common.collect.Iterables; |
| import com.google.common.collect.Sets; |
| |
| /* |
| * basic model setup will be one package containing two classes, from which we'll create cross-references through the 'suertypes' feature. |
| * the model with error preventing its loading will be created by manually modifying a file containing a "basic model" as above to break a metaclass name. |
| */ |
| public class ModelResolverTest extends CompareGitTestCase { |
| private static final String PROJECT2_NAME = "Project-2"; |
| |
| private static final String FILE1_NAME = "file1.ecore"; |
| |
| private static final String FILE2_NAME = "file2.ecore"; |
| |
| private static final String FILE3_NAME = "file3.ecore"; |
| |
| private static final String FILE4_NAME = "file4.ecore"; |
| |
| private static final String FILE1_SUFFIX = "_file1"; |
| |
| private static final String FILE2_SUFFIX = "_file2"; |
| |
| private static final String FILE3_SUFFIX = "_file3"; |
| |
| private static final String FILE4_SUFFIX = "_file4"; |
| |
| private TestProject project2; |
| |
| private IFile iFile1; |
| |
| private IFile iFile2; |
| |
| private IFile iFile3; |
| |
| private IFile iFile4; |
| |
| private CrossReferenceResolutionScope originalResolutionScope; |
| |
| @Override |
| @Before |
| public void setUp() throws Exception { |
| final IPreferenceStore store = EMFCompareIDEUIPlugin.getDefault().getPreferenceStore(); |
| final String stringValue = store.getString(EMFCompareUIPreferences.RESOLUTION_SCOPE_PREFERENCE); |
| originalResolutionScope = CrossReferenceResolutionScope.valueOf(stringValue); |
| |
| project2 = new TestProject(PROJECT2_NAME); |
| |
| super.setUp(); |
| } |
| |
| @Override |
| @After |
| public void tearDown() throws Exception { |
| final EMFModelProvider emfModelProvider = (EMFModelProvider)ModelProvider.getModelProviderDescriptor(EMFModelProvider.PROVIDER_ID).getModelProvider(); |
| emfModelProvider.clear(); |
| setResolutionScope(originalResolutionScope); |
| iFile1 = null; |
| iFile2 = null; |
| project2.dispose(); |
| super.tearDown(); |
| } |
| |
| private void setResolutionScope(CrossReferenceResolutionScope scope) { |
| final IPreferenceStore store = EMFCompareIDEUIPlugin.getDefault().getPreferenceStore(); |
| store.setValue(EMFCompareUIPreferences.RESOLUTION_SCOPE_PREFERENCE, scope.name()); |
| } |
| |
| private List<IFile> setUpCase1() throws Exception { |
| final IProject iProject = project.getProject(); |
| final ResourceSet resourceSet = new ResourceSetImpl(); |
| |
| final File file1 = project.getOrCreateFile(iProject, FILE1_NAME); |
| final File file2 = project.getOrCreateFile(iProject, FILE2_NAME); |
| iFile1 = project.getIFile(iProject, file1); |
| iFile2 = project.getIFile(iProject, file2); |
| |
| final Resource resource1 = connectResource(iFile1, resourceSet); |
| final Resource resource2 = connectResource(iFile2, resourceSet); |
| |
| resource1.getContents().add(createBasicModel(FILE1_SUFFIX)); |
| resource2.getContents().add(createBasicModel(FILE2_SUFFIX)); |
| |
| save(resourceSet); |
| |
| breakModel(iFile2); |
| |
| return Arrays.asList(iFile1, iFile2); |
| } |
| |
| @Test |
| public void test_case1_workspace_project_container() throws Exception { |
| List<IFile> files = setUpCase1(); |
| assertEquals(2, files.size()); |
| |
| Set<? extends Set<URI>> expectedGraph = ImmutableSet.of(uriSet(iFile1), uriSet(iFile2)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedGraph, expectedFile1Traversal, Diagnostic.ERROR); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedGraph, expectedFile2Traversal, Diagnostic.ERROR); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(WORKSPACE, PROJECT, CONTAINER)) { |
| setResolutionScope(scope); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result); |
| } |
| } |
| |
| @Test |
| public void test_case1_outgoing_self() throws Exception { |
| List<IFile> files = setUpCase1(); |
| assertEquals(2, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.ERROR); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(OUTGOING, SELF)) { |
| setResolutionScope(scope); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result); |
| } |
| } |
| |
| private List<IFile> setUpCase2() throws Exception { |
| final IProject iProject = project.getProject(); |
| final ResourceSet resourceSet = new ResourceSetImpl(); |
| |
| final File file1 = project.getOrCreateFile(iProject, FILE1_NAME); |
| final File file2 = project.getOrCreateFile(iProject, FILE2_NAME); |
| iFile1 = project.getIFile(iProject, file1); |
| iFile2 = project.getIFile(iProject, file2); |
| |
| final Resource resource1 = connectResource(iFile1, resourceSet); |
| final Resource resource2 = connectResource(iFile2, resourceSet); |
| |
| resource1.getContents().add(createBasicModel(FILE1_SUFFIX)); |
| resource2.getContents().add(createBasicModel(FILE2_SUFFIX)); |
| |
| makeCrossReference(resource1, resource2); |
| |
| save(resourceSet); |
| |
| breakModel(iFile2); |
| |
| return Arrays.asList(iFile1, iFile2); |
| } |
| |
| @Test |
| public void test_case2_workspace_project_container() throws Exception { |
| List<IFile> files = setUpCase2(); |
| assertEquals(2, files.size()); |
| |
| Set<? extends Set<URI>> expectedGraph = ImmutableSet.of(uriSet(iFile1, iFile2)); |
| Set<IStorage> expectedTraversal = storageSet(iFile1, iFile2); |
| ExpectedResult expectedResult = new ExpectedResult(expectedGraph, expectedTraversal, Diagnostic.ERROR); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(WORKSPACE, PROJECT, CONTAINER)) { |
| setResolutionScope(scope); |
| resolveAndCheckResult(files, expectedResult, expectedResult); |
| } |
| } |
| |
| @Test |
| public void test_case2_outgoing() throws Exception { |
| List<IFile> files = setUpCase2(); |
| assertEquals(2, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1, iFile2)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.ERROR); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.ERROR); |
| |
| setResolutionScope(OUTGOING); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result); |
| } |
| |
| @Test |
| public void test_case2_self() throws Exception { |
| List<IFile> files = setUpCase2(); |
| assertEquals(2, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.ERROR); |
| |
| setResolutionScope(SELF); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result); |
| } |
| |
| private List<IFile> setUpCase3() throws Exception { |
| final IProject iProject = project.getProject(); |
| final ResourceSet resourceSet = new ResourceSetImpl(); |
| |
| final File file1 = project.getOrCreateFile(iProject, FILE1_NAME); |
| final File file2 = project.getOrCreateFile(iProject, FILE2_NAME); |
| iFile1 = project.getIFile(iProject, file1); |
| iFile2 = project.getIFile(iProject, file2); |
| |
| final Resource resource1 = connectResource(iFile1, resourceSet); |
| final Resource resource2 = connectResource(iFile2, resourceSet); |
| |
| resource1.getContents().add(createBasicModel(FILE1_SUFFIX)); |
| resource2.getContents().add(createBasicModel(FILE2_SUFFIX)); |
| |
| save(resourceSet); |
| |
| return Arrays.asList(iFile1, iFile2); |
| } |
| |
| @Test |
| public void test_case3_workspace_project_container() throws Exception { |
| List<IFile> files = setUpCase3(); |
| assertEquals(2, files.size()); |
| |
| Set<? extends Set<URI>> expectedGraph = ImmutableSet.of(uriSet(iFile1), uriSet(iFile2)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedGraph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedGraph, expectedFile2Traversal, Diagnostic.OK); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(WORKSPACE, PROJECT, CONTAINER)) { |
| setResolutionScope(scope); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result); |
| } |
| } |
| |
| @Test |
| public void test_case3_outgoing_self() throws Exception { |
| List<IFile> files = setUpCase3(); |
| assertEquals(2, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(OUTGOING, SELF)) { |
| setResolutionScope(scope); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result); |
| } |
| } |
| |
| private List<IFile> setUpCase4() throws Exception { |
| final IProject iProject = project.getProject(); |
| final ResourceSet resourceSet = new ResourceSetImpl(); |
| |
| final File file1 = project.getOrCreateFile(iProject, FILE1_NAME); |
| final File file2 = project.getOrCreateFile(iProject, FILE2_NAME); |
| iFile1 = project.getIFile(iProject, file1); |
| iFile2 = project.getIFile(iProject, file2); |
| |
| final Resource resource1 = connectResource(iFile1, resourceSet); |
| final Resource resource2 = connectResource(iFile2, resourceSet); |
| |
| resource1.getContents().add(createBasicModel(FILE1_SUFFIX)); |
| resource2.getContents().add(createBasicModel(FILE2_SUFFIX)); |
| |
| makeCrossReference(resource1, resource2); |
| |
| save(resourceSet); |
| |
| return Arrays.asList(iFile1, iFile2); |
| } |
| |
| @Test |
| public void test_case4_workspace_project_container() throws Exception { |
| List<IFile> files = setUpCase4(); |
| assertEquals(2, files.size()); |
| |
| Set<? extends Set<URI>> expectedGraph = ImmutableSet.of(uriSet(iFile1, iFile2)); |
| Set<IStorage> expectedTraversal = storageSet(iFile1, iFile2); |
| ExpectedResult expectedResult = new ExpectedResult(expectedGraph, expectedTraversal, Diagnostic.OK); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(WORKSPACE, PROJECT, CONTAINER)) { |
| setResolutionScope(scope); |
| resolveAndCheckResult(files, expectedResult, expectedResult); |
| } |
| } |
| |
| @Test |
| public void test_case4_outgoing() throws Exception { |
| List<IFile> files = setUpCase4(); |
| assertEquals(2, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1, iFile2)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| |
| setResolutionScope(OUTGOING); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result); |
| } |
| |
| @Test |
| public void test_case4_self() throws Exception { |
| List<IFile> files = setUpCase4(); |
| assertEquals(2, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| |
| setResolutionScope(SELF); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result); |
| } |
| |
| private List<IFile> setUpCase5() throws Exception { |
| final IProject iProject1 = project.getProject(); |
| final IProject iProject2 = project2.getProject(); |
| final ResourceSet resourceSet = new ResourceSetImpl(); |
| |
| final File file1 = project.getOrCreateFile(iProject1, FILE1_NAME); |
| final File file2 = project.getOrCreateFile(iProject2, FILE2_NAME); |
| iFile1 = project.getIFile(iProject1, file1); |
| iFile2 = project2.getIFile(iProject2, file2); |
| |
| final Resource resource1 = connectResource(iFile1, resourceSet); |
| final Resource resource2 = connectResource(iFile2, resourceSet); |
| |
| resource1.getContents().add(createBasicModel(FILE1_SUFFIX)); |
| resource2.getContents().add(createBasicModel(FILE2_SUFFIX)); |
| |
| save(resourceSet); |
| |
| breakModel(iFile2); |
| |
| return Arrays.asList(iFile1, iFile2); |
| } |
| |
| @Test |
| public void test_case5_workspace() throws Exception { |
| List<IFile> files = setUpCase5(); |
| assertEquals(2, files.size()); |
| |
| Set<? extends Set<URI>> expectedGraph = ImmutableSet.of(uriSet(iFile1),uriSet(iFile2)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedGraph, expectedFile1Traversal, Diagnostic.ERROR); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedGraph, expectedFile2Traversal, Diagnostic.ERROR); |
| |
| setResolutionScope(WORKSPACE); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result); |
| } |
| |
| @Test |
| public void test_case5_project_container_outgoing_self() throws Exception { |
| List<IFile> files = setUpCase5(); |
| assertEquals(2, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.ERROR); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(PROJECT, CONTAINER, OUTGOING, SELF)) { |
| setResolutionScope(scope); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result); |
| } |
| } |
| |
| private List<IFile> setUpCase6() throws Exception { |
| final IProject iProject1 = project.getProject(); |
| final IProject iProject2 = project2.getProject(); |
| final ResourceSet resourceSet = new ResourceSetImpl(); |
| |
| final File file1 = project.getOrCreateFile(iProject1, FILE1_NAME); |
| final File file2 = project.getOrCreateFile(iProject2, FILE2_NAME); |
| iFile1 = project.getIFile(iProject1, file1); |
| iFile2 = project2.getIFile(iProject2, file2); |
| |
| final Resource resource1 = connectResource(iFile1, resourceSet); |
| final Resource resource2 = connectResource(iFile2, resourceSet); |
| |
| resource1.getContents().add(createBasicModel(FILE1_SUFFIX)); |
| resource2.getContents().add(createBasicModel(FILE2_SUFFIX)); |
| |
| makeCrossReference(resource1, resource2); |
| |
| save(resourceSet); |
| |
| breakModel(iFile2); |
| |
| return Arrays.asList(iFile1, iFile2); |
| } |
| |
| @Test |
| public void test_case6_workspace() throws Exception { |
| List<IFile> files = setUpCase6(); |
| assertEquals(2, files.size()); |
| |
| Set<? extends Set<URI>> expectedGraph = ImmutableSet.of(uriSet(iFile1, iFile2)); |
| Set<IStorage> expectedTraversal = storageSet(iFile1, iFile2); |
| ExpectedResult expectedResult = new ExpectedResult(expectedGraph, expectedTraversal, Diagnostic.ERROR); |
| |
| setResolutionScope(WORKSPACE); |
| resolveAndCheckResult(files, expectedResult, expectedResult); |
| } |
| |
| @Test |
| public void test_case6_project_container_self() throws Exception { |
| List<IFile> files = setUpCase6(); |
| assertEquals(2, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.ERROR); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(PROJECT, CONTAINER, SELF)) { |
| setResolutionScope(scope); |
| // FIXME fails for now. The reference is resolved in modes PROJECT and CONTAINER |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result); |
| } |
| } |
| |
| @Test |
| public void test_case6_outgoing() throws Exception { |
| List<IFile> files = setUpCase6(); |
| assertEquals(2, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1, iFile2)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.ERROR); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.ERROR); |
| |
| setResolutionScope(OUTGOING); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result); |
| } |
| |
| private List<IFile> setUpCase7() throws Exception { |
| final IProject iProject1 = project.getProject(); |
| final IProject iProject2 = project2.getProject(); |
| final ResourceSet resourceSet = new ResourceSetImpl(); |
| |
| final File file1 = project.getOrCreateFile(iProject1, FILE1_NAME); |
| final File file2 = project.getOrCreateFile(iProject2, FILE2_NAME); |
| iFile1 = project.getIFile(iProject1, file1); |
| iFile2 = project2.getIFile(iProject2, file2); |
| |
| final Resource resource1 = connectResource(iFile1, resourceSet); |
| final Resource resource2 = connectResource(iFile2, resourceSet); |
| |
| resource1.getContents().add(createBasicModel(FILE1_SUFFIX)); |
| resource2.getContents().add(createBasicModel(FILE2_SUFFIX)); |
| |
| save(resourceSet); |
| |
| return Arrays.asList(iFile1, iFile2); |
| } |
| |
| @Test |
| public void test_case7_workspace() throws Exception { |
| List<IFile> files = setUpCase7(); |
| assertEquals(2, files.size()); |
| |
| Set<? extends Set<URI>> expectedGraph = ImmutableSet.of(uriSet(iFile1),uriSet(iFile2)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedGraph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedGraph, expectedFile2Traversal, Diagnostic.OK); |
| |
| setResolutionScope(WORKSPACE); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result); |
| } |
| |
| @Test |
| public void test_case7_project_container_outgoing_self() throws Exception { |
| List<IFile> files = setUpCase7(); |
| assertEquals(2, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(PROJECT, CONTAINER, OUTGOING, SELF)) { |
| setResolutionScope(scope); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result); |
| } |
| } |
| |
| private List<IFile> setUpCase8() throws Exception { |
| final IProject iProject1 = project.getProject(); |
| final IProject iProject2 = project2.getProject(); |
| final ResourceSet resourceSet = new ResourceSetImpl(); |
| |
| final File file1 = project.getOrCreateFile(iProject1, FILE1_NAME); |
| final File file2 = project.getOrCreateFile(iProject2, FILE2_NAME); |
| iFile1 = project.getIFile(iProject1, file1); |
| iFile2 = project2.getIFile(iProject2, file2); |
| |
| final Resource resource1 = connectResource(iFile1, resourceSet); |
| final Resource resource2 = connectResource(iFile2, resourceSet); |
| |
| resource1.getContents().add(createBasicModel(FILE1_SUFFIX)); |
| resource2.getContents().add(createBasicModel(FILE2_SUFFIX)); |
| |
| makeCrossReference(resource1, resource2); |
| |
| save(resourceSet); |
| |
| return Arrays.asList(iFile1, iFile2); |
| } |
| |
| @Test |
| public void test_case8_workspace() throws Exception { |
| List<IFile> files = setUpCase8(); |
| assertEquals(2, files.size()); |
| |
| Set<? extends Set<URI>> expectedGraph = ImmutableSet.of(uriSet(iFile1, iFile2)); |
| Set<IStorage> expectedTraversal = storageSet(iFile1, iFile2); |
| ExpectedResult expectedResult = new ExpectedResult(expectedGraph, expectedTraversal, Diagnostic.OK); |
| |
| setResolutionScope(WORKSPACE); |
| resolveAndCheckResult(files, expectedResult, expectedResult); |
| } |
| |
| @Test |
| public void test_case8_project_container_self() throws Exception { |
| List<IFile> files = setUpCase8(); |
| assertEquals(2, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.ERROR); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(PROJECT, CONTAINER, SELF)) { |
| setResolutionScope(scope); |
| // FIXME fails : the reference is resolved anyway in modes PROJECT and CONTAINER. |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result); |
| } |
| } |
| |
| @Test |
| public void test_case8_outgoing() throws Exception { |
| List<IFile> files = setUpCase8(); |
| assertEquals(2, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1, iFile2)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| |
| setResolutionScope(OUTGOING); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result); |
| } |
| |
| private List<IFile> setUpCase9() throws Exception { |
| final IProject iProject1 = project.getProject(); |
| final ResourceSet resourceSet = new ResourceSetImpl(); |
| |
| final File file1 = project.getOrCreateFile(iProject1, FILE1_NAME); |
| final File file2 = project.getOrCreateFile(iProject1, FILE2_NAME); |
| final File file3 = project.getOrCreateFile(iProject1, FILE3_NAME); |
| iFile1 = project.getIFile(iProject1, file1); |
| iFile2 = project.getIFile(iProject1, file2); |
| iFile3 = project.getIFile(iProject1, file3); |
| |
| final Resource resource1 = connectResource(iFile1, resourceSet); |
| final Resource resource2 = connectResource(iFile2, resourceSet); |
| final Resource resource3 = connectResource(iFile3, resourceSet); |
| |
| resource1.getContents().add(createBasicModel(FILE1_SUFFIX)); |
| resource2.getContents().add(createBasicModel(FILE2_SUFFIX)); |
| resource3.getContents().add(createBasicModel(FILE3_SUFFIX)); |
| |
| makeCrossReference(resource1, resource2); |
| |
| save(resourceSet); |
| |
| breakModel(iFile3); |
| |
| return Arrays.asList(iFile1, iFile2, iFile3); |
| } |
| |
| @Test |
| public void test_case9_workspace_project_container() throws Exception { |
| List<IFile> files = setUpCase9(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedGraph = ImmutableSet.of(uriSet(iFile1, iFile2), uriSet(iFile3)); |
| Set<IStorage> expectedFile1Or2Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Or2Result = new ExpectedResult(expectedGraph, expectedFile1Or2Traversal, Diagnostic.ERROR); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedGraph, expectedFile3Traversal, Diagnostic.ERROR); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(WORKSPACE, PROJECT, CONTAINER)) { |
| setResolutionScope(scope); |
| resolveAndCheckResult(files, expectedFile1Or2Result, expectedFile1Or2Result, expectedFile3Result); |
| } |
| } |
| |
| @Test |
| public void test_case9_outgoing() throws Exception { |
| List<IFile> files = setUpCase9(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1,iFile2)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.ERROR); |
| |
| setResolutionScope(OUTGOING); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result); |
| } |
| |
| @Test |
| public void test_case9_self() throws Exception { |
| List<IFile> files = setUpCase9(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.ERROR); |
| |
| setResolutionScope(SELF); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result); |
| } |
| |
| private List<IFile> setUpCase10() throws Exception { |
| final IProject iProject1 = project.getProject(); |
| final ResourceSet resourceSet = new ResourceSetImpl(); |
| |
| final File file1 = project.getOrCreateFile(iProject1, FILE1_NAME); |
| final File file2 = project.getOrCreateFile(iProject1, FILE2_NAME); |
| final File file3 = project.getOrCreateFile(iProject1, FILE3_NAME); |
| iFile1 = project.getIFile(iProject1, file1); |
| iFile2 = project.getIFile(iProject1, file2); |
| iFile3 = project.getIFile(iProject1, file3); |
| |
| final Resource resource1 = connectResource(iFile1, resourceSet); |
| final Resource resource2 = connectResource(iFile2, resourceSet); |
| final Resource resource3 = connectResource(iFile3, resourceSet); |
| |
| resource1.getContents().add(createBasicModel(FILE1_SUFFIX)); |
| resource2.getContents().add(createBasicModel(FILE2_SUFFIX)); |
| resource3.getContents().add(createBasicModel(FILE3_SUFFIX)); |
| |
| makeCrossReference(resource1, resource2); |
| makeCrossReference(resource2, resource3); |
| |
| save(resourceSet); |
| |
| breakModel(iFile3); |
| |
| return Arrays.asList(iFile1, iFile2, iFile3); |
| } |
| |
| @Test |
| public void test_case10_workspace_project_container() throws Exception { |
| List<IFile> files = setUpCase10(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedGraph = ImmutableSet.of(uriSet(iFile1, iFile2, iFile3)); |
| Set<IStorage> expectedTraversal = storageSet(iFile1, iFile2, iFile3); |
| ExpectedResult expectedResult = new ExpectedResult(expectedGraph, expectedTraversal, Diagnostic.ERROR); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(WORKSPACE, PROJECT, CONTAINER)) { |
| setResolutionScope(scope); |
| resolveAndCheckResult(files, expectedResult, expectedResult, expectedResult); |
| } |
| } |
| |
| @Test |
| public void test_case10_outgoing() throws Exception { |
| List<IFile> files = setUpCase10(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1, iFile2, iFile3)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2, iFile3)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1, iFile2, iFile3); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2, iFile3); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.ERROR); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.ERROR); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.ERROR); |
| |
| setResolutionScope(OUTGOING); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result); |
| } |
| |
| @Test |
| public void test_case10_self() throws Exception { |
| List<IFile> files = setUpCase10(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.ERROR); |
| |
| setResolutionScope(SELF); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result); |
| } |
| |
| private List<IFile> setUpCase11() throws Exception { |
| final IProject iProject1 = project.getProject(); |
| final ResourceSet resourceSet = new ResourceSetImpl(); |
| |
| final File file1 = project.getOrCreateFile(iProject1, FILE1_NAME); |
| final File file2 = project.getOrCreateFile(iProject1, FILE2_NAME); |
| final File file3 = project.getOrCreateFile(iProject1, FILE3_NAME); |
| iFile1 = project.getIFile(iProject1, file1); |
| iFile2 = project.getIFile(iProject1, file2); |
| iFile3 = project.getIFile(iProject1, file3); |
| |
| final Resource resource1 = connectResource(iFile1, resourceSet); |
| final Resource resource2 = connectResource(iFile2, resourceSet); |
| final Resource resource3 = connectResource(iFile3, resourceSet); |
| |
| resource1.getContents().add(createBasicModel(FILE1_SUFFIX)); |
| resource2.getContents().add(createBasicModel(FILE2_SUFFIX)); |
| resource3.getContents().add(createBasicModel(FILE3_SUFFIX)); |
| |
| makeCrossReference(resource1, resource2); |
| |
| save(resourceSet); |
| |
| return Arrays.asList(iFile1, iFile2, iFile3); |
| } |
| |
| @Test |
| public void test_case11_workspace_project_container() throws Exception { |
| List<IFile> files = setUpCase11(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedGraph = ImmutableSet.of(uriSet(iFile1, iFile2), uriSet(iFile3)); |
| Set<IStorage> expectedFile1Or2Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Or2Result = new ExpectedResult(expectedGraph, expectedFile1Or2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedGraph, expectedFile3Traversal, Diagnostic.OK); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(WORKSPACE, PROJECT, CONTAINER)) { |
| setResolutionScope(scope); |
| resolveAndCheckResult(files, expectedFile1Or2Result, expectedFile1Or2Result, expectedFile3Result); |
| } |
| } |
| |
| @Test |
| public void test_case11_outgoing() throws Exception { |
| List<IFile> files = setUpCase11(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1, iFile2)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.OK); |
| |
| setResolutionScope(OUTGOING); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result); |
| } |
| |
| @Test |
| public void test_case11_self() throws Exception { |
| List<IFile> files = setUpCase11(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.OK); |
| |
| setResolutionScope(SELF); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result); |
| } |
| |
| private List<IFile> setUpCase12() throws Exception { |
| final IProject iProject1 = project.getProject(); |
| final ResourceSet resourceSet = new ResourceSetImpl(); |
| |
| final File file1 = project.getOrCreateFile(iProject1, FILE1_NAME); |
| final File file2 = project.getOrCreateFile(iProject1, FILE2_NAME); |
| final File file3 = project.getOrCreateFile(iProject1, FILE3_NAME); |
| final File file4 = project.getOrCreateFile(iProject1, FILE4_NAME); |
| iFile1 = project.getIFile(iProject1, file1); |
| iFile2 = project.getIFile(iProject1, file2); |
| iFile3 = project.getIFile(iProject1, file3); |
| iFile4 = project.getIFile(iProject1, file4); |
| |
| final Resource resource1 = connectResource(iFile1, resourceSet); |
| final Resource resource2 = connectResource(iFile2, resourceSet); |
| final Resource resource3 = connectResource(iFile3, resourceSet); |
| final Resource resource4 = connectResource(iFile4, resourceSet); |
| |
| resource1.getContents().add(createBasicModel(FILE1_SUFFIX)); |
| resource2.getContents().add(createBasicModel(FILE2_SUFFIX)); |
| resource3.getContents().add(createBasicModel(FILE3_SUFFIX)); |
| resource4.getContents().add(createBasicModel(FILE4_SUFFIX)); |
| |
| makeCrossReference(resource1, resource2); |
| makeCrossReference(resource3, resource4); |
| |
| save(resourceSet); |
| |
| breakModel(iFile4); |
| |
| return Arrays.asList(iFile1, iFile2, iFile3, iFile4); |
| } |
| |
| @Test |
| public void test_case12_workspace_project_container() throws Exception { |
| List<IFile> files = setUpCase12(); |
| assertEquals(4, files.size()); |
| |
| Set<? extends Set<URI>> expectedGraph = ImmutableSet.of(uriSet(iFile1, iFile2), uriSet(iFile3, iFile4)); |
| Set<IStorage> expectedFile1Or2Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile3Or4Traversal = storageSet(iFile3, iFile4); |
| ExpectedResult expectedFile1Or2Result = new ExpectedResult(expectedGraph, expectedFile1Or2Traversal, Diagnostic.ERROR); |
| ExpectedResult expectedFile3Or4Result = new ExpectedResult(expectedGraph, expectedFile3Or4Traversal, Diagnostic.ERROR); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(WORKSPACE, PROJECT, CONTAINER)) { |
| setResolutionScope(scope); |
| resolveAndCheckResult(files, expectedFile1Or2Result, expectedFile1Or2Result, expectedFile3Or4Result, expectedFile3Or4Result); |
| } |
| } |
| |
| @Test |
| public void test_case12_outgoing() throws Exception { |
| List<IFile> files = setUpCase12(); |
| assertEquals(4, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1, iFile2)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3, iFile4)); |
| Set<? extends Set<URI>> expectedFile4Graph = ImmutableSet.of(uriSet(iFile4)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3, iFile4); |
| Set<IStorage> expectedFile4Traversal = storageSet(iFile4); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.ERROR); |
| ExpectedResult expectedFile4Result = new ExpectedResult(expectedFile4Graph, expectedFile4Traversal, Diagnostic.ERROR); |
| |
| setResolutionScope(OUTGOING); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result, expectedFile4Result); |
| } |
| |
| @Test |
| public void test_case12_self() throws Exception { |
| List<IFile> files = setUpCase12(); |
| assertEquals(4, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<? extends Set<URI>> expectedFile4Graph = ImmutableSet.of(uriSet(iFile4)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| Set<IStorage> expectedFile4Traversal = storageSet(iFile4); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile4Result = new ExpectedResult(expectedFile4Graph, expectedFile4Traversal, Diagnostic.ERROR); |
| |
| setResolutionScope(SELF); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result, expectedFile4Result); |
| } |
| |
| private List<IFile> setUpCase13() throws Exception { |
| final IProject iProject1 = project.getProject(); |
| final ResourceSet resourceSet = new ResourceSetImpl(); |
| |
| final File file1 = project.getOrCreateFile(iProject1, FILE1_NAME); |
| final File file2 = project.getOrCreateFile(iProject1, FILE2_NAME); |
| final File file3 = project.getOrCreateFile(iProject1, FILE3_NAME); |
| final File file4 = project.getOrCreateFile(iProject1, FILE4_NAME); |
| iFile1 = project.getIFile(iProject1, file1); |
| iFile2 = project.getIFile(iProject1, file2); |
| iFile3 = project.getIFile(iProject1, file3); |
| iFile4 = project.getIFile(iProject1, file4); |
| |
| final Resource resource1 = connectResource(iFile1, resourceSet); |
| final Resource resource2 = connectResource(iFile2, resourceSet); |
| final Resource resource3 = connectResource(iFile3, resourceSet); |
| final Resource resource4 = connectResource(iFile4, resourceSet); |
| |
| resource1.getContents().add(createBasicModel(FILE1_SUFFIX)); |
| resource2.getContents().add(createBasicModel(FILE2_SUFFIX)); |
| resource3.getContents().add(createBasicModel(FILE3_SUFFIX)); |
| resource4.getContents().add(createBasicModel(FILE4_SUFFIX)); |
| |
| makeCrossReference(resource1, resource2); |
| makeCrossReference(resource3, resource4); |
| |
| save(resourceSet); |
| |
| return Arrays.asList(iFile1, iFile2, iFile3, iFile4); |
| } |
| |
| @Test |
| public void test_case13_workspace_project_container() throws Exception { |
| List<IFile> files = setUpCase13(); |
| assertEquals(4, files.size()); |
| |
| Set<? extends Set<URI>> expectedGraph = ImmutableSet.of(uriSet(iFile1, iFile2), uriSet(iFile3, iFile4)); |
| Set<IStorage> expectedFile1Or2Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile3Or4Traversal = storageSet(iFile3, iFile4); |
| ExpectedResult expectedFile1Or2Result = new ExpectedResult(expectedGraph, expectedFile1Or2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Or4Result = new ExpectedResult(expectedGraph, expectedFile3Or4Traversal, Diagnostic.OK); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(WORKSPACE, PROJECT, CONTAINER)) { |
| setResolutionScope(scope); |
| resolveAndCheckResult(files, expectedFile1Or2Result, expectedFile1Or2Result, expectedFile3Or4Result, expectedFile3Or4Result); |
| } |
| } |
| |
| @Test |
| public void test_case13_outgoing() throws Exception { |
| List<IFile> files = setUpCase13(); |
| assertEquals(4, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1, iFile2)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3, iFile4)); |
| Set<? extends Set<URI>> expectedFile4Graph = ImmutableSet.of(uriSet(iFile4)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3, iFile4); |
| Set<IStorage> expectedFile4Traversal = storageSet(iFile4); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile4Result = new ExpectedResult(expectedFile4Graph, expectedFile4Traversal, Diagnostic.OK); |
| |
| setResolutionScope(OUTGOING); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result, expectedFile4Result); |
| } |
| |
| @Test |
| public void test_case13_self() throws Exception { |
| List<IFile> files = setUpCase13(); |
| assertEquals(4, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<? extends Set<URI>> expectedFile4Graph = ImmutableSet.of(uriSet(iFile4)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| Set<IStorage> expectedFile4Traversal = storageSet(iFile4); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile4Result = new ExpectedResult(expectedFile4Graph, expectedFile4Traversal, Diagnostic.OK); |
| |
| setResolutionScope(SELF); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result, expectedFile4Result); |
| } |
| |
| private List<IFile> setUpCase14() throws Exception { |
| final IProject iProject1 = project.getProject(); |
| final IProject iProject2 = project2.getProject(); |
| final ResourceSet resourceSet = new ResourceSetImpl(); |
| |
| final File file1 = project.getOrCreateFile(iProject1, FILE1_NAME); |
| final File file2 = project.getOrCreateFile(iProject1, FILE2_NAME); |
| final File file3 = project.getOrCreateFile(iProject2, FILE3_NAME); |
| iFile1 = project.getIFile(iProject1, file1); |
| iFile2 = project.getIFile(iProject1, file2); |
| iFile3 = project.getIFile(iProject2, file3); |
| |
| final Resource resource1 = connectResource(iFile1, resourceSet); |
| final Resource resource2 = connectResource(iFile2, resourceSet); |
| final Resource resource3 = connectResource(iFile3, resourceSet); |
| |
| resource1.getContents().add(createBasicModel(FILE1_SUFFIX)); |
| resource2.getContents().add(createBasicModel(FILE2_SUFFIX)); |
| resource3.getContents().add(createBasicModel(FILE3_SUFFIX)); |
| |
| makeCrossReference(resource1, resource2); |
| |
| save(resourceSet); |
| |
| breakModel(iFile3); |
| |
| return Arrays.asList(iFile1, iFile2, iFile3); |
| } |
| |
| @Test |
| public void test_case14_workspace() throws Exception { |
| List<IFile> files = setUpCase14(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedGraph = ImmutableSet.of(uriSet(iFile1, iFile2), uriSet(iFile3)); |
| Set<IStorage> expectedFile1Or2Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Or2Result = new ExpectedResult(expectedGraph, expectedFile1Or2Traversal, Diagnostic.ERROR); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedGraph, expectedFile3Traversal, Diagnostic.ERROR); |
| |
| setResolutionScope(WORKSPACE); |
| resolveAndCheckResult(files, expectedFile1Or2Result, expectedFile1Or2Result, expectedFile3Result); |
| } |
| |
| @Test |
| public void test_case14_project_container() throws Exception { |
| List<IFile> files = setUpCase14(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Or2Graph = ImmutableSet.of(uriSet(iFile1, iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<IStorage> expectedFile1Or2Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Or2Result = new ExpectedResult(expectedFile1Or2Graph, expectedFile1Or2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.ERROR); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(PROJECT, CONTAINER)) { |
| setResolutionScope(scope); |
| resolveAndCheckResult(files, expectedFile1Or2Result, expectedFile1Or2Result, expectedFile3Result); |
| } |
| } |
| |
| @Test |
| public void test_case14_outgoing() throws Exception { |
| List<IFile> files = setUpCase14(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1, iFile2)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.ERROR); |
| |
| setResolutionScope(OUTGOING); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result); |
| } |
| |
| @Test |
| public void test_case14_self() throws Exception { |
| List<IFile> files = setUpCase14(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.ERROR); |
| |
| setResolutionScope(SELF); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result); |
| } |
| |
| private List<IFile> setUpCase15() throws Exception { |
| final IProject iProject1 = project.getProject(); |
| final IProject iProject2 = project2.getProject(); |
| final ResourceSet resourceSet = new ResourceSetImpl(); |
| |
| final File file1 = project.getOrCreateFile(iProject1, FILE1_NAME); |
| final File file2 = project.getOrCreateFile(iProject1, FILE2_NAME); |
| final File file3 = project.getOrCreateFile(iProject2, FILE3_NAME); |
| iFile1 = project.getIFile(iProject1, file1); |
| iFile2 = project.getIFile(iProject1, file2); |
| iFile3 = project.getIFile(iProject2, file3); |
| |
| final Resource resource1 = connectResource(iFile1, resourceSet); |
| final Resource resource2 = connectResource(iFile2, resourceSet); |
| final Resource resource3 = connectResource(iFile3, resourceSet); |
| |
| resource1.getContents().add(createBasicModel(FILE1_SUFFIX)); |
| resource2.getContents().add(createBasicModel(FILE2_SUFFIX)); |
| resource3.getContents().add(createBasicModel(FILE3_SUFFIX)); |
| |
| makeCrossReference(resource1, resource2); |
| makeCrossReference(resource2, resource3); |
| |
| save(resourceSet); |
| |
| breakModel(iFile3); |
| |
| return Arrays.asList(iFile1, iFile2, iFile3); |
| } |
| |
| @Test |
| public void test_case15_workspace() throws Exception { |
| List<IFile> files = setUpCase15(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedGraph = ImmutableSet.of(uriSet(iFile1, iFile2, iFile3)); |
| Set<IStorage> expectedTraversal = storageSet(iFile1, iFile2, iFile3); |
| ExpectedResult expectedResult = new ExpectedResult(expectedGraph, expectedTraversal, Diagnostic.ERROR); |
| |
| setResolutionScope(WORKSPACE); |
| resolveAndCheckResult(files, expectedResult, expectedResult, expectedResult); |
| } |
| |
| @Test |
| public void test_case15_project_container() throws Exception { |
| List<IFile> files = setUpCase15(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Or2Graph = ImmutableSet.of(uriSet(iFile1, iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<IStorage> expectedFile1Or2Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Or2Result = new ExpectedResult(expectedFile1Or2Graph, expectedFile1Or2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.ERROR); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(PROJECT, CONTAINER)) { |
| setResolutionScope(scope); |
| // FIXME fails cause cross-project references are resolved regardless of scope |
| resolveAndCheckResult(files, expectedFile1Or2Result, expectedFile1Or2Result, expectedFile3Result); |
| } |
| } |
| |
| @Test |
| public void test_case15_outgoing() throws Exception { |
| List<IFile> files = setUpCase15(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1, iFile2, iFile3)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2, iFile3)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1, iFile2, iFile3); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2, iFile3); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.ERROR); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.ERROR); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.ERROR); |
| |
| setResolutionScope(OUTGOING); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result); |
| } |
| |
| @Test |
| public void test_case15_self() throws Exception { |
| List<IFile> files = setUpCase15(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.ERROR); |
| |
| setResolutionScope(SELF); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result); |
| } |
| |
| private List<IFile> setUpCase16() throws Exception { |
| final IProject iProject1 = project.getProject(); |
| final IProject iProject2 = project2.getProject(); |
| final ResourceSet resourceSet = new ResourceSetImpl(); |
| |
| final File file1 = project.getOrCreateFile(iProject1, FILE1_NAME); |
| final File file2 = project.getOrCreateFile(iProject1, FILE2_NAME); |
| final File file3 = project.getOrCreateFile(iProject2, FILE3_NAME); |
| iFile1 = project.getIFile(iProject1, file1); |
| iFile2 = project.getIFile(iProject1, file2); |
| iFile3 = project.getIFile(iProject2, file3); |
| |
| final Resource resource1 = connectResource(iFile1, resourceSet); |
| final Resource resource2 = connectResource(iFile2, resourceSet); |
| final Resource resource3 = connectResource(iFile3, resourceSet); |
| |
| resource1.getContents().add(createBasicModel(FILE1_SUFFIX)); |
| resource2.getContents().add(createBasicModel(FILE2_SUFFIX)); |
| resource3.getContents().add(createBasicModel(FILE3_SUFFIX)); |
| |
| makeCrossReference(resource1, resource2); |
| |
| save(resourceSet); |
| |
| return Arrays.asList(iFile1, iFile2, iFile3); |
| } |
| |
| @Test |
| public void test_case16_workspace() throws Exception { |
| List<IFile> files = setUpCase16(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedGraph = ImmutableSet.of(uriSet(iFile1, iFile2), uriSet(iFile3)); |
| Set<IStorage> expectedFile1Or2Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Or2Result = new ExpectedResult(expectedGraph, expectedFile1Or2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedGraph, expectedFile3Traversal, Diagnostic.OK); |
| |
| setResolutionScope(WORKSPACE); |
| resolveAndCheckResult(files, expectedFile1Or2Result, expectedFile1Or2Result, expectedFile3Result); |
| } |
| |
| @Test |
| public void test_case16_project_container() throws Exception { |
| List<IFile> files = setUpCase16(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Or2Graph = ImmutableSet.of(uriSet(iFile1, iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<IStorage> expectedFile1Or2Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Or2Result = new ExpectedResult(expectedFile1Or2Graph, expectedFile1Or2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.OK); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(PROJECT, CONTAINER)) { |
| setResolutionScope(scope); |
| resolveAndCheckResult(files, expectedFile1Or2Result, expectedFile1Or2Result, expectedFile3Result); |
| } |
| } |
| |
| @Test |
| public void test_case16_outgoing() throws Exception { |
| List<IFile> files = setUpCase16(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1, iFile2)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.OK); |
| |
| setResolutionScope(OUTGOING); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result); |
| } |
| |
| @Test |
| public void test_case16_self() throws Exception { |
| List<IFile> files = setUpCase16(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.OK); |
| |
| setResolutionScope(SELF); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result); |
| } |
| |
| private List<IFile> setUpCase17() throws Exception { |
| final IProject iProject1 = project.getProject(); |
| final IProject iProject2 = project2.getProject(); |
| final ResourceSet resourceSet = new ResourceSetImpl(); |
| |
| // Note that file2 is in project2 and file3 in project1 here |
| final File file1 = project.getOrCreateFile(iProject1, FILE1_NAME); |
| final File file2 = project.getOrCreateFile(iProject2, FILE2_NAME); |
| final File file3 = project.getOrCreateFile(iProject1, FILE3_NAME); |
| final File file4 = project.getOrCreateFile(iProject2, FILE4_NAME); |
| iFile1 = project.getIFile(iProject1, file1); |
| iFile2 = project.getIFile(iProject2, file2); |
| iFile3 = project.getIFile(iProject1, file3); |
| iFile4 = project.getIFile(iProject2, file4); |
| |
| final Resource resource1 = connectResource(iFile1, resourceSet); |
| final Resource resource2 = connectResource(iFile2, resourceSet); |
| final Resource resource3 = connectResource(iFile3, resourceSet); |
| final Resource resource4 = connectResource(iFile4, resourceSet); |
| |
| resource1.getContents().add(createBasicModel(FILE1_SUFFIX)); |
| resource2.getContents().add(createBasicModel(FILE2_SUFFIX)); |
| resource3.getContents().add(createBasicModel(FILE3_SUFFIX)); |
| resource4.getContents().add(createBasicModel(FILE4_SUFFIX)); |
| |
| makeCrossReference(resource1, resource2); |
| makeCrossReference(resource3, resource4); |
| |
| save(resourceSet); |
| |
| breakModel(iFile4); |
| |
| return Arrays.asList(iFile1, iFile2, iFile3, iFile4); |
| } |
| |
| @Test |
| public void test_case17_workspace() throws Exception { |
| List<IFile> files = setUpCase17(); |
| assertEquals(4, files.size()); |
| |
| Set<? extends Set<URI>> expectedGraph = ImmutableSet.of(uriSet(iFile1,iFile2), uriSet(iFile3, iFile4)); |
| Set<IStorage> expectedFile1Or2Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile3Or4Traversal = storageSet(iFile3, iFile4); |
| ExpectedResult expectedFile1Or2Result = new ExpectedResult(expectedGraph, expectedFile1Or2Traversal, Diagnostic.ERROR); |
| ExpectedResult expectedFile3Or4Result = new ExpectedResult(expectedGraph, expectedFile3Or4Traversal, Diagnostic.ERROR); |
| |
| setResolutionScope(WORKSPACE); |
| resolveAndCheckResult(files, expectedFile1Or2Result, expectedFile1Or2Result, expectedFile3Or4Result, expectedFile3Or4Result); |
| } |
| |
| @Test |
| public void test_case17_project_container() throws Exception { |
| List<IFile> files = setUpCase17(); |
| assertEquals(4, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Or2Graph = ImmutableSet.of(uriSet(iFile1, iFile3)); |
| Set<? extends Set<URI>> expectedFile3Or4Graph = ImmutableSet.of(uriSet(iFile2, iFile4)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| Set<IStorage> expectedFile4Traversal = storageSet(iFile4); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Or2Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile1Or2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Or4Graph, expectedFile3Traversal, Diagnostic.ERROR); |
| ExpectedResult expectedFile4Result = new ExpectedResult(expectedFile3Or4Graph, expectedFile4Traversal, Diagnostic.ERROR); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(PROJECT, CONTAINER)) { |
| setResolutionScope(scope); |
| // FIXME fails even on file1. the scope makes it so that "file3" is resolved too, and the reference to file4 is resolved regardless of the scope. |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result, expectedFile4Result); |
| } |
| } |
| |
| @Test |
| public void test_case17_outgoing() throws Exception { |
| List<IFile> files = setUpCase17(); |
| assertEquals(4, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1, iFile2)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3, iFile4)); |
| Set<? extends Set<URI>> expectedFile4Graph = ImmutableSet.of(uriSet(iFile4)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3, iFile4); |
| Set<IStorage> expectedFile4Traversal = storageSet(iFile4); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.ERROR); |
| ExpectedResult expectedFile4Result = new ExpectedResult(expectedFile4Graph, expectedFile4Traversal, Diagnostic.ERROR); |
| |
| setResolutionScope(OUTGOING); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result, expectedFile4Result); |
| } |
| |
| @Test |
| public void test_case17_self() throws Exception { |
| List<IFile> files = setUpCase17(); |
| assertEquals(4, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<? extends Set<URI>> expectedFile4Graph = ImmutableSet.of(uriSet(iFile4)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| Set<IStorage> expectedFile4Traversal = storageSet(iFile4); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile4Result = new ExpectedResult(expectedFile4Graph, expectedFile4Traversal, Diagnostic.ERROR); |
| |
| setResolutionScope(SELF); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result, expectedFile4Result); |
| } |
| |
| private List<IFile> setUpCase18() throws Exception { |
| final IProject iProject1 = project.getProject(); |
| final IProject iProject2 = project2.getProject(); |
| final ResourceSet resourceSet = new ResourceSetImpl(); |
| |
| // Note that file2 is in project2 and file3 in project1 here |
| final File file1 = project.getOrCreateFile(iProject1, FILE1_NAME); |
| final File file2 = project.getOrCreateFile(iProject2, FILE2_NAME); |
| final File file3 = project.getOrCreateFile(iProject1, FILE3_NAME); |
| final File file4 = project.getOrCreateFile(iProject2, FILE4_NAME); |
| iFile1 = project.getIFile(iProject1, file1); |
| iFile2 = project.getIFile(iProject2, file2); |
| iFile3 = project.getIFile(iProject1, file3); |
| iFile4 = project.getIFile(iProject2, file4); |
| |
| final Resource resource1 = connectResource(iFile1, resourceSet); |
| final Resource resource2 = connectResource(iFile2, resourceSet); |
| final Resource resource3 = connectResource(iFile3, resourceSet); |
| final Resource resource4 = connectResource(iFile4, resourceSet); |
| |
| resource1.getContents().add(createBasicModel(FILE1_SUFFIX)); |
| resource2.getContents().add(createBasicModel(FILE2_SUFFIX)); |
| resource3.getContents().add(createBasicModel(FILE3_SUFFIX)); |
| resource4.getContents().add(createBasicModel(FILE4_SUFFIX)); |
| |
| makeCrossReference(resource1, resource2); |
| makeCrossReference(resource3, resource4); |
| |
| save(resourceSet); |
| |
| return Arrays.asList(iFile1, iFile2, iFile3, iFile4); |
| } |
| |
| @Test |
| public void test_case18_workspace() throws Exception { |
| List<IFile> files = setUpCase18(); |
| assertEquals(4, files.size()); |
| |
| Set<? extends Set<URI>> expectedGraph = ImmutableSet.of(uriSet(iFile1, iFile2), uriSet(iFile3, iFile4)); |
| Set<IStorage> expectedFile1Or2Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile3Or4Traversal = storageSet(iFile3, iFile4); |
| ExpectedResult expectedFile1Or2Result = new ExpectedResult(expectedGraph, expectedFile1Or2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Or4Result = new ExpectedResult(expectedGraph, expectedFile3Or4Traversal, Diagnostic.OK); |
| |
| setResolutionScope(WORKSPACE); |
| resolveAndCheckResult(files, expectedFile1Or2Result, expectedFile1Or2Result, expectedFile3Or4Result, expectedFile3Or4Result); |
| } |
| |
| @Test |
| public void test_case18_project_container() throws Exception { |
| List<IFile> files = setUpCase18(); |
| assertEquals(4, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Or2Graph = ImmutableSet.of(uriSet(iFile1, iFile3)); |
| Set<? extends Set<URI>> expectedFile3Or4Graph = ImmutableSet.of(uriSet(iFile2, iFile4)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| Set<IStorage> expectedFile4Traversal = storageSet(iFile4); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Or2Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile1Or2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Or4Graph, expectedFile3Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile4Result = new ExpectedResult(expectedFile3Or4Graph, expectedFile4Traversal, Diagnostic.OK); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(PROJECT, CONTAINER)) { |
| setResolutionScope(scope); |
| // FIXME fails even on file1. the scope makes it so that "file3" is resolved too, and the reference to file4 is resolved regardless of the scope. |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result, expectedFile4Result); |
| } |
| } |
| |
| @Test |
| public void test_case18_outgoing() throws Exception { |
| List<IFile> files = setUpCase18(); |
| assertEquals(4, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1, iFile2)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3, iFile4)); |
| Set<? extends Set<URI>> expectedFile4Graph = ImmutableSet.of(uriSet(iFile4)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1, iFile2); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3, iFile4); |
| Set<IStorage> expectedFile4Traversal = storageSet(iFile4); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile4Result = new ExpectedResult(expectedFile4Graph, expectedFile4Traversal, Diagnostic.OK); |
| |
| setResolutionScope(OUTGOING); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result, expectedFile4Result); |
| } |
| |
| @Test |
| public void test_case18_self() throws Exception { |
| List<IFile> files = setUpCase18(); |
| assertEquals(4, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<? extends Set<URI>> expectedFile4Graph = ImmutableSet.of(uriSet(iFile4)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| Set<IStorage> expectedFile4Traversal = storageSet(iFile4); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile4Result = new ExpectedResult(expectedFile4Graph, expectedFile4Traversal, Diagnostic.OK); |
| |
| setResolutionScope(SELF); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result, expectedFile4Result); |
| } |
| |
| private List<IFile> setUpCase19() throws Exception { |
| final IProject iProject1 = project.getProject(); |
| final ResourceSet resourceSet = new ResourceSetImpl(); |
| |
| final File file1 = project.getOrCreateFile(iProject1, FILE1_NAME); |
| final File file2 = project.getOrCreateFile(iProject1, FILE2_NAME); |
| final File file3 = project.getOrCreateFile(iProject1, FILE3_NAME); |
| iFile1 = project.getIFile(iProject1, file1); |
| iFile2 = project.getIFile(iProject1, file2); |
| iFile3 = project.getIFile(iProject1, file3); |
| |
| final Resource resource1 = connectResource(iFile1, resourceSet); |
| final Resource resource2 = connectResource(iFile2, resourceSet); |
| final Resource resource3 = connectResource(iFile3, resourceSet); |
| |
| resource1.getContents().add(createBasicModel(FILE1_SUFFIX)); |
| resource2.getContents().add(createBasicModel(FILE2_SUFFIX)); |
| resource3.getContents().add(createBasicModel(FILE3_SUFFIX)); |
| |
| makeCrossReference(resource1, resource3); |
| makeCrossReference(resource2, resource3); |
| |
| save(resourceSet); |
| |
| return Arrays.asList(iFile1, iFile2, iFile3); |
| } |
| |
| @Test |
| public void test_case19_workspace_project_container() throws Exception { |
| List<IFile> files = setUpCase19(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedGraph = ImmutableSet.of(uriSet(iFile1, iFile2, iFile3)); |
| Set<IStorage> expectedTraversal = storageSet(iFile1, iFile2, iFile3); |
| ExpectedResult expectedResult = new ExpectedResult(expectedGraph, expectedTraversal, Diagnostic.OK); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(WORKSPACE, PROJECT, CONTAINER)) { |
| setResolutionScope(scope); |
| resolveAndCheckResult(files, expectedResult, expectedResult, expectedResult); |
| } |
| } |
| |
| @Test |
| public void test_case19_outgoing() throws Exception { |
| List<IFile> files = setUpCase19(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1, iFile3)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2, iFile3)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1, iFile3); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2, iFile3); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.OK); |
| |
| setResolutionScope(OUTGOING); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result); |
| } |
| |
| @Test |
| public void test_case19_self() throws Exception { |
| List<IFile> files = setUpCase19(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.OK); |
| |
| setResolutionScope(SELF); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result); |
| } |
| |
| private List<IFile> setUpCase20() throws Exception { |
| final IProject iProject1 = project.getProject(); |
| final IProject iProject2 = project2.getProject(); |
| final ResourceSet resourceSet = new ResourceSetImpl(); |
| |
| final File file1 = project.getOrCreateFile(iProject1, FILE1_NAME); |
| final File file2 = project.getOrCreateFile(iProject2, FILE2_NAME); |
| final File file3 = project.getOrCreateFile(iProject1, FILE3_NAME); |
| iFile1 = project.getIFile(iProject1, file1); |
| iFile2 = project.getIFile(iProject2, file2); |
| iFile3 = project.getIFile(iProject1, file3); |
| |
| final Resource resource1 = connectResource(iFile1, resourceSet); |
| final Resource resource2 = connectResource(iFile2, resourceSet); |
| final Resource resource3 = connectResource(iFile3, resourceSet); |
| |
| resource1.getContents().add(createBasicModel(FILE1_SUFFIX)); |
| resource2.getContents().add(createBasicModel(FILE2_SUFFIX)); |
| resource3.getContents().add(createBasicModel(FILE3_SUFFIX)); |
| |
| makeCrossReference(resource1, resource2); |
| makeCrossReference(resource2, resource3); |
| |
| save(resourceSet); |
| |
| return Arrays.asList(iFile1, iFile2, iFile3); |
| } |
| |
| @Test |
| public void test_case20_outgoing() throws Exception { |
| List<IFile> files = setUpCase20(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1, iFile2, iFile3)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2, iFile3)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1, iFile2, iFile3); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2, iFile3); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.OK); |
| |
| setResolutionScope(OUTGOING); |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result); |
| } |
| |
| @Test |
| public void test_case20_project_container_self() throws Exception { |
| List<IFile> files = setUpCase20(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedFile1Graph = ImmutableSet.of(uriSet(iFile1)); |
| Set<? extends Set<URI>> expectedFile2Graph = ImmutableSet.of(uriSet(iFile2)); |
| Set<? extends Set<URI>> expectedFile3Graph = ImmutableSet.of(uriSet(iFile3)); |
| Set<IStorage> expectedFile1Traversal = storageSet(iFile1); |
| Set<IStorage> expectedFile2Traversal = storageSet(iFile2); |
| Set<IStorage> expectedFile3Traversal = storageSet(iFile3); |
| ExpectedResult expectedFile1Result = new ExpectedResult(expectedFile1Graph, expectedFile1Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile2Result = new ExpectedResult(expectedFile2Graph, expectedFile2Traversal, Diagnostic.OK); |
| ExpectedResult expectedFile3Result = new ExpectedResult(expectedFile3Graph, expectedFile3Traversal, Diagnostic.OK); |
| |
| for (CrossReferenceResolutionScope scope : Arrays.asList(PROJECT, CONTAINER, SELF)) { |
| setResolutionScope(scope); |
| // FIXME fails because scope doesn't restrict resolution of references |
| resolveAndCheckResult(files, expectedFile1Result, expectedFile2Result, expectedFile3Result); |
| } |
| } |
| |
| @Test |
| public void test_case20_workspace() throws Exception { |
| List<IFile> files = setUpCase20(); |
| assertEquals(3, files.size()); |
| |
| Set<? extends Set<URI>> expectedGraph = ImmutableSet.of(uriSet(iFile1, iFile2, iFile3)); |
| Set<IStorage> expectedTraversal = storageSet(iFile1, iFile2, iFile3); |
| ExpectedResult expectedResult = new ExpectedResult(expectedGraph, expectedTraversal, Diagnostic.OK); |
| |
| setResolutionScope(WORKSPACE); |
| resolveAndCheckResult(files, expectedResult, expectedResult, expectedResult); |
| } |
| |
| private void resolveAndCheckResult(List<IFile> files, ExpectedResult... expected) throws Exception { |
| for (int i = 0; i < files.size(); i++) { |
| ResolvingResult resolutionResult = resolveTraversalOf(files.get(i)); |
| assertResultMatches(expected[i], resolutionResult); |
| } |
| } |
| |
| private void assertResultMatches(ExpectedResult expected, ResolvingResult actual) { |
| assertEquals(expected.getDiagnosticSeverity(), actual.getTraversal().getDiagnostic().getSeverity()); |
| Set<? extends IStorage> actualStorages = actual.getTraversal().getStorages(); |
| Set<? extends IStorage> expectedStorages = expected.getStoragesInModel(); |
| assertEquals(expectedStorages.size(), actualStorages.size()); |
| assertTrue(actualStorages.containsAll(expectedStorages)); |
| |
| Set<Set<URI>> actualGraph = actual.getSubGraphs(); |
| Set<? extends Set<URI>> expectedGraph = expected.getSubGraphs(); |
| assertEquals(expectedGraph.size(), actualGraph.size()); |
| assertTrue(actualGraph.containsAll(expectedGraph)); |
| } |
| |
| @SuppressWarnings("resource") |
| private void breakModel(IFile file) throws Exception { |
| Scanner scanner = null; |
| InputStream outputSource = null; |
| try { |
| scanner = new Scanner(file.getContents()).useDelimiter("\\A"); |
| |
| String fileContent = ""; |
| if (scanner.hasNext()) { |
| fileContent = scanner.next(); |
| } |
| |
| String brokenModelContent = fileContent.replaceFirst("EClass", "BrokenEClass"); |
| |
| outputSource = new ByteArrayInputStream(brokenModelContent.getBytes()); |
| file.setContents(outputSource, IResource.KEEP_HISTORY, new NullProgressMonitor()); |
| } finally { |
| if (scanner != null) { |
| scanner.close(); |
| } |
| if (outputSource != null) { |
| outputSource.close(); |
| } |
| } |
| } |
| |
| private ResolvingResult resolveTraversalOf(IFile file) throws Exception { |
| ThreadedModelResolver resolver = new ThreadedModelResolver(); |
| resolver.initialize(); |
| StorageTraversal traversal = resolver.resolveLocalModel(file, new NullProgressMonitor()); |
| Set<Set<URI>> subGraphs = getSubGraphs(resolver.getDependencyGraph()); |
| return new ResolvingResult(subGraphs, traversal); |
| } |
| |
| private Set<URI> uriSet(IStorage... storages) { |
| return ImmutableSet.copyOf(Iterables.transform(Arrays.asList(storages), ResourceUtil.asURI())); |
| } |
| |
| private Set<IStorage> storageSet(IStorage... storages) { |
| return Sets.<IStorage> newLinkedHashSet(Arrays.asList(storages)); |
| } |
| |
| private Set<Set<URI>> getSubGraphs(ReadOnlyGraph<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; |
| } |
| |
| private 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; |
| } |
| } |
| |
| private 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; |
| } |
| } |
| } |