Skip to content

Instantly share code, notes, and snippets.

@gshackles
Created November 5, 2012 04:55
Show Gist options
  • Save gshackles/4015421 to your computer and use it in GitHub Desktop.
Save gshackles/4015421 to your computer and use it in GitHub Desktop.
[TestFixture]
public class SubViewModelTests
{
[Test]
public void RequestSubNavigate_NavigatesToChildViewModel_PassesInMessageId()
{
var parentViewModel = new ParentViewModel();
parentViewModel.GoToChildViewCommand.Execute();
Assert.AreEqual(1, Dispatcher.NavigateRequests.Count);
var request = Dispatcher.NavigateRequests.First();
Assert.That(request.ViewModelType == typeof(ChildViewModel));
Assert.That(request.ParameterValues.ContainsKey("messageId"));
}
[Test]
public void RequestSubNavigate_ResultMessageReceived_ParentIsNotifiedAndUnsubscribes()
{
var parentViewModel = new ParentViewModel();
parentViewModel.GoToChildViewCommand.Execute();
var messageId = Dispatcher.NavigateRequests.First().ParameterValues["messageId"];
MessengerHub.Publish(new SubNavigationResultMessage<string>(this, messageId, "Result 1"));
Assert.AreEqual("Result 1", parentViewModel.LastResult);
MessengerHub.Publish(new SubNavigationResultMessage<string>(this, messageId, "Result 2"));
Assert.AreEqual("Result 1", parentViewModel.LastResult);
}
[Test]
public void ChildView_ReturnsResult_ParentIsNotifiedAndUnsubscribes()
{
var parentViewModel = new ParentViewModel();
parentViewModel.GoToChildViewCommand.Execute();
var messageId = Dispatcher.NavigateRequests.First().ParameterValues["messageId"];
var childViewModel = new ChildViewModel(messageId);
childViewModel.ReturnResult("Result 1");
Assert.AreEqual("Result 1", parentViewModel.LastResult);
var secondChildViewModel = new ChildViewModel(messageId);
secondChildViewModel.ReturnResult("Result 2");
Assert.AreEqual("Result 1", parentViewModel.LastResult);
}
public class ParentViewModel : ViewModelBase
{
public string LastResult { get; private set; }
public IMvxCommand GoToChildViewCommand
{
get { return new MvxRelayCommand(() => RequestSubNavigate<ChildViewModel, string>(null, onResult)); }
}
private void onResult(string result)
{
LastResult = result;
}
}
public class ChildViewModel : SubViewModelBase<string>
{
public ChildViewModel(string messageId)
: base(messageId)
{
}
public new void ReturnResult(string result)
{
base.ReturnResult(result);
}
public new void Cancel()
{
base.Cancel();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment