/******************************************************************************* * Copyright (c) 2010 SAP AG. * 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: * Emil Simeonov - initial API and implementation. * Dimitar Donchev - initial API and implementation. * Dimitar Tenev - initial API and implementation. * Nevena Manova - initial API and implementation. * Georgi Konstantinov - initial API and implementation. *******************************************************************************/ package org.eclipse.wst.sse.sieditor.test.ui.v2.nodes.impl; import static org.easymock.EasyMock.createNiceMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.reset; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.eclipse.swt.graphics.Image; import org.eclipse.wst.sse.sieditor.ui.v2.UIConstants; import org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode; import org.eclipse.wst.sse.sieditor.ui.v2.nodes.impl.AbstractTreeNode; import org.eclipse.wst.sse.sieditor.ui.v2.nodes.labels.ITreeNodeLabelsProviderFactory; import org.eclipse.wst.sse.sieditor.test.util.EasymockModelUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.eclipse.wst.sse.sieditor.model.api.IModelObject; import org.eclipse.wst.sse.sieditor.model.xsd.api.IElement; public class AbstractTreeNodeTest { private IElement modelObject; private ITreeNode parent; @Before public void setUp() throws Exception { modelObject = EasymockModelUtils.createIElementMockFromSameModel(); parent = createNiceMock(ITreeNode.class); } @After public void tearDown() throws Exception { modelObject = null; parent = null; } @Test public void testTreeNodeCategoryReferanceUpdatedOnIsReadonlyCall() { replay(parent, modelObject); final TestAbstractTreeNode node = new TestAbstractTreeNode(modelObject, parent); assertFalse(node.isReadOnly()); assertEquals(0, node.getCategories() & ITreeNode.CATEGORY_REFERENCE); // modelObject category have to be changed after construction of the 'node' reset(modelObject); EasymockModelUtils.recordReferingIElementMockFromSameModel(modelObject); replay(modelObject); assertTrue(node.isReadOnly()); assertEquals(ITreeNode.CATEGORY_REFERENCE, node.getCategories() & ITreeNode.CATEGORY_REFERENCE); } @Test public void testParentCategoryReferanceIsTransferedToChildrenOnIsReadonlyCall() { replay(parent, modelObject); final TestAbstractTreeNode node = new TestAbstractTreeNode(modelObject, parent); assertFalse(node.isReadOnly()); assertEquals(0, node.getCategories() & ITreeNode.CATEGORY_REFERENCE); // parent category have to be changed after construction of the 'node' reset(parent); expect(parent.getCategories()).andReturn(ITreeNode.CATEGORY_REFERENCE).anyTimes(); replay(parent); assertTrue(node.isReadOnly()); assertEquals(ITreeNode.CATEGORY_REFERENCE, node.getCategories() & ITreeNode.CATEGORY_REFERENCE); } @Test public void testGetModelObject() { final TestAbstractTreeNode node = new TestAbstractTreeNode(modelObject, parent); assertTrue(node.getModelObject().equals(modelObject)); } @Test public void testGetParent() { final TestAbstractTreeNode node = new TestAbstractTreeNode(modelObject, parent); assertTrue(node.getParent().equals(parent)); } @Test public void testHasChildren() { replay(modelObject, parent); TestAbstractTreeNode node = new TestAbstractTreeNode(modelObject, parent) { @Override public Object[] getChildren() { return UIConstants.EMPTY_ARRAY; } }; assertFalse(node.hasChildren()); node = new TestAbstractTreeNode(modelObject, parent) { @Override public Object[] getChildren() { return new Object[] {new Object()}; } }; assertTrue(node.hasChildren()); } class TestAbstractTreeNode extends AbstractTreeNode { public TestAbstractTreeNode(final IModelObject modelObject, final ITreeNode parent) { super(modelObject, parent, null); } @Override public Object[] getChildren() { return null; } @Override public String getDisplayName() { return null; } @Override public Image getImage() { return null; } @Override protected ITreeNodeLabelsProviderFactory getLabelsProviderFactory() { return null; } } }