diff -r 000000000000 -r fb279309251b uidesigner/com.nokia.sdt.uimodel.tests/src/com/nokia/sdt/uimodel/tests/EventsTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uidesigner/com.nokia.sdt.uimodel.tests/src/com/nokia/sdt/uimodel/tests/EventsTest.java Fri Apr 03 23:33:03 2009 +0100 @@ -0,0 +1,192 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +package com.nokia.sdt.uimodel.tests; + +import com.nokia.sdt.component.IComponent; +import com.nokia.sdt.component.event.IEventDescriptor; +import com.nokia.sdt.component.event.IEventDescriptorProvider; +import com.nokia.sdt.datamodel.adapter.*; +import com.nokia.sdt.datamodel.util.ModelUtils; +import com.nokia.sdt.symbian.dm.DesignerDataModel; +import com.nokia.sdt.testsupport.AdapterHelpers; +import com.nokia.sdt.testsupport.TestDataModelHelpers; + +import org.eclipse.emf.common.command.Command; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.ui.views.properties.IPropertySource; + +import java.util.Collection; + +import junit.framework.TestCase; + +public class EventsTest extends TestCase { + + static final String CONTAINER_COMPONENT = "com.nokia.examples.container"; + static final String SPECIAL_CONTAINER_COMPONENT = "com.nokia.examples.specialContainer"; + static final String CHILD_COMPONENT = "com.nokia.examples.baseComponent"; + static final String FILTERED_EVENTS_CHILD_COMPONENT = "com.nokia.examples.filteredEventsComponent"; + + DesignerDataModel model; + EObject root; + EObject child; + + protected void setUp() throws Exception { + + model = (DesignerDataModel) TestDataModelHelpers.createTemporaryModel(); + TestDataModelHelpers.initDefaultComponentSet(model); + IComponent component = model.getComponentSet().lookupComponent(CONTAINER_COMPONENT); + root = model.createNewComponentInstance(component); + model.getDesignerData().getRootContainers().add(root); + IPropertySource ps = AdapterHelpers.getPropertySource(root); + ps.setPropertyValue("name", "view1"); + ps.setPropertyValue("className", "CMyContainer"); + + component = model.getComponentSet().lookupComponent(CHILD_COMPONENT); + child = model.createNewComponentInstance(component); + Command command = model.createAddNewComponentInstanceCommand(root, child, -1); + assertTrue(command.canExecute()); + command.execute(); + } + + protected void tearDown() throws Exception { + super.tearDown(); + } + + public void testAddDefaultBinding() { + IComponentInstance ci = ModelUtils.getComponentInstance(child); + IComponent component = ci.getComponent(); + IEventDescriptorProvider edp = (IEventDescriptorProvider) component.getAdapter(IEventDescriptorProvider.class); + IEventDescriptor[] eventDescriptors = edp.getEventDescriptors(); + Command command = model.createAddEventBindingCommand(child, eventDescriptors[0], null); + assertTrue(command.canExecute()); + command.execute(); + Collection result = command.getResult(); + Object[] objects = result.toArray(); + assertTrue(objects[0] instanceof IEventBinding); + IEventBinding binding = (IEventBinding) objects[0]; + assertEquals(binding.getHandlerName(), "BaseComponent1_SomethingHappened"); + + IEventBinding[] eventBindings = ci.getEventBindings(); + assertNotNull(eventBindings); + assertTrue(eventBindings.length == 1); + assertEquals(eventBindings[0].getEventDescriptor(), eventDescriptors[0]); + } + + public void testAddUserSpecifiedBinding() { + IComponentInstance ci = ModelUtils.getComponentInstance(child); + IComponent component = ci.getComponent(); + IEventDescriptorProvider edp = (IEventDescriptorProvider) component.getAdapter(IEventDescriptorProvider.class); + IEventDescriptor[] eventDescriptors = edp.getEventDescriptors(); + String userSpecifiedName = "MyEventHandler"; + Command command = model.createAddEventBindingCommand(child, eventDescriptors[0], userSpecifiedName); + assertTrue(command.canExecute()); + command.execute(); + Collection result = command.getResult(); + Object[] objects = result.toArray(); + assertTrue(objects[0] instanceof IEventBinding); + IEventBinding binding = (IEventBinding) objects[0]; + assertEquals(binding.getHandlerName(), userSpecifiedName); + } + + public void testRemoveBinding() { + IComponentInstance ci = ModelUtils.getComponentInstance(child); + IComponent component = ci.getComponent(); + IEventDescriptorProvider edp = (IEventDescriptorProvider) component.getAdapter(IEventDescriptorProvider.class); + IEventDescriptor[] eventDescriptors = edp.getEventDescriptors(); + Command command = model.createAddEventBindingCommand(child, eventDescriptors[0], null); + assertTrue(command.canExecute()); + command.execute(); + Collection result = command.getResult(); + Object[] objects = result.toArray(); + assertTrue(objects[0] instanceof IEventBinding); + IEventBinding binding = (IEventBinding) objects[0]; + assertEquals(binding.getHandlerName(), "BaseComponent1_SomethingHappened"); + + IEventBinding[] eventBindings = ci.getEventBindings(); + assertNotNull(eventBindings); + assertTrue(eventBindings.length == 1); + + command = model.createRemoveEventBindingCommand(binding); + assertTrue(command.canExecute()); + command.execute(); + + eventBindings = ci.getEventBindings(); + assertNull(eventBindings); + } + + /** + * This case has no event info override so all the events are exposed + * + */ + public void testUnfilteredEvents() { + // add to filter child to root, a container + IComponent component = model.getComponentSet().lookupComponent(FILTERED_EVENTS_CHILD_COMPONENT); + EObject filteredChild = model.createNewComponentInstance(component); + Command command = model.createAddNewComponentInstanceCommand(root, filteredChild, -1); + assertTrue(command.canExecute()); + command.execute(); + + // everything visible on component + IEventDescriptorProvider edp = (IEventDescriptorProvider) component.getAdapter(IEventDescriptorProvider.class); + IEventDescriptor[] eventDescriptors = edp.getEventDescriptors(); + assertEquals(2, eventDescriptors.length); + int defaultIndex = edp.getDefaultEventIndex(); + assertEquals(1, defaultIndex); + + // some may be filtered on child, but not in this case + IComponentEventDescriptorProvider cedp = ModelUtils.getComponentEventDescriptorProvider(filteredChild); + IEventDescriptor[] filteredEventDescriptors = cedp.getEventDescriptors(); + assertEquals(eventDescriptors.length, filteredEventDescriptors.length); + + int filteredDefaultIndex = cedp.getDefaultEventIndex(); + assertEquals(defaultIndex, filteredDefaultIndex); + } + + /** + * This case has no event info override so all the events are exposed + * + */ + public void testFilteredEvents() { + // add to a special container + IComponent specialContainerComponent = model.getComponentSet().lookupComponent(SPECIAL_CONTAINER_COMPONENT); + EObject container = model.createNewComponentInstance(specialContainerComponent); + Command command = model.createAddNewComponentInstanceCommand(root, container, -1); + assertTrue(command.canExecute()); + command.execute(); + + IComponent component = model.getComponentSet().lookupComponent(FILTERED_EVENTS_CHILD_COMPONENT); + EObject filteredChild = model.createNewComponentInstance(component); + command = model.createAddNewComponentInstanceCommand(container, filteredChild, -1); + assertTrue(command.canExecute()); + command.execute(); + + // filtered child is different here + IEventDescriptorProvider edp = (IEventDescriptorProvider) component.getAdapter(IEventDescriptorProvider.class); + IEventDescriptor[] eventDescriptors = edp.getEventDescriptors(); + assertEquals(2, eventDescriptors.length); + int defaultIndex = edp.getDefaultEventIndex(); + assertEquals(1, defaultIndex); + + IComponentEventDescriptorProvider cedp = ModelUtils.getComponentEventDescriptorProvider(filteredChild); + IEventDescriptor[] filteredEventDescriptors = cedp.getEventDescriptors(); + assertEquals(1, filteredEventDescriptors.length); + + int filteredDefaultIndex = cedp.getDefaultEventIndex(); + assertEquals(0, filteredDefaultIndex); + } + +}