/*
* TestAxis.java of project jchart2d, Junit test case for
* IAxis implementations.
* Copyright (C) Achim Westermann, created on 16.07.2005, 10:52:43
*
* 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.axis;
import info.monitorenter.gui.chart.IAxisScalePolicy;
import info.monitorenter.gui.chart.IRangePolicy;
import info.monitorenter.gui.chart.ITrace2D;
import info.monitorenter.gui.chart.rangepolicies.RangePolicyFixedViewport;
import info.monitorenter.gui.chart.test.ATestJChart2D;
import info.monitorenter.gui.chart.traces.Trace2DSimple;
import info.monitorenter.util.Range;
import junit.framework.Assert;
import junit.framework.Test;
import junit.framework.TestSuite;
/**
* Junit test for <code>{@link info.monitorenter.gui.chart.IAxis}</code>
* implementations.
* <p>
*
* @author <a href="mailto:Achim.Westermann@gmx.de">Achim Westermann</a>
*/
public class TestAxis extends ATestJChart2D {
/**
* Test suite for this test class.
* <p>
*
* @return the test suite
*/
public static Test suite() {
TestSuite suite = new TestSuite();
suite.setName(TestAxis.class.getName());
suite.addTest(new TestAxis("testSetRangePolicyFixedViewPort"));
suite.addTest(new TestAxis("testTransformPxToValue"));
suite.addTest(new TestAxis("testTransformValueToPx"));
return suite;
}
/**
* Constructor with the test name.
* <p>
*
* @param testname
* the test name.
*/
public TestAxis(final String testname) {
super(testname);
}
/**
* @see info.monitorenter.gui.chart.test.ATestJChart2D#createAxisX()
*/
@Override
protected AAxis<?> createAxisX() {
return new AxisLinear<IAxisScalePolicy>();
}
/**
* @see info.monitorenter.gui.chart.test.ATestJChart2D#createAxisY()
*/
@Override
protected AAxis<?> createAxisY() {
return this.createAxisX();
}
/**
* @see info.monitorenter.gui.chart.test.ATestJChart2D#createTraces()
*/
@Override
protected ITrace2D[] createTraces() {
return new ITrace2D[] {new Trace2DSimple()};
}
/**
* @see info.monitorenter.gui.chart.test.ATestJChart2D#fillTrace(info.monitorenter.gui.chart.ITrace2D)
*/
@Override
protected void fillTrace(final ITrace2D trace2D) {
for (int i = 0; i < 101; i++) {
trace2D.addPoint(i, i);
}
}
/**
* Tests <code>{@link AAxis#setRangePolicy(IRangePolicy)}</code> with a <code>
* {@link RangePolicyFixedViewport}</code>.
* <p>
*/
public void testSetRangePolicyFixedViewPort() {
Range range = new Range(1, 2);
IRangePolicy rangePolicy = new RangePolicyFixedViewport(range);
this.m_axisX.setRangePolicy(rangePolicy);
Range axisRange = this.m_axisX.getRangePolicy().getRange();
Assert.assertEquals(range.getMin(), axisRange.getMin(), 0);
Assert.assertSame(range, axisRange);
this.m_axisY.setRangePolicy(rangePolicy);
axisRange = this.m_axisY.getRangePolicy().getRange();
Assert.assertEquals(range.getMin(), axisRange.getMin(), 0);
Assert.assertSame(range, axisRange);
}
/**
* Tests the method {@link AAxis.AChart2DDataAccessor#translatePxToValue(int)}
* .
* <p>
*/
public void testTransformPxToValue() {
// X-axis
int pixel = 100;
double value = this.m_axisX.translatePxToValue(pixel);
int retransform = this.m_axisX.m_accessor.translateValueToPx(value);
Assert.assertEquals(pixel, retransform);
pixel = 222;
value = this.m_axisX.m_accessor.translatePxToValue(pixel);
retransform = this.m_axisX.m_accessor.translateValueToPx(value);
Assert.assertEquals(pixel, retransform);
pixel = 399;
value = this.m_axisX.m_accessor.translatePxToValue(pixel);
retransform = this.m_axisX.m_accessor.translateValueToPx(value);
Assert.assertEquals(pixel, retransform);
// direction test: higher x px have to be transformed to lower px:
pixel = 400;
double higherValue = this.m_axisX.m_accessor.translatePxToValue(pixel);
Assert.assertTrue(higherValue > value);
// Y-axis
pixel = 100;
value = this.m_axisY.m_accessor.translatePxToValue(pixel);
retransform = this.m_axisY.m_accessor.translateValueToPx(value);
Assert.assertEquals(pixel, retransform);
pixel = 222;
value = this.m_axisY.m_accessor.translatePxToValue(pixel);
retransform = this.m_axisY.m_accessor.translateValueToPx(value);
Assert.assertEquals(pixel, retransform);
// Direction test: higher y px have to be transformed to lower values,
// as y starts from top in awt:
pixel = 300;
higherValue = this.m_axisY.m_accessor.translatePxToValue(pixel);
Assert.assertTrue(higherValue < value);
}
/**
* Tests the method {@link AAxis.AChart2DDataAccessor#translatePxToValue(int)}
* .
* <p>
*/
public void testTransformValueToPx() {
double value = 50;
int pixel = this.m_axisX.m_accessor.translateValueToPx(value);
double retransform = this.m_axisX.m_accessor.translatePxToValue(pixel);
Assert.assertEquals(value, retransform, 3);
// the first transformation value to px will cause a change (int rounding)
// the 2nd try should be exact as the value matches an exact px:
value = retransform;
pixel = this.m_axisX.m_accessor.translateValueToPx(value);
retransform = this.m_axisX.m_accessor.translatePxToValue(pixel);
Assert.assertEquals(value, retransform, 0);
// y Axis
value = 50;
pixel = this.m_axisY.m_accessor.translateValueToPx(value);
retransform = this.m_axisY.m_accessor.translatePxToValue(pixel);
Assert.assertEquals(value, retransform, 3);
// the first transformation value to px will cause a change (int rounding)
// the 2nd try should be exact as the value matches an exact px:
value = retransform;
pixel = this.m_axisY.m_accessor.translateValueToPx(value);
retransform = this.m_axisY.m_accessor.translatePxToValue(pixel);
Assert.assertEquals(value, retransform, 0);
}
}