/******************************************************************************
* Copyright (c) 2011, 2016 Stephan Schwiebert 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:
* Stephan Schwiebert - initial API and implementation
*
*******************************************************************************/
package org.eclipse.gef.cloudio.tests.ui;
import static org.eclipse.gef.cloudio.tests.ui.TagCloudTests.DELTA;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.gef.cloudio.internal.ui.TagCloud;
import org.eclipse.gef.cloudio.internal.ui.TagCloudViewer;
import org.eclipse.gef.cloudio.internal.ui.Word;
import org.eclipse.gef.cloudio.internal.ui.layout.DefaultLayouter;
import org.eclipse.jface.viewers.BaseLabelProvider;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class TagCloudViewerTests {
private Display display;
private boolean createdDisplay = false;
private Composite composite;
private TagCloud cloud;
@Before
public void setUp() throws Exception {
display = Display.getCurrent();
if (display == null) {
display = new Display();
createdDisplay = true;
}
composite = new Shell(display);
composite.setLayout(new FillLayout());
cloud = new TagCloud(composite, SWT.NONE);
}
@After
public void tearDown() throws Exception {
composite.dispose();
if (createdDisplay) {
display.dispose();
}
}
@Test(expected = IllegalArgumentException.class)
public void testConstructor_NullCloud() {
new TagCloudViewer(null);
}
@Test(expected = IllegalArgumentException.class)
public void testConstructor_DisposedCloud() {
cloud.dispose();
new TagCloudViewer(cloud);
}
@Test
public void testConstructor_ValidCloud() {
TagCloudViewer viewer = new TagCloudViewer(cloud);
TagCloud cloud = viewer.getCloud();
Assert.assertNotNull(cloud);
Assert.assertEquals(this.cloud, cloud);
Assert.assertTrue(viewer.getSelection() != null);
Assert.assertTrue(viewer.getSelection().isEmpty());
}
@Test(expected = IllegalArgumentException.class)
public void testInvalidLabelProvider() {
TagCloudViewer viewer = new TagCloudViewer(cloud);
viewer.setLabelProvider(null);
}
@Test(expected = IllegalArgumentException.class)
public void testInvalidLabelProvider2() {
TagCloudViewer viewer = new TagCloudViewer(cloud);
viewer.setLabelProvider(new BaseLabelProvider());
}
@Test
public void testValidLabelProvider() {
TagCloudViewer viewer = new TagCloudViewer(cloud);
TestLabelProvider labelProvider = new TestLabelProvider();
viewer.setLabelProvider(labelProvider);
Assert.assertEquals(labelProvider, viewer.getLabelProvider());
}
@Test(expected = IllegalArgumentException.class)
public void testInvalidContentProvider() {
TagCloudViewer viewer = new TagCloudViewer(cloud);
viewer.setContentProvider(null);
}
@Test(expected = IllegalArgumentException.class)
public void testInvalidContentProvider2() {
TagCloudViewer viewer = new TagCloudViewer(cloud);
viewer.setContentProvider(new IContentProvider() {
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
public void dispose() {
}
});
}
private static class ListContentProvider implements ITreeContentProvider {
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
public Object[] getElements(Object inputElement) {
return ((List<?>) inputElement).toArray();
}
public Object[] getChildren(Object parentElement) {
return null;
}
public Object getParent(Object element) {
return null;
}
public boolean hasChildren(Object element) {
return false;
}
}
@Test
public void testValidContentProvider() {
TagCloudViewer viewer = new TagCloudViewer(cloud);
ListContentProvider provider = new ListContentProvider();
viewer.setContentProvider(provider);
Assert.assertEquals(provider, viewer.getContentProvider());
}
@Test
public void testValidLabelAssignment() {
TagCloudViewer viewer = new TagCloudViewer(cloud);
ListContentProvider provider = new ListContentProvider();
viewer.setContentProvider(provider);
TestLabelProvider labelProvider = new TestLabelProvider();
viewer.setLabelProvider(labelProvider);
List<String> data = new ArrayList<>();
data.add("Hello");
data.add("World");
viewer.setInput(data);
List<Word> words = viewer.getCloud().getWords();
for (Word word : words) {
Assert.assertEquals(TestLabelProvider.COLOR, word.getColor());
for (int i = 0; i < TestLabelProvider.FONT_DATA.length; i++) {
Assert.assertEquals(TestLabelProvider.FONT_DATA[i], word.getFontData()[i]);
}
Assert.assertEquals(TestLabelProvider.ANGLE, word.angle, DELTA);
Assert.assertEquals(TestLabelProvider.WEIGHT, word.weight, DELTA);
Assert.assertTrue(word.x != 0);
Assert.assertTrue(word.y != 0);
Assert.assertTrue(word.width != 0);
Assert.assertTrue(word.height != 0);
}
}
@Test(expected = IllegalArgumentException.class)
public void testInvalidLayouter() {
TagCloudViewer viewer = new TagCloudViewer(cloud);
viewer.setLayouter(null);
}
@Test
public void testValidLayouter() {
TagCloudViewer viewer = new TagCloudViewer(cloud);
DefaultLayouter layouter = new DefaultLayouter(5, 5);
viewer.setLayouter(layouter);
Assert.assertEquals(layouter, viewer.getLayouter());
}
}