public void SprintViewModel_Dispose_Ok() { // creates a Item ViewModel IEventAggregator aggregator = new ScrumFactory.Composition.EventAggregator(); ViewModel.SprintViewModel viewModel = new ViewModel.SprintViewModel( null, null, aggregator, new Sprint(), null, null, null); // creates the view FakeView view = new FakeView(); view.Model = viewModel; // clears VM reference WeakReference sprintVMRef = new WeakReference(viewModel); viewModel.Dispose(); viewModel = null; view.Model = null; GC.Collect(); GC.WaitForPendingFinalizers(); Assert.IsNull(sprintVMRef.Target, "ViewModel was not garbage collected. Check OnDispose method to see if all Commands and Events were unsubscribed"); }
private void AfterAddSprint(Sprint newSprint, ICollection<BacklogItem> defaultItems) { Backlog.GroupList.LoadGroupsIfNotLoaded(); Project.Sprints.Add(newSprint); ViewModel.SprintViewModel sprintVM = new ViewModel.SprintViewModel( projectsService, executor, aggregator, newSprint, Items, SFConfig, calendar); if (defaultItems != null) { foreach (BacklogItem item in defaultItems) { BacklogItemViewModel vm = new BacklogItemViewModel(backlogService, executor, aggregator, authorizator, Project, item, SFConfig); Items.Add(vm); vm.NotifyAdded(); } } SprintPlans.Add(sprintVM); sprintVM.RefreshUI(); sprintVM.NotifyAdded(); aggregator.Publish<Sprint>(ScrumFactoryEvent.SprintAdded, newSprint); IsLoadingData = false; }