Index: Core/Components/src/Core.Components.Charting.Forms/IChartControl.cs =================================================================== diff -u -r0fdde49cfbdc5a411fac387d6a99484f05112700 -rf816a8ef737d38b4f044855b73abf3ea32b79422 --- Core/Components/src/Core.Components.Charting.Forms/IChartControl.cs (.../IChartControl.cs) (revision 0fdde49cfbdc5a411fac387d6a99484f05112700) +++ Core/Components/src/Core.Components.Charting.Forms/IChartControl.cs (.../IChartControl.cs) (revision f816a8ef737d38b4f044855b73abf3ea32b79422) @@ -41,7 +41,7 @@ /// /// Gets or sets the data to show in the . /// - ChartData Data { get; set; } + ChartDataCollection Data { get; } /// /// Gets or sets the title of the chart. Index: Core/Components/src/Core.Components.Charting/Data/ChartData.cs =================================================================== diff -u -r1dd7affebae1187cb96778e85d021f7dc5ac9e50 -rf816a8ef737d38b4f044855b73abf3ea32b79422 --- Core/Components/src/Core.Components.Charting/Data/ChartData.cs (.../ChartData.cs) (revision 1dd7affebae1187cb96778e85d021f7dc5ac9e50) +++ Core/Components/src/Core.Components.Charting/Data/ChartData.cs (.../ChartData.cs) (revision f816a8ef737d38b4f044855b73abf3ea32b79422) @@ -55,7 +55,7 @@ { if (string.IsNullOrWhiteSpace(value)) { - throw new ArgumentException("A name must be set to map data"); + throw new ArgumentException("A name must be set to chart data"); } name = value; } Index: Core/Components/src/Core.Components.Charting/Data/ChartDataCollection.cs =================================================================== diff -u -r1dd7affebae1187cb96778e85d021f7dc5ac9e50 -rf816a8ef737d38b4f044855b73abf3ea32b79422 --- Core/Components/src/Core.Components.Charting/Data/ChartDataCollection.cs (.../ChartDataCollection.cs) (revision 1dd7affebae1187cb96778e85d021f7dc5ac9e50) +++ Core/Components/src/Core.Components.Charting/Data/ChartDataCollection.cs (.../ChartDataCollection.cs) (revision f816a8ef737d38b4f044855b73abf3ea32b79422) @@ -50,5 +50,56 @@ /// Gets the list of of the . /// public IList List { get; private set; } + + /// + /// Adds an element to the list of . + /// + /// The element to add to the list. + /// Thrown when is null. + public void Add(ChartData elementToAdd) + { + if (elementToAdd == null) + { + throw new ArgumentNullException("elementToAdd", "An element cannot be null when adding it to the collection."); + } + List.Add(elementToAdd); + } + + /// + /// Replaces an element in the list of . + /// + /// The element to replace. + /// The element to replace with. + /// Thrown when or + /// is null. + public void Replace(ChartData oldElement, ChartData newElement) + { + if (newElement == null) + { + throw new ArgumentNullException("newElement", "An element cannot be replaced with null. Use Remove instead."); + } + + if (oldElement == null) + { + throw new ArgumentNullException("oldElement", "A null element cannot be replaced. User Add instead."); + } + + for (var i = 0; i < List.Count; i++) + { + if (List[i].Equals(oldElement)) + { + List[i] = newElement; + } + } + } + + /// + /// Removes the given element from the list of . + /// + /// The element to remove. + public void Remove(ChartData elementToRemove) + { + List.Remove(elementToRemove); + } } } \ No newline at end of file Index: Core/Components/src/Core.Components.OxyPlot.Forms/ChartControl.cs =================================================================== diff -u -r0fdde49cfbdc5a411fac387d6a99484f05112700 -rf816a8ef737d38b4f044855b73abf3ea32b79422 --- Core/Components/src/Core.Components.OxyPlot.Forms/ChartControl.cs (.../ChartControl.cs) (revision 0fdde49cfbdc5a411fac387d6a99484f05112700) +++ Core/Components/src/Core.Components.OxyPlot.Forms/ChartControl.cs (.../ChartControl.cs) (revision f816a8ef737d38b4f044855b73abf3ea32b79422) @@ -19,6 +19,7 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; @@ -37,8 +38,6 @@ { private readonly ChartSeriesFactory seriesFactory = new ChartSeriesFactory(); - private ChartData data; - private LinearPlotView view; private DynamicPlotController controller; @@ -49,28 +48,11 @@ { InitializePlotView(); MinimumSize = new Size(50, 75); - } - /// - /// Attaches the to the currently set , if there is any. - /// - private void AttachToData() - { - if (data != null) - { - data.Attach(this); - } - } + Data = new ChartDataCollection(new List(), "Root"); + Data.Attach(this); - /// - /// Detaches the to the currently set , if there is any. - /// - private void DetachFromData() - { - if (data != null) - { - data.Detach(this); - } + DrawSeries(); } /// @@ -90,9 +72,9 @@ private void DrawSeries() { view.Model.Series.Clear(); - if (data != null) + if (Data != null) { - foreach (var series in seriesFactory.Create(data)) + foreach (var series in seriesFactory.Create(Data)) { view.Model.Series.Add(series); } @@ -119,20 +101,7 @@ } [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public ChartData Data - { - get - { - return data; - } - set - { - DetachFromData(); - data = value; - AttachToData(); - DrawSeries(); - } - } + public ChartDataCollection Data { get; set; } public string ChartTitle { Index: Core/Components/test/Core.Components.Charting.Test/Data/ChartAreaDataTest.cs =================================================================== diff -u -r0b76c9841bdeef5c3b9fa1ba0d6cb98a63b90c21 -rf816a8ef737d38b4f044855b73abf3ea32b79422 --- Core/Components/test/Core.Components.Charting.Test/Data/ChartAreaDataTest.cs (.../ChartAreaDataTest.cs) (revision 0b76c9841bdeef5c3b9fa1ba0d6cb98a63b90c21) +++ Core/Components/test/Core.Components.Charting.Test/Data/ChartAreaDataTest.cs (.../ChartAreaDataTest.cs) (revision f816a8ef737d38b4f044855b73abf3ea32b79422) @@ -53,7 +53,7 @@ TestDelegate test = () => new ChartAreaData(points, invalidName); // Assert - TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, "A name must be set to map data"); + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, "A name must be set to chart data"); } [Test] Index: Core/Components/test/Core.Components.Charting.Test/Data/ChartDataCollectionTest.cs =================================================================== diff -u -r0b76c9841bdeef5c3b9fa1ba0d6cb98a63b90c21 -rf816a8ef737d38b4f044855b73abf3ea32b79422 --- Core/Components/test/Core.Components.Charting.Test/Data/ChartDataCollectionTest.cs (.../ChartDataCollectionTest.cs) (revision 0b76c9841bdeef5c3b9fa1ba0d6cb98a63b90c21) +++ Core/Components/test/Core.Components.Charting.Test/Data/ChartDataCollectionTest.cs (.../ChartDataCollectionTest.cs) (revision f816a8ef737d38b4f044855b73abf3ea32b79422) @@ -53,7 +53,7 @@ TestDelegate test = () => new ChartDataCollection(list, invalidName); // Assert - TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, "A name must be set to map data"); + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, "A name must be set to chart data"); } [Test] @@ -69,5 +69,183 @@ Assert.IsInstanceOf(collection); Assert.AreSame(list, collection.List); } + + [Test] + public void Constructor_WithName_SetsName() + { + // Setup + var list = Enumerable.Empty().ToList(); + var name = "Some name"; + + // Call + var data = new ChartDataCollection(list, name); + + // Assert + Assert.AreEqual(name, data.Name); + } + + [Test] + public void Add_NotNull_AddsElementToCollection() + { + // Setup + var list = Enumerable.Empty().ToList(); + var data = new ChartDataCollection(list, "test"); + var objectToAdd = new ChartLineData(Enumerable.Empty>(), "test"); + + // Call + data.Add(objectToAdd); + + // Assert + Assert.AreEqual(1, data.List.Count); + Assert.AreSame(objectToAdd, data.List.First()); + } + + [Test] + public void Add_Null_ThrowsArgumentNullException() + { + // Setup + var list = Enumerable.Empty().ToList(); + var data = new ChartDataCollection(list, "test"); + + // Call + TestDelegate call = () => data.Add(null); + + // Assert + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, "An element cannot be null when adding it to the collection."); + } + + [Test] + public void Replace_NotNull_ReplacesElementInCollection() + { + // Setup + var list = Enumerable.Empty().ToList(); + var data = new ChartDataCollection(list, "test"); + var oldDataElement = new ChartLineData(Enumerable.Empty>(), "test"); + var newDataElement = new ChartPointData(Enumerable.Empty>(), "another test"); + + data.Add(oldDataElement); + + // Precondition + Assert.AreEqual(1, data.List.Count); + Assert.IsInstanceOf(data.List.First()); + + // Call + data.Replace(oldDataElement, newDataElement); + + // Assert + Assert.AreEqual(1, data.List.Count); + Assert.IsInstanceOf(data.List.First()); + } + + [Test] + public void Replace_NewElementNull_ThrowsArgumentNullException() + { + // Setup + var list = Enumerable.Empty().ToList(); + var data = new ChartDataCollection(list, "test"); + var oldDataElement = new ChartLineData(Enumerable.Empty>(), "test"); + + data.Add(oldDataElement); + + // Precondition + Assert.AreEqual(1, data.List.Count); + Assert.IsInstanceOf(data.List.First()); + + // Call + TestDelegate test = () => data.Replace(oldDataElement, null); + + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, "An element cannot be replaced with null. Use Remove instead."); + Assert.AreEqual(1, data.List.Count); + Assert.IsInstanceOf(data.List.First()); + } + + [Test] + public void Replace_OldElementNull_ThrowsArgumentNullException() + { + // Setup + var list = Enumerable.Empty().ToList(); + var data = new ChartDataCollection(list, "test"); + var dataElement = new ChartLineData(Enumerable.Empty>(), "test"); + var newDataElement = new ChartPointData(Enumerable.Empty>(), "another test"); + + data.Add(dataElement); + + // Precondition + Assert.AreEqual(1, data.List.Count); + Assert.IsInstanceOf(data.List.First()); + + // Call + TestDelegate test = () => data.Replace(null, newDataElement); + + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, "A null element cannot be replaced. User Add instead."); + Assert.AreEqual(1, data.List.Count); + Assert.IsInstanceOf(data.List.First()); + } + + [Test] + public void Remove_ExistingElement_RemovesElement() + { + // Setup + var list = Enumerable.Empty().ToList(); + var data = new ChartDataCollection(list, "test"); + var dataElement = new ChartLineData(Enumerable.Empty>(), "test"); + + data.Add(dataElement); + + // Precondition + Assert.AreEqual(1, data.List.Count); + Assert.IsInstanceOf(data.List.First()); + + // Call + data.Remove(dataElement); + + // Assert + CollectionAssert.IsEmpty(data.List); + } + + [Test] + public void Remove_Null_DoesNotRemove() + { + // Setup + var list = Enumerable.Empty().ToList(); + var data = new ChartDataCollection(list, "test"); + var dataElement = new ChartLineData(Enumerable.Empty>(), "test"); + + data.Add(dataElement); + + // Precondition + Assert.AreEqual(1, data.List.Count); + Assert.IsInstanceOf(data.List.First()); + var listBeforeRemove = data.List; + + // Call + data.Remove(null); + + // Assert + CollectionAssert.AreEqual(listBeforeRemove, data.List); + } + + [Test] + public void Remove_NotExistingElement_DoesNotRemove() + { + // Setup + var list = Enumerable.Empty().ToList(); + var data = new ChartDataCollection(list, "test"); + var dataElement = new ChartLineData(Enumerable.Empty>(), "test"); + var otherDataElement = new ChartPointData(Enumerable.Empty>(), "another test"); + + data.Add(dataElement); + + // Precondition + Assert.AreEqual(1, data.List.Count); + Assert.IsInstanceOf(data.List.First()); + var listBeforeRemove = data.List; + + // Call + data.Remove(otherDataElement); + + // Assert + CollectionAssert.AreEqual(listBeforeRemove, data.List); + } } } \ No newline at end of file Index: Core/Components/test/Core.Components.Charting.Test/Data/ChartDataTest.cs =================================================================== diff -u -r0b76c9841bdeef5c3b9fa1ba0d6cb98a63b90c21 -rf816a8ef737d38b4f044855b73abf3ea32b79422 --- Core/Components/test/Core.Components.Charting.Test/Data/ChartDataTest.cs (.../ChartDataTest.cs) (revision 0b76c9841bdeef5c3b9fa1ba0d6cb98a63b90c21) +++ Core/Components/test/Core.Components.Charting.Test/Data/ChartDataTest.cs (.../ChartDataTest.cs) (revision f816a8ef737d38b4f044855b73abf3ea32b79422) @@ -40,7 +40,7 @@ TestDelegate call = () => new TestChartData(invalidName); // Assert - TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, "A name must be set to map data"); + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, "A name must be set to chart data"); } [Test] Index: Core/Components/test/Core.Components.Charting.Test/Data/ChartLineDataTest.cs =================================================================== diff -u -r0b76c9841bdeef5c3b9fa1ba0d6cb98a63b90c21 -rf816a8ef737d38b4f044855b73abf3ea32b79422 --- Core/Components/test/Core.Components.Charting.Test/Data/ChartLineDataTest.cs (.../ChartLineDataTest.cs) (revision 0b76c9841bdeef5c3b9fa1ba0d6cb98a63b90c21) +++ Core/Components/test/Core.Components.Charting.Test/Data/ChartLineDataTest.cs (.../ChartLineDataTest.cs) (revision f816a8ef737d38b4f044855b73abf3ea32b79422) @@ -54,7 +54,7 @@ TestDelegate test = () => new ChartLineData(points, invalidName); // Assert - TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, "A name must be set to map data"); + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, "A name must be set to chart data"); } [Test] Index: Core/Components/test/Core.Components.Charting.Test/Data/ChartPointDataTest.cs =================================================================== diff -u -r0b76c9841bdeef5c3b9fa1ba0d6cb98a63b90c21 -rf816a8ef737d38b4f044855b73abf3ea32b79422 --- Core/Components/test/Core.Components.Charting.Test/Data/ChartPointDataTest.cs (.../ChartPointDataTest.cs) (revision 0b76c9841bdeef5c3b9fa1ba0d6cb98a63b90c21) +++ Core/Components/test/Core.Components.Charting.Test/Data/ChartPointDataTest.cs (.../ChartPointDataTest.cs) (revision f816a8ef737d38b4f044855b73abf3ea32b79422) @@ -53,7 +53,7 @@ TestDelegate test = () => new ChartPointData(points, invalidName); // Assert - TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, "A name must be set to map data"); + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, "A name must be set to chart data"); } [Test] Index: Core/Components/test/Core.Components.Charting.Test/Data/PointBasedChartDataTest.cs =================================================================== diff -u -r0b76c9841bdeef5c3b9fa1ba0d6cb98a63b90c21 -rf816a8ef737d38b4f044855b73abf3ea32b79422 --- Core/Components/test/Core.Components.Charting.Test/Data/PointBasedChartDataTest.cs (.../PointBasedChartDataTest.cs) (revision 0b76c9841bdeef5c3b9fa1ba0d6cb98a63b90c21) +++ Core/Components/test/Core.Components.Charting.Test/Data/PointBasedChartDataTest.cs (.../PointBasedChartDataTest.cs) (revision f816a8ef737d38b4f044855b73abf3ea32b79422) @@ -58,7 +58,7 @@ TestDelegate test = () => new TestPointBasedChartData(points, invalidName); // Assert - TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, "A name must be set to map data"); + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, "A name must be set to chart data"); } [Test] Index: Core/Components/test/Core.Components.OxyPlot.Forms.Test/ChartControlTest.cs =================================================================== diff -u -r0fdde49cfbdc5a411fac387d6a99484f05112700 -rf816a8ef737d38b4f044855b73abf3ea32b79422 --- Core/Components/test/Core.Components.OxyPlot.Forms.Test/ChartControlTest.cs (.../ChartControlTest.cs) (revision 0fdde49cfbdc5a411fac387d6a99484f05112700) +++ Core/Components/test/Core.Components.OxyPlot.Forms.Test/ChartControlTest.cs (.../ChartControlTest.cs) (revision f816a8ef737d38b4f044855b73abf3ea32b79422) @@ -20,13 +20,10 @@ // All rights reserved. using System; -using System.Collections.Generic; using System.Linq; using System.Windows.Forms; -using Core.Common.Base; using Core.Common.Utils.Reflection; using Core.Components.Charting.Data; -using Core.Components.Charting.TestUtil; using NUnit.Framework; using OxyPlot.WindowsForms; @@ -39,125 +36,51 @@ public void DefaultConstructor_PropertiesSet() { // Call - var chart = new ChartControl(); - - // Assert - Assert.IsInstanceOf(chart); - Assert.AreEqual(75, chart.MinimumSize.Height); - Assert.AreEqual(50, chart.MinimumSize.Width); - Assert.IsNull(chart.Data); - Assert.IsTrue(chart.IsPanningEnabled); - Assert.IsFalse(chart.IsRectangleZoomingEnabled); - } - - [Test] - public void Data_NotKnownChartData_ThrowsNotSupportedException() - { - // Setup - var chart = new ChartControl(); - var testData = new TestChartData(); - - // Call - TestDelegate test = () => chart.Data = testData; - - // Assert - Assert.Throws(test); - } - - [Test] - public void Data_Null_ReturnsNull() - { - // Setup - var chart = new ChartControl(); - - // Call - chart.Data = null; - - // Assert - Assert.IsNull(chart.Data); - } - - [Test] - public void Data_KnownChartData_ChartControlAttachedSeriesAdded() - { - // Setup - var chart = new ChartControl(); - var testData = new ChartLineData(Enumerable.Empty>(), "test data"); - var observers = TypeUtils.GetField>(testData, "observers"); - var view = TypeUtils.GetField(chart, "view"); - - // Call - chart.Data = testData; - - // Assert - CollectionAssert.AreEqual(new[] + using (var chart = new ChartControl()) { - chart - }, observers); - Assert.AreEqual(1, view.Model.Series.Count); + // Assert + Assert.IsInstanceOf(chart); + Assert.AreEqual(75, chart.MinimumSize.Height); + Assert.AreEqual(50, chart.MinimumSize.Width); + Assert.IsNotNull(chart.Data); + CollectionAssert.IsEmpty(chart.Data.List); + Assert.IsTrue(chart.IsPanningEnabled); + Assert.IsFalse(chart.IsRectangleZoomingEnabled); + } } [Test] - public void Data_NewDataSet_ChartControlDetachedFromOldAttachedToNewSeriesUpdated() + public void Data_NotNull_ReturnsData() { // Setup - var chart = new ChartControl(); - var testDataOld = new ChartLineData(Enumerable.Empty>(), "test data"); - var testDataNew = new ChartLineData(Enumerable.Empty>(), "test data"); - var observersOld = TypeUtils.GetField>(testDataOld, "observers"); - var observersNew = TypeUtils.GetField>(testDataNew, "observers"); - var view = TypeUtils.GetField(chart, "view"); - - // Call - chart.Data = testDataOld; - chart.Data = testDataNew; - - // Assert - CollectionAssert.IsEmpty(observersOld); - CollectionAssert.AreEqual(new[] + using (var chart = new ChartControl()) { - chart - }, observersNew); - Assert.AreEqual(1, view.Model.Series.Count); - } + var testData = new ChartPointData(Enumerable.Empty>(), "test data"); - [Test] - public void Data_DataSetNewValueIsNull_ChartControlDetachedSeriesCleared() - { - // Setup - var chart = new ChartControl(); - var testData = new ChartLineData(Enumerable.Empty>(), "test data"); - var observers = TypeUtils.GetField>(testData, "observers"); - var view = TypeUtils.GetField(chart, "view"); + // Call + chart.Data.Add(testData); - chart.Data = testData; - - // Precondition - Assert.AreEqual(1, view.Model.Series.Count); - - // Call - chart.Data = null; - - // Assert - CollectionAssert.IsEmpty(observers); - CollectionAssert.IsEmpty(view.Model.Series); + // Assert + Assert.AreSame(testData, chart.Data.List.First()); + } } [Test] public void TogglePanning_Always_PanningEnabled() { // Setup - var chart = new ChartControl(); + using (var chart = new ChartControl()) + { + // Precondition + Assert.IsTrue(chart.IsPanningEnabled); - // Precondition - Assert.IsTrue(chart.IsPanningEnabled); + // Call + chart.TogglePanning(); - // Call - chart.TogglePanning(); - - // Assert - Assert.IsTrue(chart.IsPanningEnabled); - Assert.IsFalse(chart.IsRectangleZoomingEnabled); + // Assert + Assert.IsTrue(chart.IsPanningEnabled); + Assert.IsFalse(chart.IsRectangleZoomingEnabled); + } } [Test] @@ -166,74 +89,81 @@ public void ToggleRectangleZooming_Always_ChangesState(bool isRectangleZooming) { // Setup - var chart = new ChartControl(); - if (isRectangleZooming) + using (var chart = new ChartControl()) { - chart.ToggleRectangleZooming(); - } + if (isRectangleZooming) + { + chart.ToggleRectangleZooming(); + } - // Precondition - Assert.AreEqual(isRectangleZooming, chart.IsRectangleZoomingEnabled); - Assert.AreEqual(!isRectangleZooming, chart.IsPanningEnabled); + // Precondition + Assert.AreEqual(isRectangleZooming, chart.IsRectangleZoomingEnabled); + Assert.AreEqual(!isRectangleZooming, chart.IsPanningEnabled); - // Call - chart.ToggleRectangleZooming(); + // Call + chart.ToggleRectangleZooming(); - // Assert - Assert.IsTrue(chart.IsRectangleZoomingEnabled); + // Assert + Assert.IsTrue(chart.IsRectangleZoomingEnabled); + } } [Test] public void ZoomToAll_ChartInForm_ViewInvalidatedSeriesSame() { // Setup - var form = new Form(); - var chart = new ChartControl(); - var testData = new ChartLineData(Enumerable.Empty>(), "test data"); - var view = TypeUtils.GetField(chart, "view"); - var invalidated = 0; + using (var form = new Form()) + { + var chart = new ChartControl(); + var testData = new ChartLineData(Enumerable.Empty>(), "test data"); + var view = TypeUtils.GetField(chart, "view"); + var invalidated = 0; - chart.Data = testData; - var series = view.Model.Series.ToList(); + chart.Data.Add(testData); + var series = view.Model.Series.ToList(); - form.Controls.Add(chart); - view.Invalidated += (sender, args) => invalidated++; + form.Controls.Add(chart); + view.Invalidated += (sender, args) => invalidated++; - form.Show(); + form.Show(); - // Call - chart.ZoomToAll(); + // Call + chart.ZoomToAll(); - // Assert - Assert.AreEqual(1, invalidated); - CollectionAssert.AreEqual(series, view.Model.Series); + // Assert + Assert.AreEqual(1, invalidated); + CollectionAssert.AreEqual(series, view.Model.Series); + } } [Test] public void UpdateObserver_ChartInForm_ViewInvalidatedSeriesRenewed() { // Setup - var form = new Form(); - var chart = new ChartControl(); - var testData = new ChartLineData(Enumerable.Empty>(), "test data"); - var view = TypeUtils.GetField(chart, "view"); - var invalidated = 0; + using (var form = new Form()) + { + var chart = new ChartControl(); + var testData = new ChartLineData(Enumerable.Empty>(), "test data"); + var view = TypeUtils.GetField(chart, "view"); + var invalidated = 0; - chart.Data = testData; - var series = view.Model.Series.ToList(); + chart.Data.Add(testData); + chart.UpdateObserver(); + var series = view.Model.Series.ToList(); - form.Controls.Add(chart); - view.Invalidated += (sender, args) => invalidated++; + form.Controls.Add(chart); + view.Invalidated += (sender, args) => invalidated++; - form.Show(); + form.Show(); - // Call - chart.UpdateObserver(); + // Call + chart.UpdateObserver(); - // Assert - Assert.AreEqual(1, invalidated); - Assert.AreEqual(1, view.Model.Series.Count); - Assert.AreNotSame(series[0], view.Model.Series[0]); + // Assert + Assert.AreEqual(1, invalidated); + Assert.AreEqual(1, view.Model.Series.Count); + Assert.AreNotSame(series[0], view.Model.Series[0]); + } } [Test] @@ -243,22 +173,24 @@ public void BottomAxisTitle_Always_SetsNewTitleToBottomAxis(string newTitle) { // Setup - var form = new Form(); - var chart = new ChartControl(); - var view = TypeUtils.GetField(chart, "view"); - form.Controls.Add(chart); + using (var form = new Form()) + { + var chart = new ChartControl(); + var view = TypeUtils.GetField(chart, "view"); + form.Controls.Add(chart); - form.Show(); + form.Show(); - var invalidated = 0; - view.Invalidated += (sender, args) => invalidated++; + var invalidated = 0; + view.Invalidated += (sender, args) => invalidated++; - // Call - chart.BottomAxisTitle = newTitle; + // Call + chart.BottomAxisTitle = newTitle; - // Assert - Assert.AreEqual(chart.BottomAxisTitle, newTitle); - Assert.AreEqual(1, invalidated); + // Assert + Assert.AreEqual(chart.BottomAxisTitle, newTitle); + Assert.AreEqual(1, invalidated); + } } [Test] @@ -268,22 +200,24 @@ public void SetLeftAxisTitle_Always_SetsNewTitleToLeftAxis(string newTitle) { // Setup - var form = new Form(); - var chart = new ChartControl(); - var view = TypeUtils.GetField(chart, "view"); - form.Controls.Add(chart); + using (var form = new Form()) + { + var chart = new ChartControl(); + var view = TypeUtils.GetField(chart, "view"); + form.Controls.Add(chart); - form.Show(); + form.Show(); - var invalidated = 0; - view.Invalidated += (sender, args) => invalidated++; + var invalidated = 0; + view.Invalidated += (sender, args) => invalidated++; - // Call - chart.LeftAxisTitle = newTitle; + // Call + chart.LeftAxisTitle = newTitle; - // Assert - Assert.AreEqual(chart.LeftAxisTitle, newTitle); - Assert.AreEqual(1, invalidated); + // Assert + Assert.AreEqual(chart.LeftAxisTitle, newTitle); + Assert.AreEqual(1, invalidated); + } } [Test] @@ -293,22 +227,24 @@ public void SetModelTitle_Always_SetsNewTitleToModelAndViewInvalidated(string newTitle) { // Setup - var form = new Form(); - var chart = new ChartControl(); - var view = TypeUtils.GetField(chart, "view"); - form.Controls.Add(chart); + using (var form = new Form()) + { + var chart = new ChartControl(); + var view = TypeUtils.GetField(chart, "view"); + form.Controls.Add(chart); - form.Show(); + form.Show(); - var invalidated = 0; - view.Invalidated += (sender, args) => invalidated++; + var invalidated = 0; + view.Invalidated += (sender, args) => invalidated++; - // Call - chart.ChartTitle = newTitle; + // Call + chart.ChartTitle = newTitle; - // Assert - Assert.AreEqual(chart.ChartTitle, newTitle); - Assert.AreEqual(1, invalidated); + // Assert + Assert.AreEqual(chart.ChartTitle, newTitle); + Assert.AreEqual(1, invalidated); + } } } } \ No newline at end of file Index: Core/Plugins/src/Core.Plugins.OxyPlot/Forms/ChartDataView.cs =================================================================== diff -u -r30b12b82918d500fe834eafd9f6cd9b2c5dbe60f -rf816a8ef737d38b4f044855b73abf3ea32b79422 --- Core/Plugins/src/Core.Plugins.OxyPlot/Forms/ChartDataView.cs (.../ChartDataView.cs) (revision 30b12b82918d500fe834eafd9f6cd9b2c5dbe60f) +++ Core/Plugins/src/Core.Plugins.OxyPlot/Forms/ChartDataView.cs (.../ChartDataView.cs) (revision f816a8ef737d38b4f044855b73abf3ea32b79422) @@ -30,7 +30,7 @@ /// public partial class ChartDataView : UserControl, IChartView { - private ChartData data; + private ChartDataCollection data; /// /// Creates a new instance of . @@ -48,11 +48,16 @@ } set { - data = (ChartData) value; + data = (ChartDataCollection) value; if (data != null) { - Chart.Data = data; + foreach (var chartData in data.List) + { + Chart.Data.Add(chartData); + } + + Chart.Data.NotifyObservers(); } } } Index: Core/Plugins/test/Core.Plugins.OxyPlot.Test/Forms/ChartDataViewTest.cs =================================================================== diff -u -r8aa11a9aa48733a5b5b72c58c71674472825b26c -rf816a8ef737d38b4f044855b73abf3ea32b79422 --- Core/Plugins/test/Core.Plugins.OxyPlot.Test/Forms/ChartDataViewTest.cs (.../ChartDataViewTest.cs) (revision 8aa11a9aa48733a5b5b72c58c71674472825b26c) +++ Core/Plugins/test/Core.Plugins.OxyPlot.Test/Forms/ChartDataViewTest.cs (.../ChartDataViewTest.cs) (revision f816a8ef737d38b4f044855b73abf3ea32b79422) @@ -15,107 +15,71 @@ public void DefaultConstructor_Always_AddsChartControl() { // Call - var chartView = new ChartDataView(); + using (var chartView = new ChartDataView()) + { + // Assert + Assert.AreEqual(1, chartView.Controls.Count); + object chartObject = chartView.Controls[0]; + Assert.IsInstanceOf(chartObject); - // Assert - Assert.AreEqual(1, chartView.Controls.Count); - object chartObject = chartView.Controls[0]; - Assert.IsInstanceOf(chartObject); - - var chart = (ChartControl)chartObject; - Assert.AreEqual(DockStyle.Fill, chart.Dock); - Assert.NotNull(chartView.Chart); + var chart = (ChartControl) chartObject; + Assert.AreEqual(DockStyle.Fill, chart.Dock); + Assert.NotNull(chartView.Chart); + } } [Test] - public void Data_SetToNull_ChartControlNoSeries() + public void Data_SetToNull_ChartControlNotUpdated() { // Setup - var chartView = new ChartDataView(); - var chart = (ChartControl)chartView.Controls[0]; + using (var chartView = new ChartDataView()) + { + ChartControl chart = (ChartControl) chartView.Controls[0]; + ChartDataCollection chartData = chart.Data; - // Call - chartView.Data = null; + // Call + TestDelegate testDelegate = () => chartView.Data = null; - // Assert - Assert.IsNull(chart.Data); + // Assert + Assert.DoesNotThrow(testDelegate); + Assert.AreSame(chartData, chart.Data); + } } [Test] public void Data_SetToObject_InvalidCastException() { // Setup - var chartView = new ChartDataView(); + using (var chartView = new ChartDataView()) + { + // Call + TestDelegate test = () => chartView.Data = new object(); - // Call - TestDelegate test = () => chartView.Data = new object(); - - // Assert - Assert.Throws(test); + // Assert + Assert.Throws(test); + } } [Test] - public void Data_SetToLineData_ChartDataSet() - { - // Setup - var chartView = new ChartDataView(); - var chart = (ChartControl)chartView.Controls[0]; - var lineData = new ChartLineData(Enumerable.Empty>(), "test data"); - - // Call - chartView.Data = lineData; - - // Assert - Assert.AreSame(lineData, chart.Data); - Assert.AreSame(lineData, chartView.Data); - } - - [Test] - public void Data_SetToPointData_ChartDataSet() - { - // Setup - var chartView = new ChartDataView(); - var chart = (ChartControl)chartView.Controls[0]; - var pointData = new ChartPointData(Enumerable.Empty>(), "test data"); - - // Call - chartView.Data = pointData; - - // Assert - Assert.AreSame(pointData, chart.Data); - Assert.AreSame(pointData, chartView.Data); - } - - [Test] - public void Data_SetToAreaData_ChartDataSet() - { - // Setup - var chartView = new ChartDataView(); - var chart = (ChartControl)chartView.Controls[0]; - var areaData = new ChartAreaData(Enumerable.Empty>(), "test data"); - - // Call - chartView.Data = areaData; - - // Assert - Assert.AreSame(areaData, chart.Data); - Assert.AreSame(areaData, chartView.Data); - } - - [Test] public void Data_SetToCollectionChartData_ChartDataSet() { // Setup - var chartView = new ChartDataView(); - var chart = (ChartControl)chartView.Controls[0]; - var chartDataCollection = new ChartDataCollection(new ChartData[0], "test data"); + using (var chartView = new ChartDataView()) + { + var chart = (ChartControl) chartView.Controls[0]; + var pointData = new ChartPointData(Enumerable.Empty>(), "test"); + var chartDataCollection = new ChartDataCollection(new ChartData[] + { + pointData + }, "test data"); - // Call - chartView.Data = chartDataCollection; + // Call + chartView.Data = chartDataCollection; - // Assert - Assert.AreSame(chartDataCollection, chart.Data); - Assert.AreSame(chartDataCollection, chartView.Data); + // Assert + Assert.AreSame(pointData, chart.Data.List.First()); + Assert.AreSame(chartDataCollection, chartView.Data); + } } } } \ No newline at end of file Index: Core/Plugins/test/Core.Plugins.OxyPlot.Test/OxyPlotGuiPluginTest.cs =================================================================== diff -u -r1dd7affebae1187cb96778e85d021f7dc5ac9e50 -rf816a8ef737d38b4f044855b73abf3ea32b79422 --- Core/Plugins/test/Core.Plugins.OxyPlot.Test/OxyPlotGuiPluginTest.cs (.../OxyPlotGuiPluginTest.cs) (revision 1dd7affebae1187cb96778e85d021f7dc5ac9e50) +++ Core/Plugins/test/Core.Plugins.OxyPlot.Test/OxyPlotGuiPluginTest.cs (.../OxyPlotGuiPluginTest.cs) (revision f816a8ef737d38b4f044855b73abf3ea32b79422) @@ -63,8 +63,8 @@ if (useChartView) { var chartView = mocks.Stub(); - var chart = mocks.Stub(); - chart.Data = new TestChartData(); + var chart = new ChartControl(); + chart.Data.Add(new TestChartData()); chartView.Stub(v => v.Chart).Return(chart); view = chartView; } Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Ringtoets.Piping.Forms.csproj =================================================================== diff -u -r985b7690055ffc0570e0608c3de6c2f645cafc3b -rf816a8ef737d38b4f044855b73abf3ea32b79422 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Ringtoets.Piping.Forms.csproj (.../Ringtoets.Piping.Forms.csproj) (revision 985b7690055ffc0570e0608c3de6c2f645cafc3b) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Ringtoets.Piping.Forms.csproj (.../Ringtoets.Piping.Forms.csproj) (revision f816a8ef737d38b4f044855b73abf3ea32b79422) @@ -153,6 +153,11 @@ Core.Components.Charting.Forms False + + {516EBC95-B8F2-428C-B7F6-733F01BF8FDD} + Core.Components.Charting + False + {5A91174A-FB95-4C9D-9CA5-81C0B8D4361A} Core.Components.DotSpatial.Forms Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Views/PipingInputViewTest.cs =================================================================== diff -u -r0fdde49cfbdc5a411fac387d6a99484f05112700 -rf816a8ef737d38b4f044855b73abf3ea32b79422 --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Views/PipingInputViewTest.cs (.../PipingInputViewTest.cs) (revision 0fdde49cfbdc5a411fac387d6a99484f05112700) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Views/PipingInputViewTest.cs (.../PipingInputViewTest.cs) (revision f816a8ef737d38b4f044855b73abf3ea32b79422) @@ -56,7 +56,7 @@ ChartControl chartControl = view.Controls[0] as ChartControl; Assert.IsNotNull(chartControl); Assert.AreEqual(DockStyle.Fill, chartControl.Dock); - Assert.IsNull(chartControl.Data); + Assert.IsNotNull(chartControl.Data); Assert.AreEqual(Resources.PipingInputView_Distance_DisplayName, chartControl.BottomAxisTitle); Assert.AreEqual(Resources.PipingInputView_Height_DisplayName, chartControl.LeftAxisTitle); }