Index: Core/Components/src/Core.Components.Charting/Data/ChartDataCollection.cs =================================================================== diff -u -r937f4ce305957701b583772d392ac9957338199f -r912654844174f5787a10b53cae061302e14fe4f1 --- Core/Components/src/Core.Components.Charting/Data/ChartDataCollection.cs (.../ChartDataCollection.cs) (revision 937f4ce305957701b583772d392ac9957338199f) +++ Core/Components/src/Core.Components.Charting/Data/ChartDataCollection.cs (.../ChartDataCollection.cs) (revision 912654844174f5787a10b53cae061302e14fe4f1) @@ -77,6 +77,30 @@ Replace(oldElement, newElement, List); } + /// + /// Inserts the given element in the list of on the given position. + /// + /// The position to insert the element on. + /// The element to insert. + /// Thrown when is null. + public void Insert(int position, ChartData elementToInsert) + { + if (elementToInsert == null) + { + throw new ArgumentNullException("elementToInsert", "An element cannot be null when adding it to the collection."); + } + List.Insert(position, elementToInsert); + } + + /// + /// Removes the given element from the list of . + /// + /// The element to remove. + public void Remove(ChartData elementToRemove) + { + List.Remove(elementToRemove); + } + private void Replace(ChartData oldElement, ChartData newElement, IList listToCheck) { if (newElement == null) @@ -88,7 +112,7 @@ { throw new ArgumentNullException("oldElement", "A null element cannot be replaced. Use Add instead."); } - + for (var i = 0; i < listToCheck.Count; i++) { if (listToCheck[i].Equals(oldElement)) @@ -108,14 +132,5 @@ } } } - - /// - /// 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/test/Core.Components.Charting.Test/Data/ChartDataCollectionTest.cs =================================================================== diff -u -r937f4ce305957701b583772d392ac9957338199f -r912654844174f5787a10b53cae061302e14fe4f1 --- Core/Components/test/Core.Components.Charting.Test/Data/ChartDataCollectionTest.cs (.../ChartDataCollectionTest.cs) (revision 937f4ce305957701b583772d392ac9957338199f) +++ Core/Components/test/Core.Components.Charting.Test/Data/ChartDataCollectionTest.cs (.../ChartDataCollectionTest.cs) (revision 912654844174f5787a10b53cae061302e14fe4f1) @@ -20,6 +20,7 @@ // All rights reserved. using System; +using System.Collections.Generic; using System.Linq; using Core.Common.Base.Geometry; using Core.Common.TestUtil; @@ -97,8 +98,9 @@ data.Add(objectToAdd); // Assert - Assert.AreEqual(1, data.List.Count); - Assert.AreSame(objectToAdd, data.List.First()); + var chartData = data.List.ToList(); + Assert.AreEqual(1, chartData.Count); + Assert.AreSame(objectToAdd, chartData.First()); } [Test] @@ -223,6 +225,41 @@ } [Test] + public void Insert_NotNull_InsertsElementToCollectionAtGivenPosition() + { + // Setup + TestChartData chartData = new TestChartData("test"); + var data = new ChartDataCollection(new List{ chartData }, "test"); + var objectToAdd = new ChartLineData(Enumerable.Empty(), "test"); + + // Precondition + Assert.AreEqual(1, data.List.Count); + Assert.AreSame(chartData, data.List[0]); + + // Call + data.Insert(0, objectToAdd); + + // Assert + Assert.AreEqual(2, data.List.Count); + Assert.AreSame(objectToAdd, data.List[0]); + Assert.AreSame(chartData, data.List[1]); + } + + [Test] + public void Insert_ElementNull_ThrowsArgumentNullException() + { + // Setup + var list = Enumerable.Empty().ToList(); + var data = new ChartDataCollection(list, "test"); + + // Call + TestDelegate call = () => data.Insert(0, null); + + // Assert + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, "An element cannot be null when adding it to the collection."); + } + + [Test] public void Remove_ExistingElement_RemovesElement() { // Setup Index: Core/Components/test/Core.Components.OxyPlot.Test/Converter/ChartDataCollectionConverterTest.cs =================================================================== diff -u -r8ca6a4ce40d75a96784c6ce8839e06e0b11052da -r912654844174f5787a10b53cae061302e14fe4f1 --- Core/Components/test/Core.Components.OxyPlot.Test/Converter/ChartDataCollectionConverterTest.cs (.../ChartDataCollectionConverterTest.cs) (revision 8ca6a4ce40d75a96784c6ce8839e06e0b11052da) +++ Core/Components/test/Core.Components.OxyPlot.Test/Converter/ChartDataCollectionConverterTest.cs (.../ChartDataCollectionConverterTest.cs) (revision 912654844174f5787a10b53cae061302e14fe4f1) @@ -94,8 +94,8 @@ var areaData = new ChartAreaData(pointsArea, "test data"); var lineData = new ChartLineData(pointsLine, "test data"); - collectionData.List.Add(areaData); - collectionData.List.Add(lineData); + collectionData.Add(areaData); + collectionData.Add(lineData); // Call var series = converter.Convert(collectionData); Index: Core/Plugins/src/Core.Plugins.OxyPlot/Core.Plugins.OxyPlot.csproj =================================================================== diff -u -ra1ec5faebf7ccf8e67fa34a2b73cd1063ab48840 -r912654844174f5787a10b53cae061302e14fe4f1 --- Core/Plugins/src/Core.Plugins.OxyPlot/Core.Plugins.OxyPlot.csproj (.../Core.Plugins.OxyPlot.csproj) (revision a1ec5faebf7ccf8e67fa34a2b73cd1063ab48840) +++ Core/Plugins/src/Core.Plugins.OxyPlot/Core.Plugins.OxyPlot.csproj (.../Core.Plugins.OxyPlot.csproj) (revision 912654844174f5787a10b53cae061302e14fe4f1) @@ -74,6 +74,7 @@ + True Index: Core/Plugins/src/Core.Plugins.OxyPlot/Legend/ChartLegendView.cs =================================================================== diff -u -r223b2a4edc4ac816051c7eeecb735c34a6246574 -r912654844174f5787a10b53cae061302e14fe4f1 --- Core/Plugins/src/Core.Plugins.OxyPlot/Legend/ChartLegendView.cs (.../ChartLegendView.cs) (revision 223b2a4edc4ac816051c7eeecb735c34a6246574) +++ Core/Plugins/src/Core.Plugins.OxyPlot/Legend/ChartLegendView.cs (.../ChartLegendView.cs) (revision 912654844174f5787a10b53cae061302e14fe4f1) @@ -19,13 +19,15 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System.Drawing; using System.Linq; using System.Windows.Forms; using Core.Common.Base; using Core.Common.Controls.TreeView; using Core.Common.Controls.Views; using Core.Components.Charting.Data; using Core.Components.OxyPlot.Forms; +using Core.Plugins.OxyPlot.PresentationObjects; using OxyPlotResources = Core.Plugins.OxyPlot.Properties.Resources; using GuiResources = Core.Common.Gui.Properties.Resources; @@ -61,108 +63,150 @@ private void RegisterTreeNodeInfos() { - treeViewControl.RegisterTreeNodeInfo(new TreeNodeInfo + treeViewControl.RegisterTreeNodeInfo(new TreeNodeInfo { - Text = pointData => pointData.Name, - Image = pointData => OxyPlotResources.PointsIcon, - CanDrag = (pointData, parentData) => true, - CanCheck = pointData => true, - IsChecked = pointData => pointData.IsVisible, - OnNodeChecked = PointBasedChartDataOnNodeChecked + Text = context => context.WrappedData.Name, + Image = GetImage, + ChildNodeObjects = ChartDataContextGetChildNodeObjects, + CanDrag = (context, o) => !(context.WrappedData is ChartMultipleAreaData), + CanCheck = context => !(context.WrappedData is ChartDataCollection), + IsChecked = context => context.WrappedData.IsVisible, + OnNodeChecked = ChartDataContextOnNodeChecked, + CanDrop = ChartDataContextCanDrop, + CanInsert = ChartDataContextCanInsert, + OnDrop = ChartDataContextOnDrop }); - treeViewControl.RegisterTreeNodeInfo(new TreeNodeInfo + treeViewControl.RegisterTreeNodeInfo(new TreeNodeInfo { - Text = lineData => lineData.Name, - Image = lineData => OxyPlotResources.LineIcon, - CanDrag = (lineData, parentData) => true, - CanCheck = lineData => true, - IsChecked = lineData => lineData.IsVisible, - OnNodeChecked = PointBasedChartDataOnNodeChecked + Text = collection => collection.Name, + Image = collection => GuiResources.folder, + ChildNodeObjects = GetCollectionChildNodeObjects, + CanDrag = (multipleAreaData, parentData) => true, + CanDrop = ChartDataCollectionCanDrop, + CanInsert = ChartDataCollectionCanInsert, + OnDrop = ChartDataCollectionOnDrop }); + } - treeViewControl.RegisterTreeNodeInfo(new TreeNodeInfo + #region ChartDataContext + + private Image GetImage(ChartDataContext context) + { + if (context.WrappedData is ChartPointData) { - Text = areaData => areaData.Name, - Image = areaData => OxyPlotResources.AreaIcon, - CanDrag = (areaData, parentData) => true, - CanCheck = areaData => true, - IsChecked = areaData => areaData.IsVisible, - OnNodeChecked = PointBasedChartDataOnNodeChecked - }); + return OxyPlotResources.PointsIcon; + } - treeViewControl.RegisterTreeNodeInfo(new TreeNodeInfo + if (context.WrappedData is ChartLineData) { - Text = multipleAreaData => multipleAreaData.Name, - Image = multipleAreaData => OxyPlotResources.AreaIcon, - CanDrag = (multipleAreaData, parentData) => true, - CanCheck = multipleAreaData => true, - IsChecked = multipleAreaData => multipleAreaData.IsVisible, - OnNodeChecked = ChartMultipleAreaDataOnNodeChecked - }); + return OxyPlotResources.LineIcon; + } - treeViewControl.RegisterTreeNodeInfo(new TreeNodeInfo + if (context.WrappedData is ChartAreaData || context.WrappedData is ChartMultipleAreaData) { - Text = collection => collection.Name, - Image = collection => GuiResources.folder, - ChildNodeObjects = collection => collection.List.Reverse().Cast().ToArray(), - CanDrag = (multipleAreaData, parentData) => true, - CanDrop = ChartControlCanDrop, - CanInsert = ChartControlCanInsert, - OnDrop = ChartControlOnDrop - }); + return OxyPlotResources.AreaIcon; + } + + return GuiResources.folder; } - # region ChartData + private object[] ChartDataContextGetChildNodeObjects(ChartDataContext chartDataContext) + { + var collection = chartDataContext.WrappedData as ChartDataCollection; + return collection != null ? GetChildNodeObjects(collection) : new object[0]; + } - private void PointBasedChartDataOnNodeChecked(PointBasedChartData pointBasedChartData, object parentData) + private void ChartDataContextOnNodeChecked(ChartDataContext chartDataContext, object parentData) { - pointBasedChartData.IsVisible = !pointBasedChartData.IsVisible; - NotifyObserversOfData(pointBasedChartData); + chartDataContext.WrappedData.IsVisible = !chartDataContext.WrappedData.IsVisible; + NotifyObserversOfData(chartDataContext.WrappedData); } - private void ChartMultipleAreaDataOnNodeChecked(ChartMultipleAreaData chartMultipleAreaData, object parentData) + private static bool ChartDataContextCanDrop(object draggedData, object targetData) { - chartMultipleAreaData.IsVisible = !chartMultipleAreaData.IsVisible; - NotifyObserversOfData(chartMultipleAreaData); + var draggedDataContext = (ChartDataContext) draggedData; + var targetDataContext = (ChartDataContext) targetData; + + return !(targetDataContext.WrappedData is ChartDataCollection) && draggedDataContext.ParentChartData.Equals(targetDataContext.ParentChartData); } - private void NotifyObserversOfData(ChartData chartData) + private static bool ChartDataContextCanInsert(object draggedData, object targetData) { - chartData.NotifyObservers(); + var draggedDataContext = (ChartDataContext)draggedData; + var targetDataContext = (ChartDataContext)targetData; - var observableParent = Data as IObservable; - if (observableParent != null) - { - observableParent.NotifyObservers(); - } + return !(targetDataContext.WrappedData is ChartDataCollection) && draggedDataContext.ParentChartData.Equals(targetDataContext.ParentChartData); } - # endregion + private void ChartDataContextOnDrop(object droppedData, object newParentData, object oldParentData, int position, TreeViewControl control) + { + var chartContext = (ChartDataContext) droppedData; + var sourceContext = oldParentData as ChartDataContext; + var chartData = chartContext.WrappedData; + ChartDataCollection parent = (ChartDataCollection)(sourceContext != null ? sourceContext.WrappedData : oldParentData); + + parent.Remove(chartData); + parent.Insert(parent.List.Count - position, chartData); + parent.NotifyObservers(); + } + + #endregion + # region ChartDataCollection - private static bool ChartControlCanDrop(object draggedData, object targetData) + private static object[] GetCollectionChildNodeObjects(ChartDataCollection chartDataCollection) { - return draggedData is ChartData; + return GetChildNodeObjects(chartDataCollection); } - private static bool ChartControlCanInsert(object draggedData, object targetData) + private static bool ChartDataCollectionCanDrop(object draggedData, object targetData) { - return draggedData is ChartData; + var draggedDataContext = (ChartDataContext) draggedData; + var targetDataContext = targetData as ChartDataContext; + var targetDataObject = targetDataContext != null ? targetDataContext.ParentChartData : targetData; + + return draggedDataContext.ParentChartData.Equals(targetDataObject); } - private static void ChartControlOnDrop(object droppedData, object newParentData, object oldParentData, int position, TreeViewControl control) + private static bool ChartDataCollectionCanInsert(object draggedData, object targetData) { - var chartData = (ChartData) droppedData; - var source = (ChartDataCollection)oldParentData; - var target = (ChartDataCollection) newParentData; + var draggedDataContext = (ChartDataContext)draggedData; + var targetDataContext = targetData as ChartDataContext; + var targetDataObject = targetDataContext != null ? targetDataContext.ParentChartData : targetData; - source.List.Remove(chartData); - target.List.Insert(target.List.Count - position, chartData); - target.NotifyObservers(); + return draggedDataContext.ParentChartData.Equals(targetDataObject); } + private static void ChartDataCollectionOnDrop(object droppedData, object newParentData, object oldParentData, int position, TreeViewControl control) + { + var chartContext = (ChartDataContext)droppedData; + + var chartData = chartContext.WrappedData; + ChartDataCollection parent = (ChartDataCollection) oldParentData; + + parent.Remove(chartData); + parent.Insert(parent.List.Count - position, chartData); + parent.NotifyObservers(); + } + # endregion + + private static object[] GetChildNodeObjects(ChartDataCollection chartDataCollection) + { + return chartDataCollection.List.Reverse().Select(chartData => new ChartDataContext(chartData, chartDataCollection)).Cast().ToArray(); + } + + private void NotifyObserversOfData(ChartData chartData) + { + chartData.NotifyObservers(); + + var observableParent = Data as IObservable; + if (observableParent != null) + { + observableParent.NotifyObservers(); + } + } } } \ No newline at end of file Index: Core/Plugins/src/Core.Plugins.OxyPlot/PresentationObjects/ChartDataContext.cs =================================================================== diff -u --- Core/Plugins/src/Core.Plugins.OxyPlot/PresentationObjects/ChartDataContext.cs (revision 0) +++ Core/Plugins/src/Core.Plugins.OxyPlot/PresentationObjects/ChartDataContext.cs (revision 912654844174f5787a10b53cae061302e14fe4f1) @@ -0,0 +1,63 @@ +// Copyright (C) Stichting Deltares 2016. 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 Core.Common.Controls.PresentationObjects; +using Core.Components.Charting.Data; + +namespace Core.Plugins.OxyPlot.PresentationObjects +{ + /// + /// Presentation object for . + /// + public class ChartDataContext : WrappedObjectContextBase + { + private readonly ChartDataCollection parentChartData; + + /// + /// Creates a new instance of . + /// + /// The to wrap. + /// The parent + /// the belongs to. + /// Thrown when is null. + public ChartDataContext(ChartData wrappedData, ChartDataCollection parentChartData) : base(wrappedData) + { + if (parentChartData == null) + { + throw new ArgumentNullException("parentChartData"); + } + this.parentChartData = parentChartData; + } + + /// + /// Gets the parent + /// the belongs to. + /// + public ChartDataCollection ParentChartData + { + get + { + return parentChartData; + } + } + } +} \ No newline at end of file Index: Core/Plugins/test/Core.Plugins.OxyPlot.Test/Core.Plugins.OxyPlot.Test.csproj =================================================================== diff -u -ra1ec5faebf7ccf8e67fa34a2b73cd1063ab48840 -r912654844174f5787a10b53cae061302e14fe4f1 --- Core/Plugins/test/Core.Plugins.OxyPlot.Test/Core.Plugins.OxyPlot.Test.csproj (.../Core.Plugins.OxyPlot.Test.csproj) (revision a1ec5faebf7ccf8e67fa34a2b73cd1063ab48840) +++ Core/Plugins/test/Core.Plugins.OxyPlot.Test/Core.Plugins.OxyPlot.Test.csproj (.../Core.Plugins.OxyPlot.Test.csproj) (revision 912654844174f5787a10b53cae061302e14fe4f1) @@ -62,13 +62,11 @@ - - + - - + Index: Core/Plugins/test/Core.Plugins.OxyPlot.Test/Forms/ChartDataViewTest.cs =================================================================== diff -u -r151bab16a7ebc1bffc0621ab56c6dc219db1e90f -r912654844174f5787a10b53cae061302e14fe4f1 --- Core/Plugins/test/Core.Plugins.OxyPlot.Test/Forms/ChartDataViewTest.cs (.../ChartDataViewTest.cs) (revision 151bab16a7ebc1bffc0621ab56c6dc219db1e90f) +++ Core/Plugins/test/Core.Plugins.OxyPlot.Test/Forms/ChartDataViewTest.cs (.../ChartDataViewTest.cs) (revision 912654844174f5787a10b53cae061302e14fe4f1) @@ -20,6 +20,7 @@ // All rights reserved. using System; +using System.Collections.Generic; using System.Windows.Forms; using Core.Components.Charting.Data; using Core.Components.OxyPlot.Forms; @@ -86,8 +87,7 @@ // Setup using (var chartView = new ChartDataView()) { - var chartDataCollection = new ChartDataCollection(new ChartData[] - {}, "test data"); + var chartDataCollection = new ChartDataCollection(new List(), "test data"); // Call chartView.Data = chartDataCollection; Fisheye: Tag 912654844174f5787a10b53cae061302e14fe4f1 refers to a dead (removed) revision in file `Core/Plugins/test/Core.Plugins.OxyPlot.Test/Legend/ChartAreaDataTreeNodeInfoTest.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Core/Plugins/test/Core.Plugins.OxyPlot.Test/Legend/ChartDataCollectionTreeNodeInfoTest.cs =================================================================== diff -u -r151bab16a7ebc1bffc0621ab56c6dc219db1e90f -r912654844174f5787a10b53cae061302e14fe4f1 --- Core/Plugins/test/Core.Plugins.OxyPlot.Test/Legend/ChartDataCollectionTreeNodeInfoTest.cs (.../ChartDataCollectionTreeNodeInfoTest.cs) (revision 151bab16a7ebc1bffc0621ab56c6dc219db1e90f) +++ Core/Plugins/test/Core.Plugins.OxyPlot.Test/Legend/ChartDataCollectionTreeNodeInfoTest.cs (.../ChartDataCollectionTreeNodeInfoTest.cs) (revision 912654844174f5787a10b53cae061302e14fe4f1) @@ -30,7 +30,9 @@ using Core.Components.Charting.Data; using Core.Components.Charting.TestUtil; using Core.Plugins.OxyPlot.Legend; +using Core.Plugins.OxyPlot.PresentationObjects; using NUnit.Framework; +using Rhino.Mocks; using GuiResources = Core.Common.Gui.Properties.Resources; namespace Core.Plugins.OxyPlot.Test.Legend @@ -40,14 +42,13 @@ { private ChartLegendView chartLegendView; private TreeNodeInfo info; - private TreeViewControl treeViewControl; [SetUp] public void SetUp() { chartLegendView = new ChartLegendView(); - treeViewControl = TypeUtils.GetField(chartLegendView, "treeViewControl"); + TreeViewControl treeViewControl = TypeUtils.GetField(chartLegendView, "treeViewControl"); Dictionary treeNodeInfoLookup = TypeUtils.GetField>(treeViewControl, "tagTypeTreeNodeInfoLookup"); info = treeNodeInfoLookup[typeof(ChartDataCollection)]; @@ -103,13 +104,13 @@ } [Test] - public void ChildNodeObjects_Always_ReturnsChildsOnDataReversed() + public void ChildNodeObjects_Always_ReturnsChildsWithContextAndDataReversed() { // Setup - var chartData1 = new TestChartData(); - var chartData2 = new TestChartData(); - var chartData3 = new TestChartData(); - var chartDataCollection = new ChartDataCollection(new List + TestChartData chartData1 = new TestChartData(); + TestChartData chartData2 = new TestChartData(); + TestChartData chartData3 = new TestChartData(); + ChartDataCollection chartDataCollection = new ChartDataCollection(new List { chartData1, chartData2, @@ -120,61 +121,77 @@ var objects = info.ChildNodeObjects(chartDataCollection); // Assert - CollectionAssert.AreEqual(new[] { chartData3, chartData2, chartData1 }, objects); + var expectedChilds = new[] + { + new ChartDataContext(chartData3, new ChartDataCollection(new ChartData[0], "test")), + new ChartDataContext(chartData2, new ChartDataCollection(new ChartData[0], "test")), + new ChartDataContext(chartData1, new ChartDataCollection(new ChartData[0], "test")), + }; + CollectionAssert.AreEqual(expectedChilds, objects); } [Test] - public void CanDrop_SourceNodeTagIsNoChartData_ReturnsFalse() + public void CanDrop_TargetParentIsSameAsSourceParent_ReturnsTrue() { // Setup - var chartDataCollection = new ChartDataCollection(new List(), "test data"); + ChartData chartData = new TestChartData(); + ChartDataCollection chartDataCollection = new ChartDataCollection(new ChartData[0], "test"); + ChartDataContext context = GetContext(chartData, chartDataCollection); + // Call - var canDrop = info.CanDrop(new object(), chartDataCollection); + bool canDrop = info.CanDrop(context, chartDataCollection); // Assert - Assert.IsFalse(canDrop); + Assert.IsTrue(canDrop); } [Test] - public void CanDrop_SourceNodeTagIsChartData_ReturnsTrue() + public void CanDrop_TargetParentNotSameAsSourceParent_ReturnsFalse() { // Setup - var chartData = new TestChartData(); - var chartDataCollection = new ChartDataCollection(new List(), "test data"); + ChartData chartData = new TestChartData(); + ChartDataCollection chartDataCollection = new ChartDataCollection(new ChartData[0], "test"); + ChartDataContext context = GetContext(chartData, chartDataCollection); + // Call - var canDrop = info.CanDrop(chartData, chartDataCollection); + bool canDrop = info.CanDrop(context, GetContext(new ChartDataCollection(new ChartData[0], "test"))); // Assert - Assert.IsTrue(canDrop); + Assert.IsFalse(canDrop); } [Test] - public void CanInsert_SourceNodeTagIsNoChartData_ReturnsFalse() + public void CanInsert_TargetParentIsSameAsSourceParent_ReturnsTrue() { // Setup - var chartDataCollection = new ChartDataCollection(new List(), "test data"); + ChartData chartData = new TestChartData(); + ChartDataCollection chartDataCollection = new ChartDataCollection(new ChartData[0], "test"); + ChartDataContext context = GetContext(chartData, chartDataCollection); + // Call - var canInsert = info.CanInsert(new object(), chartDataCollection); + bool canInsert = info.CanInsert(context, chartDataCollection); // Assert - Assert.IsFalse(canInsert); + Assert.IsTrue(canInsert); } [Test] - public void CanInsert_SourceNodeTagIsChartData_ReturnsTrue() + public void CanInsert_TargetParentNotSameAsSourceParent_ReturnsFalse() { // Setup - var chartData = new TestChartData(); - var chartDataCollection = new ChartDataCollection(new List(), "test data"); + ChartData chartData = new TestChartData(); + ChartDataCollection chartDataCollection = new ChartDataCollection(new ChartData[0], "test"); + ChartDataContext context = GetContext(chartData, chartDataCollection); + // Call - var canInsert = info.CanInsert(chartData, chartDataCollection); + bool canInsert = info.CanInsert(context, GetContext(new ChartDataCollection(new ChartData[0], "test"))); // Assert - Assert.IsTrue(canInsert); + Assert.IsFalse(canInsert); } [Test] @@ -194,6 +211,11 @@ public void OnDrop_ChartDataMovedToPositionInsideRange_SetsNewReverseOrder(int position) { // Setup + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + var chartData1 = new TestChartData(); var chartData2 = new TestChartData(); var chartData3 = new TestChartData(); @@ -204,19 +226,21 @@ chartData3 }, "test data"); - var notify = 0; - var observer = new Observer(() => notify++); + var context1 = GetContext(chartData1); chartDataCollection.Attach(observer); - // Call - info.OnDrop(chartData1, chartDataCollection, chartDataCollection, position, treeViewControl); + using (var treeViewControl = new TreeViewControl()) + { + // Call + info.OnDrop(context1, chartDataCollection, chartDataCollection, position, treeViewControl); - // Assert - var reversedIndex = 2 - position; - Assert.AreSame(chartData1, chartDataCollection.List.ElementAt(reversedIndex)); + // Assert + var reversedIndex = 2 - position; + Assert.AreSame(context1.WrappedData, chartDataCollection.List.ElementAt(reversedIndex)); - Assert.AreEqual(1, notify); + mocks.VerifyAll(); + } } [Test] @@ -227,6 +251,10 @@ public void OnDrop_ChartDataMovedToPositionOutsideRange_ThrowsException(int position) { // Setup + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + mocks.ReplayAll(); + var chartData1 = new ChartLineData(Enumerable.Empty(), "line"); var chartData2 = new ChartAreaData(Enumerable.Empty(), "area"); var chartData3 = new ChartPointData(Enumerable.Empty(), "point"); @@ -239,17 +267,28 @@ chartData4 }, "test data"); - var notify = 0; - var observer = new Observer(() => notify++); chartDataCollection.Attach(observer); chartLegendView.Data = chartDataCollection; - // Call - TestDelegate test = () => info.OnDrop(chartData1, chartDataCollection, chartDataCollection, position, treeViewControl); + var context1 = GetContext(chartData1); - // Assert - Assert.Throws(test); - Assert.AreEqual(0, notify); + chartDataCollection.Attach(observer); + + using (var treeViewControl = new TreeViewControl()) + { + // Call + TestDelegate test = () => info.OnDrop(context1, chartDataCollection, chartDataCollection, position, treeViewControl); + + // Assert + Assert.Throws(test); + + mocks.VerifyAll(); // Expect no update observer. + } } + + private static ChartDataContext GetContext(ChartData chartData, ChartDataCollection chartDataCollection = null) + { + return new ChartDataContext(chartData, chartDataCollection ?? new ChartDataCollection(new List(), "test")); + } } } \ No newline at end of file Index: Core/Plugins/test/Core.Plugins.OxyPlot.Test/Legend/ChartDataContextTreeNodeInfoTest.cs =================================================================== diff -u --- Core/Plugins/test/Core.Plugins.OxyPlot.Test/Legend/ChartDataContextTreeNodeInfoTest.cs (revision 0) +++ Core/Plugins/test/Core.Plugins.OxyPlot.Test/Legend/ChartDataContextTreeNodeInfoTest.cs (revision 912654844174f5787a10b53cae061302e14fe4f1) @@ -0,0 +1,498 @@ +// Copyright (C) Stichting Deltares 2016. 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; +using Core.Common.Base.Geometry; +using Core.Common.Controls.TreeView; +using Core.Common.TestUtil; +using Core.Common.Utils.Reflection; +using Core.Components.Charting.Data; +using Core.Components.Charting.TestUtil; +using Core.Plugins.OxyPlot.Legend; +using Core.Plugins.OxyPlot.PresentationObjects; +using Core.Plugins.OxyPlot.Properties; +using NUnit.Framework; +using Rhino.Mocks; +using GuiResources = Core.Common.Gui.Properties.Resources; + +namespace Core.Plugins.OxyPlot.Test.Legend +{ + [TestFixture] + public class ChartDataContextTreeNodeInfoTest + { + private ChartLegendView chartLegendView; + private TreeNodeInfo info; + + [SetUp] + public void SetUp() + { + chartLegendView = new ChartLegendView(); + + TreeViewControl treeViewControl = TypeUtils.GetField(chartLegendView, "treeViewControl"); + Dictionary treeNodeInfoLookup = TypeUtils.GetField>(treeViewControl, "tagTypeTreeNodeInfoLookup"); + + info = treeNodeInfoLookup[typeof(ChartDataContext)]; + } + + [TearDown] + public void TearDown() + { + chartLegendView.Dispose(); + } + + [Test] + public void Initialized_Always_ExpectedPropertiesSet() + { + // Assert + Assert.AreEqual(typeof(ChartDataContext), info.TagType); + Assert.IsNull(info.ForeColor); + Assert.IsNull(info.ContextMenuStrip); + Assert.IsNull(info.EnsureVisibleOnCreate); + Assert.IsNull(info.CanRename); + Assert.IsNull(info.OnNodeRenamed); + Assert.IsNull(info.CanRemove); + Assert.IsNull(info.OnNodeRemoved); + } + + [Test] + public void Text_Always_ReturnsNameFromWrappedChartData() + { + // Setup + ChartDataContext context = GetContext(new TestChartData()); + + // Call + string text = info.Text(context); + + // Assert + Assert.AreEqual(context.WrappedData.Name, text); + } + + [Test] + [TestCaseSource("ChartDataLegendImages")] + public void Image_WrappedDataChartPointData_ReturnPointsIcon(ChartData chartData, Image expectedImage) + { + // Setup + ChartDataContext context = GetContext(chartData); + + // Call + Image image = info.Image(context); + + // Assert + TestHelper.AssertImagesAreEqual(expectedImage, image); + } + + [Test] + public void ChildNodeObjects_ChartDataCollection_ReturnsItemsFromChartDataCollectionList() + { + // Setup + TestChartData chartData1 = new TestChartData(); + TestChartData chartData2 = new TestChartData(); + TestChartData chartData3 = new TestChartData(); + ChartDataCollection chartDataCollection = new ChartDataCollection(new List + { + chartData1, + chartData2, + chartData3 + }, "test data"); + ChartDataContext context = GetContext(chartDataCollection); + + // Call + var objects = info.ChildNodeObjects(context); + + // Assert + var expectedChilds = new[] + { + new ChartDataContext(chartData3, new ChartDataCollection(new ChartData[0], "test")), + new ChartDataContext(chartData2, new ChartDataCollection(new ChartData[0], "test")), + new ChartDataContext(chartData1, new ChartDataCollection(new ChartData[0], "test")), + }; + CollectionAssert.AreEqual(expectedChilds, objects); + } + + [Test] + [TestCaseSource("NoChartDataCollection")] + public void ChildNodeObjects_OtherThanChartDataCollection_ReturnsEmptyArray(ChartData chartData) + { + // Setup + ChartDataContext context = GetContext(chartData); + + // Call + var objects = info.ChildNodeObjects(context); + + // Assert + CollectionAssert.IsEmpty(objects); + } + + [Test] + public void CanDrag_WrappedDataChartMultipleAreaData_ReturnsFalse() + { + // Setup + ChartMultipleAreaData multipleChartAreaData = new ChartMultipleAreaData(new[] + { + Enumerable.Empty() + }, "test data"); + ChartDataContext context = GetContext(multipleChartAreaData); + + // Call + bool canDrag = info.CanDrag(context, null); + + // Assert + Assert.IsFalse(canDrag); + } + + [Test] + [TestCaseSource("DragChartData")] + public void CanDrag_WrappedDataOtherThanChartMultipleAreaData_ReturnsTrue(ChartData chartData) + { + // Setup + ChartDataContext context = GetContext(chartData); + + // Call + bool canDrag = info.CanDrag(context, null); + + // Assert + Assert.IsTrue(canDrag); + } + + [Test] + public void CanCheck_WrappedDataChartDataCollection_ReturnsFalse() + { + // Setup + ChartDataContext context = GetContext(new ChartDataCollection(new ChartData[0], "test data")); + + // Call + bool canCheck = info.CanCheck(context); + + // Assert + Assert.IsFalse(canCheck); + } + + [Test] + [TestCaseSource("NoChartDataCollection")] + public void CanCheck_WrappedDataOtherThanChartDataCollection_ReturnsTrue(ChartData chartData) + { + // Setup + ChartDataContext context = GetContext(chartData); + + // Call + bool canCheck = info.CanCheck(context); + + // Assert + Assert.IsTrue(canCheck); + } + + [Test] + [TestCaseSource("IsCheckedChartData")] + public void IsChecked_Always_ReturnsAccordingToVisibleStateOfChartData(ChartData chartData, bool isVisible) + { + // Setup + ChartDataContext context = GetContext(chartData); + context.WrappedData.IsVisible = isVisible; + + // Call + bool isChecked = info.IsChecked(context); + + // Assert + Assert.AreEqual(isVisible, isChecked); + } + + [Test] + [TestCaseSource("IsCheckedChartData")] + public void OnNodeChecked_Always_SetsPointDataVisibilityAndNotifiesParentObservers(ChartData chartData, bool initialVisibleState) + { + // Setup + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + ChartDataContext context = GetContext(chartData); + context.WrappedData.IsVisible = initialVisibleState; + + context.WrappedData.Attach(observer); + + // Call + info.OnNodeChecked(context, null); + + // Assert + Assert.AreEqual(!initialVisibleState, context.WrappedData.IsVisible); + mocks.VerifyAll(); + } + + [Test] + public void CanDrop_TargetParentIsSameAsSourceParent_ReturnsTrue() + { + // Setup + ChartData chartData = new TestChartData(); + ChartData chartData2 = new TestChartData(); + ChartDataCollection chartDataCollection = new ChartDataCollection(new ChartData[0], "test"); + + ChartDataContext context = GetContext(chartData, chartDataCollection); + ChartDataContext targetContext = GetContext(chartData2, chartDataCollection); + + // Call + bool canDrop = info.CanDrop(context, targetContext); + + // Assert + Assert.IsTrue(canDrop); + } + + [Test] + public void CanDrop_TargetParentNotSameAsSourceParent_ReturnsFalse() + { + // Setup + ChartData chartData = new TestChartData(); + ChartData chartData2 = new TestChartData(); + + ChartDataContext context = GetContext(chartData); + ChartDataContext targetContext = GetContext(chartData2); + + // Call + bool canDrop = info.CanDrop(context, targetContext); + + // Assert + Assert.IsFalse(canDrop); + } + + [Test] + public void CanDrop_TargetDataIsCollection_ReturnsFalse() + { + // Setup + ChartData chartData = new TestChartData(); + ChartDataCollection rootCollection = new ChartDataCollection(new ChartData[0], "test"); + ChartDataCollection targetCollection = new ChartDataCollection(new ChartData[0], "test"); + + ChartDataContext context = GetContext(chartData, rootCollection); + ChartDataContext targetContext = GetContext(targetCollection, rootCollection); + + // Call + bool canDrop = info.CanDrop(context, targetContext); + + // Assert + Assert.IsFalse(canDrop); + } + + [Test] + public void CanInsert_TargetParentIsSameAsSourceParent_ReturnsTrue() + { + // Setup + ChartData chartData = new TestChartData(); + ChartData chartData2 = new TestChartData(); + ChartDataCollection chartDataCollection = new ChartDataCollection(new ChartData[0], "test"); + + ChartDataContext context = GetContext(chartData, chartDataCollection); + ChartDataContext targetContext = GetContext(chartData2, chartDataCollection); + + // Call + bool canInsert = info.CanInsert(context, targetContext); + + // Assert + Assert.IsTrue(canInsert); + } + + [Test] + public void CanInsert_TargetParentNotSameAsSourceParent_ReturnsFalse() + { + // Setup + ChartData chartData = new TestChartData(); + ChartData chartData2 = new TestChartData(); + + ChartDataContext context = GetContext(chartData); + ChartDataContext targetContext = GetContext(chartData2); + + // Call + bool canInsert = info.CanInsert(context, targetContext); + + // Assert + Assert.IsFalse(canInsert); + } + + [Test] + public void CanInsert_TargetDataIsCollection_ReturnsFalse() + { + // Setup + ChartData chartData = new TestChartData(); + ChartDataCollection rootCollection = new ChartDataCollection(new ChartData[0], "test"); + ChartDataCollection targetCollection = new ChartDataCollection(new ChartData[0], "test"); + + ChartDataContext context = GetContext(chartData, rootCollection); + ChartDataContext targetContext = GetContext(targetCollection, rootCollection); + + // Call + bool canDrop = info.CanInsert(context, targetContext); + + // Assert + Assert.IsFalse(canDrop); + } + + [Test] + [TestCase(0)] + [TestCase(1)] + [TestCase(2)] + public void OnDrop_ChartDataMovedToPositionInsideRange_SetsNewReverseOrder(int position) + { + // Setup + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + var chartData1 = new TestChartData(); + var chartData2 = new TestChartData(); + var chartData3 = new TestChartData(); + var chartDataCollection = new ChartDataCollection(new List + { + chartData1, + chartData2, + chartData3 + }, "test data"); + + var context1 = GetContext(chartData1); + var collectionContext = GetContext(chartDataCollection); + + chartDataCollection.Attach(observer); + + using (var treeViewControl = new TreeViewControl()) + { + // Call + info.OnDrop(context1, collectionContext, collectionContext, position, treeViewControl); + + // Assert + var reversedIndex = 2 - position; + ChartDataCollection wrappedCollectionData = (ChartDataCollection)collectionContext.WrappedData; + Assert.AreSame(context1.WrappedData, wrappedCollectionData.List.ElementAt(reversedIndex)); + + mocks.VerifyAll(); + } + } + + [Test] + [TestCase(-50)] + [TestCase(-1)] + [TestCase(4)] + [TestCase(50)] + public void OnDrop_ChartDataMovedToPositionOutsideRange_ThrowsException(int position) + { + // Setup + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + mocks.ReplayAll(); + + var chartData1 = new ChartLineData(Enumerable.Empty(), "line"); + var chartData2 = new ChartAreaData(Enumerable.Empty(), "area"); + var chartData3 = new ChartPointData(Enumerable.Empty(), "point"); + var chartData4 = new ChartMultipleAreaData(Enumerable.Empty>(), "multiple area"); + var chartDataCollection = new ChartDataCollection(new List + { + chartData1, + chartData2, + chartData3, + chartData4 + }, "test data"); + + chartDataCollection.Attach(observer); + chartLegendView.Data = chartDataCollection; + + var context1 = GetContext(chartData1); + var collectionContext = GetContext(chartDataCollection); + + chartDataCollection.Attach(observer); + + using (var treeViewControl = new TreeViewControl()) + { + // Call + TestDelegate test = () => info.OnDrop(context1, collectionContext, collectionContext, position, treeViewControl); + + // Assert + Assert.Throws(test); + + mocks.VerifyAll(); // Expect no update observer. + } + } + + private static ChartDataContext GetContext(ChartData chartData, ChartDataCollection chartDataCollection = null) + { + return new ChartDataContext(chartData, chartDataCollection ?? new ChartDataCollection(new List(), "test")); + } + + private static IEnumerable ChartDataLegendImages + { + get + { + yield return new TestCaseData(new ChartPointData(Enumerable.Empty(), "test"), Resources.PointsIcon); + yield return new TestCaseData(new ChartLineData(Enumerable.Empty(), "test"), Resources.LineIcon); + yield return new TestCaseData(new ChartAreaData(Enumerable.Empty(), "test"), Resources.AreaIcon); + yield return new TestCaseData(new ChartMultipleAreaData(new[] { Enumerable.Empty() }, "test data"), Resources.AreaIcon); + yield return new TestCaseData(new ChartDataCollection(new ChartData[0], "test"), GuiResources.folder); + } + } + + private static IEnumerable DragChartData + { + get + { + return new ChartData[] + { + new ChartPointData(Enumerable.Empty(), "test"), + new ChartLineData(Enumerable.Empty(), "test"), + new ChartAreaData(Enumerable.Empty(), "Test"), + new ChartDataCollection(new ChartData[0], "test") + }; + } + } + + private static IEnumerable NoChartDataCollection + { + get + { + return new ChartData[] + { + new ChartPointData(Enumerable.Empty(), "test"), + new ChartLineData(Enumerable.Empty(), "test"), + new ChartAreaData(Enumerable.Empty(), "Test"), + new ChartMultipleAreaData(new[] + { + Enumerable.Empty() + }, "test data") + }; + } + } + + private static IEnumerable IsCheckedChartData + { + get + { + yield return new TestCaseData(new ChartPointData(Enumerable.Empty(), "test"), false); + yield return new TestCaseData(new ChartPointData(Enumerable.Empty(), "test"), true); + yield return new TestCaseData(new ChartLineData(Enumerable.Empty(), "test"), false); + yield return new TestCaseData(new ChartLineData(Enumerable.Empty(), "test"), true); + yield return new TestCaseData(new ChartAreaData(Enumerable.Empty(), "test"), false); + yield return new TestCaseData(new ChartAreaData(Enumerable.Empty(), "test"), true); + yield return new TestCaseData(new ChartMultipleAreaData(new[] { Enumerable.Empty() }, "test data"), false); + yield return new TestCaseData(new ChartMultipleAreaData(new[] { Enumerable.Empty() }, "test data"), true); + } + } + } +} \ No newline at end of file Index: Core/Plugins/test/Core.Plugins.OxyPlot.Test/Legend/ChartLegendViewTest.cs =================================================================== diff -u -r223b2a4edc4ac816051c7eeecb735c34a6246574 -r912654844174f5787a10b53cae061302e14fe4f1 --- Core/Plugins/test/Core.Plugins.OxyPlot.Test/Legend/ChartLegendViewTest.cs (.../ChartLegendViewTest.cs) (revision 223b2a4edc4ac816051c7eeecb735c34a6246574) +++ Core/Plugins/test/Core.Plugins.OxyPlot.Test/Legend/ChartLegendViewTest.cs (.../ChartLegendViewTest.cs) (revision 912654844174f5787a10b53cae061302e14fe4f1) @@ -29,6 +29,7 @@ using Core.Common.Utils.Reflection; using Core.Components.Charting.Data; using Core.Plugins.OxyPlot.Legend; +using Core.Plugins.OxyPlot.PresentationObjects; using Core.Plugins.OxyPlot.Properties; using NUnit.Framework; @@ -96,74 +97,6 @@ } [Test] - public void GivenChartDataContainingCollection_WhenDragDroppingFromCollectionToRoot_ThenDataMoved() - { - // Given - var chartLineData = CreateChartLineData(); - - var innerCollection = new ChartDataCollection(new List - { - chartLineData - }, "collection"); - var rootCollection = new ChartDataCollection(new List - { - CreateChartLineData(), - innerCollection - }, "test data"); - - using (var chartLegendView = new ChartLegendView - { - Data = rootCollection - }) - { - TreeViewControl treeViewControl = TypeUtils.GetField(chartLegendView, "treeViewControl"); - Dictionary treeNodeInfoLookup = TypeUtils.GetField>(treeViewControl, "tagTypeTreeNodeInfoLookup"); - var info = treeNodeInfoLookup[typeof(ChartDataCollection)]; - - // When - info.OnDrop(chartLineData, rootCollection, innerCollection, 0, treeViewControl); - - // Then - CollectionAssert.DoesNotContain(innerCollection.List, chartLineData); - CollectionAssert.Contains(rootCollection.List, chartLineData); - } - } - - [Test] - public void GivenChartDataContainingCollection_WhenDragDroppingFromRootToCollection_ThenDataMoved() - { - // Given - var chartLineData = CreateChartLineData(); - - var innerCollection = new ChartDataCollection(new List - { - CreateChartLineData() - }, "collection"); - var rootCollection = new ChartDataCollection(new List - { - chartLineData, - innerCollection - }, "test data"); - - using (var chartLegendView = new ChartLegendView - { - Data = rootCollection - }) - { - TreeViewControl treeViewControl = TypeUtils.GetField(chartLegendView, "treeViewControl"); - Dictionary treeNodeInfoLookup = TypeUtils.GetField>(treeViewControl, "tagTypeTreeNodeInfoLookup"); - var info = treeNodeInfoLookup[typeof(ChartDataCollection)]; - - // When - info.OnDrop(chartLineData, innerCollection, rootCollection, 0, treeViewControl); - - // Then - CollectionAssert.DoesNotContain(rootCollection.List, chartLineData); - CollectionAssert.Contains(innerCollection.List, chartLineData); - } - } - - [Test] [TestCase(0)] [TestCase(1)] [TestCase(2)] @@ -188,8 +121,10 @@ Dictionary treeNodeInfoLookup = TypeUtils.GetField>(treeViewControl, "tagTypeTreeNodeInfoLookup"); var info = treeNodeInfoLookup[typeof(ChartDataCollection)]; + var context = new ChartDataContext(chartLineData, rootCollection); + // When - info.OnDrop(chartLineData, rootCollection, rootCollection, index, treeViewControl); + info.OnDrop(context, rootCollection, rootCollection, index, treeViewControl); // Then Assert.AreEqual(2 - index, rootCollection.List.IndexOf(chartLineData)); Fisheye: Tag 912654844174f5787a10b53cae061302e14fe4f1 refers to a dead (removed) revision in file `Core/Plugins/test/Core.Plugins.OxyPlot.Test/Legend/ChartLineDataTreeNodeInfoTest.cs'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 912654844174f5787a10b53cae061302e14fe4f1 refers to a dead (removed) revision in file `Core/Plugins/test/Core.Plugins.OxyPlot.Test/Legend/ChartMultipleAreaDataTreeNodeInfoTest.cs'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 912654844174f5787a10b53cae061302e14fe4f1 refers to a dead (removed) revision in file `Core/Plugins/test/Core.Plugins.OxyPlot.Test/Legend/ChartPointDataTreeNodeInfoTest.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Core/Plugins/test/Core.Plugins.OxyPlot.Test/PresentationObjects/ChartDataContextTest.cs =================================================================== diff -u --- Core/Plugins/test/Core.Plugins.OxyPlot.Test/PresentationObjects/ChartDataContextTest.cs (revision 0) +++ Core/Plugins/test/Core.Plugins.OxyPlot.Test/PresentationObjects/ChartDataContextTest.cs (revision 912654844174f5787a10b53cae061302e14fe4f1) @@ -0,0 +1,59 @@ +// Copyright (C) Stichting Deltares 2016. 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 Core.Components.Charting.Data; +using Core.Components.Charting.TestUtil; +using Core.Plugins.OxyPlot.PresentationObjects; +using NUnit.Framework; + +namespace Core.Plugins.OxyPlot.Test.PresentationObjects +{ + [TestFixture] + public class ChartDataContextTest + { + [Test] + public void ParameteredConstructor_ExpectedValues() + { + // Setup + ChartData data = new TestChartData(); + ChartDataCollection collection = new ChartDataCollection(new [] { data }, "test"); + + // Call + ChartDataContext context = new ChartDataContext(data, collection); + + // Assert + Assert.AreSame(data, context.WrappedData); + Assert.AreSame(collection, context.ParentChartData); + } + + [Test] + public void ParameteredConstructor_ParentChartDataNull_ThrowsArgumentNullException() + { + // Call + TestDelegate call = () => new ChartDataContext(new TestChartData(), null); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("parentChartData", exception.ParamName); + } + } +} \ No newline at end of file