| package org.eclipse.emf.compare.ide.ui.tests.unit.outgoing; |
| |
| import static com.google.common.collect.ImmutableSet.of; |
| 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 java.io.File; |
| import java.util.Arrays; |
| import java.util.Set; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.emf.common.util.URI; |
| import org.eclipse.emf.compare.ide.ui.internal.logical.resolver.CrossReferenceResolutionScope; |
| import org.eclipse.emf.compare.ide.ui.tests.unit.LocalResolutionTest; |
| import org.eclipse.emf.ecore.EClass; |
| import org.eclipse.emf.ecore.EPackage; |
| import org.eclipse.emf.ecore.EReference; |
| import org.eclipse.emf.ecore.EcoreFactory; |
| import org.eclipse.emf.ecore.resource.Resource; |
| import org.eclipse.emf.ecore.resource.ResourceSet; |
| import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; |
| import org.junit.runner.RunWith; |
| import org.junit.runners.Parameterized; |
| import org.junit.runners.Parameterized.Parameters; |
| |
| /** |
| * This checks the logical model in the following configuration: |
| * |
| * <pre> |
| * /project-2/file1.ecore -> n-ary EReference non-containment to file2.ecore |
| * /project-2/file2.ecore |
| * </pre> |
| * |
| * The file for which the logical model is computed is "file1.ecore". |
| * |
| * @author <a href="mailto:laurent.delaigue@obeo.fr">Laurent Delaigue</a> |
| */ |
| @RunWith(Parameterized.class) |
| public class OutgoingSingleEReferenceTest extends LocalResolutionTest { |
| |
| protected static final String FILE1_NAME = "file1.ecore"; //$NON-NLS-1$ |
| |
| protected static final String FILE2_NAME = "file2.ecore"; //$NON-NLS-1$ |
| |
| public OutgoingSingleEReferenceTest(CrossReferenceResolutionScope scopeToUse, |
| Set<? extends Set<URI>> uriSets, Set<String> traversalPaths) { |
| super(scopeToUse, uriSets, traversalPaths); |
| } |
| |
| @Parameters(name = "{index}: scope {0} -> graph {1}, traversal {2}") |
| public static Iterable<Object[]> data1() { |
| return Arrays |
| .asList(new Object[][] { |
| {WORKSPACE, of(of(resourceURI(file1()), resourceURI(file2()))), |
| of(file1(), file2()) }, |
| {PROJECT, of(of(resourceURI(file1()), resourceURI(file2()))), of(file1(), file2()) }, |
| {CONTAINER, of(of(resourceURI(file1()), resourceURI(file2()))), |
| of(file1(), file2()) }, |
| {OUTGOING, of(of(resourceURI(file1()), resourceURI(file2()))), of(file1(), file2()) }, |
| {SELF, of(of(resourceURI(file1()))), of(file1()) }, }); |
| } |
| |
| private static String file1() { |
| return "/" + PROJECT2_NAME + "/" + FILE1_NAME; //$NON-NLS-1$ //$NON-NLS-2$ |
| } |
| |
| private static String file2() { |
| return "/" + PROJECT2_NAME + "/" + FILE2_NAME; //$NON-NLS-1$ //$NON-NLS-2$ |
| } |
| |
| @Override |
| protected void setUpModel() throws Exception { |
| final IProject iProject = project2.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); |
| |
| EPackage root1 = createPackage(null, "root1"); //$NON-NLS-1$ |
| resource1.getContents().add(root1); |
| EPackage root2 = createPackage(null, "root2"); //$NON-NLS-1$ |
| resource2.getContents().add(root2); |
| EClass c1 = createClass(root1, "C1"); //$NON-NLS-1$ |
| EClass c2 = createClass(root2, "C2"); //$NON-NLS-1$ |
| |
| // Here we set the 1-ary EReference from file1 to file2 |
| EReference ref = EcoreFactory.eINSTANCE.createEReference(); |
| ref.setName("refToC2"); //$NON-NLS-1$ |
| ref.setEType(c2); |
| c1.getEStructuralFeatures().add(ref); |
| |
| save(resourceSet); |
| } |
| } |