/*******************************************************************************
* 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 org.eclipse.riena.core.test.RienaTestCase;
import org.eclipse.riena.core.test.collect.NonUITestCase;
import org.eclipse.riena.navigation.IApplicationNode;
import org.eclipse.riena.navigation.IModuleGroupNode;
import org.eclipse.riena.navigation.IModuleNode;
import org.eclipse.riena.navigation.INavigationNode;
import org.eclipse.riena.navigation.ISubApplicationNode;
import org.eclipse.riena.navigation.ISubModuleNode;
import org.eclipse.riena.navigation.NavigationNodeId;
import org.eclipse.riena.navigation.model.NavigationProcessorTest.TestSubModuleNode;
/**
* Manual Tests for the NavigationProcessor that use addPluginXml.
*/
@NonUITestCase
public class NavigationProcessorTest2 extends RienaTestCase {
private static final String TARGET_MODULE_GROUP = "org.eclipse.riena.navigation.model.test.moduleGroup.2";
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 NodeProviderMock nodeProviderMock;
private ModuleGroupNode moduleGroup2;
private ModuleNode module2;
@Override
protected void setUp() throws Exception {
super.setUp();
nodeProviderMock = new NodeProviderMock();
initializeNavigationStructure();
}
final class NodeProviderMock extends SimpleNavigationNodeProvider {
private NodeProviderMock() {
initAssemblers();
}
private void initAssemblers() {
registerNavigationAssembler("1", new TestSecondSubApplicationNodeAssembler() {
@Override
public String getParentNodeId() {
return "org.eclipse.riena.navigation.model.test.application";
}
});
registerNavigationAssembler("2", new TestSecondModuleGroupNodeAssembler() {
@Override
public String getParentNodeId() {
return "org.eclipse.riena.navigation.model.test.secondSubApplication";
}
});
}
}
private void initializeNavigationStructure() {
applicationNode = new ApplicationNode(new NavigationNodeId(
"org.eclipse.riena.navigation.model.test.application"));
navigationProcessor = new NavigationProcessor() {
@Override
protected org.eclipse.riena.navigation.INavigationNodeProvider getNavigationNodeProvider() {
return nodeProviderMock;
};
};
applicationNode.setNavigationProcessor(navigationProcessor);
subApplication = new SubApplicationNode(new NavigationNodeId(
"org.eclipse.riena.navigation.model.test.subApplication"));
applicationNode.addChild(subApplication);
moduleGroup = new ModuleGroupNode(new NavigationNodeId("org.eclipse.riena.navigation.model.test.moduleGroup"));
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"));
moduleGroup.addChild(module);
module2 = new ModuleNode(new NavigationNodeId("org.eclipse.riena.navigation.model.test.module.2"));
moduleGroup.addChild(module2);
subModule1 = new SubModuleNode(new NavigationNodeId("org.eclipse.riena.navigation.model.test.subModule"));
module.addChild(subModule1);
subModule2 = new SubModuleNode(new NavigationNodeId("org.eclipse.riena.navigation.model.test.subModule2"));
module.addChild(subModule2);
subModule3 = new SubModuleNode(new NavigationNodeId("org.eclipse.riena.navigation.model.test.subModule3"));
module.addChild(subModule3);
subModule4 = new TestSubModuleNode(new NavigationNodeId("org.eclipse.riena.navigation.model.test.subModule4"));
module2.addChild(subModule4);
}
@Override
protected void tearDown() throws Exception {
applicationNode = null;
super.tearDown();
}
public void testNavigate() throws Exception {
subModule1.activate();
System.err.println("NODE: " + applicationNode);
assertEquals(1, applicationNode.getChildren().size());
assertTrue(subApplication.isActivated());
subModule1.navigate(new NavigationNodeId("org.eclipse.riena.navigation.model.test.secondModuleGroup"));
assertEquals(2, applicationNode.getChildren().size());
assertFalse(subApplication.isActivated());
final ISubApplicationNode secondSubApplication = applicationNode.getChild(1);
assertEquals(new NavigationNodeId("org.eclipse.riena.navigation.model.test.secondSubApplication"),
secondSubApplication.getNodeId());
assertTrue(secondSubApplication.isActivated());
assertEquals(1, secondSubApplication.getChildren().size());
final IModuleGroupNode secondModuleGroup = secondSubApplication.getChild(0);
assertEquals(new NavigationNodeId("org.eclipse.riena.navigation.model.test.secondModuleGroup"),
secondModuleGroup.getNodeId());
assertTrue(secondModuleGroup.isActivated());
final IModuleNode secondModule = secondModuleGroup.getChild(0);
final ISubModuleNode secondSubModule = secondModule.getChild(0);
assertTrue(secondSubModule.isActivated());
secondSubModule.navigateBack();
assertFalse(secondSubApplication.isActivated());
assertFalse(secondSubModule.isActivated());
assertTrue(subApplication.isActivated());
assertTrue(subModule1.isActivated());
subModule1.navigate(new NavigationNodeId("org.eclipse.riena.navigation.model.test.secondModuleGroup"));
assertFalse(subApplication.isActivated());
assertFalse(subModule1.isActivated());
assertEquals(2, applicationNode.getChildren().size());
assertSame(secondSubApplication, applicationNode.getChild(1));
assertTrue(secondSubApplication.isActivated());
assertEquals(1, secondSubApplication.getChildren().size());
assertSame(secondModuleGroup, secondSubApplication.getChild(0));
assertTrue(secondModuleGroup.isActivated());
assertTrue(secondSubModule.isActivated());
}
/**
* Tests the method {@code create}.
*/
public void testCreate() throws Exception {
INavigationNode<?> targetNode = navigationProcessor.create(module, new NavigationNodeId(
"org.eclipse.riena.navigation.model.test.subModule"), null);
assertEquals(subModule1, targetNode);
targetNode = navigationProcessor.create(applicationNode, new NavigationNodeId(
"org.eclipse.riena.navigation.model.test.secondModuleGroup"), null);
assertEquals("org.eclipse.riena.navigation.model.test.secondModuleGroup", targetNode.getNodeId().getTypeId());
}
}