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  * TimePeriodValuesCollectionTests.java
29  * ------------------------------------
30  * (C) Copyright 2005-2008, by Object Refinery Limited.
31  *
32  * Original Author:  David Gilbert (for Object Refinery Limited);
33  * Contributor(s):   -;
34  *
35  * Changes
36  * -------
37  * 11-Mar-2005 : Version 1 (DG);
38  * 08-Mar-2007 : Added testGetSeries() (DG);
39  * 11-Jun-2007 : Added tests for getDomainBounds() (DG);
40  * 10-Jul-2007 : Fixed compile errors (DG);
41  * 07-Apr-2008 : Added more checks to
42  *               testGetDomainBoundsWithInterval() (DG);
43  *
44  */
45 
46 package org.jfree.data.time;
47 
48 import static org.junit.Assert.assertTrue;
49 import static org.junit.Assert.assertEquals;
50 import static org.junit.Assert.assertFalse;
51 import static org.junit.Assert.assertNull;
52 
53 import org.jfree.chart.TestUtilities;
54 
55 import org.jfree.data.Range;
56 import org.junit.Test;
57 
58 /**
59  * Some tests for the {@link TimePeriodValuesCollection} class.
60  */
61 public class TimePeriodValuesCollectionTest {
62 
63     /**
64      * A test for bug report 1161340.  I wasn't able to reproduce the problem
65      * with this test.
66      */
67     @Test
test1161340()68     public void test1161340() {
69         TimePeriodValuesCollection dataset = new TimePeriodValuesCollection();
70         TimePeriodValues v1 = new TimePeriodValues("V1");
71         v1.add(new Day(11, 3, 2005), 1.2);
72         v1.add(new Day(12, 3, 2005), 3.4);
73         dataset.addSeries(v1);
74         assertEquals(1, dataset.getSeriesCount());
75         dataset.removeSeries(v1);
76         assertEquals(0, dataset.getSeriesCount());
77 
78         TimePeriodValues v2 = new TimePeriodValues("V2");
79         v1.add(new Day(5, 3, 2005), 1.2);
80         v1.add(new Day(6, 3, 2005), 3.4);
81         dataset.addSeries(v2);
82         assertEquals(1, dataset.getSeriesCount());
83     }
84 
85     /**
86      * Tests the equals() method.
87      */
88     @Test
testEquals()89     public void testEquals() {
90 
91         TimePeriodValuesCollection c1 = new TimePeriodValuesCollection();
92         TimePeriodValuesCollection c2 = new TimePeriodValuesCollection();
93         assertTrue(c1.equals(c2));
94 
95         c1.setDomainIsPointsInTime(!c1.getDomainIsPointsInTime());
96         assertFalse(c1.equals(c2));
97         c2.setDomainIsPointsInTime(c1.getDomainIsPointsInTime());
98         assertTrue(c1.equals(c2));
99 
100         c1.setXPosition(TimePeriodAnchor.END);
101         assertFalse(c1.equals(c2));
102         c2.setXPosition(TimePeriodAnchor.END);
103         assertTrue(c1.equals(c2));
104 
105         TimePeriodValues v1 = new TimePeriodValues("Test");
106         TimePeriodValues v2 = new TimePeriodValues("Test");
107 
108         c1.addSeries(v1);
109         assertFalse(c1.equals(c2));
110         c2.addSeries(v2);
111         assertTrue(c1.equals(c2));
112     }
113 
114     /**
115      * Serialize an instance, restore it, and check for equality.
116      */
117     @Test
testSerialization()118     public void testSerialization() {
119         TimePeriodValuesCollection c1 = new TimePeriodValuesCollection();
120         TimePeriodValuesCollection c2 = (TimePeriodValuesCollection)
121                 TestUtilities.serialised(c1);
122         assertEquals(c1, c2);
123     }
124 
125     /**
126      * Some basic checks for the getSeries() method.
127      */
128     @Test
testGetSeries()129     public void testGetSeries() {
130         TimePeriodValuesCollection c1 = new TimePeriodValuesCollection();
131         TimePeriodValues s1 = new TimePeriodValues("Series 1");
132         c1.addSeries(s1);
133         assertEquals("Series 1", c1.getSeries(0).getKey());
134 
135         boolean pass = false;
136         try {
137             c1.getSeries(-1);
138         }
139         catch (IllegalArgumentException e) {
140             pass = true;
141         }
142         assertTrue(pass);
143 
144         pass = false;
145         try {
146             c1.getSeries(1);
147         }
148         catch (IllegalArgumentException e) {
149             pass = true;
150         }
151         assertTrue(pass);
152     }
153 
154     private static final double EPSILON = 0.0000000001;
155 
156     /**
157      * Some checks for the getDomainBounds() method.
158      */
159     @Test
testGetDomainBoundsWithoutInterval()160     public void testGetDomainBoundsWithoutInterval() {
161         // check empty dataset
162         TimePeriodValuesCollection dataset = new TimePeriodValuesCollection();
163         dataset.setDomainIsPointsInTime(false);
164         Range r = dataset.getDomainBounds(false);
165         assertNull(r);
166 
167         // check dataset with one time period
168         TimePeriodValues s1 = new TimePeriodValues("S1");
169         s1.add(new SimpleTimePeriod(1000L, 2000L), 1.0);
170         dataset.addSeries(s1);
171         r = dataset.getDomainBounds(false);
172         assertEquals(1500.0, r.getLowerBound(), EPSILON);
173         assertEquals(1500.0, r.getUpperBound(), EPSILON);
174 
175         // check dataset with two time periods
176         s1.add(new SimpleTimePeriod(1500L, 3000L), 2.0);
177         r = dataset.getDomainBounds(false);
178         assertEquals(1500.0, r.getLowerBound(), EPSILON);
179         assertEquals(2250.0, r.getUpperBound(), EPSILON);
180     }
181 
182     /**
183      * Some more checks for the getDomainBounds() method.
184      *
185      * @see #testGetDomainBoundsWithoutInterval()
186      */
187     @Test
testGetDomainBoundsWithInterval()188     public void testGetDomainBoundsWithInterval() {
189         // check empty dataset
190         TimePeriodValuesCollection dataset = new TimePeriodValuesCollection();
191         Range r = dataset.getDomainBounds(true);
192         assertNull(r);
193 
194         // check dataset with one time period
195         TimePeriodValues s1 = new TimePeriodValues("S1");
196         s1.add(new SimpleTimePeriod(1000L, 2000L), 1.0);
197         dataset.addSeries(s1);
198         r = dataset.getDomainBounds(true);
199         assertEquals(1000.0, r.getLowerBound(), EPSILON);
200         assertEquals(2000.0, r.getUpperBound(), EPSILON);
201 
202         // check dataset with two time periods
203         s1.add(new SimpleTimePeriod(1500L, 3000L), 2.0);
204         r = dataset.getDomainBounds(true);
205         assertEquals(1000.0, r.getLowerBound(), EPSILON);
206         assertEquals(3000.0, r.getUpperBound(), EPSILON);
207 
208         // add a third time period
209         s1.add(new SimpleTimePeriod(6000L, 7000L), 1.5);
210         r = dataset.getDomainBounds(true);
211         assertEquals(1000.0, r.getLowerBound(), EPSILON);
212         assertEquals(7000.0, r.getUpperBound(), EPSILON);
213 
214         // add a fourth time period
215         s1.add(new SimpleTimePeriod(4000L, 5000L), 1.4);
216         r = dataset.getDomainBounds(true);
217         assertEquals(1000.0, r.getLowerBound(), EPSILON);
218         assertEquals(7000.0, r.getUpperBound(), EPSILON);
219     }
220 }
221