/* * TestChart2DHeadless.java of project jchart2d, junit tests for Chart2D * in headless mode. * Copyright (c) 2007 Achim Westermann, created on 14:32:20. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA* * If you modify or optimize the code in a useful way please let me know. * Achim.Westermann@gmx.de * */ package info.monitorenter.gui.chart; import info.monitorenter.gui.chart.axis.AAxis; import info.monitorenter.gui.chart.axis.AxisLinear; import info.monitorenter.gui.chart.events.Chart2DActionSaveImageSingleton; import info.monitorenter.gui.chart.labelformatters.LabelFormatterDate; import info.monitorenter.gui.chart.traces.Trace2DLtd; import info.monitorenter.gui.chart.traces.Trace2DSimple; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.WeakHashMap; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.WindowConstants; import junit.framework.Assert; import junit.framework.TestCase; /** * Junit testcase for <code>{@link info.monitorenter.gui.chart.Chart2D}</code> * in headless (non-ui) mode. * <p> * * @author <a href="mailto:Achim.Westermann@gmx.de">Achim Westermann</a> * * @version $Revision: 1.10 $ */ public class TestChart2DHeadless extends TestCase { /** * Junit test ui runner. * <p> * * @param args * ignored. */ public static void main(final String[] args) { // TestRunner.run(TestChart2DHeadless.class); TestChart2DHeadless test = new TestChart2DHeadless("blabla"); test.testAddRemoveTraceAfterChangingZIndex(); } /** * Constructor with test name. * <p> * * @param testName * the name of the test. */ public TestChart2DHeadless(final String testName) { super(testName); } /** * Creates several charts, adds a trace to each of them, destroys the chart * and checks, if a memory leak occurs. * <p> * * @org.junit.Test */ public void testMemoryLeak() { Chart2D chart; ITrace2D trace; WeakHashMap<Chart2D, ? > chartMap = new WeakHashMap<Chart2D, Object>(); for (int i = 0; i < 50; i++) { chart = new Chart2D(); System.out.print("Creating really big trace (100000)..."); trace = new Trace2DLtd(100000); System.out.println(" done!"); if (i % 5 == 0) { System.out.println(i * 100 / 50 + " % done."); } chart.addTrace(trace); chartMap.put(chart, null); chart.destroy(); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } chart = null; trace = null; System.runFinalization(); System.gc(); try { System.out.println("Please wait 10 seconds..."); Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } System.runFinalization(); System.gc(); try { System.out.println("Please wait another 10 seconds..."); Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } Assert.assertEquals(0, chartMap.size()); } /** * Tests the method {@link Chart2D#snapShot()} method in non-UI mode by * creating an image of a chart that has not been painted (in UI) before. * <p> * * @throws IOException * if sth goes wrong in I/O (saving chart, deleting test file,...). * * @org.junit.Test * */ public void testSnapshot() throws IOException { Chart2D chart; ITrace2D trace; chart = new Chart2D(); trace = new Trace2DSimple(); chart.addTrace(trace); for (int i = 0; i < 100; i++) { trace.addPoint(i, Math.random() + 1 * i); } Chart2DActionSaveImageSingleton saver = Chart2DActionSaveImageSingleton.getInstance(chart, "BLUE"); saver.actionPerformed(null); final BufferedImage img = chart.snapShot(); JFrame frame = new JFrame("testShanpshot()"); JPanel imgPanel = new JPanel() { /** serialVersionUID */ private static final long serialVersionUID = -1171046385909150778L; /** * @see javax.swing.JComponent#paint(java.awt.Graphics) */ @Override public void paint(final Graphics g) { super.paint(g); g.drawImage(img, 0, 0, null); } }; frame.getContentPane().add(imgPanel); frame.setSize(img.getWidth(), img.getHeight()); frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); frame.setVisible(true); while (frame.isVisible()) { try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * Tests the policy of adding axis to charts. * <p> * * Checks the old formatter of the x axis and adds a new x axis with a * different formatter: after the call the new axis should have the formatter * of the previous axis due to the replace semantics of the * {@link Chart2D#setAxisXBottom(AAxis, int)}. * <p> * */ @org.junit.Test public void testSetAxis() { Chart2D chart = new Chart2D(); IAxisLabelFormatter oldFormatter = chart.getAxisX().getFormatter(); AAxis<?> axis = new AxisLinear<IAxisScalePolicy>(); IAxisLabelFormatter formatter = new LabelFormatterDate((SimpleDateFormat) DateFormat .getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT)); axis.setFormatter(formatter); chart.setAxisXBottom(axis, 0); Assert.assertSame(oldFormatter, chart.getAxisX().getFormatter()); } /** * Test for bug 3352480: <br/> * Removing trace after z-index has changed does not work. * <p> * @org.junit.Test */ public void testAddRemoveTraceAfterChangingZIndex() { Chart2D chart = new Chart2D(); ITrace2D trace = new Trace2DSimple(); chart.addTrace(trace); // add some more dummy traces to test the finding of trace within a set: for (int i = 0; i < 100; i++) { chart.addTrace(new Trace2DSimple()); } trace.setZIndex(new Integer(33)); boolean removed = chart.removeTrace(trace); assertTrue("The trace was not removed after changing z-index!", removed); } }