Package gov.nasa.arc.mct.fastplot.bridge

Source Code of gov.nasa.arc.mct.fastplot.bridge.TestPlotDataSeries

/*******************************************************************************
* Mission Control Technologies, Copyright (c) 2009-2012, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* The MCT platform is 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.
*
* MCT includes source code licensed under additional open source licenses. See
* the MCT Open Source Licenses file included with this distribution or the About
* MCT Licenses dialog available at runtime from the MCT Help menu for additional
* information.
*******************************************************************************/
package gov.nasa.arc.mct.fastplot.bridge;

import gov.nasa.arc.mct.fastplot.bridge.PlotConstants.AxisOrientationSetting;
import gov.nasa.arc.mct.fastplot.bridge.PlotConstants.PlotLineConnectionType;
import gov.nasa.arc.mct.fastplot.bridge.PlotConstants.PlotLineDrawingFlags;
import gov.nasa.arc.mct.fastplot.bridge.PlotConstants.TimeAxisSubsequentBoundsSetting;
import gov.nasa.arc.mct.fastplot.bridge.PlotConstants.XAxisMaximumLocationSetting;
import gov.nasa.arc.mct.fastplot.bridge.PlotConstants.YAxisMaximumLocationSetting;
import gov.nasa.arc.mct.fastplot.settings.PlotSettings;
import gov.nasa.arc.mct.fastplot.utils.AbbreviatingPlotLabelingAlgorithm;
import gov.nasa.arc.mct.fastplot.view.PlotViewManifestation;

import java.awt.Color;
import java.awt.Font;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;

import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

import plotter.xy.LinearXYPlotLine;
import plotter.xy.XYAxis;
import plotter.xy.XYDimension;
import plotter.xy.XYPlot;
import plotter.xy.XYPlotContents;

public class TestPlotDataSeries {
  @Mock
  private PlotViewManifestation mockPlotViewManifestation;
 
  @Mock
  private PlotterPlot mockPlot;
  @Mock
  private XYPlot plotView;
 
  @Mock
  private PlotDataManager plotDataManger;
 
  @Mock
  private PlotLimitManager plotLimitManager;
 
  @Mock
  private LegendEntry legendEntry;

  private PlotAbstraction plotAbstraction;
  private AbbreviatingPlotLabelingAlgorithm plotLabelingAlgorithm = new AbbreviatingPlotLabelingAlgorithm();
 
  private static final double EPSILON = 0.1;
 
  @BeforeMethod
  public void setup() {
    MockitoAnnotations.initMocks(this);
    Mockito.when(mockPlotViewManifestation.getCurrentMCTTime()).thenReturn(new GregorianCalendar().getTimeInMillis());
    Mockito.when(mockPlot.isCompressionEnabled()).thenReturn(false);
    Mockito.when(plotView.getContents()).thenReturn(new XYPlotContents());
    Mockito.when(mockPlot.getPlotView()).thenReturn(plotView);
    Mockito.when(mockPlot.getPlotDataManager()).thenReturn(plotDataManger);
    Mockito.when(mockPlot.getLimitManager()).thenReturn(plotLimitManager);
    Mockito.when(mockPlot.getMinTime()).thenReturn(Long.valueOf(0));
    Mockito.when(mockPlot.getPlotLineDraw()).thenReturn(PlotConstants.DEFAULT_PLOT_LINE_DRAW);
   
    plotAbstraction = new PlotView.Builder(PlotterPlot.class).build();
    ((PlotView)plotAbstraction).setManifestation(mockPlotViewManifestation);
   
    Mockito.when(mockPlot.getPlotAbstraction()).thenReturn(plotAbstraction);
  }
 
  @Test
  public void testGettersAndSetters() {
    GregorianCalendar timeOne = new GregorianCalendar();
    GregorianCalendar timeTwo = new GregorianCalendar();
    timeTwo.add(Calendar.MINUTE, 10);
    PlotterPlot testPlot = new PlotterPlot();
    testPlot.createChart(
        new Font("Arial", Font.PLAIN, 1),
        1,
        Color.white,
        Color.white,
        0,
        Color.white,
        Color.white,
        Color.white,
        "dd",
        Color.black,
        Color.white,
        1,
        false,
        true,
        true,
        plotAbstraction,
        plotLabelingAlgorithm);
   
    testPlot.setCompressionEnabled(false);
    Assert.assertFalse(testPlot.isCompressionEnabled());
   
   
    XYAxis xAxis = plotView.getXAxis();
    XYAxis yAxis = plotView.getYAxis();
    LinearXYPlotLine plot = new LinearXYPlotLine(xAxis, yAxis, XYDimension.X);
    Font font = new Font("Arial", Font.PLAIN, 10);
    LegendEntry legend = new LegendEntry(Color.white,  Color.white, font, new AbbreviatingPlotLabelingAlgorithm());
    legend.setPlot(plot);
    PlotDataSeries data = new PlotDataSeries(testPlot, "test", Color.white);
        data.setLegend(legend);   
    Assert.assertEquals(data.getColor(), Color.white);
    data.setPlottingColor(Color.black);
    Assert.assertEquals(data.getColor(), Color.black);
    Assert.assertEquals(data.getLegendEntry(), legend);
  }
 
  @Test
  public void testGetMinAndMaxValuesTimeOnX() {
    GregorianCalendar timeOne = new GregorianCalendar();
    GregorianCalendar timeTwo = new GregorianCalendar();
    timeTwo.add(Calendar.MINUTE, 30);
    PlotterPlot testPlot = new PlotterPlot();
    testPlot.createChart(
        new Font("Arial", Font.PLAIN, 1),
        1,
        Color.white,
        Color.white,
        0,
        Color.white,
        Color.white,
        Color.white,
        "dd",
        Color.black,
        Color.white,
        1,
        false,
        true,
        true,
        plotAbstraction,
        plotLabelingAlgorithm);
   
    testPlot.setCompressionEnabled(false);
    Assert.assertFalse(testPlot.isCompressionEnabled());
   
    // Setup a data series.
    testPlot.addDataSet("dataSet1", Color.white);
    PlotDataSeries data = (PlotDataSeries) testPlot.getPlotDataManager().getNamedDataSeries("dataSet1");
    data.dataset.setCompressionOffset(timeOne.getTimeInMillis());
    data.dataset.setCompressionScale(1);
   
    Assert.assertEquals(data.getDataSetName(), "dataSet1");
   
    GregorianCalendar insertTime = new GregorianCalendar();
    insertTime.setTimeInMillis(timeOne.getTimeInMillis());
   
    // Store data into the process var
    data.getData().add(insertTime.getTimeInMillis(), 0.0);
    insertTime.add(Calendar.MINUTE, 1);
    data.getData().add(insertTime.getTimeInMillis(), 100.0);
    insertTime.add(Calendar.MINUTE, 1);
    data.getData().add(insertTime.getTimeInMillis(), 10.0);
    insertTime.add(Calendar.MINUTE, 1);
    data.getData().add(insertTime.getTimeInMillis(), -5.0);
    insertTime.add(Calendar.MINUTE, 1);
    data.getData().add(insertTime.getTimeInMillis(), 1000.0);
    insertTime.add(Calendar.MINUTE, 1);
    data.getData().add(insertTime.getTimeInMillis(), Double.NaN);
    insertTime.add(Calendar.MINUTE, 1);
    data.getData().add(insertTime.getTimeInMillis(), 100000.0);
    insertTime.add(Calendar.MINUTE, 1);
    data.getData().add(insertTime.getTimeInMillis(), -700.0);
    insertTime.add(Calendar.MINUTE, 1);
    data.getData().add(insertTime.getTimeInMillis(), 100.0);
    insertTime.add(Calendar.MINUTE, 1);
    data.getData().add(insertTime.getTimeInMillis(), 2.0);
    insertTime.add(Calendar.MINUTE, 1);
    data.getData().add(insertTime.getTimeInMillis(), 99999999.0);
   
    GregorianCalendar startTime = new GregorianCalendar();
    GregorianCalendar endTime = new GregorianCalendar();
   
    startTime.setTimeInMillis(timeOne.getTimeInMillis() - 1001);
    endTime.setTimeInMillis(timeOne.getTimeInMillis() + 1001);
    endTime.add(Calendar.MINUTE, 1);
   
    // Test max and min methods
    double[] maxAndTime = data.getMaxValue(endTime.getTimeInMillis(), startTime.getTimeInMillis());
    double[] minAndTime = data.getMinValue(endTime.getTimeInMillis(), startTime.getTimeInMillis());
   
    Assert.assertEquals(maxAndTime[0], 100.0);
    Assert.assertEquals(minAndTime[0], 0.0);
   
    endTime.setTimeInMillis(timeOne.getTimeInMillis());
    endTime.add(Calendar.MINUTE, 10);
    // Test max and min methods
    maxAndTime = data.getMaxValue(endTime.getTimeInMillis(), startTime.getTimeInMillis());
    minAndTime = data.getMinValue(endTime.getTimeInMillis(), startTime.getTimeInMillis());
   
    Assert.assertEquals(maxAndTime[0], 99999999.0);
    Assert.assertEquals(minAndTime[0], -700.0);
   
    // Scan a sub area of the time line to insure we're only testing inside the bounds.
   
    startTime.setTimeInMillis(timeOne.getTimeInMillis());
    endTime.setTimeInMillis(timeOne.getTimeInMillis());
    startTime.add(Calendar.MINUTE, 3);
    endTime.add(Calendar.MINUTE, 5);

    maxAndTime = data.getMaxValue(endTime.getTimeInMillis(), startTime.getTimeInMillis());
    minAndTime = data.getMinValue(endTime.getTimeInMillis(), startTime.getTimeInMillis());
    Assert.assertEquals(maxAndTime[0], 1000.0);
    Assert.assertEquals(minAndTime[0], -5.0);
   
    startTime.setTimeInMillis(timeOne.getTimeInMillis());
    endTime.setTimeInMillis(timeOne.getTimeInMillis());
    startTime.add(Calendar.MINUTE, 4);
    endTime.add(Calendar.MINUTE, 4);
    maxAndTime = data.getMaxValue(endTime.getTimeInMillis(), startTime.getTimeInMillis());
    minAndTime = data.getMinValue(endTime.getTimeInMillis(), startTime.getTimeInMillis());
   
    Assert.assertEquals(maxAndTime[0], 1000.0);
    Assert.assertEquals(minAndTime[0], 1000.0);
   
    // negative time range.
    maxAndTime = data.getMaxValue(1, 2);
    minAndTime = data.getMinValue(1, 2);
    Assert.assertEquals(maxAndTime[0], -Double.MAX_VALUE);
    Assert.assertEquals(minAndTime[0], Double.MAX_VALUE);
   
 
 
  @Test (enabled = false)
  public void testGetMinAndMaxValuesTimeOnY() {
    GregorianCalendar timeNow = new GregorianCalendar();
    GregorianCalendar startTime = new GregorianCalendar();
    GregorianCalendar  endTime = new GregorianCalendar();
    timeNow.add(Calendar.MINUTE, 15);
    endTime.add(Calendar.MINUTE, 30);
   
   
    PlotterPlot testPlot = new PlotterPlot();
    // Yaxis as time
    testPlot.createChart(
        new Font("Arial", Font.PLAIN, 1),
        1,
        Color.white,
        Color.white,
        0,
        Color.white,
        Color.white,
        Color.white,
        "dd",
        Color.black,
        Color.white,
        1,
        false,
        true,
        true,
        plotAbstraction,
        plotLabelingAlgorithm);
   
    testPlot.setCompressionEnabled(false);
    Assert.assertFalse(testPlot.isCompressionEnabled());
   
    // Add a data set
    testPlot.addDataSet("DataSet1", Color.red);
      PlotDataSeries data = (PlotDataSeries) testPlot.getPlotDataManager().getNamedDataSeries("DataSet1");
      data.dataset.setCompressionOffset(startTime.getTimeInMillis());
      data.dataset.setCompressionScale(1);
 
    testPlot.addData("DataSet1", timeNow.getTimeInMillis(), 0);
    timeNow.add(Calendar.MINUTE, 1);
    testPlot.addData("DataSet1", timeNow.getTimeInMillis(), 100);
    timeNow.add(Calendar.MINUTE, 1);
    testPlot.addData("DataSet1", timeNow.getTimeInMillis(), -5);
    timeNow.add(Calendar.MINUTE, 1);
    testPlot.addData("DataSet1", timeNow.getTimeInMillis(), 120);
    timeNow.add(Calendar.MINUTE, 1);
    testPlot.addData("DataSet1", timeNow.getTimeInMillis(), 2);
 
    // Test max and min methods
     
      double[] maxAndTime = data.getMaxValue(endTime.getTimeInMillis(),startTime.getTimeInMillis());
    double[] minAndTime = data.getMinValue(endTime.getTimeInMillis(),startTime.getTimeInMillis());
     
     
    Assert.assertEquals(maxAndTime[0], 120.0);
    Assert.assertEquals(minAndTime[0], -5.0);
   
    // Just insure no exception thrown.
    data.toString();
  }
 
  @Test (dataProvider = "settingsProvider")
  public void TestSetupDataNonScrunchPlot(PlotSettings settings) {
    settings.setTimeAxisSubsequentSetting(TimeAxisSubsequentBoundsSetting.JUMP);
    PlotAbstraction plot = new PlotView.Builder(PlotterPlot.class).
                           plotSettings(settings).
                           build();
    PlotterPlot testPlot = (PlotterPlot) plot.returnPlottingPackage();
    testPlot.addDataSet("test", Color.white);
   
    // Makesure that "TEST" data set was setup as we expected.
    PlotDataSeries dataSeries = (PlotDataSeries) testPlot.getPlotDataManager().getNamedDataSeries("test");
    Assert.assertNotNull(dataSeries);
  }
 
  @Test (dataProvider = "settingsProvider")
  public void TestSetupDataScrunchPlotWithCompression(PlotSettings settings) {
    // Switch to a scrunch plot
    //PlotSettings settings = new PlotSettings();
    settings.setTimeAxisSubsequentSetting(TimeAxisSubsequentBoundsSetting.SCRUNCH);
    PlotAbstraction plot = new PlotView.Builder(PlotterPlot.class).
              plotSettings(settings).
              isCompressionEnabled(true).
              build();
    PlotterPlot testPlot = (PlotterPlot) plot.returnPlottingPackage();
    testPlot.addDataSet("TEST", Color.white);
   
    PlotDataSeries dataSeries = (PlotDataSeries) testPlot.getPlotDataManager().getNamedDataSeries("TEST");
  }
 
  @Test
  public void TestSetupDataScrunchPlotWithOutCompression() {
    // Switch to a scrunch plot
    PlotSettings settings = new PlotSettings();
    settings.setTimeAxisSubsequentSetting(TimeAxisSubsequentBoundsSetting.SCRUNCH);
    PlotAbstraction plot = new PlotView.Builder(PlotterPlot.class).
              plotSettings(settings).
              isCompressionEnabled(false).
              build();
    PlotterPlot testPlot = (PlotterPlot) plot.returnPlottingPackage();
    testPlot.addDataSet("TEST", Color.white);
    PlotDataSeries dataSeries = (PlotDataSeries) testPlot.getPlotDataManager().getNamedDataSeries("TEST");
  }
 
  @Test
  public void TestSetLinePlots() {
    PlotDataSeries data = new PlotDataSeries(mockPlot, "test", Color.white);
    LinearXYPlotLine slp = new LinearXYPlotLine(plotView.getXAxis(), plotView.getYAxis(), XYDimension.X);
    data.setLinePlot(slp);
    Assert.assertEquals(data.linePlot, slp);
    LinearXYPlotLine regressionLine = new LinearXYPlotLine(plotView.getXAxis(), plotView.getYAxis(), XYDimension.X);
    data.setRegressionLine(regressionLine);
    Assert.assertEquals(data.regressionLine, regressionLine);
    data.resetData(); // Reset should also remove regression line
    Assert.assertNull(data.getRegressionLine());
 
 
  @Test
  public void TestUpdateRegressionLine() {
    GregorianCalendar timeOne = new GregorianCalendar();
    GregorianCalendar timeTwo = new GregorianCalendar();
    timeTwo.setTimeInMillis(timeOne.getTimeInMillis());
    timeTwo.add(Calendar.MINUTE, 30);
    PlotterPlot testPlot = new PlotterPlot();
    plotAbstraction.setMinTime(timeOne.getTimeInMillis());
    plotAbstraction.setMaxTime(timeTwo.getTimeInMillis());
    testPlot.createChart(
        new Font("Arial", Font.PLAIN, 1),
        1,
        Color.white,
        Color.white,
        0,
        Color.white,
        Color.white,
        Color.white,
        "dd",
        Color.black,
        Color.white,
        1,
        false,
        true,
        true,
        plotAbstraction,
        plotLabelingAlgorithm);
   
    testPlot.setCompressionEnabled(false);
    Assert.assertFalse(testPlot.isCompressionEnabled());
   
    // Setup a data series.
    testPlot.addDataSet("dataSet1", Color.white);
    PlotDataSeries data = (PlotDataSeries) testPlot.getPlotDataManager().getNamedDataSeries("dataSet1");
    data.dataset.setCompressionOffset(timeOne.getTimeInMillis());
    data.dataset.setCompressionScale(1);
   
    Assert.assertEquals(data.getDataSetName(), "dataSet1");
   
    GregorianCalendar insertTime = new GregorianCalendar();
    insertTime.setTimeInMillis(timeOne.getTimeInMillis());
    double[] xData = new double[4];
    // Store data into the process var
    data.getData().add(insertTime.getTimeInMillis(), 0.0);
    xData[0] = Long.valueOf(insertTime.getTimeInMillis()).doubleValue();
    insertTime.add(Calendar.MINUTE, 1);
    data.getData().add(insertTime.getTimeInMillis(), 10.0);
    xData[1] = Long.valueOf(insertTime.getTimeInMillis()).doubleValue();
    insertTime.add(Calendar.MINUTE, 1);
    data.getData().add(insertTime.getTimeInMillis(), 20.0);
    xData[2] = Long.valueOf(insertTime.getTimeInMillis()).doubleValue();
    Mockito.when(legendEntry.hasRegressionLine()).thenReturn(true);
    Mockito.when(legendEntry.getNumberRegressionPoints()).thenReturn(2);
    data.setLegend(legendEntry);
    data.updateRegressionLine();
    Assert.assertEquals(data.getRegressionLine().getXData().getLength(), 2);
    insertTime.add(Calendar.MINUTE, 1);
    data.getData().add(insertTime.getTimeInMillis(), 30.0);
    xData[3] = Long.valueOf(insertTime.getTimeInMillis()).doubleValue();
    data.updateRegressionLine();
    HighPrecisionLinearRegression lr = new HighPrecisionLinearRegression( xData, new double[]{0.0, 10.0, 20.0, 30.0});
    Assert.assertEquals(data.getRegressionLine().getXData().get(0), Long.valueOf(insertTime.getTimeInMillis()).doubleValue(), EPSILON);
    Assert.assertEquals(data.getRegressionLine().getYData().get(0), 30.0, EPSILON);
    Assert.assertEquals(data.getRegressionLine().getXData().get(1), Long.valueOf(timeTwo.getTimeInMillis()).doubleValue(), EPSILON);
    Assert.assertEquals(data.getRegressionLine().getYData().get(1), lr.calculateY(
        Long.valueOf(timeTwo.getTimeInMillis()).doubleValue()) +
    (30 - lr.calculateY(xData[3])), EPSILON);
  }
 
 
  private static final boolean[] BOOLEANS = { false, true };
 
 
  // Ensure that PloteDataSeries functions under a variety of settings
  @DataProvider (name = "settingsProvider")
  public Object[][] createSettings() {
    List<Object[]> l = new ArrayList<Object[]>();
   
    for (boolean ordinal : BOOLEANS) {
      for (boolean pin : BOOLEANS) {
        for (boolean drawMarkers : BOOLEANS) {
          for (AxisOrientationSetting orientation : AxisOrientationSetting.values()) {
            for (PlotLineConnectionType connection : PlotLineConnectionType.values()) {
              for (XAxisMaximumLocationSetting xMax : XAxisMaximumLocationSetting.values()) {
                for (YAxisMaximumLocationSetting yMax : YAxisMaximumLocationSetting.values()) {
                  if (orientation != AxisOrientationSetting.Z_AXIS_AS_TIME) { // Not compatible with PlotterPlot
                    PlotSettings p = new PlotSettings();
                    p.setOrdinalPositionForStackedPlots(ordinal);
                    p.setPinTimeAxis(pin);
                    p.setPlotLineDraw(new PlotLineDrawingFlags(true, drawMarkers));
                    p.setAxisOrientationSetting(orientation);
                    p.setPlotLineConnectionType(connection);
                    p.setXAxisMaximumLocation(xMax);
                    p.setYAxisMaximumLocation(yMax);
                    l.add(new Object[]{p});
                  }
                }               
              }
            }
          }
        }
      }
     
    }
    Object[][] params = new Object[l.size()][];
    for (int i = 0 ; i < l.size(); i++) {
      params[i] = l.get(i);
    }
    return params;
  };
}
TOP

Related Classes of gov.nasa.arc.mct.fastplot.bridge.TestPlotDataSeries

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.