/*
* Copyright 2012 AndroidPlot.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.androidplot.xy;
import android.content.Context;
import android.graphics.*;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import com.androidplot.Plot;
import com.androidplot.PlotTest;
import com.androidplot.mock.MockContext;
import com.androidplot.mock.MockPaint;
import com.androidplot.ui.widget.TextLabelWidget;
import com.androidplot.util.Configurator;
import com.androidplot.util.FontUtils;
import com.androidplot.util.PixelUtils;
import mockit.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import static junit.framework.Assert.assertEquals;
@UsingMocksAndStubs({Log.class,View.class,Context.class,Handler.class,Paint.class,Color.class,
Rect.class, RectF.class,FontUtils.class, PixelUtils.class, Canvas.class})
public class XYPlotTest {
XYPlot plot; // testing
List<Integer> numList1;
List<Integer> numList2;
SimpleXYSeries series1;
@Before
public void setUp() throws Exception {
Mockit.setUpMocks(MockPaint.class,MockContext.class);
new MockUp<View>() {
@Mock int getWidth() { return 100;}
@Mock int getHeight() { return 100;}
};
plot = new XYPlot(null, "test");
numList1 = Arrays.asList(0, 1, 3, 5, 10, 15, 25, 50, 75, 100); // 10 elements
numList2 = Arrays.asList(-100, 0, 1, 3, 5, 10, 15, 25, 50, 75, 100, 200); // 12 elements
series1 = new SimpleXYSeries(numList1, SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "");
}
@After
public void tearDown() throws Exception {
}
@Test
public void testOriginFixedMode() throws Exception {
plot.addSeries(series1, new LineAndPointFormatter());
plot.centerOnDomainOrigin(5, 2, BoundaryMode.FIXED);
plot.calculateMinMaxVals();
assertEquals(3.0, plot.getCalculatedMinX());
assertEquals(7.0, plot.getCalculatedMaxX());
}
@Test
public void testOriginAutoMode() throws Exception {
plot.addSeries(series1, new LineAndPointFormatter());
plot.centerOnDomainOrigin(5);
plot.calculateMinMaxVals();
//plot.updateMinMaxVals();
assertEquals(10.0, plot.getCalculatedMaxX()); // symmetry is @ 10, not 9
assertEquals(0.0, plot.getCalculatedMinX());
plot.centerOnRangeOrigin(50);
plot.calculateMinMaxVals();
assertEquals(100.0, plot.getCalculatedMaxY());
assertEquals(0.0, plot.getCalculatedMinY());
}
@Test
public void testOriginGrowMode() throws Exception {
plot.addSeries(series1, new LineAndPointFormatter());
plot.centerOnDomainOrigin(5, null, BoundaryMode.GROW);
plot.calculateMinMaxVals();
assertEquals(0.0, plot.getCalculatedMinX());
assertEquals(10.0, plot.getCalculatedMaxX());
// introduce a larger domain set. boundaries should change
series1.setModel(numList2, SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
plot.calculateMinMaxVals();
assertEquals(-1.0, plot.getCalculatedMinX());
assertEquals(11.0, plot.getCalculatedMaxX());
// revert series model back to the previous set. boundaries should remain the same
series1.setModel(numList1, SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
plot.calculateMinMaxVals();
assertEquals(-1.0, plot.getCalculatedMinX());
assertEquals(11.0, plot.getCalculatedMaxX());
}
@Test
public void testOriginShrinkMode() throws Exception {
plot.addSeries(series1, new LineAndPointFormatter());
plot.centerOnDomainOrigin(5, null, BoundaryMode.SHRINNK);
plot.calculateMinMaxVals();
assertEquals(0.0, plot.getCalculatedMinX());
assertEquals(10.0, plot.getCalculatedMaxX());
// update with more extreme values...nothing should change in shrink mode:
series1.setModel(numList2,SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
assertEquals(0.0, plot.getCalculatedMinX());
assertEquals(10.0, plot.getCalculatedMaxX());
}
// Ifor not sure about filling in test stubs just going to do my own stuff instead.
@Test
public void testsetDomainBoundaries() throws Exception {
plot.addSeries(series1, new LineAndPointFormatter());
plot.calculateMinMaxVals();
// default to auto so check them
assertEquals(0, plot.getCalculatedMinX());
assertEquals(9, plot.getCalculatedMaxX());
plot.setDomainBoundaries(2, BoundaryMode.FIXED, 8, BoundaryMode.FIXED);
plot.calculateMinMaxVals();
// fixed
assertEquals(2, plot.getCalculatedMinX());
assertEquals(8, plot.getCalculatedMaxX());
// back to auto
plot.setDomainBoundaries(2, BoundaryMode.AUTO, 8, BoundaryMode.AUTO);
plot.calculateMinMaxVals();
// check again
assertEquals(0, plot.getCalculatedMinX());
assertEquals(9, plot.getCalculatedMaxX());
// we are not testing MinY well with this dataset.
// try grow
plot.setDomainBoundaries(2, BoundaryMode.GROW, 8, BoundaryMode.GROW);
plot.calculateMinMaxVals();
// check inital
assertEquals(0, plot.getCalculatedMinX());
assertEquals(9, plot.getCalculatedMaxX());
// update with more extreme values...
series1.setModel(numList2,SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
plot.calculateMinMaxVals();
// after growing
assertEquals(0, plot.getCalculatedMinX());
assertEquals(11, plot.getCalculatedMaxX());
// back to previous
series1.setModel(numList1,SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
plot.calculateMinMaxVals();
// should not of changed.
assertEquals(0, plot.getCalculatedMinX());
assertEquals(11, plot.getCalculatedMaxX());
// back to big
series1.setModel(numList2,SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
plot.setDomainBoundaries(2, BoundaryMode.SHRINNK, 8, BoundaryMode.SHRINNK);
plot.calculateMinMaxVals();
// check inital
assertEquals(0, plot.getCalculatedMinX());
assertEquals(11, plot.getCalculatedMaxX());
// now small
series1.setModel(numList1,SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
plot.calculateMinMaxVals();
// after shrinking
assertEquals(0, plot.getCalculatedMinX());
assertEquals(9, plot.getCalculatedMaxX());
// back to previous
series1.setModel(numList2,SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
plot.calculateMinMaxVals();
// should not of changed.
assertEquals(0, plot.getCalculatedMinX());
assertEquals(9, plot.getCalculatedMaxX());
// back to auto
plot.setDomainBoundaries(2, BoundaryMode.AUTO, 8, BoundaryMode.AUTO);
plot.calculateMinMaxVals();
// should of changed.
assertEquals(0, plot.getCalculatedMinX());
assertEquals(11, plot.getCalculatedMaxX());
}
@Test
public void testsetRangeBoundaries() throws Exception {
plot.addSeries(series1, new LineAndPointFormatter());
plot.calculateMinMaxVals();
// default to auto so check them
assertEquals(0, plot.getCalculatedMinY());
assertEquals(100, plot.getCalculatedMaxY());
plot.setRangeBoundaries(5, BoundaryMode.FIXED, 80, BoundaryMode.FIXED);
plot.calculateMinMaxVals();
// fixed
assertEquals(5, plot.getCalculatedMinY());
assertEquals(80, plot.getCalculatedMaxY());
// back to auto
plot.setRangeBoundaries(2, BoundaryMode.AUTO, 8, BoundaryMode.AUTO);
plot.calculateMinMaxVals();
// check again
assertEquals(0, plot.getCalculatedMinY());
assertEquals(100, plot.getCalculatedMaxY());
// try grow
plot.setRangeBoundaries(2, BoundaryMode.GROW, 8, BoundaryMode.GROW);
plot.calculateMinMaxVals();
// check inital
assertEquals(0, plot.getCalculatedMinY());
assertEquals(100, plot.getCalculatedMaxY());
// update with more extreme values...
series1.setModel(numList2,SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
plot.calculateMinMaxVals();
// after growing
assertEquals(-100, plot.getCalculatedMinY());
assertEquals(200, plot.getCalculatedMaxY());
// back to previous
series1.setModel(numList1,SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
plot.calculateMinMaxVals();
// should not of changed.
assertEquals(-100, plot.getCalculatedMinY());
assertEquals(200, plot.getCalculatedMaxY());
// back to big
series1.setModel(numList2,SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
plot.setRangeBoundaries(2, BoundaryMode.SHRINNK, 8, BoundaryMode.SHRINNK);
plot.calculateMinMaxVals();
// check inital
assertEquals(-100, plot.getCalculatedMinY());
assertEquals(200, plot.getCalculatedMaxY());
// now small
series1.setModel(numList1,SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
plot.calculateMinMaxVals();
// after shrinking
assertEquals(0, plot.getCalculatedMinY());
assertEquals(100, plot.getCalculatedMaxY());
// back to previous
series1.setModel(numList2,SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
plot.calculateMinMaxVals();
// should not of changed.
assertEquals(0, plot.getCalculatedMinY());
assertEquals(100, plot.getCalculatedMaxY());
// back to auto
plot.setRangeBoundaries(2, BoundaryMode.AUTO, 8, BoundaryMode.AUTO);
plot.calculateMinMaxVals();
// should of changed.
assertEquals(-100, plot.getCalculatedMinY());
assertEquals(200, plot.getCalculatedMaxY());
}
@Test
public void testSetDomainRightMinMax() throws Exception {
plot.addSeries(series1, new LineAndPointFormatter());
plot.calculateMinMaxVals();
// default to auto so check them
assertEquals(0, plot.getCalculatedMinX());
assertEquals(9, plot.getCalculatedMaxX());
plot.setDomainRightMax(10);
plot.calculateMinMaxVals();
// same values.
assertEquals(0, plot.getCalculatedMinX());
assertEquals(9, plot.getCalculatedMaxX());
series1.setModel(numList2,SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
plot.calculateMinMaxVals();
// on RightMax
assertEquals(0, plot.getCalculatedMinX());
assertEquals(10, plot.getCalculatedMaxX());
plot.setDomainRightMax(null);
plot.calculateMinMaxVals();
// back to full
assertEquals(0, plot.getCalculatedMinX());
assertEquals(11, plot.getCalculatedMaxX());
// now the RightMin
plot.setDomainRightMin(10);
plot.calculateMinMaxVals();
// still to full
assertEquals(0, plot.getCalculatedMinX());
assertEquals(11, plot.getCalculatedMaxX());
// small list
series1.setModel(numList1,SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
plot.calculateMinMaxVals();
// on RightMin
assertEquals(0, plot.getCalculatedMinX());
assertEquals(10, plot.getCalculatedMaxX());
// now off again
plot.setDomainRightMin(null);
plot.calculateMinMaxVals();
// small values.
assertEquals(0, plot.getCalculatedMinX());
assertEquals(9, plot.getCalculatedMaxX());
}
@Test
public void testSetRangeTopBottomMinMax() throws Exception {
plot.addSeries(series1, new LineAndPointFormatter());
plot.calculateMinMaxVals();
// default to auto so check them
assertEquals(0, plot.getCalculatedMinY());
assertEquals(100, plot.getCalculatedMaxY());
plot.setRangeTopMax(110);
plot.setRangeBottomMin(-50);
plot.calculateMinMaxVals();
// same values.
assertEquals(0, plot.getCalculatedMinY());
assertEquals(100, plot.getCalculatedMaxY());
series1.setModel(numList2,SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
plot.calculateMinMaxVals();
// on Limits
assertEquals(-50, plot.getCalculatedMinY());
assertEquals(110, plot.getCalculatedMaxY());
plot.setRangeTopMax(null);
plot.setRangeBottomMin(null);
plot.calculateMinMaxVals();
// back to full
assertEquals(-100, plot.getCalculatedMinY());
assertEquals(200, plot.getCalculatedMaxY());
// now the Min
plot.setRangeTopMin(150);
plot.setRangeBottomMax(-60);
plot.calculateMinMaxVals();
// still to full
assertEquals(-100, plot.getCalculatedMinY());
assertEquals(200, plot.getCalculatedMaxY());
// small list
series1.setModel(numList1,SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
plot.calculateMinMaxVals();
// on Limits
assertEquals(-60, plot.getCalculatedMinY());
assertEquals(150, plot.getCalculatedMaxY());
// now off again
plot.setRangeTopMin(null);
plot.setRangeBottomMax(null);
plot.calculateMinMaxVals();
// small values.
assertEquals(0, plot.getCalculatedMinY());
assertEquals(100, plot.getCalculatedMaxY());
}
@Test
public void testSetDomainUpperBoundary() throws Exception {
}
@Test
public void testSetDomainLowerBoundary() throws Exception {
}
@Test
public void testSetRangeUpperBoundary() throws Exception {
}
@Test
public void testSetRangeLowerBoundary() throws Exception {
}
@Test
public void testSetDomainOrigin() throws Exception {
}
@Test
public void testSetRangeOrigin() throws Exception {
}
@Test
public void testConfigure() throws Exception {
//Context context = Mockit.setUpMock(new MockContext());
Context context = new MockContext.MockContext2();
HashMap<String, String> params = new HashMap<String, String>();
String param1 = "this is a test.";
String param2 = Plot.RenderMode.USE_BACKGROUND_THREAD.toString();
String param3 = "#FF0000";
params.put("title", param1);
params.put("renderMode", param2);
params.put("backgroundPaint.color", param3);
params.put("graphWidget.domainLabelPaint.color", param3);
Configurator.configure(context, plot, params);
assertEquals(param1, plot.getTitle());
assertEquals(Plot.RenderMode.USE_BACKGROUND_THREAD, plot.getRenderMode());
assertEquals(Color.parseColor(param3), plot.getBackgroundPaint().getColor());
assertEquals(Color.parseColor(param3), plot.getGraphWidget().getDomainLabelPaint().getColor());
}
}