Created
November 5, 2012 04:55
-
-
Save gshackles/4015421 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[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