blob: d9046d85817b2c17c61c5df601dbf3ce7378a17b [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 v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
*
* Contributors:
* See4sys - Initial API and implementation
* itemis - [423676] AbstractIntegrationTestCase unable to remove project references that are no longer needed
* Siemens - [574930] Model load manager extension
*
* </copyright>
*/
package org.eclipse.sphinx.tests.emf.workspace.integration.internal.loading;
import java.util.Collection;
import java.util.Collections;
import java.util.Set;
import org.eclipse.core.resources.IProject;
import org.eclipse.sphinx.emf.metamodel.IMetaModelDescriptor;
import org.eclipse.sphinx.emf.metamodel.MetaModelDescriptorRegistry;
import org.eclipse.sphinx.emf.model.IModelDescriptor;
import org.eclipse.sphinx.emf.model.ModelDescriptorRegistry;
import org.eclipse.sphinx.emf.workspace.internal.loading.ModelLoadJob;
import org.eclipse.sphinx.emf.workspace.loading.LoadJobScheduler;
import org.eclipse.sphinx.emf.workspace.loading.ModelLoadManager;
import org.eclipse.sphinx.emf.workspace.loading.operations.DefaultModelLoadOperation;
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.DefaultTestReferenceWorkspace;
/**
*
*/
@SuppressWarnings({ "restriction" })
public class ModelLoadJobTest extends AbstractLoadJobTest {
public ModelLoadJobTest() {
// Set subset of projects to load
Set<String> projectsToLoad = getProjectSubsetToLoad();
projectsToLoad.add(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B);
setProjectsClosedOnStartup(false);
}
/**
* Test method for
* {@linkplain ModelLoadJob#shouldCreateJob(java.util.Collection, boolean, org.eclipse.sphinx.emf.metamodel.IMetaModelDescriptor)}
* <p>
* Test made on loading of project {@linkplain DefaultTestReferenceWorkspace#arProject20_B} specifying
* {@linkplain Hummingbird10MMDescriptor} as meta-model descriptor (consider or not its referenced projects is not
* relevant in the context of this test and corresponding boolean will be kept to <code>false</code>).
*/
public void testShouldCreateJob_20B_hb20RD() {
// Local initialization of this test
LoadJobScheduler loadJobScheduler = new LoadJobScheduler();
Collection<IProject> projects = Collections.singletonList(refWks.getReferenceProject(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B));
Collection<IModelDescriptor> modelDescriptors = ModelDescriptorRegistry.INSTANCE
.getModels(refWks.getReferenceProject(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B));
IModelDescriptor modelDescriptor = null;
for (IModelDescriptor descriptor : modelDescriptors) {
if (descriptor.getMetaModelDescriptor() == Hummingbird20MMDescriptor.INSTANCE) {
modelDescriptor = descriptor;
break;
}
}
assertNotNull(modelDescriptor);
ModelLoadManager.INSTANCE.loadModel(modelDescriptor, true, null);
// Verify prerequisites assertions
assertOnlyOneLoadJobIsSleeping(DefaultModelLoadOperation.class);
// The results of the method under test
boolean[] shouldCreateJob = new boolean[5];
// The messages to display in case of violated assertions
String[] messages = new String[5];
int index = -1;
{ // 0
IMetaModelDescriptor mmDescriptor = Hummingbird10MMDescriptor.INSTANCE;
messages[++index] = getMessage(SHOULD_NOT_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = !loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
{ // 1
IMetaModelDescriptor mmDescriptor = Hummingbird20MMDescriptor.INSTANCE;
messages[++index] = getMessage(SHOULD_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
{ // 2
IMetaModelDescriptor mmDescriptor = UML2MMDescriptor.INSTANCE;
messages[++index] = getMessage(SHOULD_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
{ // 3
IMetaModelDescriptor mmDescriptor = MetaModelDescriptorRegistry.ANY_MM;
messages[++index] = getMessage(SHOULD_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
{ // 4
IMetaModelDescriptor mmDescriptor = null;
messages[++index] = getMessage(SHOULD_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
// Wake up the model load job that we put sleeping before
wakeUp();
// Check assertions
assertFalse(messages[0], shouldCreateJob[0]);
assertTrue(messages[1], shouldCreateJob[1]);
assertTrue(messages[2], shouldCreateJob[2]);
assertTrue(messages[3], shouldCreateJob[3]);
assertTrue(messages[4], shouldCreateJob[4]);
// Ends the test by verifying that everything is fine
finish();
}
/**
* Test method for
* {@linkplain ModelLoadJob#shouldCreateJob(java.util.Collection, boolean, org.eclipse.sphinx.emf.metamodel.IMetaModelDescriptor)}
* <p>
* Test made on loading of project {@linkplain DefaultTestReferenceWorkspace#arProject20_B} specifying
* {@linkplain Hummingbird20MMDescriptor} as meta-model descriptor (consider or not its referenced projects is not
* relevant in the context of this test and corresponding boolean will be kept to <code>false</code>).
*/
public void testShouldCreateJob_20B_Hb20RD() {
// Local initialization of this test
LoadJobScheduler loadJobScheduler = new LoadJobScheduler();
Collection<IProject> projects = Collections.singletonList(refWks.getReferenceProject(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B));
Collection<IModelDescriptor> modelDescriptors = ModelDescriptorRegistry.INSTANCE
.getModels(refWks.getReferenceProject(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B));
IModelDescriptor modelDescriptor = null;
for (IModelDescriptor descriptor : modelDescriptors) {
if (descriptor.getMetaModelDescriptor() == Hummingbird20MMDescriptor.INSTANCE) {
modelDescriptor = descriptor;
break;
}
}
assertNotNull(modelDescriptor);
ModelLoadManager.INSTANCE.loadModel(modelDescriptor, true, null);
// Verify prerequisites assertions
assertOnlyOneLoadJobIsSleeping(DefaultModelLoadOperation.class);
// The results of the method under test
boolean[] shouldCreateJob = new boolean[5];
// The messages to display in case of violated assertions
String[] messages = new String[5];
int index = -1;
{ // 0
IMetaModelDescriptor mmDescriptor = Hummingbird10MMDescriptor.INSTANCE;
messages[++index] = getMessage(SHOULD_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
{ // 1
IMetaModelDescriptor mmDescriptor = Hummingbird20MMDescriptor.INSTANCE;
messages[++index] = getMessage(SHOULD_NOT_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = !loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
{ // 2
IMetaModelDescriptor mmDescriptor = UML2MMDescriptor.INSTANCE;
messages[++index] = getMessage(SHOULD_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
{ // 3
IMetaModelDescriptor mmDescriptor = MetaModelDescriptorRegistry.ANY_MM;
messages[++index] = getMessage(SHOULD_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
{ // 4
IMetaModelDescriptor mmDescriptor = null;
messages[++index] = getMessage(SHOULD_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
// Wake up the model load job that we put sleeping before
wakeUp();
// Check assertions
assertTrue(messages[0], shouldCreateJob[0]);
assertFalse(messages[1], shouldCreateJob[1]);
assertTrue(messages[2], shouldCreateJob[2]);
assertTrue(messages[3], shouldCreateJob[3]);
assertTrue(messages[4], shouldCreateJob[4]);
// Ends the test by verifying that everything is fine
finish();
}
/**
* Test method for
* {@linkplain ModelLoadJob#shouldCreateJob(java.util.Collection, boolean, org.eclipse.sphinx.emf.metamodel.IMetaModelDescriptor)}
* <p>
* Test made on loading of project {@linkplain DefaultTestReferenceWorkspace#arProject20_B} specifying
* {@linkplain UML2MMDescriptor} as meta-model descriptor (consider or not its referenced projects is not relevant
* in the context of this test and corresponding boolean will be kept to <code>false</code>).
*/
public void testShouldCreateJob_20B_UML2MMD() {
// Local initialization of this test
LoadJobScheduler loadJobScheduler = new LoadJobScheduler();
Collection<IProject> projects = Collections.singletonList(refWks.getReferenceProject(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B));
Collection<IModelDescriptor> modelDescriptors = ModelDescriptorRegistry.INSTANCE
.getModels(refWks.getReferenceProject(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B));
IModelDescriptor modelDescriptor = null;
for (IModelDescriptor descriptor : modelDescriptors) {
if (descriptor.getMetaModelDescriptor() == UML2MMDescriptor.INSTANCE) {
modelDescriptor = descriptor;
break;
}
}
assertNotNull(modelDescriptor);
ModelLoadManager.INSTANCE.loadModel(modelDescriptor, true, null);
// Verify prerequisites assertions
assertOnlyOneLoadJobIsSleeping(DefaultModelLoadOperation.class);
// The results of the method under test
boolean[] shouldCreateJob = new boolean[5];
// The messages to display in case of violated assertions
String[] messages = new String[5];
int index = -1;
{ // 0
IMetaModelDescriptor mmDescriptor = Hummingbird10MMDescriptor.INSTANCE;
messages[++index] = getMessage(SHOULD_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
{ // 1
IMetaModelDescriptor mmDescriptor = Hummingbird20MMDescriptor.INSTANCE;
messages[++index] = getMessage(SHOULD_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
{ // 2
IMetaModelDescriptor mmDescriptor = UML2MMDescriptor.INSTANCE;
messages[++index] = getMessage(SHOULD_NOT_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = !loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
{ // 3
IMetaModelDescriptor mmDescriptor = MetaModelDescriptorRegistry.ANY_MM;
messages[++index] = getMessage(SHOULD_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
{ // 4
IMetaModelDescriptor mmDescriptor = null;
messages[++index] = getMessage(SHOULD_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
// Wake up the model load job that we put sleeping before
wakeUp();
// Check assertions
assertTrue(messages[0], shouldCreateJob[0]);
assertTrue(messages[1], shouldCreateJob[1]);
assertFalse(messages[2], shouldCreateJob[2]);
assertTrue(messages[3], shouldCreateJob[3]);
assertTrue(messages[4], shouldCreateJob[4]);
// Ends the test by verifying that everything is fine
finish();
}
/**
* Test method for
* {@linkplain ModelLoadJob#shouldCreateJob(java.util.Collection, boolean, org.eclipse.sphinx.emf.metamodel.IMetaModelDescriptor)}
* <p>
* Test made on loading of project {@linkplain DefaultTestReferenceWorkspace#arProject20_B} specifying
* {@linkplain MetaModelDescriptorRegistry#ANY_MM} as meta-model descriptor (consider or not its referenced projects
* is not relevant in the context of this test and corresponding boolean will be kept to <code>false</code>).
*
* @throws Exception
*/
public void testShouldCreateJob_20B_ANYMM() throws Exception {
// Local initialization of this test
LoadJobScheduler loadJobScheduler = new LoadJobScheduler();
Collection<IProject> projects = Collections.singletonList(refWks.getReferenceProject(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B));
Collection<IModelDescriptor> modelDescriptors = ModelDescriptorRegistry.INSTANCE
.getModels(refWks.getReferenceProject(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B));
IModelDescriptor modelDescriptor = null;
for (IModelDescriptor descriptor : modelDescriptors) {
if (descriptor.getMetaModelDescriptor() == Hummingbird20MMDescriptor.INSTANCE) {
modelDescriptor = descriptor;
break;
}
}
assertNotNull(modelDescriptor);
ModelLoadManager.INSTANCE.loadModel(modelDescriptor, true, null);
// Verify prerequisites assertions
assertOnlyOneLoadJobIsSleeping(DefaultModelLoadOperation.class);
// The results of the method under test
boolean[] shouldCreateJob = new boolean[5];
// The messages to display in case of violated assertions
String[] messages = new String[5];
int index = -1;
{ // 0
IMetaModelDescriptor mmDescriptor = Hummingbird10MMDescriptor.INSTANCE;
messages[++index] = getMessage(SHOULD_NOT_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = !loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
{ // 1
IMetaModelDescriptor mmDescriptor = Hummingbird20MMDescriptor.INSTANCE;
messages[++index] = getMessage(SHOULD_NOT_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = !loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
{ // 2
IMetaModelDescriptor mmDescriptor = UML2MMDescriptor.INSTANCE;
messages[++index] = getMessage(SHOULD_NOT_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = !loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
{ // 3
IMetaModelDescriptor mmDescriptor = MetaModelDescriptorRegistry.ANY_MM;
messages[++index] = getMessage(SHOULD_NOT_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = !loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
{ // 4
IMetaModelDescriptor mmDescriptor = null;
messages[++index] = getMessage(SHOULD_NOT_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = !loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
// Wake up the model load job that we put sleeping before
wakeUp();
// Check assertions
assertFalse(messages[0], shouldCreateJob[0]);
assertFalse(messages[1], shouldCreateJob[1]);
assertFalse(messages[2], shouldCreateJob[2]);
assertFalse(messages[3], shouldCreateJob[3]);
assertFalse(messages[4], shouldCreateJob[4]);
// Ends the test by verifying that everything is fine
finish();
}
/**
* Test method for
* {@linkplain ModelLoadJob#shouldCreateJob(java.util.Collection, boolean, org.eclipse.sphinx.emf.metamodel.IMetaModelDescriptor)}
* <p>
* Test made on loading of project {@linkplain DefaultTestReferenceWorkspace#arProject20_B} specifying
* <code>null</code> as meta-model descriptor (consider or not its referenced projects is not relevant in the
* context of this test and corresponding boolean will be kept to <code>false</code>).
*/
public void testShouldCreateJob_20B_null() {
// Local initialization of this test
LoadJobScheduler loadJobScheduler = new LoadJobScheduler();
Collection<IProject> projects = Collections.singletonList(refWks.getReferenceProject(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B));
Collection<IModelDescriptor> modelDescriptors = ModelDescriptorRegistry.INSTANCE
.getModels(refWks.getReferenceProject(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B));
IModelDescriptor modelDescriptor = null;
for (IModelDescriptor descriptor : modelDescriptors) {
if (descriptor.getMetaModelDescriptor() == Hummingbird20MMDescriptor.INSTANCE) {
modelDescriptor = descriptor;
break;
}
}
assertNotNull(modelDescriptor);
ModelLoadManager.INSTANCE.loadModel(modelDescriptor, true, null);
// Verify prerequisites assertions
assertOnlyOneLoadJobIsSleeping(DefaultModelLoadOperation.class);
// The results of the method under test
boolean[] shouldCreateJob = new boolean[5];
// The messages to display in case of violated assertions
String[] messages = new String[5];
int index = -1;
{ // 0
IMetaModelDescriptor mmDescriptor = Hummingbird10MMDescriptor.INSTANCE;
messages[++index] = getMessage(SHOULD_NOT_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = !loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
{ // 1
IMetaModelDescriptor mmDescriptor = Hummingbird20MMDescriptor.INSTANCE;
messages[++index] = getMessage(SHOULD_NOT_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = !loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
{ // 2
IMetaModelDescriptor mmDescriptor = UML2MMDescriptor.INSTANCE;
messages[++index] = getMessage(SHOULD_NOT_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = !loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
{ // 3
IMetaModelDescriptor mmDescriptor = MetaModelDescriptorRegistry.ANY_MM;
messages[++index] = getMessage(SHOULD_NOT_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = !loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
{ // 4
IMetaModelDescriptor mmDescriptor = null;
messages[++index] = getMessage(SHOULD_NOT_CREATE, projects, mmDescriptor);
DefaultModelLoadOperation defaultModelLoadOperation = new DefaultModelLoadOperation(modelDescriptor, false);
shouldCreateJob[index] = !loadJobScheduler.coveredByExistingLoadJob(defaultModelLoadOperation);
}
// Wake up the model load job that we put sleeping before
wakeUp();
// Check assertions
assertFalse(messages[0], shouldCreateJob[0]);
assertFalse(messages[1], shouldCreateJob[1]);
assertFalse(messages[2], shouldCreateJob[2]);
assertFalse(messages[3], shouldCreateJob[3]);
assertFalse(messages[4], shouldCreateJob[4]);
// Ends the test by verifying that everything is fine
finish();
}
}