blob: f6dd9fdac9f36601d7443f4ec2be0c03a77507ef [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013 CEA LIST.
* 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:
* Cedric Dumoulin - cedric.dumoulin@lifl.fr
******************************************************************************/
package org.eclipse.papyrus.layers.runtime.tests;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import org.eclipse.emf.common.util.URI;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.gmf.runtime.notation.NotationFactory;
import org.eclipse.papyrus.infra.core.resource.ModelSet;
import org.eclipse.papyrus.infra.gmfdiag.common.model.NotationModel;
import org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackApplicationSynchronizer;
import org.eclipse.papyrus.infra.gmfdiag.layers.runtime.NotationDiagramHelper;
import org.eclipse.papyrus.infra.gmfdiag.layers.runtime.model.LayersModelResource;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* Tests for the {@link LayerStackApplicationSynchronizer} class.
* This tests do not tests event received when models are modified.
* This tests tests method behavior when they are called directly.
*
* @author cedric dumoulin
*
*/
public class LayerStackApplicationSynchronizerTest {
/**
* URI used to store the created model.
*/
protected static final String PROJECT_MODEL_URI = "org.eclipse.papyrus.infra.core/tmp/model1.di";
/**
* ModelSet created for each test
*/
protected ModelSet modelSet;
/**
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
// Create ModelSet and Model
ModelSet mngr = new ModelSet();
// LayersModel
LayersModelResource layersModel = new LayersModelResource();
mngr.registerModel(layersModel);
// Notation model
NotationModel notationModel = new NotationModel();
mngr.registerModel(notationModel);
// Do create resources
URI uri = URI.createPlatformResourceURI(PROJECT_MODEL_URI, true);
mngr.createModels(uri);
modelSet = mngr;
}
/**
* @throws java.lang.Exception
*/
@After
public void tearDown() throws Exception {
modelSet.unload();
}
/**
* Test the correct creation of the modelSet
*/
@Test
public void testModelSetCreation() {
NotationModel notationModel = (NotationModel) modelSet.getModel(NotationModel.MODEL_ID);
assertNotNull("NotationModel is created", notationModel);
// Try to create a Diagram
notationModel.addDiagram(NotationFactory.eINSTANCE.createDiagram());
//
assertNotNull("Diagram is in the roots", notationModel.getResource().getContents().get(0));
LayersModelResource layersModel = (LayersModelResource) modelSet.getModel(LayersModelResource.MODEL_ID);
assertNotNull("LayerModel is created", layersModel);
assertNotNull("LayerStackApplication is created", layersModel.getLayerStackApplication());
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackApplicationSynchronizer#LayerStackApplicationSynchronizer(org.eclipse.papyrus.infra.gmfdiag.layers.runtime.model.LayersModelResource, org.eclipse.papyrus.infra.gmfdiag.common.model.NotationModel)}.
*/
@Test
public void testLayerStackApplicationSynchronizer() {
NotationModel notationModel = (NotationModel) modelSet.getModel(NotationModel.MODEL_ID);
LayersModelResource layersModel = (LayersModelResource) modelSet.getModel(LayersModelResource.MODEL_ID);
LayerStackApplicationSynchronizer synchronizer = new LayerStackApplicationSynchronizer(layersModel, notationModel);
assertNotNull("application created", synchronizer);
// dispose
synchronizer.dispose();
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackApplicationSynchronizer#getLayersModel()}.
*/
@Test
public void testGetLayersModel() {
NotationModel notationModel = (NotationModel) modelSet.getModel(NotationModel.MODEL_ID);
LayersModelResource layersModel = (LayersModelResource) modelSet.getModel(LayersModelResource.MODEL_ID);
LayerStackApplicationSynchronizer synchronizer = new LayerStackApplicationSynchronizer(layersModel, notationModel);
assertNotNull("layers model exist", synchronizer.getLayersModel());
assertSame("right layer model", layersModel, synchronizer.getLayersModel());
// dispose
synchronizer.dispose();
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackApplicationSynchronizer#getNotationModel()}.
*/
@Test
public void testGetNotationModel() {
NotationModel notationModel = (NotationModel) modelSet.getModel(NotationModel.MODEL_ID);
LayersModelResource layersModel = (LayersModelResource) modelSet.getModel(LayersModelResource.MODEL_ID);
LayerStackApplicationSynchronizer synchronizer = new LayerStackApplicationSynchronizer(layersModel, notationModel);
assertNotNull("layers model exist", synchronizer.getNotationModel());
assertSame("right layer model", notationModel, synchronizer.getNotationModel());
// dispose
synchronizer.dispose();
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackApplicationSynchronizer#dispose()}.
*/
@Test
public void testDispose() {
NotationModel notationModel = (NotationModel) modelSet.getModel(NotationModel.MODEL_ID);
LayersModelResource layersModel = (LayersModelResource) modelSet.getModel(LayersModelResource.MODEL_ID);
LayerStackApplicationSynchronizer synchronizer = new LayerStackApplicationSynchronizer(layersModel, notationModel);
assertNotNull("application created", synchronizer.getLayersModel());
// Try to dispose
assertFalse("object is disposed", synchronizer.isDisposed());
synchronizer.dispose();
assertTrue("object is disposed", synchronizer.isDisposed());
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackApplicationSynchronizer#layerStackAdded(org.eclipse.emf.common.notify.Notification)}.
*/
@Test
public void testLayerStackAdded() {
NotationModel notationModel = (NotationModel) modelSet.getModel(NotationModel.MODEL_ID);
LayersModelResource layersModel = (LayersModelResource) modelSet.getModel(LayersModelResource.MODEL_ID);
// Init models
Diagram diagram = NotationFactory.eINSTANCE.createDiagram();
notationModel.addDiagram(diagram);
// Create a helper used to attach a LayerStack to diagram.
NotationDiagramHelper helper = new NotationDiagramHelper(layersModel, diagram);
LayerStackApplicationSynchronizer synchronizer = new LayerStackApplicationSynchronizer(layersModel, notationModel);
assertNotNull("application created", synchronizer);
// add a LayerStack to models
// in result, the method should be called
helper.attachLayersStack();
// Check if the appropriate LayerStackSynchronizer is created
assertNotNull("LayerStackSynchronizer added", synchronizer.getSynchronizers().get(diagram));
synchronizer.dispose();
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackApplicationSynchronizer#layerStackRemoved(org.eclipse.emf.common.notify.Notification)}.
*/
@Test
public void testLayerStackRemoved() {
NotationModel notationModel = (NotationModel) modelSet.getModel(NotationModel.MODEL_ID);
LayersModelResource layersModel = (LayersModelResource) modelSet.getModel(LayersModelResource.MODEL_ID);
// Init models
Diagram diagram = NotationFactory.eINSTANCE.createDiagram();
notationModel.addDiagram(diagram);
// Create a helper used to attach a LayerStack to diagram.
NotationDiagramHelper helper = new NotationDiagramHelper(layersModel, diagram);
LayerStackApplicationSynchronizer synchronizer = new LayerStackApplicationSynchronizer(layersModel, notationModel);
assertNotNull("application created", synchronizer);
// add a LayerStack to models
// in result, the method should be called
helper.attachLayersStack();
// Check if the appropriate LayerStackSynchronizer is created
assertNotNull("LayerStackSynchronizer added", synchronizer.getSynchronizers().get(diagram));
// Remove layer
helper.removeLayersStack();
assertNull("LayerStackSynchronizer removed", synchronizer.getSynchronizers().get(diagram));
synchronizer.dispose();
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackApplicationSynchronizer#diagramRemoved(org.eclipse.emf.common.notify.Notification)}.
*/
@Test
public void testDiagramRemoved() {
NotationModel notationModel = (NotationModel) modelSet.getModel(NotationModel.MODEL_ID);
LayersModelResource layersModel = (LayersModelResource) modelSet.getModel(LayersModelResource.MODEL_ID);
// Init models
Diagram diagram = NotationFactory.eINSTANCE.createDiagram();
notationModel.addDiagram(diagram);
// Create a helper used to attach a LayerStack to diagram.
NotationDiagramHelper helper = new NotationDiagramHelper(layersModel, diagram);
LayerStackApplicationSynchronizer synchronizer = new LayerStackApplicationSynchronizer(layersModel, notationModel);
assertNotNull("application created", synchronizer);
// add a LayerStack to models
// in result, the method should be called
helper.attachLayersStack();
// Check if the appropriate LayerStackSynchronizer is created
assertNotNull("LayerStackSynchronizer added", synchronizer.getSynchronizers().get(diagram));
// Remove diagram
notationModel.getResource().getContents().remove(diagram);
assertNull("LayerStackSynchronizer removed", synchronizer.getSynchronizers().get(diagram));
synchronizer.dispose();
}
/**
* Test {@link LayerStackApplicationSynchronizer} start when an application object
* with LayerStack already exist in the LayerModel.
* Test if synchronizer are restarted for already existing Stacks.
*
*/
@Test
public void testLayerStackApplicationSynchronizerRestartSynchronizer() {
NotationModel notationModel = (NotationModel) modelSet.getModel(NotationModel.MODEL_ID);
LayersModelResource layersModel = (LayersModelResource) modelSet.getModel(LayersModelResource.MODEL_ID);
// Init models
Diagram diagram = NotationFactory.eINSTANCE.createDiagram();
notationModel.addDiagram(diagram);
// Create a helper used to attach a LayerStack to diagram.
NotationDiagramHelper helper = new NotationDiagramHelper(layersModel, diagram);
// create a stack: this also create the application object in model.
helper.attachLayersStack();
// create synchronizer
LayerStackApplicationSynchronizer synchronizer = new LayerStackApplicationSynchronizer(layersModel, notationModel);
assertNotNull("application created", synchronizer);
// Check if the appropriate LayerStackSynchronizer is created
assertNotNull("LayerStackSynchronizer created", synchronizer.getSynchronizers().get(diagram));
// Check if we can add new LayerStack
Diagram diagram2 = NotationFactory.eINSTANCE.createDiagram();
notationModel.addDiagram(diagram2);
NotationDiagramHelper helper2 = new NotationDiagramHelper(layersModel, diagram2);
helper2.attachLayersStack();
// Check if the appropriate LayerStackSynchronizer is created
assertNotNull("LayerStackSynchronizer created", synchronizer.getSynchronizers().get(diagram2));
synchronizer.dispose();
}
/**
* Test {@link LayerStackApplicationSynchronizer} start when NO application object
* exist in the LayerModel.
* Test if synchronizer is correctly started and accept new stack attachment.
*
*/
@Test
public void testLayerStackApplicationSynchronizerStartWithNoApplicationInModel() {
NotationModel notationModel = (NotationModel) modelSet.getModel(NotationModel.MODEL_ID);
LayersModelResource layersModel = (LayersModelResource) modelSet.getModel(LayersModelResource.MODEL_ID);
// create synchronizer
LayerStackApplicationSynchronizer synchronizer = new LayerStackApplicationSynchronizer(layersModel, notationModel);
assertNotNull("application created", synchronizer);
// Here, the synchronizer should have not create an application !
assertNull("Application is not created in model", layersModel.lookupLayerStackApplication());
// Create a stack: first the diagram, then an helper, then the stack
Diagram diagram = NotationFactory.eINSTANCE.createDiagram();
notationModel.addDiagram(diagram);
// Create a helper used to attach a LayerStack to diagram.
NotationDiagramHelper helper = new NotationDiagramHelper(layersModel, diagram);
// create a stack: this also create the application object in model.
helper.attachLayersStack();
// Check if the appropriate LayerStackSynchronizer is created
assertNotNull("LayerStackSynchronizer created", synchronizer.getSynchronizers().get(diagram));
// Here, the application should be created (by the stack creation)
assertNotNull("Application is created in model", layersModel.lookupLayerStackApplication());
synchronizer.dispose();
}
}