// Copyright (C) Stichting Deltares 2017. All rights reserved.
//
// This file is part of Ringtoets.
//
// Ringtoets 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 3 of the License, or
// (at your option) any later version.
//
// This program 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 program. If not, see .
//
// All names, logos, and references to "Deltares" are registered trademarks of
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using Core.Common.Base.Geometry;
using Core.Components.Chart.Data;
using Core.Components.Chart.Styles;
using Core.Components.OxyPlot.DataSeries;
using NUnit.Framework;
using OxyPlot;
using OxyPlot.Series;
namespace Core.Components.OxyPlot.Test.DataSeries
{
[TestFixture]
public class ChartLineDataSeriesTest
{
private static readonly Color color = Color.Blue;
[Test]
public void Constructor_WithoutChartLineData_ThrowsArgumentNullException()
{
// Call
TestDelegate test = () => new ChartLineDataSeries(null);
// Assert
string parameter = Assert.Throws(test).ParamName;
Assert.AreEqual("chartLineData", parameter);
}
[Test]
public void Constructor_ChartLineDataWithTestProperties_ChartLineDataSeriesCreatedAccordingly()
{
// Setup
var chartLineData = new ChartLineData("Test name", new ChartLineStyle
{
Color = color,
Width = 3,
DashStyle = ChartLineDashStyle.DashDot
});
SetChartLineDataTestProperties(chartLineData);
// Call
var chartLineDataSeries = new ChartLineDataSeries(chartLineData);
// Assert
Assert.IsInstanceOf(chartLineDataSeries);
Assert.IsInstanceOf(chartLineDataSeries);
AssertChartLineDataSeriesTestProperties(chartLineDataSeries);
}
[Test]
public void Update_ChartLineDataWithTestProperties_ChartLineDataSeriesUpdatedAccordingly()
{
// Setup
var chartLineData = new ChartLineData("Test name", new ChartLineStyle
{
Color = color,
Width = 3,
DashStyle = ChartLineDashStyle.DashDot
});
var chartLineDataSeries = new ChartLineDataSeries(chartLineData);
SetChartLineDataTestProperties(chartLineData);
// Precondition
AssertChartLineDataSeriesDefaultProperties(chartLineDataSeries);
// Call
chartLineDataSeries.Update();
// Assert
AssertChartLineDataSeriesTestProperties(chartLineDataSeries);
}
[Test]
public void GivenChartLineDataSeries_WhenUpdatedAfterChartLineDataPointsChanged_ChartLineDataSeriesPointsChanged()
{
// Given
var chartLineData = new ChartLineData("Test name")
{
Points = new[]
{
new Point2D(1.1, 2.2)
}
};
var chartLineDataSeries = new ChartLineDataSeries(chartLineData);
IEnumerable drawnPoints = chartLineDataSeries.ItemsSource.Cast();
// When
chartLineData.Points = new[]
{
new Point2D(3.3, 4.4)
};
chartLineDataSeries.Update();
// Then
CollectionAssert.AreNotEqual(drawnPoints, chartLineDataSeries.ItemsSource.Cast());
}
[Test]
public void GivenChartLineDataSeries_WhenUpdatedAndChartLineDataPointsNotChanged_PreviousChartLineDataSeriesPointsPreserved()
{
// Given
var chartLineData = new ChartLineData("Test name")
{
Points = new[]
{
new Point2D(1.1, 2.2)
}
};
var chartLineDataSeries = new ChartLineDataSeries(chartLineData);
IEnumerable drawnPoints = chartLineDataSeries.ItemsSource.Cast();
// When
chartLineDataSeries.Update();
// Then
CollectionAssert.AreEqual(drawnPoints, chartLineDataSeries.ItemsSource.Cast());
}
private static void SetChartLineDataTestProperties(ChartLineData chartLineData)
{
chartLineData.Name = "Another name";
chartLineData.IsVisible = false;
chartLineData.Points = new[]
{
new Point2D(1.1, 2.2)
};
}
private static void AssertChartLineDataSeriesTestProperties(ChartLineDataSeries chartLineDataSeries)
{
Assert.AreEqual("Another name", chartLineDataSeries.Title);
Assert.IsFalse(chartLineDataSeries.IsVisible);
Assert.AreEqual(3, chartLineDataSeries.StrokeThickness);
Assert.AreEqual(OxyColor.FromArgb(color.A, color.R, color.G, color.B), chartLineDataSeries.Color);
Assert.AreEqual(LineStyle.DashDot, chartLineDataSeries.LineStyle);
Assert.AreEqual(1, chartLineDataSeries.ItemsSource.Cast().Count());
}
private static void AssertChartLineDataSeriesDefaultProperties(ChartLineDataSeries chartLineDataSeries)
{
Assert.AreEqual("Test name", chartLineDataSeries.Title);
Assert.IsTrue(chartLineDataSeries.IsVisible);
Assert.AreEqual(3, chartLineDataSeries.StrokeThickness);
Assert.AreEqual(OxyColor.FromArgb(color.A, color.R, color.G, color.B), chartLineDataSeries.Color);
Assert.AreEqual(LineStyle.DashDot, chartLineDataSeries.LineStyle);
Assert.AreEqual(0, chartLineDataSeries.ItemsSource.Cast().Count());
}
}
}