/*******************************************************************************
* Copyright (c) 2007, 2014 compeople AG and others.
* 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:
* compeople AG - initial API and implementation
*******************************************************************************/
package org.eclipse.riena.internal.navigation.ui.swt.workarea;
import org.eclipse.riena.core.test.RienaTestCase;
import org.eclipse.riena.core.test.collect.NonUITestCase;
import org.eclipse.riena.core.util.ReflectionUtils;
import org.eclipse.riena.navigation.ApplicationModelFailure;
import org.eclipse.riena.navigation.extension.IModuleGroupNode2Extension;
import org.eclipse.riena.navigation.extension.IModuleNode2Extension;
import org.eclipse.riena.navigation.extension.ISubApplicationNode2Extension;
import org.eclipse.riena.navigation.extension.ISubModuleNode2Extension;
import org.eclipse.riena.navigation.extension.ModuleGroupNode2Extension;
import org.eclipse.riena.navigation.extension.ModuleNode2Extension;
import org.eclipse.riena.navigation.extension.NavigationAssembly2Extension;
import org.eclipse.riena.navigation.extension.SubApplicationNode2Extension;
import org.eclipse.riena.navigation.extension.SubModuleNode2Extension;
import org.eclipse.riena.navigation.ui.controllers.SubModuleController;
import org.eclipse.riena.ui.workarea.IWorkareaDefinition;
import org.eclipse.riena.ui.workarea.WorkareaDefinition;
/**
* Tests of the class {@link SwtExtensionWorkareaDefinitionRegistry}.
*/
@NonUITestCase
public class SwtExtensionWorkareaDefinitionRegistryTest extends RienaTestCase {
private static final String TEST_TYPE_ID = "TestTypeId";
private static final String OTHER_TEST_TYPE_ID = "OtherTestTypeId";
private static final String TEST_VIEW_ID = "TestViewId";
private static final String OTHER_TEST_VIEW_ID = "OtherTestViewId";
private MySwtExtensionWorkareaDefinitionRegistry workareaDefinitionRegistry;
private IWorkareaDefinition workareaDefinition;
@Override
protected void setUp() throws Exception {
super.setUp();
workareaDefinitionRegistry = new MySwtExtensionWorkareaDefinitionRegistry();
workareaDefinition = new WorkareaDefinition(TestSubModuleController.class, TEST_VIEW_ID);
}
public void testRegisterDefinition() throws Exception {
workareaDefinitionRegistry.register(TEST_TYPE_ID, workareaDefinition);
assertSame(workareaDefinition, workareaDefinitionRegistry.getDefinition(TEST_TYPE_ID));
}
public void testRegisterSameDefinitionDifferentTypeId() throws Exception {
workareaDefinitionRegistry.register(TEST_TYPE_ID, workareaDefinition);
final IWorkareaDefinition otherWorkareaDefinition = new WorkareaDefinition(TestSubModuleController.class,
TEST_VIEW_ID);
workareaDefinitionRegistry.register(OTHER_TEST_TYPE_ID, otherWorkareaDefinition);
assertSame(workareaDefinition, workareaDefinitionRegistry.getDefinition(TEST_TYPE_ID));
assertSame(otherWorkareaDefinition, workareaDefinitionRegistry.getDefinition(OTHER_TEST_TYPE_ID));
}
public void testRegisterSameDefinitionSameTypeId() throws Exception {
workareaDefinitionRegistry.register(TEST_TYPE_ID, workareaDefinition);
final IWorkareaDefinition newWorkareaDefinition = new WorkareaDefinition(TestSubModuleController.class,
TEST_VIEW_ID);
workareaDefinitionRegistry.register(TEST_TYPE_ID, newWorkareaDefinition);
assertNotSame(workareaDefinition, workareaDefinitionRegistry.getDefinition(TEST_TYPE_ID));
assertSame(newWorkareaDefinition, workareaDefinitionRegistry.getDefinition(TEST_TYPE_ID));
}
public void testRegisterDifferentDefinitionSameTypeId() throws Exception {
workareaDefinitionRegistry.register(TEST_TYPE_ID, workareaDefinition);
IWorkareaDefinition otherWorkareaDefinition = null;
try {
otherWorkareaDefinition = new WorkareaDefinition(OtherTestSubModuleController.class, TEST_VIEW_ID);
workareaDefinitionRegistry.register(TEST_TYPE_ID, otherWorkareaDefinition);
ok("No ApplicationModelFailure expected");
} catch (final ApplicationModelFailure expected) {
fail("No ApplicationModelFailure expected");
}
try {
otherWorkareaDefinition = new WorkareaDefinition(TestSubModuleController.class, OTHER_TEST_VIEW_ID);
workareaDefinitionRegistry.register(TEST_TYPE_ID, otherWorkareaDefinition);
fail("ApplicationModelFailure expected");
} catch (final ApplicationModelFailure expected) {
ok("ApplicationModelFailure expected");
}
}
private static class TestSubModuleController extends SubModuleController {
}
private static class OtherTestSubModuleController extends SubModuleController {
}
/**
* Tests the <i>private</i> method
* {@code register(INavigationAssembly2Extension)}.
*/
public void testRegisterINavigationAssembly2Extension() {
final NavigationAssembly2Extension assembly = new NavigationAssembly2Extension();
// sub-modules will be registered
final SubModuleNode2Extension sub1 = new SubModuleNode2Extension();
sub1.setNodeId("sub1");
sub1.setViewId("v1");
final ISubModuleNode2Extension[] subMods = new ISubModuleNode2Extension[] { sub1 };
assembly.setSubModules(subMods);
ReflectionUtils.invokeHidden(workareaDefinitionRegistry, "register", assembly);
IWorkareaDefinition def = workareaDefinitionRegistry.getDefinition("sub1");
assertNotNull(def);
assertEquals("v1", def.getViewId());
// modules will not be registered (because they have no relevant information to register - like view ID)
// because the assembly has a module the sub-modules will also not be registered.
workareaDefinitionRegistry = new MySwtExtensionWorkareaDefinitionRegistry();
final ModuleNode2Extension m1 = new ModuleNode2Extension();
m1.setNodeId("m1");
final IModuleNode2Extension[] mods = new IModuleNode2Extension[] { m1 };
assembly.setModules(mods);
ReflectionUtils.invokeHidden(workareaDefinitionRegistry, "register", assembly);
def = workareaDefinitionRegistry.getDefinition("m1");
assertNull(def);
def = workareaDefinitionRegistry.getDefinition("sub1");
assertNull(def);
// module groups will not be registered (because they have no relevant information to register - like view ID)
// because the assembly has a module group the sub-modules will also not be registered.
workareaDefinitionRegistry = new MySwtExtensionWorkareaDefinitionRegistry();
final ModuleGroupNode2Extension mg1 = new ModuleGroupNode2Extension();
m1.setNodeId("mg1");
final IModuleGroupNode2Extension[] groups = new IModuleGroupNode2Extension[] { mg1 };
assembly.setModuleGroups(groups);
ReflectionUtils.invokeHidden(workareaDefinitionRegistry, "register", assembly);
def = workareaDefinitionRegistry.getDefinition("mg1");
assertNull(def);
def = workareaDefinitionRegistry.getDefinition("m1");
assertNull(def);
def = workareaDefinitionRegistry.getDefinition("sub1");
assertNull(def);
// sub-applications will be registered
// because the assembly has a module group the sub-modules will also not be registered.
workareaDefinitionRegistry = new MySwtExtensionWorkareaDefinitionRegistry();
final SubApplicationNode2Extension subApp1 = new SubApplicationNode2Extension();
subApp1.setNodeId("sa1");
subApp1.setPerspectiveId("p1");
final SubApplicationNode2Extension subApp2 = new SubApplicationNode2Extension();
subApp2.setNodeId("sa2");
subApp2.setPerspectiveId("p2");
final ISubApplicationNode2Extension[] subApps = new ISubApplicationNode2Extension[] { subApp1, subApp2 };
assembly.setSubApplications(subApps);
ReflectionUtils.invokeHidden(workareaDefinitionRegistry, "register", assembly);
def = workareaDefinitionRegistry.getDefinition("sa1");
assertNotNull(def);
assertEquals("p1", def.getViewId());
def = workareaDefinitionRegistry.getDefinition("sa2");
assertNotNull(def);
assertEquals("p2", def.getViewId());
def = workareaDefinitionRegistry.getDefinition("sub1");
assertNull(def);
}
/**
* Tests the method {@code register(ISubApplicationNode2Extension)}.
*/
public void testRegisterISubApplicationNode2Extension() {
final SubApplicationNode2Extension subApp12 = new SubApplicationNode2Extension();
subApp12.setNodeId("sa12");
subApp12.setPerspectiveId("p12");
workareaDefinitionRegistry.register(subApp12);
final IWorkareaDefinition def = workareaDefinitionRegistry.getDefinition("sa12");
assertNotNull(def);
assertEquals("p12", def.getViewId());
}
/**
* Tests the method {@code register(ISubModuleNode2Extension)}.
*/
public void testRegisterISubModuleNode2Extension() {
final SubModuleNode2Extension subMod13 = new SubModuleNode2Extension();
subMod13.setNodeId("sub13");
subMod13.setViewId("v13");
final SubModuleNode2Extension subMod123 = new SubModuleNode2Extension();
subMod123.setNodeId("sub123");
subMod123.setViewId("v123");
subMod123.setRequiresPreparation(true);
subMod123.setSharedView(true);
subMod13.setChildNodes(new ISubModuleNode2Extension[] { subMod123 });
workareaDefinitionRegistry.register(subMod13);
IWorkareaDefinition def = workareaDefinitionRegistry.getDefinition("sub13");
assertNotNull(def);
assertEquals("v13", def.getViewId());
assertFalse(def.isRequiredPreparation());
assertFalse(def.isRequiredPreparation());
def = workareaDefinitionRegistry.getDefinition("sub123");
assertNotNull(def);
assertEquals("v123", def.getViewId());
assertTrue(def.isRequiredPreparation());
assertTrue(def.isRequiredPreparation());
}
/**
* Changes the visibility of some protected methods for testing.
*/
@SuppressWarnings("restriction")
private class MySwtExtensionWorkareaDefinitionRegistry extends SwtExtensionWorkareaDefinitionRegistry {
@Override
public void register(final ISubApplicationNode2Extension subAppicationExt) {
super.register(subAppicationExt);
}
@Override
public void register(final ISubModuleNode2Extension subModuleExt) {
super.register(subModuleExt);
}
}
}