package org.esa.snap.rcp.statistics;
import org.jfree.chart.axis.NumberTick;
import org.jfree.ui.RectangleEdge;
import org.junit.Test;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/**
* Date: 11.04.12
* Time: 13:18
*
* @author olafd
*/
public class CustomLogarithmicAxisTest {
@Test
public void testRefreshTicks() throws Exception {
CustomLogarithmicAxis testAxis = new CustomLogarithmicAxis("testAxis");
// axis range includes 3 power of 10 values: 1, 10, 100
testAxis.setRange(0.3, 300.0);
List ticks = testAxis.refreshTicks(RectangleEdge.TOP, CustomLogarithmicAxis.HORIZONTAL);
assertNotNull(ticks);
assertEquals(28, ticks.size());
// we expect labels at the power of 10 values only
assertEquals("", ((NumberTick) ticks.get(0)).getText());
assertEquals("", ((NumberTick) ticks.get(1)).getText());
assertEquals("1", ((NumberTick) ticks.get(7)).getText());
assertEquals("", ((NumberTick) ticks.get(9)).getText());
assertEquals("10", ((NumberTick) ticks.get(16)).getText());
assertEquals("", ((NumberTick) ticks.get(18)).getText());
assertEquals("100", ((NumberTick) ticks.get(25)).getText());
assertEquals("", ((NumberTick) ticks.get(26)).getText());
// axis range includes 2 power of 10 values: 1, 10
testAxis.setRange(0.3, 30.0);
ticks = testAxis.refreshTicks(RectangleEdge.TOP, CustomLogarithmicAxis.HORIZONTAL);
assertNotNull(ticks);
assertEquals(19, ticks.size());
// we expect labels at the power of 10 values only
assertEquals("", ((NumberTick) ticks.get(0)).getText());
assertEquals("", ((NumberTick) ticks.get(1)).getText());
assertEquals("1", ((NumberTick) ticks.get(7)).getText());
assertEquals("", ((NumberTick) ticks.get(9)).getText());
assertEquals("10", ((NumberTick) ticks.get(16)).getText());
assertEquals("", ((NumberTick) ticks.get(18)).getText());
// axis range includes 1 power of 10 values: 1
testAxis.setRange(0.3, 3.0);
ticks = testAxis.refreshTicks(RectangleEdge.TOP, CustomLogarithmicAxis.HORIZONTAL);
assertNotNull(ticks);
assertEquals(10, ticks.size());
// we expect labels at every tick!
// todo: clarify why these tests work locally, but not on buildserver (who expects "0.3", "0.4", ...)
// assertEquals("0,3", ((NumberTick) ticks.get(0)).getText());
// assertEquals("0,4", ((NumberTick) ticks.get(1)).getText());
// assertEquals("0,5", ((NumberTick) ticks.get(2)).getText());
// assertEquals("0,6", ((NumberTick) ticks.get(3)).getText());
// assertEquals("0,7", ((NumberTick) ticks.get(4)).getText());
// assertEquals("0,8", ((NumberTick) ticks.get(5)).getText());
// assertEquals("0,9", ((NumberTick) ticks.get(6)).getText());
assertEquals(0.3, ((NumberTick) ticks.get(0)).getValue(), 1.E-6);
assertEquals(0.4, ((NumberTick) ticks.get(1)).getValue(), 1.E-6);
assertEquals(0.5, ((NumberTick) ticks.get(2)).getValue(), 1.E-6);
assertEquals(0.6, ((NumberTick) ticks.get(3)).getValue(), 1.E-6);
assertEquals(0.7, ((NumberTick) ticks.get(4)).getValue(), 1.E-6);
assertEquals(0.8, ((NumberTick) ticks.get(5)).getValue(), 1.E-6);
assertEquals(0.9, ((NumberTick) ticks.get(6)).getValue(), 1.E-6);
assertEquals("1", ((NumberTick) ticks.get(7)).getText());
assertEquals("2", ((NumberTick) ticks.get(8)).getText());
assertEquals("3", ((NumberTick) ticks.get(9)).getText());
// axis range includes no power of 10 values
testAxis.setRange(0.3, 0.8);
ticks = testAxis.refreshTicks(RectangleEdge.TOP, CustomLogarithmicAxis.HORIZONTAL);
assertNotNull(ticks);
assertEquals(6, ticks.size());
// we expect labels at every tick!
// todo: clarify why these tests work locally, but not on buildserver (who expects "0.3", "0.4", ...)
// assertEquals("0,3", ((NumberTick) ticks.get(0)).getText());
// assertEquals("0,4", ((NumberTick) ticks.get(1)).getText());
// assertEquals("0,5", ((NumberTick) ticks.get(2)).getText());
// assertEquals("0,6", ((NumberTick) ticks.get(3)).getText());
// assertEquals("0,7", ((NumberTick) ticks.get(4)).getText());
// assertEquals("0,8", ((NumberTick) ticks.get(5)).getText());
assertEquals(0.3, ((NumberTick) ticks.get(0)).getValue(), 1.E-6);
assertEquals(0.4, ((NumberTick) ticks.get(1)).getValue(), 1.E-6);
assertEquals(0.5, ((NumberTick) ticks.get(2)).getValue(), 1.E-6);
assertEquals(0.6, ((NumberTick) ticks.get(3)).getValue(), 1.E-6);
assertEquals(0.7, ((NumberTick) ticks.get(4)).getValue(), 1.E-6);
assertEquals(0.8, ((NumberTick) ticks.get(5)).getValue(), 1.E-6);
}
@Test
public void testRefreshTicksForNegativeAxisRange() throws Exception {
CustomLogarithmicAxis testAxis = new CustomLogarithmicAxis("testAxis");
testAxis.setRange(-300, -3);
List ticks = testAxis.refreshTicks(RectangleEdge.TOP, CustomLogarithmicAxis.HORIZONTAL);
assertNotNull(ticks);
assertEquals(19, ticks.size());
// we expect labels at the power of 10 values only
assertEquals("", ((NumberTick) ticks.get(0)).getText());
assertEquals("", ((NumberTick) ticks.get(1)).getText());
assertEquals("-10", ((NumberTick) ticks.get(7)).getText());
assertEquals("", ((NumberTick) ticks.get(9)).getText());
assertEquals("-100", ((NumberTick) ticks.get(16)).getText());
assertEquals("", ((NumberTick) ticks.get(18)).getText());
}
@Test
public void testRefreshTicksForInvalidAxisRange() throws Exception {
CustomLogarithmicAxis testAxis = new CustomLogarithmicAxis("testAxis");
// axis range maximum/minimum switched
try {
testAxis.setRange(30, 3);
} catch (IllegalArgumentException expected) {
assertEquals("Range(double, double): require lower (30.0) <= upper (3.0).", expected.getMessage());
}
// axis range includes zero
testAxis.setRange(-30, 30);
List ticks = testAxis.refreshTicks(RectangleEdge.TOP, CustomLogarithmicAxis.HORIZONTAL);
assertNotNull(ticks);
assertEquals(0, ticks.size());
}
@Test
public void testRefreshTicksVerticalAxisOrientation() throws Exception {
CustomLogarithmicAxis testAxis = new CustomLogarithmicAxis("testAxis");
testAxis.setRange(-300, -3);
List ticks = testAxis.refreshTicks(RectangleEdge.LEFT, CustomLogarithmicAxis.VERTICAL);
assertNotNull(ticks);
assertEquals(19, ticks.size());
assertEquals("", ((NumberTick) ticks.get(0)).getText());
assertEquals("", ((NumberTick) ticks.get(1)).getText());
assertEquals("-10", ((NumberTick) ticks.get(7)).getText());
assertEquals("", ((NumberTick) ticks.get(9)).getText());
assertEquals("-100", ((NumberTick) ticks.get(16)).getText());
assertEquals("", ((NumberTick) ticks.get(18)).getText());
}
}