blob: 1671676498853a368fd3e2ce953da741ae1549ba [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.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.Arrays;
import java.util.List;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.gmf.runtime.notation.NotationFactory;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.papyrus.infra.core.resource.ModelSet;
import org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackSynchronizer;
import org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayersModelEventUtils;
import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance;
import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Layer;
import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator;
import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStackApplication;
import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyRegistry;
import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringInstance;
import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperator;
import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
import org.eclipse.papyrus.layers.runtime.tests.utils.TriggeredEventTraces;
import org.eclipse.papyrus.layers.runtime.tests.utils.TriggeredEventTraces.TriggeredEvent;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
/**
* Test the {@link LayerStackSynchronizer} by initializing it from the {@link LayersStackApplication} class.
*
*
* @author cedric dumoulin
*
*/
public class LayerStackSynchronizerWithApplicationTest {
/**
* 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
// LayersModel layersModel = new LayersModel();
// 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 method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackSynchronizer#LayerStackSynchronizer(org.eclipse.papyrus.layers.stackmodel.layers.LayersStack)}.
*
* @throws LayersException
*/
@Test
public void testLayerStackSynchronizer() throws LayersException {
// Create requested objects
LayersStackApplication application = LayersFactory.eINSTANCE.createLayersStackApplication();
PropertyRegistry propertyRegistry = application.getPropertyRegistry();
Diagram diagram = NotationFactory.eINSTANCE.createDiagram();
// Create stack
LayersStack stack = application.getLayersStackFor(diagram);
// Create synchronizer
LayerStackSynchronizer synchronizer = new LayerStackSynchronizer(stack);
// Check creation
assertNotNull("object created", synchronizer);
// Create a TopLayer
TopLayerOperator layer = LayersFactory.eINSTANCE.createTopLayerOperator();
layer.setApplication(application);
// Create Views
View view1 = NotationFactory.eINSTANCE.createShape();
View view2 = NotationFactory.eINSTANCE.createShape();
View view3 = NotationFactory.eINSTANCE.createShape();
View view4 = NotationFactory.eINSTANCE.createShape();
// Create Properties
int index = 0;
Property property1 = propertyRegistry.getProperties().get(index++);
Property property2 = propertyRegistry.getProperties().get(index++);
Property property3 = propertyRegistry.getProperties().get(index++);
Property property4 = propertyRegistry.getProperties().get(index++);
// Create layer1: views ={} propInstances={}
Layer layer1 = createLayer(layer, Arrays.asList(view1), Arrays.asList(property1));
// Create layer2: views ={} propInstances={}
Layer layer2 = createLayer(layer, Arrays.asList(view1, view2), Arrays.asList(property1, property2));
// Create layer3: views ={} propInstances={}
Layer layer3 = createLayer(layer, Arrays.asList(view3), Arrays.asList(property3));
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackSynchronizer#getDiagram()}.
*/
@Test
public void testGetDiagram() {
// Create requested objects
LayersStackApplication application = LayersFactory.eINSTANCE.createLayersStackApplication();
PropertyRegistry propertyRegistry = application.getPropertyRegistry();
Diagram diagram = NotationFactory.eINSTANCE.createDiagram();
// Create stack
LayersStack stack = application.getLayersStackFor(diagram);
// Create synchronizer
LayerStackSynchronizer synchronizer = new LayerStackSynchronizer(stack);
// Check creation
assertNotNull("getDiagram", synchronizer.getDiagram());
assertSame("getDiagram", diagram, synchronizer.getDiagram());
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackSynchronizer#getLayersStack()}.
*/
@Test
public void testGetLayersStack() {
// Create requested objects
LayersStackApplication application = LayersFactory.eINSTANCE.createLayersStackApplication();
PropertyRegistry propertyRegistry = application.getPropertyRegistry();
Diagram diagram = NotationFactory.eINSTANCE.createDiagram();
// Create stack
LayersStack stack = application.getLayersStackFor(diagram);
// Create synchronizer
LayerStackSynchronizer synchronizer = new LayerStackSynchronizer(stack);
// Check creation
assertNotNull("getLayersStack", synchronizer.getLayersStack());
assertSame("getLayersStack", stack, synchronizer.getLayersStack());
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackSynchronizer#dispose()}.
*/
@Test
@Ignore
public void testDispose() {
fail("Not yet implemented");
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackSynchronizer#isDisposed()}.
*/
@Test
@Ignore
public void testIsDisposed() {
fail("Not yet implemented");
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackSynchronizer#propertyValueAdded(org.eclipse.emf.common.notify.Notification)}.
*
* @throws LayersException
*/
@Test
public void testPropertyValueAdded() throws LayersException {
// Create requested objects
LayersStackApplication application = LayersFactory.eINSTANCE.createLayersStackApplication();
PropertyRegistry propertyRegistry = application.getPropertyRegistry();
Diagram diagram = NotationFactory.eINSTANCE.createDiagram();
// Create stack
LayersStack stack = application.getLayersStackFor(diagram);
// Create a TopLayer
TopLayerOperator layer = LayersFactory.eINSTANCE.createTopLayerOperator();
layer.setApplication(application);
stack.setLayers(layer);
// Create synchronizer
LayerStackSynchronizerSubclass synchronizer = new LayerStackSynchronizerSubclass(stack);
TriggeredEventTraces traces = synchronizer.traces;
// Create Views
View view1 = NotationFactory.eINSTANCE.createShape();
// Create Properties
int index = 0;
Property property1 = propertyRegistry.getProperties().get(index++);
Property property2 = propertyRegistry.getProperties().get(index++);
// Create layer1: views ={} propInstances={}
Layer layer1 = createLayer(layer, Arrays.asList(view1), Arrays.asList(property1));
// Checks
traces.clear();
// add a property
layer1.addPropertyInstance(property2);
assertTrue("event sent", traces.size() > 0);
assertSame("event sent", "propertyValueAdded", traces.get(0).name);
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackSynchronizer#propertyValueRemoved(org.eclipse.emf.common.notify.Notification)}.
*
* @throws LayersException
*/
@Test
public void testPropertyValueRemoved() throws LayersException {
// Create requested objects
LayersStackApplication application = LayersFactory.eINSTANCE.createLayersStackApplication();
PropertyRegistry propertyRegistry = application.getPropertyRegistry();
Diagram diagram = NotationFactory.eINSTANCE.createDiagram();
// Create stack
LayersStack stack = application.getLayersStackFor(diagram);
// Create a TopLayer
TopLayerOperator layer = LayersFactory.eINSTANCE.createTopLayerOperator();
layer.setApplication(application);
stack.setLayers(layer);
// Create synchronizer
LayerStackSynchronizerSubclass synchronizer = new LayerStackSynchronizerSubclass(stack);
TriggeredEventTraces traces = synchronizer.traces;
// Create Views
View view1 = NotationFactory.eINSTANCE.createShape();
// Create Properties
int index = 0;
Property property1 = propertyRegistry.getProperties().get(index++);
Property property2 = propertyRegistry.getProperties().get(index++);
// Create layer1: views ={} propInstances={}
Layer layer1 = createLayer(layer, Arrays.asList(view1), Arrays.asList(property1, property2));
// Checks
traces.clear();
// remove a property
layer1.removePropertyInstance(property2);
assertTrue("event sent", traces.size() > 0);
assertSame("event sent", "propertyValueRemoved", traces.get(0).name);
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackSynchronizer#propertyValueChanged(org.eclipse.emf.common.notify.Notification)}.
*
* @throws LayersException
*/
@Test
public void testPropertyValueChanged() throws LayersException {
// Create requested objects
LayersStackApplication application = LayersFactory.eINSTANCE.createLayersStackApplication();
PropertyRegistry propertyRegistry = application.getPropertyRegistry();
Diagram diagram = NotationFactory.eINSTANCE.createDiagram();
// Create stack
LayersStack stack = application.getLayersStackFor(diagram);
// Create a TopLayer
TopLayerOperator layer = LayersFactory.eINSTANCE.createTopLayerOperator();
layer.setApplication(application);
stack.setLayers(layer);
// Create synchronizer
LayerStackSynchronizerSubclass synchronizer = new LayerStackSynchronizerSubclass(stack);
TriggeredEventTraces traces = synchronizer.traces;
// Create Views
View view1 = NotationFactory.eINSTANCE.createShape();
// Create Properties
int index = 0;
Property property1 = propertyRegistry.getProperties().get(index++);
Property property2 = propertyRegistry.getProperties().get(index++);
// Create layer1: views ={} propInstances={}
Layer layer1 = createLayer(layer, Arrays.asList(view1), Arrays.asList(property1, property2));
// Checks
traces.clear();
// change a property value
TypeInstance value = layer1.getPropertyInstance(property1);
// Check the type of the instance
// We don't know the type as it is set externally in the Property registry.
if (value instanceof StringInstance) {
assertTrue("value is instance of String", value instanceof StringInstance);
StringInstance stringValue = (StringInstance) value;
stringValue.setValue("newValue");
} else if (value instanceof BooleanInstance) {
BooleanInstance realValue = (BooleanInstance) value;
realValue.setValue(true);
}
// What for ?
layer1.removePropertyInstance(property2);
assertTrue("event sent", traces.size() > 0);
assertSame("event sent", "propertyValueChanged", traces.get(0).name);
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackSynchronizer#layerAdded(org.eclipse.emf.common.notify.Notification)}.
*/
@Test
@Ignore
public void testLayerAdded() {
fail("Not yet implemented");
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackSynchronizer#layerRemoved(org.eclipse.emf.common.notify.Notification)}.
*/
@Test
@Ignore
public void testLayerRemoved() {
fail("Not yet implemented");
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackSynchronizer#layerMoved(org.eclipse.emf.common.notify.Notification)}.
*/
@Test
@Ignore
public void testLayerMoved() {
fail("Not yet implemented");
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackSynchronizer#layerSet(org.eclipse.emf.common.notify.Notification)}.
*/
@Test
@Ignore
public void testLayerSet() {
fail("Not yet implemented");
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackSynchronizer#viewAddedToLayer(org.eclipse.emf.common.notify.Notification)}.
*
* @throws LayersException
*/
@Test
public void testViewAddedToLayer() throws LayersException {
// Create requested objects
LayersStackApplication application = LayersFactory.eINSTANCE.createLayersStackApplication();
PropertyRegistry propertyRegistry = application.getPropertyRegistry();
Diagram diagram = NotationFactory.eINSTANCE.createDiagram();
// Create stack
LayersStack stack = application.getLayersStackFor(diagram);
// Create a TopLayer
TopLayerOperator layer = LayersFactory.eINSTANCE.createTopLayerOperator();
layer.setApplication(application);
stack.setLayers(layer);
// Create synchronizer
LayerStackSynchronizerSubclass synchronizer = new LayerStackSynchronizerSubclass(stack);
TriggeredEventTraces traces = synchronizer.traces;
// Create Views
View view1 = NotationFactory.eINSTANCE.createShape();
View view2 = NotationFactory.eINSTANCE.createShape();
// Create Properties
int index = 0;
Property property1 = propertyRegistry.getProperties().get(index++);
// Create layer1: views ={} propInstances={}
Layer layer1 = createLayer(layer, Arrays.asList(view1), Arrays.asList(property1));
// action
traces.clear();
// remove a view
layer1.getViews().add(view2);
// assert
assertTrue("event sent", traces.size() > 0);
TriggeredEvent event = traces.get(0);
assertSame("event sent", "viewAddedToLayer", event.name);
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackSynchronizer#viewAddedToLayer(org.eclipse.emf.common.notify.Notification)}.
*
* @throws LayersException
*/
@Test
public void testNViewAddedToLayer() throws LayersException {
// Create requested objects
LayersStackApplication application = LayersFactory.eINSTANCE.createLayersStackApplication();
PropertyRegistry propertyRegistry = application.getPropertyRegistry();
Diagram diagram = NotationFactory.eINSTANCE.createDiagram();
// Create stack
LayersStack stack = application.getLayersStackFor(diagram);
// Create a TopLayer
TopLayerOperator layer = LayersFactory.eINSTANCE.createTopLayerOperator();
layer.setApplication(application);
stack.setLayers(layer);
// Create synchronizer
LayerStackSynchronizerSubclass synchronizer = new LayerStackSynchronizerSubclass(stack);
TriggeredEventTraces traces = synchronizer.traces;
// Create Views
View view1 = NotationFactory.eINSTANCE.createShape();
View view2 = NotationFactory.eINSTANCE.createShape();
View view3 = NotationFactory.eINSTANCE.createShape();
List<View> viewsToAttach = Arrays.asList(view1);
List<View> viewsToAdd = Arrays.asList(view2, view3);
// Create Properties
int index = 0;
Property property1 = propertyRegistry.getProperties().get(index++);
// Create layer1: views ={} propInstances={}
Layer layer1 = createLayer(layer, viewsToAttach, Arrays.asList(property1));
// action
traces.clear();
// remove a view
layer1.getViews().addAll(viewsToAdd);
// assert
assertTrue("event sent", traces.size() > 0);
TriggeredEvent event = traces.get(0);
assertSame("event sent", "multiViewsAddedToLayer", event.name);
// Check the collection
Notification notification = event.notifier;
assertNotNull("notification is set", notification);
List<View> addedViews = LayersModelEventUtils.ViewEvents.getViewsAdded(notification);
assertEquals("both removed list have the same size", viewsToAdd.size(), addedViews.size());
assertTrue("notification contains removed views", addedViews.containsAll(viewsToAdd));
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackSynchronizer#viewRemovedFromLayer(org.eclipse.emf.common.notify.Notification)}.
*
* @throws LayersException
*/
@Test
public void testViewRemovedFromLayer() throws LayersException {
// Create requested objects
LayersStackApplication application = LayersFactory.eINSTANCE.createLayersStackApplication();
PropertyRegistry propertyRegistry = application.getPropertyRegistry();
Diagram diagram = NotationFactory.eINSTANCE.createDiagram();
// Create stack
LayersStack stack = application.getLayersStackFor(diagram);
// Create a TopLayer
TopLayerOperator layer = LayersFactory.eINSTANCE.createTopLayerOperator();
layer.setApplication(application);
stack.setLayers(layer);
// Create synchronizer
LayerStackSynchronizerSubclass synchronizer = new LayerStackSynchronizerSubclass(stack);
TriggeredEventTraces traces = synchronizer.traces;
// Create Views
View view1 = NotationFactory.eINSTANCE.createShape();
View view2 = NotationFactory.eINSTANCE.createShape();
// Create Properties
int index = 0;
Property property1 = propertyRegistry.getProperties().get(index++);
// Create layer1: views ={} propInstances={}
Layer layer1 = createLayer(layer, Arrays.asList(view1, view2), Arrays.asList(property1));
// action
traces.clear();
// remove a view
layer1.getViews().remove(view2);
// assert
assertTrue("event sent", traces.size() > 0);
TriggeredEvent event = traces.get(0);
assertSame("event sent", "viewRemovedFromLayer", event.name);
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackSynchronizer#viewRemovedFromLayer(org.eclipse.emf.common.notify.Notification)}.
*
* @throws LayersException
*/
@Test
public void testNViewRemovedFromLayer() throws LayersException {
// Create requested objects
LayersStackApplication application = LayersFactory.eINSTANCE.createLayersStackApplication();
PropertyRegistry propertyRegistry = application.getPropertyRegistry();
Diagram diagram = NotationFactory.eINSTANCE.createDiagram();
// Create stack
LayersStack stack = application.getLayersStackFor(diagram);
// Create a TopLayer
TopLayerOperator layer = LayersFactory.eINSTANCE.createTopLayerOperator();
layer.setApplication(application);
stack.setLayers(layer);
// Create synchronizer
LayerStackSynchronizerSubclass synchronizer = new LayerStackSynchronizerSubclass(stack);
TriggeredEventTraces traces = synchronizer.traces;
// Create Views
View view1 = NotationFactory.eINSTANCE.createShape();
View view2 = NotationFactory.eINSTANCE.createShape();
View view3 = NotationFactory.eINSTANCE.createShape();
List<View> viewsToAttach = Arrays.asList(view1, view2, view3);
List<View> viewsToRemove = Arrays.asList(view2, view3);
// Create Properties
int index = 0;
Property property1 = propertyRegistry.getProperties().get(index++);
// Create layer1: views ={} propInstances={}
Layer layer1 = createLayer(layer, viewsToAttach, Arrays.asList(property1));
// action
traces.clear();
// remove a view
layer1.getViews().removeAll(viewsToRemove);
// assert
assertTrue("event sent", traces.size() > 0);
TriggeredEvent event = traces.get(0);
assertSame("event sent", "multiViewsRemovedFromLayer", event.name);
// Check the collection
Notification notification = event.notifier;
assertNotNull("notification is set", notification);
List<View> removedViews = LayersModelEventUtils.ViewEvents.getViewsRemoved(notification);
assertEquals("both removed list have the same size", removedViews.size(), viewsToRemove.size());
assertTrue("notification contains removed views", removedViews.containsAll(viewsToRemove));
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackSynchronizer#viewMovedBetweenLayer(org.eclipse.emf.common.notify.Notification)}.
*/
@Test
@Ignore
public void testViewMovedBetweenLayer() {
fail("Not yet implemented");
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackSynchronizer#diagramViewAdded(org.eclipse.emf.common.notify.Notification)}.
*/
@Test
@Ignore
public void testDiagramViewAdded() {
fail("Not yet implemented");
}
/**
* Test method for {@link org.eclipse.papyrus.infra.gmfdiag.layers.runtime.LayerStackSynchronizer#diagramViewRemoved(org.eclipse.emf.common.notify.Notification)}.
*/
@Test
@Ignore
public void testDiagramViewRemoved() {
fail("Not yet implemented");
}
/**
* Create a layer with the specified view and property set
*
* @param asList
* @param asList2
* @return
* @throws LayersException
*/
protected Layer createLayer(LayerOperator parent, List<View> views, List<Property> properties) throws LayersException {
// Create the layer
Layer layer = LayersFactory.eINSTANCE.createLayer();
// Set the application (needed ?)
layer.setApplication(parent.getApplication());
// Attach it to its parent
parent.getLayers().add(layer);
// Add views
for (View view : views) {
layer.getViews().add(view);
}
// Add property instances
for (Property property : properties) {
layer.addPropertyInstance(property);
}
return layer;
}
/**
* Test method for {@link #createLayer(List, List)}
*
* @throws LayersException
*/
@Test
public void testCreateLayer() throws LayersException {
// Create requested objects
TopLayerOperator layerParent = LayersFactory.eINSTANCE.createTopLayerOperator();
LayersStackApplication application = LayersFactory.eINSTANCE.createLayersStackApplication();
layerParent.setApplication(application);
PropertyRegistry propertyRegistry = application.getPropertyRegistry();
// Create Views
View view1 = NotationFactory.eINSTANCE.createShape();
View view2 = NotationFactory.eINSTANCE.createShape();
View view3 = NotationFactory.eINSTANCE.createShape();
// Create Properties
int index = 0;
Property property1 = propertyRegistry.getProperties().get(index++);
Property property2 = propertyRegistry.getProperties().get(index++);
Property property3 = propertyRegistry.getProperties().get(index++);
// Create layer1: views ={} propInstances={}
Layer layer = createLayer(layerParent, Arrays.asList(view1, view2), Arrays.asList(property1, property2));
// Checks
assertNotNull("layer created", layer);
assertSame("views added", 2, layer.getViews().size());
assertSame("property instance added", 2, layer.getPropertyValueMap().values().size());
assertSame("property instance is correctly set", layer.getPropertyValueMap().get(property1.getName()), layer.getPropertyInstance(property1));
assertSame("property instance is correctly set", layer.getPropertyValueMap().get(property2.getName()), layer.getPropertyInstance(property2));
}
}