package org.geotools.renderer.chart;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import junit.framework.TestCase;
import org.geotools.factory.CommonFactoryFinder;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.opengis.filter.FilterFactory;
import org.opengis.filter.expression.Literal;
public class ChartFactoryTest extends TestCase {
ChartGraphicFactory factory = new ChartGraphicFactory();
FilterFactory ff = CommonFactoryFinder.getFilterFactory(null);
public void testPie() throws Exception {
Literal url = ff.literal("http://chart?cht=p&chd=t:10,20,70&chs=200x100");
JFreeChart chart = factory.getChart(null, url, ChartGraphicFactory.FORMAT, 500);
assertNotNull(chart);
assertTrue(chart.getPlot() instanceof PiePlot);
PiePlot p = (PiePlot) chart.getPlot();
// values are turned in percentages
assertEquals(3, p.getDataset().getItemCount());
assertEquals(0.1f, p.getDataset().getValue(0));
assertEquals(0.2f, p.getDataset().getValue(1));
assertEquals(0.7f, p.getDataset().getValue(2));
}
public void testInvalidLocation() throws Exception {
Literal url = ff.literal("http://weirdo?cht=p&chd=t:10,20,70&chs=200x100");
assertNull(factory.getChart(null, url, ChartGraphicFactory.FORMAT, 500));
assertNull(factory.getIcon(null, url, ChartGraphicFactory.FORMAT, 500));
}
public void testInvalidFormat() throws Exception {
Literal url = ff.literal("http://chart?cht=p&chd=t:10,20,70&chs=200x100");
assertNull(factory.getChart(null, url, "application/invalid", 500));
assertNull(factory.getIcon(null, url, "application/invalid", 500));
}
public void testInvalidSize() throws Exception {
Literal url = ff.literal("http://chart?cht=p&chd=t:10,20,70&chs=200x100x1000");
try {
factory.getIcon(null, url, ChartGraphicFactory.FORMAT, 500);
fail("Test should have thrown an exception");
} catch (IllegalArgumentException e) {
// ok
}
}
public void testMissingSize() throws Exception {
Literal url = ff.literal("http://chart?cht=p&chd=t:10,20,70");
try {
factory.getIcon(null, url, ChartGraphicFactory.FORMAT, -1);
fail("Test should have thrown an exception");
} catch (IllegalArgumentException e) {
// ok
}
}
public void testSizeFromChartSpec() throws Exception {
Literal url = ff.literal("http://chart?cht=p&chd=t:10,20,70&chs=200x100");
Icon icon = (Icon) factory.getIcon(null, url, ChartGraphicFactory.FORMAT, -1);
assertNotNull(icon);
assertEquals(200, icon.getIconWidth());
assertEquals(100, icon.getIconHeight());
}
public void testSizeFromSLD() throws Exception {
Literal url = ff.literal("http://chart?cht=p&chd=t:10,20,70");
Icon icon = (Icon) factory.getIcon(null, url, ChartGraphicFactory.FORMAT, 200);
assertNotNull(icon);
assertEquals(200, icon.getIconWidth());
assertEquals(200, icon.getIconHeight());
}
public void testSizeFromSLDAndChart() throws Exception {
Literal url = ff.literal("http://chart?cht=p&chd=t:10,20,70&chs=200x100");
Icon icon = (Icon) factory.getIcon(null, url, ChartGraphicFactory.FORMAT, 600);
assertNotNull(icon);
assertEquals(600, icon.getIconWidth());
assertEquals(300, icon.getIconHeight());
}
public void testSizeFromSLDAndChartVertical() throws Exception {
Literal url = ff.literal("http://chart?cht=p&chd=t:10,20,70&chs=100x300");
Icon icon = (Icon) factory.getIcon(null, url, ChartGraphicFactory.FORMAT, 600);
assertNotNull(icon);
assertEquals(200, icon.getIconWidth());
assertEquals(600, icon.getIconHeight());
}
}