using System;
using NUnit.Framework;
namespace Nuclex.Windows.Forms.ViewModels {
/// Unit test for the dialog view model
[TestFixture]
public class DialogViewModelTest {
#region class DialogViewModelSubscriber
/// Subscriber for the events offered by a dialog view model
private class DialogViewModelSubscriber {
/// Indicates that the user has accepted the dialog
public void Confirmed(object sender, EventArgs arguments) {
++this.confirmCallCount;
}
/// Indicates that the user has cancelled the dialog
public void Cancelled(object sender, EventArgs arguments) {
++this.cancelCallCount;
}
/// Indicates that the dialog was simply closed
public void Submitted(object sender, EventArgs arguments) {
++this.submitCallCount;
}
/// How many times the Confirmed() method was called
public int ConfirmCallCount {
get { return this.confirmCallCount; }
}
/// How many times the Cancelled() method was called
public int CancelCallCount {
get { return this.cancelCallCount; }
}
/// How many times the Submitted() method was called
public int SubmitCallCount {
get { return this.submitCallCount; }
}
/// How many times the Confirmed() method was called
private int confirmCallCount;
/// How many times the Cancelled() method was called
private int cancelCallCount;
/// How many times the Submitted() method was called
private int submitCallCount;
}
#endregion // class DialogViewModelSubscriber
/// Verifies that the dialog view model has a default constructor
[Test]
public void HasDefaultConstructor() {
Assert.DoesNotThrow(
delegate() { new DialogViewModel(); }
);
}
///
/// Verifies that calling Confirm() on the dialog view model triggers
/// the 'Confirmed' event
///
[Test]
public void ConfirmTriggersConfirmedEvent() {
var viewModel = new DialogViewModel();
var subscriber = createSubscriber(viewModel);
Assert.AreEqual(0, subscriber.ConfirmCallCount);
Assert.AreEqual(0, subscriber.CancelCallCount);
Assert.AreEqual(0, subscriber.SubmitCallCount);
viewModel.Confirm();
Assert.AreEqual(1, subscriber.ConfirmCallCount);
Assert.AreEqual(0, subscriber.CancelCallCount);
Assert.AreEqual(0, subscriber.SubmitCallCount);
}
///
/// Verifies that calling Cancel() on the dialog view model triggers
/// the 'Cancelled' event
///
[Test]
public void CancelTriggersCancelledEvent() {
var viewModel = new DialogViewModel();
var subscriber = createSubscriber(viewModel);
Assert.AreEqual(0, subscriber.ConfirmCallCount);
Assert.AreEqual(0, subscriber.CancelCallCount);
Assert.AreEqual(0, subscriber.SubmitCallCount);
viewModel.Cancel();
Assert.AreEqual(0, subscriber.ConfirmCallCount);
Assert.AreEqual(1, subscriber.CancelCallCount);
Assert.AreEqual(0, subscriber.SubmitCallCount);
}
///
/// Verifies that calling Submitm() on the dialog view model triggers
/// the 'Submitted' event
///
[Test]
public void SubmitTriggersSubmittedEvent() {
var viewModel = new DialogViewModel();
var subscriber = createSubscriber(viewModel);
Assert.AreEqual(0, subscriber.ConfirmCallCount);
Assert.AreEqual(0, subscriber.CancelCallCount);
Assert.AreEqual(0, subscriber.SubmitCallCount);
viewModel.Submit();
Assert.AreEqual(0, subscriber.ConfirmCallCount);
Assert.AreEqual(0, subscriber.CancelCallCount);
Assert.AreEqual(1, subscriber.SubmitCallCount);
}
/// Constructs a new subscriber for the dialog view model's events
/// View model a subscriber will be created for
/// A subscriber for the events of the specified view model
private DialogViewModelSubscriber createSubscriber(DialogViewModel viewModel) {
var subscriber = new DialogViewModelSubscriber();
viewModel.Confirmed += subscriber.Confirmed;
viewModel.Canceled += subscriber.Cancelled;
viewModel.Submitted += subscriber.Submitted;
return subscriber;
}
}
} // namespace Nuclex.Windows.Forms.ViewModels