blob: 84775df207722cf05419b3c0e541dbab46cde399 [file] [log] [blame]
/**
* <copyright>
*
* Copyright (c) 2008-2013 See4sys, itemis and others.
* 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
*
* Contributors:
* See4sys - Initial API and implementation
* itemis - [423676] AbstractIntegrationTestCase unable to remove project references that are no longer needed
*
* </copyright>
*/
package org.eclipse.sphinx.tests.emf.workspace.integration.domain.mapping;
import java.util.List;
import java.util.Set;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.sphinx.emf.workspace.domain.WorkspaceEditingDomainManager;
import org.eclipse.sphinx.emf.workspace.domain.mapping.DefaultWorkspaceEditingDomainMapping;
import org.eclipse.sphinx.emf.workspace.domain.mapping.IWorkspaceEditingDomainMapping;
import org.eclipse.sphinx.examples.hummingbird10.Hummingbird10MMDescriptor;
import org.eclipse.sphinx.examples.hummingbird20.Hummingbird20MMDescriptor;
import org.eclipse.sphinx.examples.uml2.ide.metamodel.UML2MMDescriptor;
import org.eclipse.sphinx.testutils.integration.referenceworkspace.DefaultIntegrationTestCase;
import org.eclipse.sphinx.testutils.integration.referenceworkspace.DefaultTestReferenceWorkspace;
@SuppressWarnings({ "nls" })
public class DefaultWorkspaceEditingDomainMappingTest extends DefaultIntegrationTestCase {
private IWorkspaceEditingDomainMapping editingDomainMapping;
private String idEditingDomain20 = "editingDomainFor_org.eclipse.sphinx.examples.hummingbird20";
private String idEditingDomain10 = "editingDomainFor_org.eclipse.sphinx.examples.hummingbird10";
private String idEditingDomainUml2 = "editingDomainFor_org.eclipse.sphinx.examples.uml2";
public DefaultWorkspaceEditingDomainMappingTest() {
// Set subset of projects to load
Set<String> projectsToLoad = getProjectSubsetToLoad();
projectsToLoad.add(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_E);
projectsToLoad.add(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_F);
projectsToLoad.add(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_C);
projectsToLoad.add(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_D);
}
@Override
protected void setUp() throws Exception {
// Create and register mapping to test
super.setUp();
editingDomainMapping = WorkspaceEditingDomainManager.INSTANCE.getEditingDomainMapping();
}
/**
* Test method for
* {@link DefaultWorkspaceEditingDomainMapping#getEditingDomain(org.eclipse.core.resources.IContainer, org.eclipse.sphinx.emf.metamodel.MetaModelDescriptor)}
*
* @throws Exception
*/
public void testGetEditingDomainFromContainerAndMetaModelDescriptor() throws Exception {
IFile file20 = refWks.getReferenceFile(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_D,
DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20D_1);
IFile file10 = refWks.getReferenceFile(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_E,
DefaultTestReferenceWorkspace.HB_FILE_NAME_10_10E_1);
IFile fileUml2 = refWks.getReferenceFile(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_D,
DefaultTestReferenceWorkspace.UML2_FILE_NAME_20D_1);
List<TransactionalEditingDomain> editingDomains = editingDomainMapping.getEditingDomains();
assertEquals(3, editingDomains.size());
// Expected Editing Domain
TransactionalEditingDomain exEditingDomain10 = editingDomainMapping.getEditingDomain(file10);
TransactionalEditingDomain exEditingDomain20 = editingDomainMapping.getEditingDomain(file20);
TransactionalEditingDomain exEditingDomainUml2 = editingDomainMapping.getEditingDomain(fileUml2);
assertNotNull(exEditingDomain10);
assertNotNull(exEditingDomain20);
assertNotNull(exEditingDomainUml2);
// Given Container is Project
TransactionalEditingDomain acEditingDomain10 = editingDomainMapping.getEditingDomain(
refWks.getReferenceProject(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_E), Hummingbird10MMDescriptor.INSTANCE);
TransactionalEditingDomain acEditingDomain20 = editingDomainMapping.getEditingDomain(
refWks.getReferenceProject(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_D), Hummingbird20MMDescriptor.INSTANCE);
TransactionalEditingDomain acEditingDomainUml2 = editingDomainMapping.getEditingDomain(
refWks.getReferenceProject(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_D), UML2MMDescriptor.INSTANCE);
assertEquals(exEditingDomain10, acEditingDomain10);
assertEquals(exEditingDomain20, acEditingDomain20);
assertEquals(exEditingDomainUml2, acEditingDomainUml2);
// Given container is Folder
acEditingDomain20 = editingDomainMapping.getEditingDomain(refWks.getReferenceProject(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_E),
Hummingbird20MMDescriptor.INSTANCE);
assertNotSame(exEditingDomain10, acEditingDomain20);
IProject hbProject10_F = refWks.getReferenceProject(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_F);
assertNotNull(hbProject10_F);
IFolder testFolder = hbProject10_F.getFolder(DefaultTestReferenceWorkspace.HB_FOLDER_NAME_10_10F_1);
assertNotNull(testFolder);
TransactionalEditingDomain acEditingDomainForFolder10 = editingDomainMapping.getEditingDomain(testFolder, Hummingbird10MMDescriptor.INSTANCE);
assertSame(exEditingDomain10, acEditingDomainForFolder10);
// Given Container is Workspace Root.
IWorkspaceRoot WorkspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
TransactionalEditingDomain acEditingDomainForWkspace10 = editingDomainMapping.getEditingDomain(WorkspaceRoot,
Hummingbird10MMDescriptor.INSTANCE);
assertSame(exEditingDomain10, acEditingDomainForWkspace10);
TransactionalEditingDomain acEditingDomainForWkspace20 = editingDomainMapping.getEditingDomain(WorkspaceRoot,
Hummingbird20MMDescriptor.INSTANCE);
assertSame(exEditingDomain20, acEditingDomainForWkspace20);
TransactionalEditingDomain acEditingDomainForWkspaceUml2 = editingDomainMapping.getEditingDomain(WorkspaceRoot, UML2MMDescriptor.INSTANCE);
assertSame(exEditingDomainUml2, acEditingDomainForWkspaceUml2);
// Given Container is null
IFolder nullFolder = hbProject10_F.getFolder("test");
assertFalse(nullFolder.isAccessible());
TransactionalEditingDomain acEditingDomainForNullContainer10 = editingDomainMapping.getEditingDomain(nullFolder,
Hummingbird10MMDescriptor.INSTANCE);
assertSame(exEditingDomain10, acEditingDomainForNullContainer10);
}
/**
* Test method for {@link DefaultWorkspaceEditingDomainMapping#getEditingDomain(IFile)}
*/
public void testGetEditingDomainFromFile() throws Exception {
IFile file20 = refWks.getReferenceFile(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_D,
DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20D_1);
IFile file10 = refWks.getReferenceFile(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_E,
DefaultTestReferenceWorkspace.HB_FILE_NAME_10_10E_1);
IFile fileUml2 = refWks.getReferenceFile(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_D,
DefaultTestReferenceWorkspace.UML2_FILE_NAME_20D_1);
IFile nullFile = null;
List<TransactionalEditingDomain> editingDomains = editingDomainMapping.getEditingDomains();
assertEquals(3, editingDomains.size());
TransactionalEditingDomain editingDomainFile20 = editingDomainMapping.getEditingDomain(file20);
assertNotNull(editingDomainFile20);
assertEquals(idEditingDomain20, editingDomainFile20.getID());
TransactionalEditingDomain editingDomainFile10 = editingDomainMapping.getEditingDomain(file10);
assertNotNull(editingDomainFile10);
assertEquals(idEditingDomain10, editingDomainFile10.getID());
assertNotSame(editingDomainFile20, editingDomainFile10);
TransactionalEditingDomain editingDomainfileUml2 = editingDomainMapping.getEditingDomain(fileUml2);
assertNotNull(editingDomainfileUml2);
assertEquals(idEditingDomainUml2, editingDomainfileUml2.getID());
assertNotSame(editingDomainFile10, editingDomainfileUml2);
assertNotSame(editingDomainFile20, editingDomainfileUml2);
assertNull(editingDomainMapping.getEditingDomain(nullFile));
}
/**
* Test method for {@link DefaultWorkspaceEditingDomainMapping#getEditingDomains(IProject, boolean)}
*
* @throws Exception
*/
public void testGetEditingDomainFromProject() throws Exception {
int resource10InHBProject10E = refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_E,
Hummingbird10MMDescriptor.INSTANCE).size();
int resource10InHBProject10F = refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_F,
Hummingbird10MMDescriptor.INSTANCE).size();
int resource20InHBProject20D = refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_D,
Hummingbird20MMDescriptor.INSTANCE).size();
int resourceUml2InHBProject20D = refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_D, UML2MMDescriptor.INSTANCE)
.size();
int resource20InHBProject20C = refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_C,
Hummingbird20MMDescriptor.INSTANCE).size();
List<TransactionalEditingDomain> editingDomains = editingDomainMapping.getEditingDomains();
assertEquals(3, editingDomains.size());
// ===========================
// HB20
// HbProject20D
editingDomains = editingDomainMapping.getEditingDomains(refWks.getReferenceProject(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_D));
// There is one HB20 Model in project
assertEquals(3, editingDomains.size());
TransactionalEditingDomain retrievedEditingDomain20 = null;
TransactionalEditingDomain retrievedEditingDomain10 = null;
TransactionalEditingDomain retrievedEditingDomainUml2 = null;
for (TransactionalEditingDomain editingDomain : editingDomains) {
if (idEditingDomain20.equals(editingDomain.getID())) {
retrievedEditingDomain20 = editingDomain;
} else if (idEditingDomain10.equals(editingDomain.getID())) {
retrievedEditingDomain10 = editingDomain;
} else if (idEditingDomainUml2.equals(editingDomain.getID())) {
retrievedEditingDomainUml2 = editingDomain;
}
}
assertNotNull(retrievedEditingDomain20);
assertNotNull(retrievedEditingDomain10);
assertNotNull(retrievedEditingDomainUml2);
assertEditingDomainResourcesSizeEquals(retrievedEditingDomain20, resource20InHBProject20D + resource20InHBProject20C);
assertEditingDomainResourcesSizeEquals(retrievedEditingDomain10, resource10InHBProject10E + resource10InHBProject10F);
assertEditingDomainResourcesSizeEquals(retrievedEditingDomainUml2, resourceUml2InHBProject20D);
// ----------------
// HbProject20C
editingDomains = editingDomainMapping.getEditingDomains(refWks.getReferenceProject(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_C));
assertEquals(1, editingDomains.size());
assertTrue(idEditingDomain20.equals(editingDomains.get(0).getID()));
assertEditingDomainResourcesSizeEquals(editingDomains.get(0), resource20InHBProject20D + resource20InHBProject20C);
// ==================================
// HB10
// HbProject10E
editingDomains = editingDomainMapping.getEditingDomains(refWks.getReferenceProject(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_E));
assertEquals(1, editingDomains.size());
assertTrue(idEditingDomain10.equals(editingDomains.get(0).getID()));
assertEditingDomainResourcesSizeEquals(editingDomains.get(0), resource10InHBProject10E + resource10InHBProject10F);
}
}