/*******************************************************************************
* 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.ui.swt.views;
import java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.riena.core.test.collect.UITestCase;
import org.eclipse.riena.core.util.ReflectionUtils;
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.ModuleGroupNode;
import org.eclipse.riena.navigation.model.ModuleNode;
import org.eclipse.riena.navigation.model.SubModuleNode;
import org.eclipse.riena.ui.swt.utils.SwtUtilities;
/**
* Tests of the class {@link AbstractScrollingSupport}.
*/
@UITestCase
public class AbstractScrollingSupportTest extends TestCase {
private Shell shell;
@Override
protected void setUp() throws Exception {
super.setUp();
shell = new Shell();
}
@Override
protected void tearDown() throws Exception {
SwtUtilities.dispose(shell);
super.tearDown();
}
/**
* Tests the method {@code getActiveNode()}.
*/
public void testGetActiveNode() {
final IModuleGroupNode mg1 = new ModuleGroupNode();
final MockModuleNavigationComponentProvider provider = new MockModuleNavigationComponentProvider();
provider.setActiveModuleGroupNode(mg1);
final MockScrollingSupport support = new MockScrollingSupport(provider);
INavigationNode<?> activeNode = ReflectionUtils.invokeHidden(support, "getActiveNode");
assertSame(mg1, activeNode);
final IModuleNode m1 = new ModuleNode(new NavigationNodeId("m1"));
mg1.addChild(m1);
final IModuleNode m2 = new ModuleNode(new NavigationNodeId("m2"));
mg1.addChild(m2);
final IModuleNode m3 = new ModuleNode(new NavigationNodeId("m3"));
mg1.addChild(m3);
activeNode = ReflectionUtils.invokeHidden(support, "getActiveNode");
assertSame(mg1, activeNode);
m2.activate(null);
activeNode = ReflectionUtils.invokeHidden(support, "getActiveNode");
assertSame(m2, activeNode);
final ISubModuleNode sm1 = new SubModuleNode();
m2.addChild(sm1);
activeNode = ReflectionUtils.invokeHidden(support, "getActiveNode");
assertSame(m2, activeNode);
sm1.activate(null);
activeNode = ReflectionUtils.invokeHidden(support, "getActiveNode");
assertSame(sm1, activeNode);
}
/**
* Tests the method {@code getActiveSubModuleNode}.
*/
public void testGetActiveSubModuleNode() {
final MockScrollingSupport support = new MockScrollingSupport(new MockModuleNavigationComponentProvider());
final List<ISubModuleNode> nodes = new ArrayList<ISubModuleNode>();
ISubModuleNode activeNode = ReflectionUtils.invokeHidden(support, "getActiveSubModuleNode", nodes);
assertNull(activeNode);
final SubModuleNode sm1 = new SubModuleNode();
nodes.add(sm1);
activeNode = ReflectionUtils.invokeHidden(support, "getActiveSubModuleNode", nodes);
assertNull(activeNode);
sm1.activate(null);
activeNode = ReflectionUtils.invokeHidden(support, "getActiveSubModuleNode", nodes);
assertSame(sm1, activeNode);
final SubModuleNode sm2 = new SubModuleNode();
sm1.addChild(sm2);
activeNode = ReflectionUtils.invokeHidden(support, "getActiveSubModuleNode", nodes);
assertSame(sm1, activeNode);
sm2.activate(null);
activeNode = ReflectionUtils.invokeHidden(support, "getActiveSubModuleNode", nodes);
assertSame(sm2, activeNode);
}
private class MockScrollingSupport extends AbstractScrollingSupport {
public MockScrollingSupport(final IModuleNavigationComponentProvider navigationComponentProvider) {
super(navigationComponentProvider);
}
@Override
public void scroll() {
}
@Override
protected boolean scrollTo(final Composite topComp, final Composite bottomComp) {
return false;
}
@Override
protected boolean scrollTo(final Tree tree) {
return false;
}
@Override
protected void scrollUp(final int pixels) {
}
@Override
protected void scrollDown(final int pixels) {
}
}
private class MockModuleNavigationComponentProvider implements IModuleNavigationComponentProvider {
private IModuleGroupNode moduleGroup;
public Composite getNavigationComponent() {
return shell;
}
public Composite getScrolledComponent() {
return null;
}
public int calculateHeight() {
return 0;
}
public ModuleGroupView getModuleGroupViewForNode(final IModuleGroupNode moduleGroupNode) {
return null;
}
public ModuleView getModuleViewForNode(final IModuleNode moduleGroupNode) {
return null;
}
public IModuleGroupNode getActiveModuleGroupNode() {
return moduleGroup;
}
public ISubApplicationNode getSubApplicationNode() {
return null;
}
public void setActiveModuleGroupNode(final IModuleGroupNode moduleGroup) {
this.moduleGroup = moduleGroup;
}
}
}