Index: src/Plugins/Wti/Wti.Data/Wti.Data.csproj
===================================================================
diff -u -ra4ac4e49268888b50f6f9606a1b8dd8225e1b24f -rfdc45df8cf7ca4dba62fb6e96b5cf8ef7ab73ade
--- src/Plugins/Wti/Wti.Data/Wti.Data.csproj (.../Wti.Data.csproj) (revision a4ac4e49268888b50f6f9606a1b8dd8225e1b24f)
+++ src/Plugins/Wti/Wti.Data/Wti.Data.csproj (.../Wti.Data.csproj) (revision fdc45df8cf7ca4dba62fb6e96b5cf8ef7ab73ade)
@@ -56,6 +56,10 @@
+
+ {82b61d20-fd4b-49be-9252-5bf6e3ee4666}
+ DelftTools.Shell.Core
+
{f49bd8b2-332a-4c91-a196-8cce0a2c7d98}
DelftTools.Utils
Index: src/Plugins/Wti/Wti.Data/WtiProject.cs
===================================================================
diff -u -ra4ac4e49268888b50f6f9606a1b8dd8225e1b24f -rfdc45df8cf7ca4dba62fb6e96b5cf8ef7ab73ade
--- src/Plugins/Wti/Wti.Data/WtiProject.cs (.../WtiProject.cs) (revision a4ac4e49268888b50f6f9606a1b8dd8225e1b24f)
+++ src/Plugins/Wti/Wti.Data/WtiProject.cs (.../WtiProject.cs) (revision fdc45df8cf7ca4dba62fb6e96b5cf8ef7ab73ade)
@@ -1,14 +1,43 @@
-using DelftTools.Utils;
+using System;
+using System.Collections.Generic;
+using DelftTools.Shell.Core;
+using DelftTools.Utils;
+
namespace Wti.Data
{
- public class WtiProject : INameable
+ public class WtiProject : INameable, IObservable
{
+ private IList observers = new List();
+
public WtiProject()
{
Name = "WTI 2017 project";
}
public string Name { get; set; }
+
+ #region IObservable
+
+ public void Attach(IObserver observer)
+ {
+ observers.Add(observer);
+ }
+
+ public void Detach(IObserver observer)
+ {
+ observers.Remove(observer);
+ }
+
+ public void NotifyObservers()
+ {
+ foreach (var observer in observers)
+ {
+ observer.UpdateObserver();
+ }
+ }
+
+ #endregion
+
}
}
\ No newline at end of file
Index: src/Plugins/Wti/Wti.Forms/NodePresenters/WtiProjectNodePresenter.cs
===================================================================
diff -u -rde830d165e579ad499b766e36eb280aac8820653 -rfdc45df8cf7ca4dba62fb6e96b5cf8ef7ab73ade
--- src/Plugins/Wti/Wti.Forms/NodePresenters/WtiProjectNodePresenter.cs (.../WtiProjectNodePresenter.cs) (revision de830d165e579ad499b766e36eb280aac8820653)
+++ src/Plugins/Wti/Wti.Forms/NodePresenters/WtiProjectNodePresenter.cs (.../WtiProjectNodePresenter.cs) (revision fdc45df8cf7ca4dba62fb6e96b5cf8ef7ab73ade)
@@ -48,7 +48,9 @@
public void OnNodeRenamed(object nodeData, string newName)
{
var project = (WtiProject)nodeData;
+
project.Name = newName;
+ project.NotifyObservers();
}
public void OnNodeChecked(ITreeNode node)
Index: src/Plugins/Wti/Wti.Forms/PropertyClasses/WtiProjectProperties.cs
===================================================================
diff -u -ra4ac4e49268888b50f6f9606a1b8dd8225e1b24f -rfdc45df8cf7ca4dba62fb6e96b5cf8ef7ab73ade
--- src/Plugins/Wti/Wti.Forms/PropertyClasses/WtiProjectProperties.cs (.../WtiProjectProperties.cs) (revision a4ac4e49268888b50f6f9606a1b8dd8225e1b24f)
+++ src/Plugins/Wti/Wti.Forms/PropertyClasses/WtiProjectProperties.cs (.../WtiProjectProperties.cs) (revision fdc45df8cf7ca4dba62fb6e96b5cf8ef7ab73ade)
@@ -15,6 +15,7 @@
set
{
data.Name = value;
+ data.NotifyObservers();
}
}
}
Index: test/Plugins/Wti/Wti.Data.Test/Wti.Data.Test.csproj
===================================================================
diff -u -ra4ac4e49268888b50f6f9606a1b8dd8225e1b24f -rfdc45df8cf7ca4dba62fb6e96b5cf8ef7ab73ade
--- test/Plugins/Wti/Wti.Data.Test/Wti.Data.Test.csproj (.../Wti.Data.Test.csproj) (revision a4ac4e49268888b50f6f9606a1b8dd8225e1b24f)
+++ test/Plugins/Wti/Wti.Data.Test/Wti.Data.Test.csproj (.../Wti.Data.Test.csproj) (revision fdc45df8cf7ca4dba62fb6e96b5cf8ef7ab73ade)
@@ -51,6 +51,9 @@
..\..\..\..\lib\nunit.framework.dll
+
+ ..\..\..\..\lib\Rhino.Mocks.dll
+
@@ -64,6 +67,10 @@
+
+ {82b61d20-fd4b-49be-9252-5bf6e3ee4666}
+ DelftTools.Shell.Core
+
{f49bd8b2-332a-4c91-a196-8cce0a2c7d98}
DelftTools.Utils
Index: test/Plugins/Wti/Wti.Data.Test/WtiProjectTest.cs
===================================================================
diff -u -ra4ac4e49268888b50f6f9606a1b8dd8225e1b24f -rfdc45df8cf7ca4dba62fb6e96b5cf8ef7ab73ade
--- test/Plugins/Wti/Wti.Data.Test/WtiProjectTest.cs (.../WtiProjectTest.cs) (revision a4ac4e49268888b50f6f9606a1b8dd8225e1b24f)
+++ test/Plugins/Wti/Wti.Data.Test/WtiProjectTest.cs (.../WtiProjectTest.cs) (revision fdc45df8cf7ca4dba62fb6e96b5cf8ef7ab73ade)
@@ -1,7 +1,12 @@
-using DelftTools.Utils;
+using System;
+using DelftTools.Shell.Core;
+using DelftTools.Utils;
+
using NUnit.Framework;
+using Rhino.Mocks;
+
namespace Wti.Data.Test
{
[TestFixture]
@@ -15,7 +20,48 @@
// assert
Assert.IsInstanceOf(project);
+ Assert.IsInstanceOf(project);
Assert.AreEqual("WTI 2017 project", project.Name);
}
+
+ [Test]
+ public void NotifyObservers_ObserverAttachedToProject_ObserverIsNotified()
+ {
+ // setup
+ var mocks = new MockRepository();
+ var observer = mocks.StrictMock();
+ observer.Expect(o => o.UpdateObserver());
+ mocks.ReplayAll();
+
+ var project = new WtiProject();
+ project.Attach(observer);
+
+ // call
+ project.NotifyObservers();
+
+ // assert
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void NotifyObservers_ObserverHasBeenDetached_ObserverShouldNotBeNotified()
+ {
+ // setup
+ var mocks = new MockRepository();
+ var observer = mocks.StrictMock();
+ mocks.ReplayAll();
+
+ var project = new WtiProject();
+ project.Attach(observer);
+ project.Detach(observer);
+
+ // call
+ project.NotifyObservers();
+
+ // assert
+ mocks.VerifyAll(); // Expect no calls on observer
+ }
+
+
}
}
\ No newline at end of file
Index: test/Plugins/Wti/Wti.Forms.Test/NodePresenters/WtiProjectNodePresenterTest.cs
===================================================================
diff -u -rde830d165e579ad499b766e36eb280aac8820653 -rfdc45df8cf7ca4dba62fb6e96b5cf8ef7ab73ade
--- test/Plugins/Wti/Wti.Forms.Test/NodePresenters/WtiProjectNodePresenterTest.cs (.../WtiProjectNodePresenterTest.cs) (revision de830d165e579ad499b766e36eb280aac8820653)
+++ test/Plugins/Wti/Wti.Forms.Test/NodePresenters/WtiProjectNodePresenterTest.cs (.../WtiProjectNodePresenterTest.cs) (revision fdc45df8cf7ca4dba62fb6e96b5cf8ef7ab73ade)
@@ -110,19 +110,26 @@
}
[Test]
- public void OnNodeRenamed_WithData_SetProjectName()
+ public void OnNodeRenamed_WithData_SetProjectNameWithNotification()
{
// setup
+ var mocks = new MockRepository();
+ var projectObserver = mocks.StrictMock();
+ projectObserver.Expect(o => o.UpdateObserver());
+ mocks.ReplayAll();
+
var nodePresenter = new WtiProjectNodePresenter();
var project = new WtiProject();
+ project.Attach(projectObserver);
// call
const string newName = "New Name";
nodePresenter.OnNodeRenamed(project, newName);
// assert
Assert.AreEqual(newName, project.Name);
+ mocks.VerifyAll();
}
[Test]
Index: test/Plugins/Wti/Wti.Forms.Test/PropertyClasses/WtiProjectPropertiesTest.cs
===================================================================
diff -u -ra4ac4e49268888b50f6f9606a1b8dd8225e1b24f -rfdc45df8cf7ca4dba62fb6e96b5cf8ef7ab73ade
--- test/Plugins/Wti/Wti.Forms.Test/PropertyClasses/WtiProjectPropertiesTest.cs (.../WtiProjectPropertiesTest.cs) (revision a4ac4e49268888b50f6f9606a1b8dd8225e1b24f)
+++ test/Plugins/Wti/Wti.Forms.Test/PropertyClasses/WtiProjectPropertiesTest.cs (.../WtiProjectPropertiesTest.cs) (revision fdc45df8cf7ca4dba62fb6e96b5cf8ef7ab73ade)
@@ -1,7 +1,10 @@
-using DelftTools.Shell.Gui;
+using DelftTools.Shell.Core;
+using DelftTools.Shell.Gui;
using NUnit.Framework;
+using Rhino.Mocks;
+
using Wti.Data;
using Wti.Forms.PropertyClasses;
@@ -37,17 +40,24 @@
}
[Test]
- public void SetProperties_WithData_UpdateData()
+ public void SetProperties_WithData_UpdateDataAndNotifyObservers()
{
// setup
+ var mocks = new MockRepository();
+ var projectObserver = mocks.StrictMock();
+ projectObserver.Expect(o => o.UpdateObserver());
+ mocks.ReplayAll();
+
var project = new WtiProject();
+ project.Attach(projectObserver);
var properties = new WtiProjectProperties { Data = project };
// call & Assert
const string newName = "Test";
properties.Name = newName;
Assert.AreEqual(newName, project.Name);
+ mocks.VerifyAll();
}