/*
Copyright (C) 2008-2009 by Claas Wilke (claaswilke@gmx.net)
This file is part of the Model Bus Test Suite of Dresden OCL2 for Eclipse.
Dresden OCL2 for Eclipse is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your option)
any later version.
Dresden OCL2 for Eclipse is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
for more details.
You should have received a copy of the GNU Lesser General Public License along
with Dresden OCL2 for Eclipse. If not, see <http://www.gnu.org/licenses/>.
*/
package org.dresdenocl.modelbus.test.modelinstance;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
import org.dresdenocl.model.IModel;
import org.dresdenocl.model.ModelAccessException;
import org.dresdenocl.model.metamodel.IMetamodelRegistry;
import org.dresdenocl.modelbus.ModelBusPlugin;
import org.dresdenocl.modelbus.test.ModelBusTestUtility;
import org.dresdenocl.modelinstance.IModelInstance;
import org.dresdenocl.modelinstance.IModelInstanceRegistry;
/**
* <p>
* Test cases to test the default {@link IMetamodelRegistry} implementation.
* </p>
*
* @author Claas Wilke
*/
public class ModelInstanceRegistryTest {
/** The {@link IModel} used by all test cases. */
private IModel model;
/**
* <p>
* Disposes the {@link IModelInstanceRegistry} before the execution of every
* test case to avoid side effects.
* </p>
*
* @throws ModelAccessException
*/
@Before
public void setUp() throws ModelAccessException {
if (this.model == null) {
this.model =
ModelBusTestUtility.getUML2Model("resources/models/model03.uml");
}
// no else.
ModelBusPlugin.getModelInstanceRegistry().dispose();
}
/**
* <p>
* Tests the method
* {@link IModelInstanceRegistry#addModelInstance(IModel, IModelInstance)} by
* simply adding a not yet added {@link IModelInstance}.
* </p>
*
* @throws ModelAccessException
*/
@Test
public void testAddModelInstance01() throws ModelAccessException {
IModelInstanceRegistry modelInstanceRegistry;
modelInstanceRegistry = ModelBusPlugin.getModelInstanceRegistry();
assertEquals(0, modelInstanceRegistry.getModelInstances(this.model).length);
IModelInstance modelInstance;
modelInstance =
ModelBusTestUtility.getJavaModelInstance(
"target/classes/package1/ModelInstance01ProviderClass.class", this.model);
modelInstanceRegistry.addModelInstance(modelInstance);
/* The model should now be added to the registry. */
assertEquals(1, modelInstanceRegistry.getModelInstances(this.model).length);
/* The model instance should be set as active model instance. */
assertNotNull(modelInstanceRegistry.getActiveModelInstance(this.model));
assertEquals(modelInstance, modelInstanceRegistry
.getActiveModelInstance(this.model));
}
/**
* <p>
* Tests the method
* {@link IModelInstanceRegistry#addModelInstance(IModel, IModelInstance)} by
* simply adding the same {@link IModelInstance} twice.
* </p>
*
* @throws ModelAccessException
*/
@Test
public void testAddModelInstance02() throws ModelAccessException {
IModelInstanceRegistry modelInstanceRegistry;
modelInstanceRegistry = ModelBusPlugin.getModelInstanceRegistry();
assertEquals(0, modelInstanceRegistry.getModelInstances(this.model).length);
IModelInstance modelInstance;
modelInstance =
ModelBusTestUtility.getJavaModelInstance(
"target/classes/package1/ModelInstance01ProviderClass.class", this.model);
modelInstanceRegistry.addModelInstance(modelInstance);
/* The model should now be added to the registry. */
assertEquals(1, modelInstanceRegistry.getModelInstances(this.model).length);
/* The model instance should be set as active model instance. */
assertNotNull(modelInstanceRegistry.getActiveModelInstance(this.model));
assertEquals(modelInstance, modelInstanceRegistry
.getActiveModelInstance(this.model));
/* Add the same model instance again. */
modelInstanceRegistry.addModelInstance(modelInstance);
/* The model should now be added to the registry. */
assertEquals(1, modelInstanceRegistry.getModelInstances(this.model).length);
/* The model instance should be set as active model instance. */
assertNotNull(modelInstanceRegistry.getActiveModelInstance(this.model));
assertEquals(modelInstance, modelInstanceRegistry
.getActiveModelInstance(this.model));
}
/**
* <p>
* Tests the method
* {@link IModelInstanceRegistry#addModelInstance(IModel, IModelInstance)} by
* simply reloading and readding the same {@link IModelInstance} twice.
* </p>
*
* @throws ModelAccessException
*/
@Test
public void testAddModelInstance03() throws ModelAccessException {
IModelInstanceRegistry modelInstanceRegistry;
modelInstanceRegistry = ModelBusPlugin.getModelInstanceRegistry();
assertEquals(0, modelInstanceRegistry.getModelInstances(this.model).length);
IModelInstance modelInstance;
modelInstance =
ModelBusTestUtility.getJavaModelInstance(
"target/classes/package1/ModelInstance01ProviderClass.class", this.model);
modelInstanceRegistry.addModelInstance(modelInstance);
/* The model should now be added to the registry. */
assertEquals(1, modelInstanceRegistry.getModelInstances(this.model).length);
/* The model instance should be set as active model instance. */
assertNotNull(modelInstanceRegistry.getActiveModelInstance(this.model));
assertEquals(modelInstance, modelInstanceRegistry
.getActiveModelInstance(this.model));
/* Load and add the same model instance again. */
modelInstance =
ModelBusTestUtility.getJavaModelInstance(
"target/classes/package1/ModelInstance01ProviderClass.class", this.model);
modelInstanceRegistry.addModelInstance(modelInstance);
/* The model should now be added to the registry. */
assertEquals(1, modelInstanceRegistry.getModelInstances(this.model).length);
/* The model instance should be set as active model instance. */
assertNotNull(modelInstanceRegistry.getActiveModelInstance(this.model));
assertEquals(modelInstance, modelInstanceRegistry
.getActiveModelInstance(this.model));
}
/**
* <p>
* Tests the method
* {@link IModelInstanceRegistry#addModelInstance(IModel, IModelInstance)} by
* simply adding two different {@link IModelInstance}s.
* </p>
*
* @throws ModelAccessException
*/
@Test
public void testAddModelInstance04() throws ModelAccessException {
IModelInstanceRegistry modelInstanceRegistry;
modelInstanceRegistry = ModelBusPlugin.getModelInstanceRegistry();
assertEquals(0, modelInstanceRegistry.getModelInstances(this.model).length);
IModelInstance modelInstance1;
modelInstance1 =
ModelBusTestUtility.getJavaModelInstance(
"target/classes/package1/ModelInstance01ProviderClass.class", this.model);
modelInstanceRegistry.addModelInstance(modelInstance1);
/* The model should now be added to the registry. */
assertEquals(1, modelInstanceRegistry.getModelInstances(this.model).length);
/* The model instance should be set as active model instance. */
assertNotNull(modelInstanceRegistry.getActiveModelInstance(this.model));
assertEquals(modelInstance1, modelInstanceRegistry
.getActiveModelInstance(this.model));
/* Load and add another model instance. */
IModelInstance modelInstance2;
modelInstance2 =
ModelBusTestUtility.getJavaModelInstance(
"target/classes/package1/ModelInstance02ProviderClass.class", this.model);
modelInstanceRegistry.addModelInstance(modelInstance2);
/* The model should now be added to the registry. */
assertEquals(2, modelInstanceRegistry.getModelInstances(this.model).length);
/* The first model instance should still be set as active model instance. */
assertNotNull(modelInstanceRegistry.getActiveModelInstance(this.model));
assertEquals(modelInstance1, modelInstanceRegistry
.getActiveModelInstance(this.model));
}
/**
* <p>
* Tests the method
* {@link IModelInstanceRegistry#removeModelInstance(IModelInstance)} by
* simply removing an {@link IModelInstance} that has been added before.
* </p>
*
* @throws ModelAccessException
*/
@Test
public void testRemoveModelInstance01() throws ModelAccessException {
IModelInstanceRegistry modelInstanceRegistry;
modelInstanceRegistry = ModelBusPlugin.getModelInstanceRegistry();
assertEquals(0, modelInstanceRegistry.getModelInstances(this.model).length);
IModelInstance modelInstance01;
modelInstance01 =
ModelBusTestUtility.getJavaModelInstance(
"target/classes/package1/ModelInstance01ProviderClass.class", this.model);
modelInstanceRegistry.addModelInstance(modelInstance01);
/* The model should now be added to the registry. */
assertEquals(1, modelInstanceRegistry.getModelInstances(this.model).length);
/* The model instance should be set as active model instance. */
assertNotNull(modelInstanceRegistry.getActiveModelInstance(this.model));
assertEquals(modelInstance01, modelInstanceRegistry
.getActiveModelInstance(this.model));
assertTrue(modelInstanceRegistry.removeModelInstance(modelInstance01));
/* The model instance should now be removed from the registry. */
assertEquals(0, modelInstanceRegistry.getModelInstances(this.model).length);
/* Active model instance should be null. */
assertNull(modelInstanceRegistry.getActiveModelInstance(this.model));
}
/**
* <p>
* Tests the method
* {@link IModelInstanceRegistry#removeModelInstance(IModelInstance)} by
* simply removing an {@link IModelInstance} that has been added before.
* </p>
*
* @throws ModelAccessException
*/
@Test
public void testRemoveModelInstance02() throws ModelAccessException {
IModelInstanceRegistry modelInstanceRegistry;
modelInstanceRegistry = ModelBusPlugin.getModelInstanceRegistry();
assertEquals(0, modelInstanceRegistry.getModelInstances(this.model).length);
IModelInstance modelInstance01;
modelInstance01 =
ModelBusTestUtility.getJavaModelInstance(
"target/classes/package1/ModelInstance01ProviderClass.class", this.model);
IModelInstance modelInstance02;
modelInstance02 =
ModelBusTestUtility.getJavaModelInstance(
"target/classes/package1/ModelInstance02ProviderClass.class", this.model);
modelInstanceRegistry.addModelInstance(modelInstance01);
modelInstanceRegistry.addModelInstance(modelInstance02);
/* The model instances should now be added to the registry. */
assertEquals(2, modelInstanceRegistry.getModelInstances(this.model).length);
/* The first model instance should be set as active model instance. */
assertNotNull(modelInstanceRegistry.getActiveModelInstance(this.model));
assertEquals(modelInstance01, modelInstanceRegistry
.getActiveModelInstance(this.model));
assertTrue(modelInstanceRegistry.removeModelInstance(modelInstance01));
/* The model instance should now be removed from the registry. */
assertEquals(1, modelInstanceRegistry.getModelInstances(this.model).length);
/* Active model instance should be set to model instance 2. */
assertNotNull(modelInstanceRegistry.getActiveModelInstance(this.model));
assertEquals(modelInstance02, modelInstanceRegistry
.getActiveModelInstance(this.model));
}
/**
* <p>
* Tests the method
* {@link IModelInstanceRegistry#removeModelInstance(IModelInstance)} by
* simply removing an {@link IModelInstance} that has been added before.
* </p>
*
* @throws ModelAccessException
*/
@Test
public void testRemoveModelInstance03() throws ModelAccessException {
IModelInstanceRegistry modelInstanceRegistry;
modelInstanceRegistry = ModelBusPlugin.getModelInstanceRegistry();
assertEquals(0, modelInstanceRegistry.getModelInstances(this.model).length);
IModelInstance modelInstance01;
modelInstance01 =
ModelBusTestUtility.getJavaModelInstance(
"target/classes/package1/ModelInstance01ProviderClass.class", this.model);
IModelInstance modelInstance02;
modelInstance02 =
ModelBusTestUtility.getJavaModelInstance(
"target/classes/package1/ModelInstance02ProviderClass.class", this.model);
IModelInstance modelInstance03;
modelInstance03 =
ModelBusTestUtility.getJavaModelInstance(
"target/classes/package1/ModelInstance03ProviderClass.class", this.model);
modelInstanceRegistry.addModelInstance(modelInstance01);
modelInstanceRegistry.addModelInstance(modelInstance02);
modelInstanceRegistry.addModelInstance(modelInstance03);
/* The model instances should now be added to the registry. */
assertEquals(3, modelInstanceRegistry.getModelInstances(this.model).length);
/* The first model instance should be set as active model instance. */
assertNotNull(modelInstanceRegistry.getActiveModelInstance(this.model));
assertEquals(modelInstance01, modelInstanceRegistry
.getActiveModelInstance(this.model));
assertTrue(modelInstanceRegistry.removeModelInstance(modelInstance01));
/* The model instance should now be removed from the registry. */
assertEquals(2, modelInstanceRegistry.getModelInstances(this.model).length);
/* Active model instance should be set to null. */
assertNull(modelInstanceRegistry.getActiveModelInstance(this.model));
}
/**
* <p>
* Tests the method
* {@link IModelInstanceRegistry#removeModelInstance(IModelInstance)} by
* simply removing a <code>null</code> value.
* </p>
*
* @throws ModelAccessException
*/
@Test(expected = IllegalArgumentException.class)
public void testRemoveModelInstance04() throws ModelAccessException {
IModelInstanceRegistry modelInstanceRegistry;
modelInstanceRegistry = ModelBusPlugin.getModelInstanceRegistry();
assertEquals(0, modelInstanceRegistry.getModelInstances(this.model).length);
IModelInstance modelInstance01;
modelInstance01 = null;
/* Should raise an exception. */
modelInstanceRegistry.removeModelInstance(modelInstance01);
}
/**
* <p>
* Tests the method
* {@link IModelInstanceRegistry#removeModelInstance(IModelInstance)} by
* simply removing an {@link IModelInstance} that has not been added before.
* </p>
*
* @throws ModelAccessException
*/
@Test
public void testRemoveModelInstance05() throws ModelAccessException {
IModelInstanceRegistry modelInstanceRegistry;
modelInstanceRegistry = ModelBusPlugin.getModelInstanceRegistry();
assertEquals(0, modelInstanceRegistry.getModelInstances(this.model).length);
IModelInstance modelInstance01;
modelInstance01 =
ModelBusTestUtility.getJavaModelInstance(
"target/classes/package1/ModelInstance01ProviderClass.class", this.model);
assertFalse(modelInstanceRegistry.removeModelInstance(modelInstance01));
}
/**
* <p>
* Tests the method {@link IModelInstanceRegistry#removeModelInstance(String)}
* by simply removing an {@link IModelInstance} that has been added before.
* </p>
*
* @throws ModelAccessException
*/
@Test
public void testRemoveModelInstance06() throws ModelAccessException {
IModelInstanceRegistry modelInstanceRegistry;
modelInstanceRegistry = ModelBusPlugin.getModelInstanceRegistry();
assertEquals(0, modelInstanceRegistry.getModelInstances(this.model).length);
IModelInstance modelInstance01;
modelInstance01 =
ModelBusTestUtility.getJavaModelInstance(
"target/classes/package1/ModelInstance01ProviderClass.class", this.model);
modelInstanceRegistry.addModelInstance(modelInstance01);
/* The model should now be added to the registry. */
assertEquals(1, modelInstanceRegistry.getModelInstances(this.model).length);
/* The model instance should be set as active model instance. */
assertNotNull(modelInstanceRegistry.getActiveModelInstance(this.model));
assertEquals(modelInstance01, modelInstanceRegistry
.getActiveModelInstance(this.model));
IModelInstance removedIModelInstance;
removedIModelInstance =
modelInstanceRegistry.removeModelInstance(modelInstance01
.getDisplayName());
assertEquals(modelInstance01, removedIModelInstance);
/* The model instance should now be removed from the registry. */
assertEquals(0, modelInstanceRegistry.getModelInstances(this.model).length);
/* Active model instance should be null. */
assertNull(modelInstanceRegistry.getActiveModelInstance(this.model));
}
/**
* <p>
* Tests the method {@link IModelInstanceRegistry#removeModelInstance(String)}
* by simply removing an {@link IModelInstance}'s display name that does not
* exist.
* </p>
*
* @throws ModelAccessException
*/
@Test
public void testRemoveModelInstance07() throws ModelAccessException {
IModelInstanceRegistry modelInstanceRegistry;
modelInstanceRegistry = ModelBusPlugin.getModelInstanceRegistry();
assertEquals(0, modelInstanceRegistry.getModelInstances(this.model).length);
IModelInstance modelInstance01;
modelInstance01 =
ModelBusTestUtility.getJavaModelInstance(
"target/classes/package1/ModelInstance01ProviderClass.class", this.model);
modelInstanceRegistry.addModelInstance(modelInstance01);
/* The model should now be added to the registry. */
assertEquals(1, modelInstanceRegistry.getModelInstances(this.model).length);
/* The model instance should be set as active model instance. */
assertNotNull(modelInstanceRegistry.getActiveModelInstance(this.model));
assertEquals(modelInstance01, modelInstanceRegistry
.getActiveModelInstance(this.model));
IModelInstance removedIModelInstance;
removedIModelInstance =
modelInstanceRegistry.removeModelInstance("unknown display name");
assertNull(removedIModelInstance);
/* The model instance should not be removed from the registry. */
assertEquals(1, modelInstanceRegistry.getModelInstances(this.model).length);
/* Active model instance should stil be set. */
assertNotNull(modelInstanceRegistry.getActiveModelInstance(this.model));
assertEquals(modelInstance01, modelInstanceRegistry
.getActiveModelInstance(this.model));
}
/**
* <p>
* Tests the method {@link IModelInstanceRegistry#removeModelInstance(String)}
* by simply removing a <code>null</code> value.
* </p>
*
* @throws ModelAccessException
*/
@Test(expected = IllegalArgumentException.class)
public void testRemoveModelInstance08() throws ModelAccessException {
IModelInstanceRegistry modelInstanceRegistry;
modelInstanceRegistry = ModelBusPlugin.getModelInstanceRegistry();
String displayName;
displayName = null;
/* Should raise an exception. */
modelInstanceRegistry.removeModelInstance(displayName);
}
/**
* <p>
* Tests the method
* {@link IModelInstanceRegistry#setActiveModelInstance(IModel, IModelInstance)}
* by setting an {@link IModelInstance} as active that has been added before.
* </p>
*
* @throws ModelAccessException
*/
@Test
public void testSetActiveModelInstance01() throws ModelAccessException {
IModelInstanceRegistry modelInstanceRegistry;
modelInstanceRegistry = ModelBusPlugin.getModelInstanceRegistry();
assertEquals(0, modelInstanceRegistry.getModelInstances(this.model).length);
IModelInstance modelInstance;
modelInstance =
ModelBusTestUtility.getJavaModelInstance(
"target/classes/package1/ModelInstance01ProviderClass.class", this.model);
modelInstanceRegistry.addModelInstance(modelInstance);
/* The model instance should now be added to the registry. */
assertEquals(1, modelInstanceRegistry.getModelInstances(this.model).length);
/* Set the model instance as active. */
modelInstanceRegistry.setActiveModelInstance(this.model, modelInstance);
/* The model Instance should be set as active model instance. */
assertNotNull(modelInstanceRegistry.getActiveModelInstance(this.model));
assertEquals(modelInstance, modelInstanceRegistry
.getActiveModelInstance(this.model));
}
/**
* <p>
* Tests the method
* {@link IModelInstanceRegistry#setActiveModelInstance(IModel, IModelInstance)}
* by setting an {@link IModelInstance} as active that has not been added
* before.
* </p>
*
* @throws ModelAccessException
*/
@Test(expected = IllegalArgumentException.class)
public void testSetActiveModelInstance02() throws ModelAccessException {
IModelInstanceRegistry modelInstanceRegistry;
modelInstanceRegistry = ModelBusPlugin.getModelInstanceRegistry();
assertEquals(0, modelInstanceRegistry.getModelInstances(this.model).length);
IModelInstance modelInstance;
modelInstance =
ModelBusTestUtility.getJavaModelInstance(
"target/classes/package1/ModelInstance01ProviderClass.class", this.model);
/* Should cause an exception. */
modelInstanceRegistry.setActiveModelInstance(this.model, modelInstance);
}
/**
* <p>
* Tests the method
* {@link IModelInstanceRegistry#setActiveModelInstance(IModel, IModelInstance)}
* by setting <code>null</code> as active
* </p>
*
* @throws ModelAccessException
*/
@Test
public void testSetActiveModelInstance03() throws ModelAccessException {
IModelInstanceRegistry modelInstanceRegistry;
modelInstanceRegistry = ModelBusPlugin.getModelInstanceRegistry();
assertEquals(0, modelInstanceRegistry.getModelInstances(this.model).length);
IModelInstance modelInstance;
modelInstance =
ModelBusTestUtility.getJavaModelInstance(
"target/classes/package1/ModelInstance01ProviderClass.class", this.model);
modelInstanceRegistry.addModelInstance(modelInstance);
/* The model instance should now be added to the registry. */
assertEquals(1, modelInstanceRegistry.getModelInstances(this.model).length);
/* Should not cause an exception. */
modelInstanceRegistry.setActiveModelInstance(this.model, null);
/* The model Instance should be set to null. */
assertNull(modelInstanceRegistry.getActiveModelInstance(this.model));
}
/**
* <p>
* Tests the method
* {@link IModelInstanceRegistry#setActiveModelInstance(IModel, IModelInstance)}
* by setting an two {@link IModelInstance}s as active that have been added
* before.
* </p>
*
* @throws ModelAccessException
*/
@Test
public void testSetActiveModelInstance04() throws ModelAccessException {
IModelInstanceRegistry modelInstanceRegistry;
modelInstanceRegistry = ModelBusPlugin.getModelInstanceRegistry();
assertEquals(0, modelInstanceRegistry.getModelInstances(this.model).length);
IModelInstance modelInstance1;
modelInstance1 =
ModelBusTestUtility.getJavaModelInstance(
"target/classes/package1/ModelInstance01ProviderClass.class", this.model);
modelInstanceRegistry.addModelInstance(modelInstance1);
/* Set the model instance as active. */
modelInstanceRegistry.setActiveModelInstance(this.model, modelInstance1);
/* The model Instance should be set as active model instance. */
assertNotNull(modelInstanceRegistry.getActiveModelInstance(this.model));
assertEquals(modelInstance1, modelInstanceRegistry
.getActiveModelInstance(this.model));
/* Load another model instance. */
IModelInstance modelInstance2;
modelInstance2 =
ModelBusTestUtility.getJavaModelInstance(
"target/classes/package1/ModelInstance02ProviderClass.class", this.model);
modelInstanceRegistry.addModelInstance(modelInstance2);
/* Set the model instance as active. */
modelInstanceRegistry.setActiveModelInstance(this.model, modelInstance2);
/* The model Instance should be set as active model instance. */
assertNotNull(modelInstanceRegistry.getActiveModelInstance(this.model));
assertEquals(modelInstance2, modelInstanceRegistry
.getActiveModelInstance(this.model));
/* Set the first model instance as active again. */
modelInstanceRegistry.setActiveModelInstance(this.model, modelInstance1);
/* The model Instance should be set as active model instance. */
assertNotNull(modelInstanceRegistry.getActiveModelInstance(this.model));
assertEquals(modelInstance1, modelInstanceRegistry
.getActiveModelInstance(this.model));
}
}