TimePeriodValuesTest.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  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. * TimePeriodValueTest.java
  29. * ------------------------
  30. * (C) Copyright 2003-2013, by Object Refinery Limited.
  31. *
  32. * Original Author: David Gilbert (for Object Refinery Limited);
  33. * Contributor(s): -;
  34. *
  35. * Changes
  36. * -------
  37. * 30-Jul-2003 : Version 1 (DG);
  38. * 07-Apr-2008 : Added new tests for min/max-start/middle/end
  39. * index updates (DG);
  40. *
  41. */
  42. package org.jfree.data.time;
  43. import static org.junit.Assert.assertTrue;
  44. import static org.junit.Assert.assertEquals;
  45. import static org.junit.Assert.assertFalse;
  46. import java.util.Date;
  47. import org.jfree.chart.TestUtilities;
  48. import org.jfree.data.general.SeriesChangeEvent;
  49. import org.jfree.data.general.SeriesChangeListener;
  50. import org.jfree.date.MonthConstants;
  51. import org.junit.Before;
  52. import org.junit.Test;
  53. /**
  54. * A collection of test cases for the {@link TimePeriodValues} class.
  55. */
  56. public class TimePeriodValuesTest {
  57. /** Series A. */
  58. private TimePeriodValues seriesA;
  59. /** Series B. */
  60. private TimePeriodValues seriesB;
  61. /** Series C. */
  62. private TimePeriodValues seriesC;
  63. /**
  64. * Common test setup.
  65. */
  66. @Before
  67. public void setUp() {
  68. this.seriesA = new TimePeriodValues("Series A");
  69. this.seriesA.add(new Year(2000), new Integer(102000));
  70. this.seriesA.add(new Year(2001), new Integer(102001));
  71. this.seriesA.add(new Year(2002), new Integer(102002));
  72. this.seriesA.add(new Year(2003), new Integer(102003));
  73. this.seriesA.add(new Year(2004), new Integer(102004));
  74. this.seriesA.add(new Year(2005), new Integer(102005));
  75. this.seriesB = new TimePeriodValues("Series B");
  76. this.seriesB.add(new Year(2006), new Integer(202006));
  77. this.seriesB.add(new Year(2007), new Integer(202007));
  78. this.seriesB.add(new Year(2008), new Integer(202008));
  79. this.seriesC = new TimePeriodValues("Series C");
  80. this.seriesC.add(new Year(1999), new Integer(301999));
  81. this.seriesC.add(new Year(2000), new Integer(302000));
  82. this.seriesC.add(new Year(2002), new Integer(302002));
  83. }
  84. /**
  85. * Set up a quarter equal to Q1 1900. Request the previous quarter, it
  86. * should be null.
  87. */
  88. @Test
  89. public void testClone() throws CloneNotSupportedException {
  90. TimePeriodValues series = new TimePeriodValues("Test Series");
  91. RegularTimePeriod jan1st2002 = new Day(1, MonthConstants.JANUARY, 2002);
  92. series.add(jan1st2002, new Integer(42));
  93. TimePeriodValues clone = (TimePeriodValues) series.clone();
  94. clone.setKey("Clone Series");
  95. clone.update(0, new Integer(10));
  96. int seriesValue = series.getValue(0).intValue();
  97. int cloneValue = clone.getValue(0).intValue();
  98. assertEquals(42, seriesValue);
  99. assertEquals(10, cloneValue);
  100. assertEquals("Test Series", series.getKey());
  101. assertEquals("Clone Series", clone.getKey());
  102. }
  103. /**
  104. * Add a value to series A for 1999. It should be added at index 0.
  105. */
  106. @Test
  107. public void testAddValue() {
  108. TimePeriodValues tpvs = new TimePeriodValues("Test");
  109. tpvs.add(new Year(1999), new Integer(1));
  110. int value = tpvs.getValue(0).intValue();
  111. assertEquals(1, value);
  112. }
  113. /**
  114. * Serialize an instance, restore it, and check for equality.
  115. */
  116. @Test
  117. public void testSerialization() {
  118. TimePeriodValues s1 = new TimePeriodValues("A test");
  119. s1.add(new Year(2000), 13.75);
  120. s1.add(new Year(2001), 11.90);
  121. s1.add(new Year(2002), null);
  122. s1.add(new Year(2005), 19.32);
  123. s1.add(new Year(2007), 16.89);
  124. TimePeriodValues s2 = (TimePeriodValues) TestUtilities.serialised(s1);
  125. assertTrue(s1.equals(s2));
  126. }
  127. /**
  128. * Tests the equals method.
  129. */
  130. @Test
  131. public void testEquals() {
  132. TimePeriodValues s1 = new TimePeriodValues("Time Series 1");
  133. TimePeriodValues s2 = new TimePeriodValues("Time Series 2");
  134. boolean b1 = s1.equals(s2);
  135. assertFalse("b1", b1);
  136. s2.setKey("Time Series 1");
  137. boolean b2 = s1.equals(s2);
  138. assertTrue("b2", b2);
  139. // domain description
  140. s1.setDomainDescription("XYZ");
  141. assertFalse(s1.equals(s2));
  142. s2.setDomainDescription("XYZ");
  143. assertTrue(s1.equals(s2));
  144. // domain description - null
  145. s1.setDomainDescription(null);
  146. assertFalse(s1.equals(s2));
  147. s2.setDomainDescription(null);
  148. assertTrue(s1.equals(s2));
  149. // range description
  150. s1.setRangeDescription("XYZ");
  151. assertFalse(s1.equals(s2));
  152. s2.setRangeDescription("XYZ");
  153. assertTrue(s1.equals(s2));
  154. // range description - null
  155. s1.setRangeDescription(null);
  156. assertFalse(s1.equals(s2));
  157. s2.setRangeDescription(null);
  158. assertTrue(s1.equals(s2));
  159. RegularTimePeriod p1 = new Day();
  160. RegularTimePeriod p2 = p1.next();
  161. s1.add(p1, 100.0);
  162. s1.add(p2, 200.0);
  163. boolean b3 = s1.equals(s2);
  164. assertFalse("b3", b3);
  165. s2.add(p1, 100.0);
  166. s2.add(p2, 200.0);
  167. boolean b4 = s1.equals(s2);
  168. assertTrue("b4", b4);
  169. }
  170. /**
  171. * A test for bug report 1161329.
  172. */
  173. @Test
  174. public void test1161329() {
  175. TimePeriodValues tpv = new TimePeriodValues("Test");
  176. RegularTimePeriod t = new Day();
  177. tpv.add(t, 1.0);
  178. t = t.next();
  179. tpv.add(t, 2.0);
  180. tpv.delete(0, 1);
  181. assertEquals(0, tpv.getItemCount());
  182. tpv.add(t, 2.0);
  183. assertEquals(1, tpv.getItemCount());
  184. }
  185. static final double EPSILON = 0.0000000001;
  186. /**
  187. * Some checks for the add() methods.
  188. */
  189. @Test
  190. public void testAdd() {
  191. TimePeriodValues tpv = new TimePeriodValues("Test");
  192. MySeriesChangeListener listener = new MySeriesChangeListener();
  193. tpv.addChangeListener(listener);
  194. tpv.add(new TimePeriodValue(new SimpleTimePeriod(new Date(1L),
  195. new Date(3L)), 99.0));
  196. assertEquals(99.0, tpv.getValue(0).doubleValue(), EPSILON);
  197. assertEquals(tpv, listener.getLastEvent().getSource());
  198. // a null item should throw an IllegalArgumentException
  199. boolean pass = false;
  200. try {
  201. tpv.add((TimePeriodValue) null);
  202. }
  203. catch (IllegalArgumentException e) {
  204. pass = true;
  205. }
  206. assertTrue(pass);
  207. }
  208. /**
  209. * Some tests for the getMinStartIndex() method.
  210. */
  211. @Test
  212. public void testGetMinStartIndex() {
  213. TimePeriodValues s = new TimePeriodValues("Test");
  214. assertEquals(-1, s.getMinStartIndex());
  215. s.add(new SimpleTimePeriod(100L, 200L), 1.0);
  216. assertEquals(0, s.getMinStartIndex());
  217. s.add(new SimpleTimePeriod(300L, 400L), 2.0);
  218. assertEquals(0, s.getMinStartIndex());
  219. s.add(new SimpleTimePeriod(0L, 50L), 3.0);
  220. assertEquals(2, s.getMinStartIndex());
  221. }
  222. /**
  223. * Some tests for the getMaxStartIndex() method.
  224. */
  225. @Test
  226. public void testGetMaxStartIndex() {
  227. TimePeriodValues s = new TimePeriodValues("Test");
  228. assertEquals(-1, s.getMaxStartIndex());
  229. s.add(new SimpleTimePeriod(100L, 200L), 1.0);
  230. assertEquals(0, s.getMaxStartIndex());
  231. s.add(new SimpleTimePeriod(300L, 400L), 2.0);
  232. assertEquals(1, s.getMaxStartIndex());
  233. s.add(new SimpleTimePeriod(0L, 50L), 3.0);
  234. assertEquals(1, s.getMaxStartIndex());
  235. }
  236. /**
  237. * Some tests for the getMinMiddleIndex() method.
  238. */
  239. @Test
  240. public void testGetMinMiddleIndex() {
  241. TimePeriodValues s = new TimePeriodValues("Test");
  242. assertEquals(-1, s.getMinMiddleIndex());
  243. s.add(new SimpleTimePeriod(100L, 200L), 1.0);
  244. assertEquals(0, s.getMinMiddleIndex());
  245. s.add(new SimpleTimePeriod(300L, 400L), 2.0);
  246. assertEquals(0, s.getMinMiddleIndex());
  247. s.add(new SimpleTimePeriod(0L, 50L), 3.0);
  248. assertEquals(2, s.getMinMiddleIndex());
  249. }
  250. /**
  251. * Some tests for the getMaxMiddleIndex() method.
  252. */
  253. @Test
  254. public void testGetMaxMiddleIndex() {
  255. TimePeriodValues s = new TimePeriodValues("Test");
  256. assertEquals(-1, s.getMaxMiddleIndex());
  257. s.add(new SimpleTimePeriod(100L, 200L), 1.0);
  258. assertEquals(0, s.getMaxMiddleIndex());
  259. s.add(new SimpleTimePeriod(300L, 400L), 2.0);
  260. assertEquals(1, s.getMaxMiddleIndex());
  261. s.add(new SimpleTimePeriod(0L, 50L), 3.0);
  262. assertEquals(1, s.getMaxMiddleIndex());
  263. s.add(new SimpleTimePeriod(150L, 200L), 4.0);
  264. assertEquals(1, s.getMaxMiddleIndex());
  265. }
  266. /**
  267. * Some tests for the getMinEndIndex() method.
  268. */
  269. @Test
  270. public void getMinEndIndex() {
  271. TimePeriodValues s = new TimePeriodValues("Test");
  272. assertEquals(-1, s.getMinEndIndex());
  273. s.add(new SimpleTimePeriod(100L, 200L), 1.0);
  274. assertEquals(0, s.getMinEndIndex());
  275. s.add(new SimpleTimePeriod(300L, 400L), 2.0);
  276. assertEquals(0, s.getMinEndIndex());
  277. s.add(new SimpleTimePeriod(0L, 50L), 3.0);
  278. assertEquals(2, s.getMinEndIndex());
  279. }
  280. /**
  281. * Some tests for the getMaxEndIndex() method.
  282. */
  283. @Test
  284. public void getMaxEndIndex() {
  285. TimePeriodValues s = new TimePeriodValues("Test");
  286. assertEquals(-1, s.getMaxEndIndex());
  287. s.add(new SimpleTimePeriod(100L, 200L), 1.0);
  288. assertEquals(0, s.getMaxEndIndex());
  289. s.add(new SimpleTimePeriod(300L, 400L), 2.0);
  290. assertEquals(1, s.getMaxEndIndex());
  291. s.add(new SimpleTimePeriod(0L, 50L), 3.0);
  292. assertEquals(1, s.getMaxEndIndex());
  293. }
  294. /**
  295. * A listener used for detecting series change events.
  296. */
  297. static class MySeriesChangeListener implements SeriesChangeListener {
  298. SeriesChangeEvent lastEvent;
  299. /**
  300. * Creates a new listener.
  301. */
  302. public MySeriesChangeListener() {
  303. this.lastEvent = null;
  304. }
  305. /**
  306. * Returns the last event.
  307. *
  308. * @return The last event (possibly <code>null</code>).
  309. */
  310. public SeriesChangeEvent getLastEvent() {
  311. return this.lastEvent;
  312. }
  313. /**
  314. * Clears the last event (sets it to <code>null</code>).
  315. */
  316. public void clearLastEvent() {
  317. this.lastEvent = null;
  318. }
  319. /**
  320. * Callback method for series change events.
  321. *
  322. * @param event the event.
  323. */
  324. @Override
  325. public void seriesChanged(SeriesChangeEvent event) {
  326. this.lastEvent = event;
  327. }
  328. }
  329. }