/******************************************************************************* | |
* Copyright (c) 2011 Fabian Steeg. 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 | |
* <p/> | |
* Contributors: Fabian Steeg - initial tests | |
*******************************************************************************/ | |
package org.eclipse.zest.tests; | |
import org.eclipse.draw2d.BorderLayout; | |
import org.eclipse.draw2d.Ellipse; | |
import org.eclipse.draw2d.IFigure; | |
import org.eclipse.draw2d.Label; | |
import org.eclipse.jface.viewers.LabelProvider; | |
import org.eclipse.jface.viewers.Viewer; | |
import org.eclipse.swt.SWT; | |
import org.eclipse.swt.widgets.Shell; | |
import org.eclipse.zest.core.viewers.GraphViewer; | |
import org.eclipse.zest.core.viewers.IFigureProvider; | |
import org.eclipse.zest.core.viewers.IGraphContentProvider; | |
import org.eclipse.zest.core.widgets.CGraphNode; | |
/** | |
* Tests for the {@link IFigureProvider} class. | |
* | |
* @author Fabian Steeg (fsteeg) | |
* | |
*/ | |
public class IFigureProviderTests extends AbstractFixtureTestCase { | |
private GraphViewer viewer; | |
private Shell shell; | |
/** | |
* Set up the shell and viewer to use in the tests. | |
* | |
* @throws Exception | |
* | |
* @see junit.framework.TestCase#setUp() | |
*/ | |
public void setUp() throws Exception { | |
super.setUp(); | |
shell = new Shell(); | |
viewer = new GraphViewer(shell, SWT.NONE); | |
} | |
/** | |
* Test with IGraphContentProvider that provides destinations only. | |
*/ | |
public void testWithDestinationProvider() { | |
testWith(new DestinationContentProvider()); | |
} | |
/** | |
* Test with IGraphContentProvider that provides sources only. | |
*/ | |
public void testWithSourceProvider() { | |
testWith(new SourceContentProvider()); | |
} | |
/** | |
* Test with IGraphContentProvider that provides destinations and sources. | |
*/ | |
public void testWithFullProvider() { | |
testWith(new FullContentProvider()); | |
} | |
private void testWith(IGraphContentProvider contentProvider) { | |
viewer.setContentProvider(contentProvider); | |
viewer.setLabelProvider(new CustomLabelProvider()); | |
viewer.setInput(new Object()); | |
StringBuffer buffer = new StringBuffer(); | |
for (int i = 0; i < viewer.getGraphControl().getNodes().size(); i++) { | |
CGraphNode n = (CGraphNode) viewer.getGraphControl().getNodes() | |
.get(i); | |
buffer.append(((Label) n.getNodeFigure().getChildren().get(0)) | |
.getText()); | |
} | |
String string = buffer.toString(); | |
assertTrue("Label 1 should be in figure labels", | |
string.indexOf("1") >= 0); | |
assertTrue("Label 2 should be in figure labels", | |
string.indexOf("2") >= 0); | |
assertTrue("Label 3 should be in figure labels", | |
string.indexOf("3") >= 0); | |
} | |
private class DestinationContentProvider implements IGraphContentProvider { | |
public void dispose() { | |
} | |
public void inputChanged(Viewer arg0, Object arg1, Object arg2) { | |
} | |
public Object getDestination(Object r) { | |
if (r.equals("1to2")) | |
return "2"; | |
if (r.equals("2to3")) | |
return "3"; | |
if (r.equals("3to1")) | |
return "1"; | |
return null; | |
} | |
public Object[] getElements(Object arg0) { | |
return new String[] { "1to2", "2to3", "3to1" }; | |
} | |
public Object getSource(Object r) { | |
return null; | |
} | |
} | |
private class SourceContentProvider implements IGraphContentProvider { | |
public void dispose() { | |
} | |
public void inputChanged(Viewer arg0, Object arg1, Object arg2) { | |
} | |
public Object getDestination(Object r) { | |
return null; | |
} | |
public Object[] getElements(Object arg0) { | |
return new String[] { "1to2", "2to3", "3to1" }; | |
} | |
public Object getSource(Object r) { | |
if (r.equals("1to2")) | |
return "1"; | |
if (r.equals("2to3")) | |
return "2"; | |
if (r.equals("3to1")) | |
return "3"; | |
return null; | |
} | |
} | |
private class FullContentProvider implements IGraphContentProvider { | |
public void dispose() { | |
} | |
public void inputChanged(Viewer arg0, Object arg1, Object arg2) { | |
} | |
public Object getDestination(Object r) { | |
if (r.equals("1to2")) | |
return "2"; | |
if (r.equals("2to3")) | |
return "3"; | |
if (r.equals("3to1")) | |
return "1"; | |
return null; | |
} | |
public Object[] getElements(Object arg0) { | |
return new String[] { "1to2", "2to3", "3to1" }; | |
} | |
public Object getSource(Object r) { | |
if (r.equals("1to2")) | |
return "1"; | |
if (r.equals("2to3")) | |
return "2"; | |
if (r.equals("3to1")) | |
return "3"; | |
return null; | |
} | |
} | |
private class CustomLabelProvider extends LabelProvider implements | |
IFigureProvider { | |
public String getText(Object node) { | |
return node.toString(); | |
} | |
public IFigure getFigure(Object node) { | |
Ellipse e = new Ellipse(); | |
e.setSize(40, 40); | |
e.setLayoutManager(new BorderLayout()); | |
e.add(new Label(node.toString()), BorderLayout.CENTER); | |
return e; | |
} | |
} | |
} |