| /******************************************************************************* |
| * 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(); |
| } |
| |
| |
| } |