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
  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 License
  20. * along with this library; if not, write to the Free Software Foundation,
  21. * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  22. *
  23. * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
  24. * in the United States and other countries.]
  25. *
  26. * ------------------------------
  27. * LineAndShapeRendererTests.java
  28. * ------------------------------
  29. * (C) Copyright 2003-2005, by Object Refinery Limited and Contributors.
  30. *
  31. * Original Author: David Gilbert (for Object Refinery Limited);
  32. * Contributor(s): -;
  33. *
  34. * $Id: LineAndShapeRendererTests.java,v 1.5 2005/03/09 22:07:57 mungady Exp $
  35. *
  36. * Changes
  37. * -------
  38. * 22-Sep-2003 : Version 1 (DG);
  39. *
  40. */
  41. package org.jfree.chart.renderer.category.junit;
  42. import java.io.ByteArrayInputStream;
  43. import java.io.ByteArrayOutputStream;
  44. import java.io.ObjectInput;
  45. import java.io.ObjectInputStream;
  46. import java.io.ObjectOutput;
  47. import java.io.ObjectOutputStream;
  48. import junit.framework.Test;
  49. import junit.framework.TestCase;
  50. import junit.framework.TestSuite;
  51. import org.jfree.chart.renderer.category.LineAndShapeRenderer;
  52. /**
  53. * Tests for the {@link LineAndShapeRenderer} class.
  54. */
  55. public class LineAndShapeRendererTests extends TestCase {
  56. /**
  57. * Returns the tests as a test suite.
  58. *
  59. * @return The test suite.
  60. */
  61. public static Test suite() {
  62. return new TestSuite(LineAndShapeRendererTests.class);
  63. }
  64. /**
  65. * Constructs a new set of tests.
  66. *
  67. * @param name the name of the tests.
  68. */
  69. public LineAndShapeRendererTests(String name) {
  70. super(name);
  71. }
  72. /**
  73. * Test that the equals() method distinguishes all fields.
  74. */
  75. public void testEquals() {
  76. LineAndShapeRenderer r1 = new LineAndShapeRenderer();
  77. LineAndShapeRenderer r2 = new LineAndShapeRenderer();
  78. assertEquals(r1, r2);
  79. r1.setShapesVisible(!r1.isShapesVisible());
  80. assertFalse(r1.equals(r2));
  81. r2.setShapesVisible(r1.isShapesVisible());
  82. assertTrue(r1.equals(r2));
  83. r1.setLinesVisible(!r1.isLinesVisible());
  84. assertFalse(r1.equals(r2));
  85. r2.setLinesVisible(r1.isLinesVisible());
  86. assertTrue(r1.equals(r2));
  87. r1.setShapesFilled(false);
  88. assertFalse(r1.equals(r2));
  89. r2.setShapesFilled(false);
  90. assertTrue(r1.equals(r2));
  91. r1.setSeriesShapesFilled(1, true);
  92. assertFalse(r1.equals(r2));
  93. r2.setSeriesShapesFilled(1, true);
  94. assertTrue(r1.equals(r2));
  95. r1.setDefaultShapesFilled(false);
  96. assertFalse(r1.equals(r2));
  97. r2.setDefaultShapesFilled(false);
  98. assertTrue(r1.equals(r2));
  99. r1.setUseOutlinePaint(true);
  100. assertFalse(r1.equals(r2));
  101. r2.setUseOutlinePaint(true);
  102. assertTrue(r1.equals(r2));
  103. }
  104. /**
  105. * Two objects that are equal are required to return the same hashCode.
  106. */
  107. public void testHashcode() {
  108. LineAndShapeRenderer r1 = new LineAndShapeRenderer();
  109. LineAndShapeRenderer r2 = new LineAndShapeRenderer();
  110. assertTrue(r1.equals(r2));
  111. int h1 = r1.hashCode();
  112. int h2 = r2.hashCode();
  113. assertEquals(h1, h2);
  114. }
  115. /**
  116. * Confirm that cloning works.
  117. */
  118. public void testCloning() {
  119. LineAndShapeRenderer r1 = new LineAndShapeRenderer();
  120. LineAndShapeRenderer r2 = null;
  121. try {
  122. r2 = (LineAndShapeRenderer) r1.clone();
  123. }
  124. catch (CloneNotSupportedException e) {
  125. System.err.println("Failed to clone.");
  126. }
  127. assertTrue(r1 != r2);
  128. assertTrue(r1.getClass() == r2.getClass());
  129. assertTrue(r1.equals(r2));
  130. assertTrue(checkIndependence(r1, r2));
  131. }
  132. /**
  133. * Checks that the two renderers are equal but independent of one another.
  134. *
  135. * @param r1 renderer 1.
  136. * @param r2 renderer 2.
  137. *
  138. * @return A boolean.
  139. */
  140. private boolean checkIndependence(LineAndShapeRenderer r1,
  141. LineAndShapeRenderer r2) {
  142. // should be equal...
  143. boolean b0 = r1.equals(r2);
  144. // and independent...
  145. r1.setShapesVisible(!r1.isShapesVisible());
  146. boolean b1 = !r1.equals(r2);
  147. r2.setShapesVisible(r1.isShapesVisible());
  148. boolean b2 = r1.equals(r2);
  149. r1.setLinesVisible(!r1.isLinesVisible());
  150. boolean b3 = !r1.equals(r2);
  151. r2.setLinesVisible(r1.isLinesVisible());
  152. boolean b4 = r1.equals(r2);
  153. boolean flag = true;
  154. Boolean existing = r1.getShapesFilled();
  155. if (existing != null) {
  156. flag = !existing.booleanValue();
  157. }
  158. r1.setShapesFilled(flag);
  159. boolean b5 = !r1.equals(r2);
  160. r2.setShapesFilled(flag);
  161. boolean b6 = r1.equals(r2);
  162. r1.setShapesFilled(false);
  163. r2.setShapesFilled(false);
  164. r1.setSeriesShapesFilled(0, false);
  165. r2.setSeriesShapesFilled(0, true);
  166. boolean b7 = !r1.equals(r2);
  167. r2.setSeriesShapesFilled(0, false);
  168. boolean b8 = (r1.equals(r2));
  169. r1.setDefaultShapesFilled(false);
  170. r2.setDefaultShapesFilled(true);
  171. boolean b9 = !r1.equals(r2);
  172. r2.setDefaultShapesFilled(false);
  173. boolean b10 = (r1.equals(r2));
  174. return b0 && b1 && b2 && b3 && b4 && b5 && b6 && b7 && b8 && b9 && b10;
  175. }
  176. /**
  177. * Serialize an instance, restore it, and check for equality.
  178. */
  179. public void testSerialization() {
  180. LineAndShapeRenderer r1 = new LineAndShapeRenderer();
  181. LineAndShapeRenderer r2 = null;
  182. try {
  183. ByteArrayOutputStream buffer = new ByteArrayOutputStream();
  184. ObjectOutput out = new ObjectOutputStream(buffer);
  185. out.writeObject(r1);
  186. out.close();
  187. ObjectInput in = new ObjectInputStream(
  188. new ByteArrayInputStream(buffer.toByteArray())
  189. );
  190. r2 = (LineAndShapeRenderer) in.readObject();
  191. in.close();
  192. }
  193. catch (Exception e) {
  194. System.out.println(e.toString());
  195. }
  196. assertEquals(r1, r2);
  197. }
  198. }