View Javadoc
1   /*
2    * Licensed under the GPL License. You may not use this file except in compliance with the License.
3    * You may obtain a copy of the License at
4    *
5    *   https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
6    *
7    * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
8    * WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
9    * PURPOSE.
10   */
11  package psiprobe.jfreechart;
12  
13  import static org.junit.jupiter.api.Assertions.assertEquals;
14  import static org.junit.jupiter.api.Assertions.assertFalse;
15  import static org.junit.jupiter.api.Assertions.assertNotEquals;
16  import static org.junit.jupiter.api.Assertions.assertTrue;
17  import static org.mockito.Mockito.mock;
18  import static org.mockito.Mockito.spy;
19  import static org.mockito.Mockito.times;
20  import static org.mockito.Mockito.verify;
21  
22  import java.awt.Color;
23  import java.awt.Graphics2D;
24  import java.awt.Paint;
25  import java.awt.Shape;
26  import java.io.ByteArrayInputStream;
27  import java.io.ByteArrayOutputStream;
28  import java.io.ObjectInputStream;
29  import java.io.ObjectOutputStream;
30  
31  import org.junit.jupiter.api.Test;
32  
33  /**
34   * The Class XYLine3DRendererTest.
35   */
36  class XYLine3DRendererTest {
37  
38    /**
39     * Test default values.
40     */
41    @Test
42    void testDefaultValues() {
43      XYLine3DRenderer renderer = new XYLine3DRenderer();
44      assertEquals(XYLine3DRenderer.DEFAULT_X_OFFSET, renderer.getXOffset());
45      assertEquals(XYLine3DRenderer.DEFAULT_Y_OFFSET, renderer.getYOffset());
46      assertEquals(XYLine3DRenderer.DEFAULT_WALL_PAINT, renderer.getWallPaint());
47      assertEquals(3, renderer.getPassCount());
48    }
49  
50    /**
51     * Test setters and getters.
52     */
53    @Test
54    void testSettersAndGetters() {
55      XYLine3DRenderer renderer = new XYLine3DRenderer();
56      renderer.setXOffset(20.0);
57      renderer.setYOffset(15.0);
58      Paint paint = Color.BLUE;
59      renderer.setWallPaint(paint);
60  
61      assertEquals(20.0, renderer.getXOffset());
62      assertEquals(15.0, renderer.getYOffset());
63      assertEquals(paint, renderer.getWallPaint());
64    }
65  
66    /**
67     * Test equals.
68     */
69    @Test
70    void testEquals() {
71      XYLine3DRenderer r1 = new XYLine3DRenderer();
72      XYLine3DRenderer r2 = new XYLine3DRenderer();
73      assertEquals(r1, r2);
74  
75      r1.setXOffset(99.0);
76      assertNotEquals(r1, r2);
77      r2.setXOffset(99.0);
78      assertEquals(r1, r2);
79  
80      r1.setWallPaint(Color.RED);
81      assertNotEquals(r1, r2);
82      r2.setWallPaint(Color.RED);
83      assertEquals(r1, r2);
84    }
85  
86    /**
87     * Test serialization.
88     *
89     * @throws Exception the exception
90     */
91    @Test
92    void testSerialization() throws Exception {
93      XYLine3DRenderer renderer = new XYLine3DRenderer();
94      renderer.setXOffset(5.5);
95      renderer.setYOffset(7.7);
96      renderer.setWallPaint(Color.GREEN);
97  
98      ByteArrayOutputStream baos = new ByteArrayOutputStream();
99      try (ObjectOutputStream oos = new ObjectOutputStream(baos)) {
100       oos.writeObject(renderer);
101     }
102 
103     ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
104     XYLine3DRenderer deserialized = (XYLine3DRenderer) ois.readObject();
105 
106     assertEquals(renderer, deserialized);
107     assertEquals(Color.GREEN, deserialized.getWallPaint());
108   }
109 
110   /**
111    * Test draw first pass shape shadow pass.
112    */
113   @Test
114   void testDrawFirstPassShape_ShadowPass() {
115     XYLine3DRenderer renderer = new XYLine3DRenderer();
116     Graphics2D g2 = mock(Graphics2D.class);
117     Shape shape = mock(Shape.class);
118 
119     renderer.setWallPaint(Color.BLACK);
120     renderer.drawFirstPassShape(g2, 0, 0, 0, shape);
121 
122     verify(g2).setPaint(Color.BLACK);
123     verify(g2, times(1)).draw(shape);
124   }
125 
126   /**
127    * Test draw first pass shape non shadow pass.
128    */
129   @Test
130   void testDrawFirstPassShape_NonShadowPass() {
131     XYLine3DRenderer renderer = spy(new XYLine3DRenderer());
132     Graphics2D g2 = mock(Graphics2D.class);
133     Shape shape = mock(Shape.class);
134 
135     renderer.drawFirstPassShape(g2, 2, 0, 0, shape);
136     verify(renderer, times(1)).drawFirstPassShape(g2, 2, 0, 0, shape);
137   }
138 
139   /**
140    * Test hash code consistency.
141    */
142   @Test
143   void testHashCodeConsistency() {
144     XYLine3DRenderer r1 = new XYLine3DRenderer();
145     XYLine3DRenderer r2 = new XYLine3DRenderer();
146     assertEquals(r1.hashCode(), r2.hashCode());
147 
148     r1.setXOffset(42.0);
149     assertNotEquals(r1.hashCode(), r2.hashCode());
150     r2.setXOffset(42.0);
151     assertEquals(r1.hashCode(), r2.hashCode());
152   }
153 
154   /**
155    * Test clone.
156    *
157    * @throws Exception the exception
158    */
159   @Test
160   void testClone() throws Exception {
161     XYLine3DRenderer renderer = new XYLine3DRenderer();
162     renderer.setXOffset(1.1);
163     renderer.setYOffset(2.2);
164     renderer.setWallPaint(Color.MAGENTA);
165 
166     XYLine3DRenderer clone = (XYLine3DRenderer) renderer.clone();
167     assertEquals(renderer, clone);
168     assertEquals(renderer.getWallPaint(), clone.getWallPaint());
169     assertNotEquals(System.identityHashCode(renderer), System.identityHashCode(clone));
170   }
171 
172   /**
173    * Test set wall paint null.
174    */
175   @Test
176   void testSetWallPaintNull() {
177     XYLine3DRenderer renderer = new XYLine3DRenderer();
178     renderer.setWallPaint(null);
179     assertEquals(null, renderer.getWallPaint());
180   }
181 
182   /**
183    * Test set negative offsets.
184    */
185   @Test
186   void testSetNegativeOffsets() {
187     XYLine3DRenderer renderer = new XYLine3DRenderer();
188     renderer.setXOffset(-10.0);
189     renderer.setYOffset(-5.0);
190     assertEquals(-10.0, renderer.getXOffset());
191     assertEquals(-5.0, renderer.getYOffset());
192   }
193 
194   /**
195    * Test equals with null and other type.
196    */
197   @Test
198   void testEqualsWithNullAndOtherType() {
199     XYLine3DRenderer renderer = new XYLine3DRenderer();
200     assertNotEquals(renderer, null);
201     assertNotEquals(renderer, "not a renderer");
202   }
203 
204   /**
205    * Test equals different Y offset.
206    */
207   @Test
208   void testEqualsDifferentYOffset() {
209     XYLine3DRenderer r1 = new XYLine3DRenderer();
210     XYLine3DRenderer r2 = new XYLine3DRenderer();
211     r1.setYOffset(10.0);
212     assertNotEquals(r1, r2);
213     r2.setYOffset(10.0);
214     assertEquals(r1, r2);
215   }
216 
217   /**
218    * Test equals different wall paint.
219    */
220   @Test
221   void testEqualsDifferentWallPaint() {
222     XYLine3DRenderer r1 = new XYLine3DRenderer();
223     XYLine3DRenderer r2 = new XYLine3DRenderer();
224     r1.setWallPaint(Color.BLUE);
225     r2.setWallPaint(Color.RED);
226     assertNotEquals(r1, r2);
227   }
228 
229   /**
230    * Test serialization with null wall paint.
231    *
232    * @throws Exception the exception
233    */
234   @Test
235   void testSerializationWithNullWallPaint() throws Exception {
236     XYLine3DRenderer renderer = new XYLine3DRenderer();
237     renderer.setWallPaint(null);
238 
239     ByteArrayOutputStream baos = new ByteArrayOutputStream();
240     try (ObjectOutputStream oos = new ObjectOutputStream(baos)) {
241       oos.writeObject(renderer);
242     }
243 
244     ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
245     XYLine3DRenderer deserialized = (XYLine3DRenderer) ois.readObject();
246 
247     assertEquals(renderer, deserialized);
248     assertEquals(null, deserialized.getWallPaint());
249   }
250 
251   /**
252    * Test default constructor fields.
253    */
254   @Test
255   void testDefaultConstructorFields() {
256     XYLine3DRenderer renderer = new XYLine3DRenderer();
257     assertEquals(XYLine3DRenderer.DEFAULT_X_OFFSET, renderer.getXOffset());
258     assertEquals(XYLine3DRenderer.DEFAULT_Y_OFFSET, renderer.getYOffset());
259     assertEquals(XYLine3DRenderer.DEFAULT_WALL_PAINT, renderer.getWallPaint());
260   }
261 
262   /**
263    * Test is item pass.
264    */
265   @Test
266   void testIsItemPass() {
267     XYLine3DRenderer renderer = new XYLine3DRenderer();
268     // Pass 0 is shadow, pass 1 and 2 are normal
269     assertFalse(renderer.isItemPass(1));
270     assertTrue(renderer.isItemPass(2));
271     assertFalse(renderer.isItemPass(0));
272   }
273 
274   /**
275    * Test is line pass.
276    *
277    * @throws Exception the exception
278    */
279   @Test
280   void testIsLinePass() throws Exception {
281     XYLine3DRenderer renderer = new XYLine3DRenderer();
282     var method = XYLine3DRenderer.class.getDeclaredMethod("isLinePass", int.class);
283     method.setAccessible(true);
284 
285     // pass 0 and 1 should return true, others false
286     assertTrue((Boolean) method.invoke(renderer, 0));
287     assertTrue((Boolean) method.invoke(renderer, 1));
288     assertFalse((Boolean) method.invoke(renderer, 2));
289     assertFalse((Boolean) method.invoke(renderer, -1));
290     assertFalse((Boolean) method.invoke(renderer, 3));
291   }
292 
293 }