package org.eclipse.nebula.widgets.gallery.tests;
import java.util.Arrays;
import junit.framework.TestCase;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.nebula.jface.galleryviewer.GalleryTreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.program.Program;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class Bug217988Test extends TestCase {
private Shell s = null;
private Display d = null;
private boolean createdDisplay = false;
protected void setUp() throws Exception {
d = Display.getCurrent();
if( d == null ){
d = new Display();
createdDisplay = true;
}
s = new Shell(d, SWT.NONE);
super.setUp();
}
protected void tearDown() throws Exception {
if( createdDisplay){
d.dispose();
}
super.tearDown();
}
// Items class
static public class Foo {
private String name;
private int value;
public Foo(String message) {
this.name = message;
}
public Foo(String name, int value) {
this.name = name;
this.value = value;
}
public String toString() {
return name;
}
public String getName() {
return name;
}
public int getValue() {
return value;
}
}
// Content provider
public static class GalleryTestContentProvider implements ITreeContentProvider {
public static final int NUM_GROUPS = 1;
public static final int NUM_ITEMS = 20;
String[] groups = new String[NUM_GROUPS];
Foo[][] items = new Foo[NUM_GROUPS][NUM_ITEMS];
public GalleryTestContentProvider() {
for (int i = 0; i < NUM_GROUPS; i++) {
groups[i] = "Group " + (i + 1);
for (int j = 0; j < NUM_ITEMS; j++) {
items[i][j] = new Foo("Item " + ((i * NUM_ITEMS) + (j + 1)), (i * NUM_ITEMS) + (j + 1));
}
}
}
public Object[] getChildren(Object parentElement) {
int idx = Arrays.asList(groups).indexOf(parentElement);
return items[idx];
}
public Object getParent(Object element) {
return null;
}
public boolean hasChildren(Object element) {
if (element instanceof Foo) {
return false;
}
return ((String) element).startsWith("Group");
}
public Object[] getElements(Object inputElement) {
return groups;
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
}
public static class GalleryTestLabelProvider extends LabelProvider {
public Image getImage(Object element) {
return null;
}
}
public void testBug217988() {
GalleryTreeViewer viewer = new GalleryTreeViewer(s);
viewer.setContentProvider(new GalleryTestContentProvider());
viewer.setLabelProvider(new GalleryTestLabelProvider());
viewer.setComparator(new ViewerComparator());
viewer.setInput(new Object());
// Setting input raised a NPE
viewer.setInput(new Object());
}
}