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