blob: 73b2625cc90fb82a4ad0ae42a57b22d48c540acd [file] [log] [blame]
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);
}
}