using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Windows.Forms; using Core.Common.Base; using Core.Components.Charting.Data; using Core.Components.Charting.TestUtil; using Core.Components.OxyPlot.Collection; using NUnit.Framework; using Rhino.Mocks; namespace Core.Components.OxyPlot.Forms.Test { [TestFixture] public class BaseChartTest { [Test] public void DefaultConstructor_PropertiesSet() { // Call var chart = new BaseChart(); // Assert Assert.IsInstanceOf(chart); Assert.AreEqual(75, chart.MinimumSize.Height); Assert.AreEqual(50, chart.MinimumSize.Width); Assert.IsFalse(chart.IsPanningEnabled); } /* [Test] public void Data_SetToNull_EmptyData() { // Setup var chart = new BaseChart(); var dataMock = new PointData(new Collection>()); chart.Data = new [] { dataMock }; // Call chart.Data = null; // Assert Assert.IsEmpty(chart.Data); } [Test] public void Data_NotNull_DataSet() { // Setup var chart = new BaseChart(); var pointData = new PointData(new Collection>()); var lineData = new LineData(new Collection>()); var areaData = new AreaData(new Collection>()); // Call chart.Data = new ChartData[] { pointData, lineData, areaData }; // Assert CollectionAssert.AreEqual(new ChartData[] {pointData, lineData, areaData}, chart.Data); } [Test] public void Data_NotKnownChartData_ThrowsNotSupportedException() { // Setup var chart = new BaseChart(); var testData = new TestChartData(); // Call TestDelegate test = () => chart.Data = new ChartData[] { testData }; // Assert Assert.Throws(test); } [Test] public void Data_UpdateReturnedValue_DoesNotAlterData() { // Setup var chart = new BaseChart(); var pointData = new PointData(new Collection>()); chart.Data = new ChartData[] { pointData }; var data = chart.Data; // Call data.Remove(pointData); data.Add(pointData); // Assert CollectionAssert.AreEqual(new ChartData[] { pointData }, chart.Data); } [Test] public void Data_SetNewData_NewDataSet() { // Setup var chart = new BaseChart(); var pointData = new PointData(new Collection>()); var otherPointData = new PointData(new Collection>()); chart.Data = new ChartData[] { pointData }; // Call chart.Data = new ChartData[] { otherPointData }; // Assert CollectionAssert.AreEqual(new ChartData[] { otherPointData }, chart.Data); }*/ [Test] public void NotifyObservers_WithObserverAttached_ObserverIsNotified() { // Setup var mocks = new MockRepository(); var observer = mocks.StrictMock(); observer.Expect(o => o.UpdateObserver()); mocks.ReplayAll(); var observable = new BaseChart(); observable.Attach(observer); // Call observable.NotifyObservers(); // Assert mocks.VerifyAll(); } [Test] public void NotifyObserver_AttachedObserverDetachedAgain_ObserverNoLongerNotified() { // Setup var mocks = new MockRepository(); var observer = mocks.StrictMock(); mocks.ReplayAll(); var observable = new BaseChart(); observable.Attach(observer); observable.Detach(observer); // Call observable.NotifyObservers(); // Assert mocks.VerifyAll(); // Expect no calls on 'observer' } [Test] public void NotifyObservers_MultipleObserversDetachingOrAttachingOthers_NoUpdatesForAttachedAndDetachedObservers() { // Setup var mocks = new MockRepository(); var testObservable = new BaseChart(); var observer1 = mocks.Stub(); var observer2 = mocks.Stub(); var observer3 = mocks.Stub(); var observer4 = mocks.Stub(); var observer5 = mocks.Stub(); var observer6 = mocks.Stub(); testObservable.Attach(observer1); testObservable.Attach(observer2); testObservable.Attach(observer3); testObservable.Attach(observer4); testObservable.Attach(observer6); observer1.Expect(o => o.UpdateObserver()); observer2.Expect(o => o.UpdateObserver()).Do((Action)(() => testObservable.Detach(observer3))); observer3.Expect(o => o.UpdateObserver()).Repeat.Never(); // A detached observer should no longer be updated observer4.Expect(o => o.UpdateObserver()).Do((Action)(() => testObservable.Attach(observer5))); observer5.Expect(o => o.UpdateObserver()).Repeat.Never(); // An attached observer should not be updated either observer6.Expect(o => o.UpdateObserver()); mocks.ReplayAll(); // Call testObservable.NotifyObservers(); // Assert mocks.VerifyAll(); } private static BaseChart CreateTestBaseChart() { return new BaseChart { Data = new ChartDataCollection(new List { new LineData(new List>()), new PointData(new List>()), new AreaData(new List>()) }) }; } } }