1 /* =========================================================== 2 * JFreeChart : a free chart library for the Java(tm) platform 3 * =========================================================== 4 * 5 * (C) Copyright 2000-2013, by Object Refinery Limited and Contributors. 6 * 7 * Project Info: http://www.jfree.org/jfreechart/index.html 8 * 9 * This library is free software; you can redistribute it and/or modify it 10 * under the terms of the GNU Lesser General Public License as published by 11 * the Free Software Foundation; either version 2.1 of the License, or 12 * (at your option) any later version. 13 * 14 * This library is distributed in the hope that it will be useful, but 15 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 16 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 17 * License for more details. 18 * 19 * You should have received a copy of the GNU Lesser General Public 20 * License along with this library; if not, write to the Free Software 21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 22 * USA. 23 * 24 * [Oracle and Java are registered trademarks of Oracle and/or its affiliates. 25 * Other names may be trademarks of their respective owners.] 26 * 27 * ------------------ 28 * AreaChartTest.java 29 * ------------------ 30 * (C) Copyright 2005-2013, by Object Refinery Limited. 31 * 32 * Original Author: David Gilbert (for Object Refinery Limited); 33 * Contributor(s): -; 34 * 35 * Changes: 36 * -------- 37 * 12-Apr-2005 : Version 1 (DG); 38 * 39 */ 40 41 package org.jfree.chart; 42 43 import static org.junit.Assert.assertEquals; 44 import static org.junit.Assert.assertTrue; 45 import static org.junit.Assert.assertSame; 46 import static org.junit.Assert.fail; 47 48 import java.awt.Graphics2D; 49 import java.awt.geom.Rectangle2D; 50 import java.awt.image.BufferedImage; 51 52 import org.jfree.chart.axis.ValueAxis; 53 import org.jfree.chart.event.ChartChangeEvent; 54 import org.jfree.chart.event.ChartChangeListener; 55 import org.jfree.chart.labels.CategoryToolTipGenerator; 56 import org.jfree.chart.labels.StandardCategoryToolTipGenerator; 57 import org.jfree.chart.plot.CategoryPlot; 58 import org.jfree.chart.plot.PlotOrientation; 59 import org.jfree.chart.renderer.category.CategoryItemRenderer; 60 import org.jfree.chart.urls.CategoryURLGenerator; 61 import org.jfree.chart.urls.StandardCategoryURLGenerator; 62 import org.jfree.data.Range; 63 import org.jfree.data.category.CategoryDataset; 64 import org.jfree.data.general.DatasetUtilities; 65 import org.junit.Before; 66 import org.junit.Test; 67 68 /** 69 * Tests for an area chart. 70 */ 71 public class AreaChartTest { 72 73 /** A chart. */ 74 private JFreeChart chart; 75 76 /** 77 * Common test setup. 78 */ 79 @Before setUp()80 public void setUp() { 81 this.chart = createAreaChart(); 82 } 83 84 /** 85 * Check that setting a tool tip generator for a series does override the 86 * default generator. 87 */ 88 @Test testSetSeriesToolTipGenerator()89 public void testSetSeriesToolTipGenerator() { 90 CategoryPlot plot = (CategoryPlot) this.chart.getPlot(); 91 CategoryItemRenderer renderer = plot.getRenderer(); 92 StandardCategoryToolTipGenerator tt 93 = new StandardCategoryToolTipGenerator(); 94 renderer.setSeriesToolTipGenerator(0, tt); 95 CategoryToolTipGenerator tt2 = renderer.getToolTipGenerator(0, 0); 96 assertSame(tt2, tt); 97 } 98 99 /** 100 * Check that setting a URL generator for a series does override the 101 * default generator. 102 */ 103 @Test testSetSeriesURLGenerator()104 public void testSetSeriesURLGenerator() { 105 CategoryPlot plot = (CategoryPlot) this.chart.getPlot(); 106 CategoryItemRenderer renderer = plot.getRenderer(); 107 StandardCategoryURLGenerator url1 108 = new StandardCategoryURLGenerator(); 109 renderer.setSeriesItemURLGenerator(0, url1); 110 CategoryURLGenerator url2 = renderer.getItemURLGenerator(0, 0); 111 assertSame(url2, url1); 112 } 113 114 /** 115 * Draws the chart with a null info object to make sure that no exceptions 116 * are thrown (a problem that was occurring at one point). 117 */ 118 @Test testDrawWithNullInfo()119 public void testDrawWithNullInfo() { 120 try { 121 BufferedImage image = new BufferedImage(200 , 100, 122 BufferedImage.TYPE_INT_RGB); 123 Graphics2D g2 = image.createGraphics(); 124 this.chart.draw(g2, new Rectangle2D.Double(0, 0, 200, 100), null, 125 null); 126 g2.dispose(); 127 } 128 catch (Exception e) { 129 fail("There should be no exception."); 130 } 131 } 132 133 /** 134 * Replaces the chart's dataset and then checks that the new dataset is OK. 135 */ 136 @Test testReplaceDataset()137 public void testReplaceDataset() { 138 Number[][] data = new Integer[][] 139 {{new Integer(-30), new Integer(-20)}, 140 {new Integer(-10), new Integer(10)}, 141 {new Integer(20), new Integer(30)}}; 142 143 CategoryDataset newData = DatasetUtilities.createCategoryDataset( 144 "S", "C", data); 145 LocalListener l = new LocalListener(); 146 this.chart.addChangeListener(l); 147 CategoryPlot plot = (CategoryPlot) this.chart.getPlot(); 148 plot.setDataset(newData); 149 assertEquals(true, l.flag); 150 ValueAxis axis = plot.getRangeAxis(); 151 Range range = axis.getRange(); 152 assertTrue("Expecting the lower bound of the range to be around -30: " 153 + range.getLowerBound(), range.getLowerBound() <= -30); 154 assertTrue("Expecting the upper bound of the range to be around 30: " 155 + range.getUpperBound(), range.getUpperBound() >= 30); 156 157 } 158 159 /** 160 * Create an area chart with sample data in the range -3 to +3. 161 * 162 * @return The chart. 163 */ createAreaChart()164 private static JFreeChart createAreaChart() { 165 Number[][] data = new Integer[][] 166 {{new Integer(-3), new Integer(-2)}, 167 {new Integer(-1), new Integer(1)}, 168 {new Integer(2), new Integer(3)}}; 169 CategoryDataset dataset = DatasetUtilities.createCategoryDataset("S", 170 "C", data); 171 return ChartFactory.createAreaChart("Area Chart", "Domain", "Range", 172 dataset, PlotOrientation.HORIZONTAL, true, true, true); 173 174 } 175 176 /** 177 * A chart change listener. 178 */ 179 static class LocalListener implements ChartChangeListener { 180 181 /** A flag. */ 182 private boolean flag; 183 184 /** 185 * Event handler. 186 * 187 * @param event the event. 188 */ 189 @Override chartChanged(ChartChangeEvent event)190 public void chartChanged(ChartChangeEvent event) { 191 this.flag = true; 192 } 193 194 } 195 196 } 197