/*******************************************************************************
* 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.OUTGOING;
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.SELF;
import static org.eclipse.emf.compare.ide.ui.internal.logical.resolver.CrossReferenceResolutionScope.WORKSPACE;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import com.google.common.collect.ImmutableSet;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.util.Arrays;
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.preferences.EMFCompareUIPreferences;
import org.eclipse.emf.compare.ide.ui.tests.workspace.TestProject;
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;
/*
* 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.
*/
@SuppressWarnings("restriction")
public class ModelResolverLocalTest extends LogicalModelGraphTest {
private static final String PROJECT2_NAME = "Project-2"; //$NON-NLS-1$
private static final String FILE1_NAME = "file1.ecore"; //$NON-NLS-1$
private static final String FILE2_NAME = "file2.ecore"; //$NON-NLS-1$
private static final String FILE3_NAME = "file3.ecore"; //$NON-NLS-1$
private static final String FILE4_NAME = "file4.ecore"; //$NON-NLS-1$
private static final String FILE1_SUFFIX = "_file1"; //$NON-NLS-1$
private static final String FILE2_SUFFIX = "_file2"; //$NON-NLS-1$
private static final String FILE3_SUFFIX = "_file3"; //$NON-NLS-1$
private static final String FILE4_SUFFIX = "_file4"; //$NON-NLS-1$
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 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"); //$NON-NLS-1$
String fileContent = ""; //$NON-NLS-1$
if (scanner.hasNext()) {
fileContent = scanner.next();
}
String brokenModelContent = fileContent.replaceFirst("EClass", "BrokenEClass"); //$NON-NLS-1$ //$NON-NLS-2$
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 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;
}
}
}