public async Task CloseAfterCloseProtection() { var auditor = new TestAuditor(); AuditingManager.RegisterAuditor(auditor); var vm = new TestViewModel(); Assert.AreEqual(false, auditor.OnViewModelClosedCalled); await vm.CloseViewModelAsync(null); Assert.AreEqual(true, auditor.OnViewModelClosedCalled); auditor.OnViewModelClosedCalled = false; await vm.CloseViewModelAsync(null); Assert.AreEqual(false, auditor.OnViewModelClosedCalled); }
public async Task ViewModelWithViewModelToModelMappings_DoNotMapWhenViewModelIsClosed() { var person = new Person(); var viewModel = new TestViewModel(person, true); Assert.AreNotEqual("test1", person.FirstName); viewModel.FirstName = "test1"; Assert.AreEqual("test1", person.FirstName); await viewModel.CloseViewModelAsync(true); viewModel.FirstName = "test2"; Assert.AreEqual("test1", person.FirstName); }
public async Task RegisterChildViewModel_RemovedViaClosingChildViewModel() { bool validationTriggered = false; var validatedEvent = new ManualResetEvent(false); var person = new Person(); person.FirstName = "first name"; person.LastName = "last name"; var viewModel = new TestViewModel(); var childViewModel = new TestViewModel(person); Assert.IsFalse(childViewModel.HasErrors); ((IRelationalViewModel)viewModel).RegisterChildViewModel(childViewModel); ((IModelValidation)viewModel).Validating += delegate { validationTriggered = true; validatedEvent.Set(); }; childViewModel.FirstName = string.Empty; #if NET validatedEvent.WaitOne(2000, false); #else validatedEvent.WaitOne(2000); #endif Assert.IsTrue(validationTriggered, "Validating event is not triggered"); await childViewModel.CloseViewModelAsync(null); validationTriggered = false; validatedEvent.Reset(); #if NET validatedEvent.WaitOne(2000, false); #else validatedEvent.WaitOne(2000); #endif Assert.IsFalse(validationTriggered, "Validating event should not be triggered because child view model is removed"); }