using System;
using System.Collections.Generic;
#if UNITTEST
using NUnit.Framework;
using NMock2;
namespace Nuclex.Support.Collections {
/// Unit Test for the observable collection class
[TestFixture]
public class ObservableCollectionTest {
/// Interface used to test the observable collection.
public interface IObservableCollectionSubscriber {
/// Called when the collection is about to clear its contents
/// Collection that is clearing its contents
/// Not used
void Clearing(object sender, EventArgs e);
/// Called when an item is added to the collection
/// Collection to which an item is being added
/// Contains the item that is being added
void ItemAdded(object sender, ObservableCollection.ItemEventArgs e);
/// Called when an item is removed from the collection
/// Collection from which an item is being removed
/// Contains the item that is being removed
void ItemRemoved(object sender, ObservableCollection.ItemEventArgs e);
}
/// Initialization routine executed before each test is run
[SetUp]
public void Setup() {
this.mockery = new Mockery();
this.mockedSubscriber = this.mockery.NewMock();
this.observedCollection = new ObservableCollection();
this.observedCollection.Clearing += new EventHandler(this.mockedSubscriber.Clearing);
this.observedCollection.ItemAdded +=
new EventHandler.ItemEventArgs>(
this.mockedSubscriber.ItemAdded
);
this.observedCollection.ItemRemoved +=
new EventHandler.ItemEventArgs>(
this.mockedSubscriber.ItemRemoved
);
this.mockery.VerifyAllExpectationsHaveBeenMet();
}
/// Tests whether the Clearing event is fired
[Test]
public void TestClearingEvent() {
Expect.Once.On(this.mockedSubscriber).
Method("Clearing");
this.observedCollection.Clear();
this.mockery.VerifyAllExpectationsHaveBeenMet();
}
/// Tests whether the ItemAdded event is fired
[Test]
public void TestItemAddedEvent() {
Expect.Once.On(this.mockedSubscriber).
Method("ItemAdded").
WithAnyArguments();
this.observedCollection.Add(123);
this.mockery.VerifyAllExpectationsHaveBeenMet();
}
/// Tests whether the ItemRemoved event is fired
[Test]
public void TestItemRemovedEvent() {
Expect.Once.On(this.mockedSubscriber).
Method("ItemAdded").
WithAnyArguments();
Expect.Once.On(this.mockedSubscriber).
Method("ItemRemoved").
WithAnyArguments();
this.observedCollection.Add(123);
this.observedCollection.Remove(123);
this.mockery.VerifyAllExpectationsHaveBeenMet();
}
/// Mock object factory
private Mockery mockery;
/// The mocked observable collection subscriber
private IObservableCollectionSubscriber mockedSubscriber;
/// An observable collection to which a mock will be subscribed
private ObservableCollection observedCollection;
}
} // namespace Nuclex.Support.Collections
#endif // UNITTEST