1. /* ===========================================================
  2. * JFreeChart : a free chart library for the Java(tm) platform
  3. * ===========================================================
  4. *
  5. * (C) Copyright 2000-2005, 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 under the terms
  10. * of the GNU Lesser General Public License as published by the Free Software Foundation;
  11. * either version 2.1 of the License, or (at your option) any later version.
  12. *
  13. * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  14. * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  15. * See the GNU Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public License along with this
  18. * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  19. * Boston, MA 02111-1307, USA.
  20. *
  21. * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
  22. * in the United States and other countries.]
  23. *
  24. * -------------------------
  25. * TimePeriodValueTests.java
  26. * -------------------------
  27. * (C) Copyright 2003-2005, by Object Refinery Limited.
  28. *
  29. * Original Author: David Gilbert (for Object Refinery Limited);
  30. * Contributor(s): -;
  31. *
  32. * $Id: TimePeriodValuesTests.java,v 1.3 2005/01/14 17:28:38 mungady Exp $
  33. *
  34. * Changes
  35. * -------
  36. * 30-Jul-2003 : Version 1 (DG);
  37. *
  38. */
  39. package org.jfree.data.time.junit;
  40. import java.io.ByteArrayInputStream;
  41. import java.io.ByteArrayOutputStream;
  42. import java.io.ObjectInput;
  43. import java.io.ObjectInputStream;
  44. import java.io.ObjectOutput;
  45. import java.io.ObjectOutputStream;
  46. import junit.framework.Test;
  47. import junit.framework.TestCase;
  48. import junit.framework.TestSuite;
  49. import org.jfree.data.general.SeriesException;
  50. import org.jfree.data.time.Day;
  51. import org.jfree.data.time.RegularTimePeriod;
  52. import org.jfree.data.time.TimePeriodValues;
  53. import org.jfree.data.time.Year;
  54. import org.jfree.date.MonthConstants;
  55. /**
  56. * A collection of test cases for the {@link TimePeriodValues} class.
  57. */
  58. public class TimePeriodValuesTests extends TestCase {
  59. /** Series A. */
  60. private TimePeriodValues seriesA;
  61. /** Series B. */
  62. private TimePeriodValues seriesB;
  63. /** Series C. */
  64. private TimePeriodValues seriesC;
  65. /**
  66. * Returns the tests as a test suite.
  67. *
  68. * @return The test suite.
  69. */
  70. public static Test suite() {
  71. return new TestSuite(TimePeriodValuesTests.class);
  72. }
  73. /**
  74. * Constructs a new set of tests.
  75. *
  76. * @param name the name of the tests.
  77. */
  78. public TimePeriodValuesTests(String name) {
  79. super(name);
  80. }
  81. /**
  82. * Common test setup.
  83. */
  84. protected void setUp() {
  85. this.seriesA = new TimePeriodValues("Series A");
  86. try {
  87. this.seriesA.add(new Year(2000), new Integer(102000));
  88. this.seriesA.add(new Year(2001), new Integer(102001));
  89. this.seriesA.add(new Year(2002), new Integer(102002));
  90. this.seriesA.add(new Year(2003), new Integer(102003));
  91. this.seriesA.add(new Year(2004), new Integer(102004));
  92. this.seriesA.add(new Year(2005), new Integer(102005));
  93. }
  94. catch (SeriesException e) {
  95. System.err.println("TimeSeriesTests.setUp(): problem creating series.");
  96. }
  97. this.seriesB = new TimePeriodValues("Series B");
  98. try {
  99. this.seriesB.add(new Year(2006), new Integer(202006));
  100. this.seriesB.add(new Year(2007), new Integer(202007));
  101. this.seriesB.add(new Year(2008), new Integer(202008));
  102. }
  103. catch (SeriesException e) {
  104. System.err.println("TimeSeriesTests.setUp(): problem creating series.");
  105. }
  106. this.seriesC = new TimePeriodValues("Series C");
  107. try {
  108. this.seriesC.add(new Year(1999), new Integer(301999));
  109. this.seriesC.add(new Year(2000), new Integer(302000));
  110. this.seriesC.add(new Year(2002), new Integer(302002));
  111. }
  112. catch (SeriesException e) {
  113. System.err.println("TimeSeriesTests.setUp(): problem creating series.");
  114. }
  115. }
  116. /**
  117. * Set up a quarter equal to Q1 1900. Request the previous quarter, it should be null.
  118. */
  119. public void testClone() {
  120. TimePeriodValues series = new TimePeriodValues("Test Series");
  121. RegularTimePeriod jan1st2002 = new Day(1, MonthConstants.JANUARY, 2002);
  122. try {
  123. series.add(jan1st2002, new Integer(42));
  124. }
  125. catch (SeriesException e) {
  126. System.err.println("TimePeriodValuesTests.testClone: problem adding to collection.");
  127. }
  128. TimePeriodValues clone = null;
  129. try {
  130. clone = (TimePeriodValues) series.clone();
  131. clone.setName("Clone Series");
  132. try {
  133. clone.update(0, new Integer(10));
  134. }
  135. catch (SeriesException e) {
  136. System.err.println("TimeSeriesTests.testClone: problem updating series.");
  137. }
  138. }
  139. catch (CloneNotSupportedException e) {
  140. assertTrue(false);
  141. }
  142. int seriesValue = series.getValue(0).intValue();
  143. int cloneValue = clone.getValue(0).intValue();
  144. assertEquals(42, seriesValue);
  145. assertEquals(10, cloneValue);
  146. assertEquals("Test Series", series.getName());
  147. assertEquals("Clone Series", clone.getName());
  148. }
  149. /**
  150. * Add a value to series A for 1999. It should be added at index 0.
  151. */
  152. public void testAddValue() {
  153. TimePeriodValues tpvs = new TimePeriodValues("Test");
  154. try {
  155. tpvs.add(new Year(1999), new Integer(1));
  156. }
  157. catch (SeriesException e) {
  158. System.err.println("TimePeriodValuesTests.testAddValue: problem adding to series.");
  159. }
  160. int value = tpvs.getValue(0).intValue();
  161. assertEquals(1, value);
  162. }
  163. /**
  164. * Serialize an instance, restore it, and check for equality.
  165. */
  166. public void testSerialization() {
  167. TimePeriodValues s1 = new TimePeriodValues("A test");
  168. s1.add(new Year(2000), 13.75);
  169. s1.add(new Year(2001), 11.90);
  170. s1.add(new Year(2002), null);
  171. s1.add(new Year(2005), 19.32);
  172. s1.add(new Year(2007), 16.89);
  173. TimePeriodValues s2 = null;
  174. try {
  175. ByteArrayOutputStream buffer = new ByteArrayOutputStream();
  176. ObjectOutput out = new ObjectOutputStream(buffer);
  177. out.writeObject(s1);
  178. out.close();
  179. ObjectInput in = new ObjectInputStream(
  180. new ByteArrayInputStream(buffer.toByteArray())
  181. );
  182. s2 = (TimePeriodValues) in.readObject();
  183. in.close();
  184. }
  185. catch (Exception e) {
  186. System.out.println(e.toString());
  187. }
  188. assertTrue(s1.equals(s2));
  189. }
  190. /**
  191. * Tests the equals method.
  192. */
  193. public void testEquals() {
  194. TimePeriodValues s1 = new TimePeriodValues("Time Series 1");
  195. TimePeriodValues s2 = new TimePeriodValues("Time Series 2");
  196. boolean b1 = s1.equals(s2);
  197. assertFalse("b1", b1);
  198. s2.setName("Time Series 1");
  199. boolean b2 = s1.equals(s2);
  200. assertTrue("b2", b2);
  201. RegularTimePeriod p1 = new Day();
  202. RegularTimePeriod p2 = p1.next();
  203. s1.add(p1, 100.0);
  204. s1.add(p2, 200.0);
  205. boolean b3 = s1.equals(s2);
  206. assertFalse("b3", b3);
  207. s2.add(p1, 100.0);
  208. s2.add(p2, 200.0);
  209. boolean b4 = s1.equals(s2);
  210. assertTrue("b4", b4);
  211. }
  212. }