uidesigner/com.nokia.sdt.uimodel.tests/src/com/nokia/sdt/uimodel/tests/EventsTest.java
changeset 0 fb279309251b
--- /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);
+	}
+
+}