/*******************************************************************************
* 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.navigation.model;
import java.util.ArrayList;
import java.util.List;
import org.easymock.EasyMock;
import org.eclipse.riena.core.marker.IMarker;
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.IApplicationNode;
import org.eclipse.riena.navigation.IJumpTargetListener;
import org.eclipse.riena.navigation.IJumpTargetListener.JumpTargetState;
import org.eclipse.riena.navigation.IModuleGroupNode;
import org.eclipse.riena.navigation.IModuleNode;
import org.eclipse.riena.navigation.INavigationContext;
import org.eclipse.riena.navigation.INavigationNode;
import org.eclipse.riena.navigation.INavigationNode.State;
import org.eclipse.riena.navigation.INavigationProcessor;
import org.eclipse.riena.navigation.ISubApplicationNode;
import org.eclipse.riena.navigation.ISubModuleNode;
import org.eclipse.riena.navigation.NavigationArgument;
import org.eclipse.riena.navigation.NavigationNodeId;
import org.eclipse.riena.navigation.ui.controllers.NavigationNodeController;
import org.eclipse.riena.ui.core.marker.DisabledMarker;
import org.eclipse.riena.ui.core.marker.ErrorMarker;
import org.eclipse.riena.ui.core.marker.HiddenMarker;
import org.eclipse.riena.ui.core.marker.OutputMarker;
import org.eclipse.riena.ui.ridgets.IRidget;
/**
* Tests for the NavigationProcessor. Contains all tests for the
* NavigationProcessor that don't use addPluginXml() and can be run on the
* buildserver.
* <p>
* FIXME move all tests from {@link NavigationProcessorTest2} over here again,
* when the addPluginXml() issue is fixed.
*/
@NonUITestCase
public class NavigationProcessorTest extends RienaTestCase {
private static final String TARGET_MODULE_GROUP = "org.eclipse.riena.navigation.model.test.moduleGroup.2"; //$NON-NLS-1$
private NavigationProcessor navigationProcessor;
private IApplicationNode applicationNode;
private ISubApplicationNode subApplication;
private IModuleGroupNode moduleGroup;
private IModuleNode module;
private ISubModuleNode subModule1;
private ISubModuleNode subModule2;
private ISubModuleNode subModule3;
private TestSubModuleNode subModule4;
private ModuleGroupNode moduleGroup2;
private ModuleNode module2;
@Override
protected void setUp() throws Exception {
super.setUp();
initializeNavigationStructure();
}
private void initializeNavigationStructure() {
applicationNode = new ApplicationNode(new NavigationNodeId(
"org.eclipse.riena.navigation.model.test.application")); //$NON-NLS-1$
navigationProcessor = new NavigationProcessor();
applicationNode.setNavigationProcessor(navigationProcessor);
subApplication = new SubApplicationNode(new NavigationNodeId(
"org.eclipse.riena.navigation.model.test.subApplication")); //$NON-NLS-1$
applicationNode.addChild(subApplication);
moduleGroup = new ModuleGroupNode(new NavigationNodeId("org.eclipse.riena.navigation.model.test.moduleGroup")); //$NON-NLS-1$
subApplication.addChild(moduleGroup);
moduleGroup2 = new ModuleGroupNode(new NavigationNodeId(TARGET_MODULE_GROUP));
subApplication.addChild(moduleGroup2);
module = new ModuleNode(new NavigationNodeId("org.eclipse.riena.navigation.model.test.module")); //$NON-NLS-1$
moduleGroup.addChild(module);
module2 = new ModuleNode(new NavigationNodeId("org.eclipse.riena.navigation.model.test.module.2")); //$NON-NLS-1$
moduleGroup.addChild(module2);
subModule1 = new SubModuleNode(new NavigationNodeId("org.eclipse.riena.navigation.model.test.subModule")); //$NON-NLS-1$
module.addChild(subModule1);
subModule2 = new SubModuleNode(new NavigationNodeId("org.eclipse.riena.navigation.model.test.subModule2")); //$NON-NLS-1$
module.addChild(subModule2);
subModule3 = new SubModuleNode(new NavigationNodeId("org.eclipse.riena.navigation.model.test.subModule3")); //$NON-NLS-1$
module.addChild(subModule3);
subModule4 = new TestSubModuleNode(new NavigationNodeId("org.eclipse.riena.navigation.model.test.subModule4")); //$NON-NLS-1$
module2.addChild(subModule4);
}
@Override
protected void tearDown() throws Exception {
applicationNode = null;
super.tearDown();
}
public void testNavigateToRidget() throws Exception {
// create a IRidgetMock that returns false on hasFocus
final IRidget ridgetStubWithoutFocus = EasyMock.createStrictMock(IRidget.class);
EasyMock.expect(ridgetStubWithoutFocus.hasFocus()).andReturn(false);
EasyMock.replay(ridgetStubWithoutFocus);
// create a IRidgetMock that ensures that the requestFocus-Method is called
final IRidget ridgetStub = EasyMock.createStrictMock(IRidget.class);
ridgetStub.requestFocus();
EasyMock.expect(ridgetStub.hasFocus()).andReturn(true);
EasyMock.replay(ridgetStub);
final String ridgetId = "myRidget"; //$NON-NLS-1$
// create a NavigationNodeControllerStub that returns the IRidgetMock
final NavigationNodeController<ISubModuleNode> nodeControllerStub = new NavigationNodeController<ISubModuleNode>() {
public void configureRidgets() {
}
@Override
public IRidget getRidget(final String id) {
return ridgetId.equals(id) ? ridgetStub : ridgetStubWithoutFocus;
}
};
subModule1.setNavigationNodeController(nodeControllerStub);
navigationProcessor.activate(subApplication);
navigationProcessor.navigate(subApplication, new NavigationNodeId(
"org.eclipse.riena.navigation.model.test.subModule"), new NavigationArgument(null, ridgetId)); //$NON-NLS-1$
// assertTrue(subModule.isActivated());
// assertTrue(ridgetStub.hasFocus());
//
// assertFalse(ridgetStubWithoutFocus.hasFocus());
//
// EasyMock.verify(ridgetStub);
// EasyMock.reset(ridgetStub);
}
/**
* Tests the <i>private</i> method {@code isSelectable}.
*/
public void testIsSelectable() {
final NavigationNodeId id = new NavigationNodeId("4711"); //$NON-NLS-1$
final TestSubModuleNode node = new TestSubModuleNode(id);
boolean ret = ReflectionUtils.invokeHidden(navigationProcessor, "isSelectable", node); //$NON-NLS-1$
assertTrue(ret);
node.setSelectable(false);
ret = ReflectionUtils.invokeHidden(navigationProcessor, "isSelectable", node); //$NON-NLS-1$
assertFalse(ret);
node.setSelectable(true);
node.setEnabled(false);
ret = ReflectionUtils.invokeHidden(navigationProcessor, "isSelectable", node); //$NON-NLS-1$
assertFalse(ret);
node.setEnabled(true);
node.setVisible(false);
ret = ReflectionUtils.invokeHidden(navigationProcessor, "isSelectable", node); //$NON-NLS-1$
assertFalse(ret);
node.setVisible(true);
ret = ReflectionUtils.invokeHidden(navigationProcessor, "isSelectable", node); //$NON-NLS-1$
assertTrue(ret);
IMarker marker = new HiddenMarker(false);
node.addMarker(marker);
ret = ReflectionUtils.invokeHidden(navigationProcessor, "isSelectable", node); //$NON-NLS-1$
assertFalse(ret);
node.removeMarker(marker);
ret = ReflectionUtils.invokeHidden(navigationProcessor, "isSelectable", node); //$NON-NLS-1$
assertTrue(ret);
marker = new DisabledMarker(false);
node.addMarker(marker);
ret = ReflectionUtils.invokeHidden(navigationProcessor, "isSelectable", node); //$NON-NLS-1$
assertFalse(ret);
node.removeMarker(marker);
ret = ReflectionUtils.invokeHidden(navigationProcessor, "isSelectable", node); //$NON-NLS-1$
assertTrue(ret);
}
/**
* Tests the <i>private</i> method {@code getSelectableChild}.
*/
public void testGetSelectableChild() {
final ModuleGroupNode mg1 = new ModuleGroupNode(new NavigationNodeId("mg1")); //$NON-NLS-1$
final ModuleNode m1 = new ModuleNode(new NavigationNodeId("m1")); //$NON-NLS-1$
final SubModuleNode sm1 = new SubModuleNode(new NavigationNodeId("sm1")); //$NON-NLS-1$
final SubModuleNode sm11 = new SubModuleNode(new NavigationNodeId("sm11")); //$NON-NLS-1$
final SubModuleNode sm12 = new SubModuleNode(new NavigationNodeId("sm12")); //$NON-NLS-1$
mg1.addChild(m1);
m1.addChild(sm1);
sm1.addChild(sm11);
sm1.addChild(sm12);
INavigationNode<?> ret = ReflectionUtils.invokeHidden(navigationProcessor, "getSelectableChild", mg1); //$NON-NLS-1$
assertSame(m1, ret);
ret = ReflectionUtils.invokeHidden(navigationProcessor, "getSelectableChild", m1); //$NON-NLS-1$
assertSame(sm1, ret);
ret = ReflectionUtils.invokeHidden(navigationProcessor, "getSelectableChild", sm1); //$NON-NLS-1$
assertSame(sm11, ret);
sm11.setSelectable(false);
ret = ReflectionUtils.invokeHidden(navigationProcessor, "getSelectableChild", sm1); //$NON-NLS-1$
assertSame(sm12, ret);
sm1.setSelectable(false);
ret = ReflectionUtils.invokeHidden(navigationProcessor, "getSelectableChild", m1); //$NON-NLS-1$
assertSame(sm12, ret);
}
public void testActivateChildren() throws Exception {
assertFalse(subApplication.isActivated());
assertFalse(moduleGroup.isActivated());
assertFalse(module.isActivated());
assertFalse(subModule1.isActivated());
navigationProcessor.activate(subApplication);
assertTrue(subApplication.isActivated());
assertTrue(moduleGroup.isActivated());
assertTrue(module.isActivated());
assertTrue(subModule1.isActivated());
subApplication.deactivate(null);
moduleGroup.deactivate(null);
module.deactivate(null);
subModule1.deactivate(null);
subApplication.setEnabled(false);
navigationProcessor.activate(subApplication);
assertFalse(subApplication.isActivated());
subApplication.setEnabled(true);
subApplication.setVisible(false);
navigationProcessor.activate(subApplication);
assertFalse(subApplication.isActivated());
}
/**
* Tests the <i>private</i> method
* {@code checkActiveNodes(INavigationNode<?>)}
*/
public void testCheckActiveNodes() {
navigationProcessor.activate(subApplication);
assertTrue(subApplication.isActivated());
assertTrue(moduleGroup.isActivated());
assertFalse(moduleGroup2.isActivated());
assertTrue(module.isActivated());
assertFalse(module2.isActivated());
assertTrue(subModule1.isActivated());
assertFalse(subModule2.isActivated());
assertFalse(subModule3.isActivated());
assertFalse(subModule4.isActivated());
boolean ret = ReflectionUtils.invokeHidden(navigationProcessor, "checkActiveNodes", module); //$NON-NLS-1$
assertTrue(ret);
ReflectionUtils.invokeHidden(subModule4, "setState", State.ACTIVATED); //$NON-NLS-1$
ret = ReflectionUtils.invokeHidden(navigationProcessor, "checkActiveNodes", module); //$NON-NLS-1$
assertFalse(ret);
ReflectionUtils.invokeHidden(moduleGroup2, "setState", State.ACTIVATED); //$NON-NLS-1$
ret = ReflectionUtils.invokeHidden(navigationProcessor, "checkActiveNodes", module); //$NON-NLS-1$
assertFalse(ret);
ReflectionUtils.invokeHidden(subModule1, "setState", State.DEACTIVATED); //$NON-NLS-1$
ret = ReflectionUtils.invokeHidden(navigationProcessor, "checkActiveNodes", module); //$NON-NLS-1$
assertFalse(ret);
ReflectionUtils.invokeHidden(moduleGroup, "setState", State.DEACTIVATED); //$NON-NLS-1$
ret = ReflectionUtils.invokeHidden(navigationProcessor, "checkActiveNodes", module); //$NON-NLS-1$
assertTrue(ret);
}
class DummyJumpTargetListener implements IJumpTargetListener {
private IJumpTargetListener.JumpTargetState jumpTargetState;
private INavigationNode<?> node;
DummyJumpTargetListener() {
reset();
}
public void jumpTargetStateChanged(final INavigationNode<?> node, final JumpTargetState jumpTargetState) {
this.jumpTargetState = jumpTargetState;
this.node = node;
}
void reset() {
jumpTargetState = null;
node = null;
}
}
public void testDefaultJump() throws Exception {
final DummyJumpTargetListener listener = new DummyJumpTargetListener();
subModule1.activate();
subModule2.addJumpTargetListener(listener);
subModule1.jump(new NavigationNodeId("org.eclipse.riena.navigation.model.test.subModule2")); //$NON-NLS-1$
assertSame(subModule2, listener.node);
assertSame(IJumpTargetListener.JumpTargetState.ENABLED, listener.jumpTargetState);
listener.reset();
assertTrue(subModule2.isActivated());
assertTrue(subModule2.isJumpTarget());
subModule2.jumpBack();
assertSame(subModule2, listener.node);
assertSame(IJumpTargetListener.JumpTargetState.DISABLED, listener.jumpTargetState);
assertFalse(subModule2.isJumpTarget());
assertTrue(subModule1.isActivated());
subModule1.jump(new NavigationNodeId("org.eclipse.riena.navigation.model.test.subModule2")); //$NON-NLS-1$
subModule2.jump(new NavigationNodeId("org.eclipse.riena.navigation.model.test.subModule3")); //$NON-NLS-1$
assertTrue(subModule3.isActivated());
subModule2.dispose();
subModule3.jumpBack();
assertTrue(subModule3.isActivated());
subModule2 = new SubModuleNode(new NavigationNodeId("org.eclipse.riena.navigation.model.test.subModule2")); //$NON-NLS-1$
module.addChild(subModule2);
subModule1.activate();
subModule1.jump(new NavigationNodeId("org.eclipse.riena.navigation.model.test.subModule2")); //$NON-NLS-1$
subModule2.navigate(new NavigationNodeId("org.eclipse.riena.navigation.model.test.subModule3")); //$NON-NLS-1$
subModule3.jump(new NavigationNodeId("org.eclipse.riena.navigation.model.test.subModule2")); //$NON-NLS-1$
subModule2.jumpBack();
assertTrue(subModule3.isActivated());
}
public void testDeepJump() throws Exception {
subModule1.activate();
subModule1.jump(new NavigationNodeId("org.eclipse.riena.navigation.model.test.module.2")); //$NON-NLS-1$
assertTrue(module2.isJumpTarget());
assertTrue(subModule4.isJumpTarget());
assertTrue(subModule4.isActivated());
subModule4.jumpBack();
assertTrue(subModule1.isActivated());
assertFalse(subModule4.isJumpTarget());
assertFalse(module2.isJumpTarget());
}
/**
* Tests the <i>private</i> method {@code getActivatableNodes}.
*/
public void testGetActivatableNodes() {
NavigationNodeId id = new NavigationNodeId("4711"); //$NON-NLS-1$
final SubModuleNode node = new SubModuleNode(id);
node.setNavigationProcessor(navigationProcessor);
id = new NavigationNodeId("0815"); //$NON-NLS-1$
final SubModuleNode node2 = new SubModuleNode(id);
node2.setNavigationProcessor(navigationProcessor);
id = new NavigationNodeId("node3"); //$NON-NLS-1$
final SubModuleNode node3 = new SubModuleNode(id);
node3.setNavigationProcessor(navigationProcessor);
id = new NavigationNodeId("node4"); //$NON-NLS-1$
final SubModuleNode node4 = new SubModuleNode(id);
node4.setNavigationProcessor(navigationProcessor);
final List<INavigationNode<?>> nodes = new ArrayList<INavigationNode<?>>();
nodes.add(node);
nodes.add(node2);
nodes.add(node3);
nodes.add(node4);
List<INavigationNode<?>> activateableNodes = ReflectionUtils.invokeHidden(navigationProcessor,
"getActivatableNodes", nodes); //$NON-NLS-1$
assertTrue(activateableNodes.size() == 4);
assertTrue(activateableNodes.contains(node));
assertTrue(activateableNodes.contains(node2));
assertTrue(activateableNodes.contains(node3));
assertTrue(activateableNodes.contains(node4));
node2.addMarker(new DisabledMarker());
node3.addMarker(new HiddenMarker());
node3.addMarker(new OutputMarker());
activateableNodes = ReflectionUtils.invokeHidden(navigationProcessor, "getActivatableNodes", nodes); //$NON-NLS-1$
assertTrue(activateableNodes.size() == 2);
assertTrue(activateableNodes.contains(node));
assertFalse(activateableNodes.contains(node2));
assertFalse(activateableNodes.contains(node3));
assertTrue(activateableNodes.contains(node4));
}
/**
* Tests the <i>private</i> method
* {@code getNodesToActivateOnDispose(INavigationNode<?>)}.
*/
public void testGetNodesToActivateOnDispose() {
final ModuleGroupNode mg1 = new ModuleGroupNode(new NavigationNodeId("mg1")); //$NON-NLS-1$
final ModuleNode m1 = new ModuleNode(new NavigationNodeId("m1")); //$NON-NLS-1$
final SubModuleNode sm1 = new SubModuleNode(new NavigationNodeId("sm1")); //$NON-NLS-1$
final SubModuleNode sm11 = new SubModuleNode(new NavigationNodeId("sm11")); //$NON-NLS-1$
final SubModuleNode sm12 = new SubModuleNode(new NavigationNodeId("sm12")); //$NON-NLS-1$
mg1.addChild(m1);
m1.addChild(sm1);
sm1.addChild(sm11);
sm1.addChild(sm12);
List<INavigationNode<?>> nodes = ReflectionUtils.invokeHidden(navigationProcessor,
"getNodesToActivateOnDispose", sm12); //$NON-NLS-1$
assertEquals(0, nodes.size());
sm12.activate();
nodes = ReflectionUtils.invokeHidden(navigationProcessor, "getNodesToActivateOnDispose", sm12); //$NON-NLS-1$
assertNotNull(nodes);
assertEquals(1, nodes.size());
assertSame(sm11, nodes.get(0));
sm11.activate();
nodes = ReflectionUtils.invokeHidden(navigationProcessor, "getNodesToActivateOnDispose", sm11); //$NON-NLS-1$
assertNotNull(nodes);
assertEquals(1, nodes.size());
assertSame(sm12, nodes.get(0));
sm1.removeChild(sm12);
nodes = ReflectionUtils.invokeHidden(navigationProcessor, "getNodesToActivateOnDispose", sm11); //$NON-NLS-1$
assertNotNull(nodes);
assertEquals(1, nodes.size());
assertSame(sm1, nodes.get(0));
}
/**
* Tests the <i>private</i> method {@code getChildToActivate}.
*/
public void testGetChildToActivate() {
NavigationNodeId id = new NavigationNodeId("4711"); //$NON-NLS-1$
final SubModuleNode node = new SubModuleNode(id);
INavigationNode<?> toActivate = ReflectionUtils.invokeHidden(navigationProcessor, "getChildToActivate", node); //$NON-NLS-1$
assertNull(toActivate);
id = new NavigationNodeId("m1"); //$NON-NLS-1$
final ModuleNode moduleNode = new ModuleNode(id);
toActivate = ReflectionUtils.invokeHidden(navigationProcessor, "getChildToActivate", moduleNode); //$NON-NLS-1$
assertNull(toActivate);
moduleNode.addChild(node);
toActivate = ReflectionUtils.invokeHidden(navigationProcessor, "getChildToActivate", moduleNode); //$NON-NLS-1$
assertSame(node, toActivate);
id = new NavigationNodeId("sm2"); //$NON-NLS-1$
final SubModuleNode node2 = new SubModuleNode(id);
moduleNode.addChild(node2);
toActivate = ReflectionUtils.invokeHidden(navigationProcessor, "getChildToActivate", moduleNode); //$NON-NLS-1$
assertSame(node, toActivate);
node2.setSelected(true);
toActivate = ReflectionUtils.invokeHidden(navigationProcessor, "getChildToActivate", moduleNode); //$NON-NLS-1$
assertSame(node2, toActivate);
id = new NavigationNodeId("mg1"); //$NON-NLS-1$
final ModuleGroupNode moduleGroupNode = new ModuleGroupNode(id);
moduleGroupNode.setNavigationProcessor(navigationProcessor);
moduleGroupNode.addChild(moduleNode);
toActivate = ReflectionUtils.invokeHidden(navigationProcessor, "getChildToActivate", moduleGroupNode); //$NON-NLS-1$
assertSame(moduleNode, toActivate);
final DisabledMarker disabledMarker = new DisabledMarker();
moduleNode.addMarker(disabledMarker);
toActivate = ReflectionUtils.invokeHidden(navigationProcessor, "getChildToActivate", moduleGroupNode); //$NON-NLS-1$
assertNull(toActivate);
moduleNode.removeAllMarkers();
moduleNode.addMarker(new OutputMarker());
toActivate = ReflectionUtils.invokeHidden(navigationProcessor, "getChildToActivate", moduleGroupNode); //$NON-NLS-1$
assertSame(moduleNode, toActivate);
moduleNode.addMarker(new HiddenMarker());
toActivate = ReflectionUtils.invokeHidden(navigationProcessor, "getChildToActivate", moduleGroupNode); //$NON-NLS-1$
assertNull(toActivate);
}
/**
* Tests the method {@code dispose}.
*/
public void testDispose() {
NavigationNodeId id = new NavigationNodeId("4711"); //$NON-NLS-1$
final TestSubModuleNode node = new TestSubModuleNode(id);
id = new NavigationNodeId("0815"); //$NON-NLS-1$
final TestSubModuleNode node2 = new TestSubModuleNode(id);
id = new NavigationNodeId("m1"); //$NON-NLS-1$
final ModuleNode moduleNode = new ModuleNode(id);
moduleNode.addChild(node);
moduleNode.addChild(node2);
id = new NavigationNodeId("m2"); //$NON-NLS-1$
final ModuleNode moduleNode2 = new ModuleNode(id);
id = new NavigationNodeId("mg1"); //$NON-NLS-1$
final ModuleGroupNode moduleGroupNode = new ModuleGroupNode(id);
moduleGroupNode.addChild(moduleNode);
moduleGroupNode.addChild(moduleNode2);
navigationProcessor.activate(node2);
node2.setAllowsDeactivate(false);
navigationProcessor.dispose(node2);
assertFalse(node2.isDisposed());
assertTrue(node2.isActivated());
node2.setAllowsDeactivate(true);
node2.setAllowsDispose(false);
navigationProcessor.dispose(node2);
assertFalse(node2.isDisposed());
assertTrue(node2.isActivated());
node2.setAllowsDispose(true);
node.setAllowsActivate(false);
navigationProcessor.dispose(node2);
assertFalse(node2.isDisposed());
assertTrue(node2.isActivated());
node.setAllowsActivate(true);
navigationProcessor.dispose(node2);
assertTrue(node2.isDisposed());
assertTrue(node.isActivated());
navigationProcessor.dispose(node2);
assertTrue(node2.isDisposed());
navigationProcessor.dispose(moduleNode2);
assertTrue(moduleNode2.isDisposed());
assertFalse(moduleGroupNode.isDisposed());
navigationProcessor.dispose(moduleNode);
assertTrue(moduleNode.isDisposed());
assertTrue(moduleGroupNode.isDisposed());
}
/**
* Tests the method {@code dispose} with the context property
* "CONTEXTKEY_NAVIGATE_AFTER_DISPOSE".
*/
public void testDisposeWithNavigateAfterDispose() {
navigationProcessor.activate(subModule3);
assertTrue(subModule3.isActivated());
navigationProcessor.dispose(subModule3);
assertTrue(subModule1.isActivated());
navigationProcessor.activate(subModule2);
assertTrue(subModule2.isActivated());
subModule2.setContext(INavigationNode.CONTEXTKEY_NAVIGATE_AFTER_DISPOSE, subModule4.getNodeId());
navigationProcessor.dispose(subModule2);
assertTrue(subModule4.isActivated());
assertFalse(subModule2.isActivated());
}
/**
* Tests the <i>private</i> method {@code getNodeToDispose}.
*/
public void testGetNodeToDispose() {
NavigationNodeId id = new NavigationNodeId("4711"); //$NON-NLS-1$
final SubModuleNode node = new SubModuleNode(id);
id = new NavigationNodeId("m1"); //$NON-NLS-1$
final ModuleNode moduleNode = new ModuleNode(id);
moduleNode.addChild(node);
id = new NavigationNodeId("m2"); //$NON-NLS-1$
final ModuleNode moduleNode2 = new ModuleNode(id);
id = new NavigationNodeId("mg1"); //$NON-NLS-1$
final ModuleGroupNode moduleGroupNode = new ModuleGroupNode(id);
moduleGroupNode.addChild(moduleNode);
moduleGroupNode.addChild(moduleNode2);
INavigationNode<?> toDispose = ReflectionUtils.invokeHidden(navigationProcessor, "getNodeToDispose", node); //$NON-NLS-1$
assertSame(node, toDispose);
toDispose = ReflectionUtils.invokeHidden(navigationProcessor, "getNodeToDispose", moduleNode); //$NON-NLS-1$
assertSame(moduleGroupNode, toDispose);
toDispose = ReflectionUtils.invokeHidden(navigationProcessor, "getNodeToDispose", moduleNode2); //$NON-NLS-1$
assertSame(moduleNode2, toDispose);
toDispose = ReflectionUtils.invokeHidden(navigationProcessor, "getNodeToDispose", moduleGroupNode); //$NON-NLS-1$
assertSame(moduleGroupNode, toDispose);
}
/**
* Tests the method {@code addMarker}.
*/
public void testAddMarker() {
final IMarker disabledMarker = new DisabledMarker();
final IMarker hiddenMarker = new HiddenMarker();
final IMarker errorMarker = new ErrorMarker();
navigationProcessor.addMarker(null, disabledMarker);
NavigationNodeId id = new NavigationNodeId("4711"); //$NON-NLS-1$
final TestSubModuleNode node = new TestSubModuleNode(id);
id = new NavigationNodeId("0815"); //$NON-NLS-1$
final TestSubModuleNode node2 = new TestSubModuleNode(id);
id = new NavigationNodeId("m1"); //$NON-NLS-1$
final ModuleNode moduleNode = new ModuleNode(id);
moduleNode.addChild(node);
moduleNode.addChild(node2);
moduleNode.setNavigationProcessor(navigationProcessor);
navigationProcessor.addMarker(node, disabledMarker);
assertFalse(node.isEnabled());
assertTrue(node.isVisible());
navigationProcessor.addMarker(node2, hiddenMarker);
assertTrue(node2.isEnabled());
assertFalse(node2.isVisible());
node.removeAllMarkers();
node2.removeAllMarkers();
node.setSelected(true);
navigationProcessor.addMarker(node, disabledMarker);
assertFalse(node.isEnabled());
assertFalse(node.isSelected());
node.setSelected(true);
navigationProcessor.addMarker(node, hiddenMarker);
assertFalse(node.isVisible());
assertFalse(node.isSelected());
node.setSelected(true);
navigationProcessor.addMarker(node, errorMarker);
assertTrue(node.isSelected());
node.removeAllMarkers();
node2.removeAllMarkers();
node2.activate();
navigationProcessor.addMarker(node2, errorMarker);
assertTrue(node2.isActivated());
node2.removeAllMarkers();
node2.activate();
navigationProcessor.addMarker(node2, disabledMarker);
assertFalse(node2.isActivated());
assertFalse(node2.isEnabled());
assertTrue(node.isActivated());
node2.removeAllMarkers();
node2.activate();
navigationProcessor.addMarker(node2, hiddenMarker);
assertFalse(node2.isActivated());
assertFalse(node2.isVisible());
assertTrue(node.isActivated());
node2.removeAllMarkers();
node2.activate();
node2.setAllowsDeactivate(false);
navigationProcessor.addMarker(node2, hiddenMarker);
assertTrue(node2.isVisible());
assertFalse(node.isActivated());
assertTrue(node2.isActivated());
node2.removeAllMarkers();
node2.activate();
node2.setAllowsDeactivate(true);
node.setAllowsActivate(false);
navigationProcessor.addMarker(node2, hiddenMarker);
assertTrue(node2.isVisible());
assertFalse(node.isActivated());
assertTrue(node2.isActivated());
node2.removeAllMarkers();
node2.activate();
node.setAllowsActivate(true);
navigationProcessor.addMarker(node2, hiddenMarker);
assertFalse(node2.isVisible());
assertTrue(node.isActivated());
assertFalse(node2.isActivated());
}
/**
* Tests the <i>private</i> method {@code getTopParent}.
*/
public void testGetTopParent() {
NavigationNodeId id = new NavigationNodeId("4711"); //$NON-NLS-1$
final TestSubModuleNode node = new TestSubModuleNode(id);
id = new NavigationNodeId("0815"); //$NON-NLS-1$
final TestSubModuleNode node2 = new TestSubModuleNode(id);
id = new NavigationNodeId("m1"); //$NON-NLS-1$
final ModuleNode moduleNode = new ModuleNode(id);
moduleNode.addChild(node);
moduleNode.addChild(node2);
id = new NavigationNodeId("m2"); //$NON-NLS-1$
final ModuleNode moduleNode2 = new ModuleNode(id);
id = new NavigationNodeId("mg1"); //$NON-NLS-1$
final ModuleGroupNode moduleGroupNode = new ModuleGroupNode(id);
moduleGroupNode.addChild(moduleNode);
INavigationNode<?> top = ReflectionUtils.invokeHidden(navigationProcessor, "getTopParent", node); //$NON-NLS-1$
assertSame(moduleGroupNode, top);
top = ReflectionUtils.invokeHidden(navigationProcessor, "getTopParent", node2); //$NON-NLS-1$
assertSame(moduleGroupNode, top);
top = ReflectionUtils.invokeHidden(navigationProcessor, "getTopParent", moduleNode); //$NON-NLS-1$
assertSame(moduleGroupNode, top);
top = ReflectionUtils.invokeHidden(navigationProcessor, "getTopParent", moduleGroupNode); //$NON-NLS-1$
assertSame(moduleGroupNode, top);
top = ReflectionUtils.invokeHidden(navigationProcessor, "getTopParent", moduleNode2); //$NON-NLS-1$
assertSame(moduleNode2, top);
}
/**
* Tests the <i>private</i> method {@code getNextActiveParent}.
*/
public void testGetNextActiveParent() {
NavigationNodeId id = new NavigationNodeId("4711"); //$NON-NLS-1$
final TestSubModuleNode node = new TestSubModuleNode(id);
id = new NavigationNodeId("0815"); //$NON-NLS-1$
final TestSubModuleNode node2 = new TestSubModuleNode(id);
node.addChild(node2);
id = new NavigationNodeId("m1"); //$NON-NLS-1$
final ModuleNode moduleNode = new ModuleNode(id);
moduleNode.addChild(node);
id = new NavigationNodeId("m2"); //$NON-NLS-1$
final ModuleNode moduleNode2 = new ModuleNode(id);
id = new NavigationNodeId("mg1"); //$NON-NLS-1$
final ModuleGroupNode moduleGroupNode = new ModuleGroupNode(id);
moduleGroupNode.addChild(moduleNode);
moduleGroupNode.addChild(moduleNode2);
moduleGroupNode.setNavigationProcessor(navigationProcessor);
INavigationNode<?> parent = ReflectionUtils.invokeHidden(navigationProcessor, "getNextActiveParent", node2); //$NON-NLS-1$
assertNull(parent);
node.activate();
parent = ReflectionUtils.invokeHidden(navigationProcessor, "getNextActiveParent", node2); //$NON-NLS-1$
assertSame(moduleNode, parent);
node.deactivate(null);
parent = ReflectionUtils.invokeHidden(navigationProcessor, "getNextActiveParent", node2); //$NON-NLS-1$
assertSame(moduleNode, parent);
moduleNode.deactivate(null);
parent = ReflectionUtils.invokeHidden(navigationProcessor, "getNextActiveParent", node2); //$NON-NLS-1$
assertSame(moduleGroupNode, parent);
}
/**
* Tests the <i>private</i> method {@code getActiveChild}.
*/
public void testGetActiveChild() {
NavigationNodeId id = new NavigationNodeId("4711"); //$NON-NLS-1$
final TestSubModuleNode node = new TestSubModuleNode(id);
id = new NavigationNodeId("0815"); //$NON-NLS-1$
final TestSubModuleNode node2 = new TestSubModuleNode(id);
node.addChild(node2);
id = new NavigationNodeId("m1"); //$NON-NLS-1$
final ModuleNode moduleNode = new ModuleNode(id);
moduleNode.addChild(node);
id = new NavigationNodeId("m2"); //$NON-NLS-1$
final ModuleNode moduleNode2 = new ModuleNode(id);
id = new NavigationNodeId("mg1"); //$NON-NLS-1$
final ModuleGroupNode moduleGroupNode = new ModuleGroupNode(id);
moduleGroupNode.addChild(moduleNode);
moduleGroupNode.addChild(moduleNode2);
moduleGroupNode.setNavigationProcessor(navigationProcessor);
INavigationNode<?> child = ReflectionUtils.invokeHidden(navigationProcessor, "getActiveChild", node); //$NON-NLS-1$
assertNull(child);
child = ReflectionUtils.invokeHidden(navigationProcessor, "getActiveChild", moduleNode); //$NON-NLS-1$
assertNull(child);
node.setSelected(true);
child = ReflectionUtils.invokeHidden(navigationProcessor, "getActiveChild", node); //$NON-NLS-1$
assertNull(child);
child = ReflectionUtils.invokeHidden(navigationProcessor, "getActiveChild", moduleNode); //$NON-NLS-1$
assertNull(child);
node.activate();
child = ReflectionUtils.invokeHidden(navigationProcessor, "getActiveChild", node); //$NON-NLS-1$
assertNull(child);
child = ReflectionUtils.invokeHidden(navigationProcessor, "getActiveChild", moduleNode); //$NON-NLS-1$
assertSame(node, child);
node2.setSelected(true);
node2.activate();
child = ReflectionUtils.invokeHidden(navigationProcessor, "getActiveChild", node); //$NON-NLS-1$
assertNull(child);
child = ReflectionUtils.invokeHidden(navigationProcessor, "getActiveChild", moduleNode); //$NON-NLS-1$
assertSame(node2, child);
child = ReflectionUtils.invokeHidden(navigationProcessor, "getActiveChild", moduleGroupNode); //$NON-NLS-1$
assertSame(moduleNode, child);
}
/**
* Tests the method {@code move}.
*/
public void testMove() throws Exception {
final INavigationNode<?> targetModuleGroup = createTargetModuleGroup();
assertEquals(module2, moduleGroup.getChild(1));
assertEquals(2, moduleGroup.getChildren().size());
assertEquals(0, moduleGroup2.getChildren().size());
module2.moveTo(new NavigationNodeId(TARGET_MODULE_GROUP));
assertEquals(1, moduleGroup.getChildren().size());
assertEquals(1, moduleGroup2.getChildren().size());
assertEquals(module2, targetModuleGroup.getChild(0));
}
/**
* Tests the method {@code move} with the attribute blocked set.
*/
public void testMoveBlocked() throws Exception {
final INavigationNode<?> targetModuleGroup = createTargetModuleGroup();
module2.setBlocked(true);
module2.moveTo(new NavigationNodeId(TARGET_MODULE_GROUP));
assertEquals(module2, targetModuleGroup.getChild(0));
assertTrue(module2.isBlocked());
assertFalse(moduleGroup2.isBlocked());
}
/**
* Tests the method {@code move} with the attribute enabled set.
*/
public void testMoveEnabled() throws Exception {
final INavigationNode<?> targetModuleGroup = createTargetModuleGroup();
module2.setEnabled(true);
module2.moveTo(new NavigationNodeId(TARGET_MODULE_GROUP));
assertEquals(module2, targetModuleGroup.getChild(0));
assertTrue(module2.isEnabled());
}
/**
* Tests the method {@code move} with the attribute visible set.
*/
public void testMoveVisible() throws Exception {
final INavigationNode<?> targetModuleGroup = createTargetModuleGroup();
module2.setVisible(true);
module2.moveTo(new NavigationNodeId(TARGET_MODULE_GROUP));
assertEquals(module2, targetModuleGroup.getChild(0));
assertTrue(module2.isVisible());
}
/**
* Tests the method {@code prepare(INavigationNode<?>)}.
*/
public void testPrepare() {
final TestSubModuleNode node = new TestSubModuleNode(new NavigationNodeId("4711")); //$NON-NLS-1$
navigationProcessor.prepare(node);
final INavigationContext context = node.getNaviContext();
assertNotNull(context);
assertNotNull(context.getToPrepare());
assertEquals(1, context.getToPrepare().size());
assertTrue(context.getToActivate().isEmpty());
assertTrue(context.getToDeactivate().isEmpty());
assertSame(node, context.getToPrepare().get(0));
}
/**
* Tests the method {@code historyBack()}.
*/
public void testHistoryBack() {
final TestSubModuleNode node = new TestSubModuleNode(new NavigationNodeId("4711")); //$NON-NLS-1$
module.addChild(node);
subModule1.activate();
node.activate();
assertFalse(subModule1.isActivated());
assertTrue(node.isActivated());
assertEquals(0, navigationProcessor.getHistoryForwardSize());
assertEquals(1, navigationProcessor.getHistoryBackSize());
navigationProcessor.historyBack();
assertTrue(subModule1.isActivated());
assertFalse(node.isActivated());
assertEquals(1, navigationProcessor.getHistoryForwardSize());
assertEquals(0, navigationProcessor.getHistoryBackSize());
navigationProcessor.historyBack();
assertTrue(subModule1.isActivated());
assertFalse(node.isActivated());
assertEquals(1, navigationProcessor.getHistoryForwardSize());
assertEquals(0, navigationProcessor.getHistoryBackSize());
}
/**
* Tests the method {@code historyForeward()}.
*/
public void testHistoryForeward() {
final TestSubModuleNode node = new TestSubModuleNode(new NavigationNodeId("4711")); //$NON-NLS-1$
module.addChild(node);
subModule1.activate();
node.activate();
assertFalse(subModule1.isActivated());
assertTrue(node.isActivated());
assertEquals(0, navigationProcessor.getHistoryForwardSize());
assertEquals(1, navigationProcessor.getHistoryBackSize());
navigationProcessor.historyBack();
assertTrue(subModule1.isActivated());
assertFalse(node.isActivated());
assertEquals(1, navigationProcessor.getHistoryForwardSize());
assertEquals(0, navigationProcessor.getHistoryBackSize());
navigationProcessor.historyForward();
assertFalse(subModule1.isActivated());
assertTrue(node.isActivated());
assertEquals(0, navigationProcessor.getHistoryForwardSize());
assertEquals(1, navigationProcessor.getHistoryBackSize());
navigationProcessor.historyForward();
assertFalse(subModule1.isActivated());
assertTrue(node.isActivated());
assertEquals(0, navigationProcessor.getHistoryForwardSize());
assertEquals(1, navigationProcessor.getHistoryBackSize());
}
/**
* Tests the method {@code getHistory()}.
*/
public void testGetHistory() {
TestSubModuleNode node = new TestSubModuleNode(new NavigationNodeId("4711")); //$NON-NLS-1$
module.addChild(node);
subModule1.activate();
node.activate();
assertFalse(subModule1.isActivated());
assertTrue(node.isActivated());
assertEquals(0, navigationProcessor.getHistoryForwardSize());
assertEquals(1, navigationProcessor.getHistoryBackSize());
assertEquals(2, navigationProcessor.getHistory().size());
assertEquals(subModule1, navigationProcessor.getHistory().get(0));
assertEquals(node, navigationProcessor.getHistory().get(1));
node = new TestSubModuleNode(new NavigationNodeId("0815")); //$NON-NLS-1$
try {
navigationProcessor.getHistory().add(node);
fail();
} catch (final UnsupportedOperationException e) {
// getHistory().add() must provide an UnmodifiableCollection.
assertTrue(e instanceof UnsupportedOperationException);
}
try {
navigationProcessor.getHistory().remove(subModule1);
fail();
} catch (final UnsupportedOperationException e) {
// getHistory().remove() must provide an UnmodifiableCollection.
assertTrue(e instanceof UnsupportedOperationException);
}
}
/**
* Tests the <i>private</i> method
* {@code findSelectableChildNode(ISubModuleNode)}
*/
public void testFindSelectableChildNode() {
ISubModuleNode selectableChild = ReflectionUtils.invokeHidden(navigationProcessor, "findSelectableChildNode", //$NON-NLS-1$
subModule1);
assertSame(subModule1, selectableChild);
subModule1.setSelectable(false);
selectableChild = ReflectionUtils.invokeHidden(navigationProcessor, "findSelectableChildNode", subModule1); //$NON-NLS-1$
assertNull(selectableChild);
final TestSubModuleNode node = new TestSubModuleNode(new NavigationNodeId("4711")); //$NON-NLS-1$
subModule1.addChild(node);
selectableChild = ReflectionUtils.invokeHidden(navigationProcessor, "findSelectableChildNode", subModule1); //$NON-NLS-1$
assertSame(node, selectableChild);
}
/**
* Tests the methods
* {@link INavigationProcessor#jump(INavigationNode, NavigationNodeId, NavigationArgument)}
* and {@link INavigationProcessor#jumpBack(INavigationNode)}
*
* @throws Exception
*/
public void testJump() throws Exception {
final ApplicationNode app = new ApplicationNode();
final SubApplicationNode subApp = new SubApplicationNode();
app.addChild(subApp);
final ModuleGroupNode mg = new ModuleGroupNode();
subApp.addChild(mg);
final ModuleNode m1 = new ModuleNode(new NavigationNodeId("m1")); //$NON-NLS-1$
mg.addChild(m1);
final ModuleNode m2 = new ModuleNode(new NavigationNodeId("m2")); //$NON-NLS-1$
mg.addChild(m2);
final SubModuleNode m1s1 = new SubModuleNode(new NavigationNodeId("m1s1")); //$NON-NLS-1$
m1.addChild(m1s1);
final SubModuleNode m1s2 = new SubModuleNode(new NavigationNodeId("m1s2")); //$NON-NLS-1$
m1.addChild(m1s2);
final SubModuleNode m1s1s1 = new SubModuleNode(new NavigationNodeId("m1s1s1")); //$NON-NLS-1$
m1s1.addChild(m1s1s1);
final SubModuleNode m2s1 = new SubModuleNode(new NavigationNodeId("m2s1")); //$NON-NLS-1$
m2.addChild(m2s1);
final SubModuleNode m2s2 = new SubModuleNode(new NavigationNodeId("m2s2")); //$NON-NLS-1$
m2.addChild(m2s2);
app.activate();
final IJumpTargetListener listenerMock = EasyMock.createMock(IJumpTargetListener.class);
listenerMock.jumpTargetStateChanged(m1, JumpTargetState.ENABLED);
EasyMock.expectLastCall().times(1);
EasyMock.replay(listenerMock);
m1.addJumpTargetListener(listenerMock);
m1s2.jump(new NavigationNodeId("m1s1s1")); //$NON-NLS-1$
assertTrue(m1s1s1.isActivated());
assertTrue(m1s1s1.isJumpTarget());
assertTrue(m1.isJumpTarget());
assertTrue(m2.isJumpTarget());
assertTrue(m2s1.isJumpTarget());
assertFalse(subApp.isJumpTarget());
EasyMock.verify(listenerMock);
EasyMock.reset(listenerMock);
listenerMock.jumpTargetStateChanged(m1, JumpTargetState.DISABLED);
EasyMock.expectLastCall().times(1);
EasyMock.replay(listenerMock);
m1s2.addSimpleListener(new SimpleNavigationNodeAdapter() {
@Override
public void activated(final INavigationNode<?> source) {
m1s2.isJumpTarget();
}
});
assertSame(m1s2, m2s1.getNavigationProcessor().getTentativeJumpBackTarget(m2s1));
m2s1.jumpBack();
EasyMock.verify(listenerMock);
EasyMock.reset(listenerMock);
assertTrue(m1s2.isActivated());
m1s2.jump(new NavigationNodeId("m1s1")); //$NON-NLS-1$
assertTrue(m1s1.isActivated());
m1s1.jump(new NavigationNodeId("m2s1")); //$NON-NLS-1$
assertTrue(m2s1.isActivated());
assertSame(m1s1, m2s1.getNavigationProcessor().getTentativeJumpBackTarget(m2s1));
m2s1.jumpBack();
assertTrue(m1s1.isJumpTarget());
assertTrue(m1.isJumpTarget());
assertTrue(m2.isJumpTarget());
assertTrue(m2s1.isJumpTarget());
assertFalse(subApp.isJumpTarget());
assertTrue(m1s1.isActivated());
assertSame(m1s2, m1.getNavigationProcessor().getTentativeJumpBackTarget(m1));
m1.jumpBack();
assertTrue(m1s2.isActivated());
m1.jumpBack();
//clean state / no jump targets registered
m1.jump(new NavigationNodeId("m2s1")); //$NON-NLS-1$
EasyMock.reset(listenerMock);
listenerMock.jumpTargetStateChanged(m1, JumpTargetState.DISABLED);
EasyMock.expectLastCall().times(1);
EasyMock.replay(listenerMock);
m2s1.dispose();
EasyMock.verify(listenerMock);
EasyMock.reset(listenerMock);
assertFalse(m1s1.isJumpTarget());
assertFalse(m1.isJumpTarget());
assertFalse(m2.isJumpTarget());
m1s1.jump(new NavigationNodeId("m2s2")); //$NON-NLS-1$
EasyMock.reset(listenerMock);
listenerMock.jumpTargetStateChanged(m1, JumpTargetState.DISABLED);
EasyMock.expectLastCall().times(1);
EasyMock.replay(listenerMock);
assertTrue(m2s2.isActivated());
assertTrue(m1s1.isJumpTarget());
assertTrue(m1.isJumpTarget());
assertTrue(m2.isJumpTarget());
m1s1.dispose();
EasyMock.verify(listenerMock);
EasyMock.reset(listenerMock);
assertFalse(m1s1.isJumpTarget());
assertFalse(m1.isJumpTarget());
assertFalse(m2.isJumpTarget());
}
private INavigationNode<?> createTargetModuleGroup() {
final INavigationNode<?> targetModuleGroup = navigationProcessor.create(subApplication, new NavigationNodeId(
TARGET_MODULE_GROUP), null);
return targetModuleGroup;
}
public static class TestSubModuleNode extends SubModuleNode {
private boolean allowsActivate;
private boolean allowsDeactivate;
private boolean allowsDispose;
private INavigationContext naviContext;
public TestSubModuleNode(final NavigationNodeId nodeId) {
super(nodeId);
allowsActivate = true;
allowsDeactivate = true;
allowsDispose = true;
}
@Override
public boolean allowsActivate(final INavigationContext context) {
return allowsActivate;
}
@Override
public boolean allowsDeactivate(final INavigationContext context) {
return allowsDeactivate;
}
@Override
public boolean allowsDispose(final INavigationContext context) {
return allowsDispose;
}
public void setAllowsActivate(final boolean allowsActivate) {
this.allowsActivate = allowsActivate;
}
public void setAllowsDeactivate(final boolean allowsDeactivate) {
this.allowsDeactivate = allowsDeactivate;
}
public void setAllowsDispose(final boolean allowsDispose) {
this.allowsDispose = allowsDispose;
}
@Override
public void prepare(final INavigationContext context) {
super.prepare(context);
naviContext = context;
}
public INavigationContext getNaviContext() {
return naviContext;
}
}
}