From 00e5a5206b8b4b76b5a0306698c9846dbf85f1a8 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Tue, 5 Apr 2011 19:17:57 +0100 Subject: [PATCH] Prevent package install/uninstall events being captured by closed Add Package Reference dialog. --- .../Project/Src/AddPackageReferenceCommand.cs | 5 +- .../Project/Src/AddPackageReferenceView.xaml | 10 +- .../Src/AddPackageReferenceViewModel.cs | 45 ++++----- .../Project/Src/InstalledPackagesViewModel.cs | 14 ++- .../Project/Src/PackagesViewModel.cs | 91 +++++++------------ .../Project/Src/RecentPackagesViewModel.cs | 14 ++- .../Project/Src/ViewModelLocator.cs | 4 +- .../Src/AddPackageReferenceViewModelTests.cs | 44 +++++++++ .../Src/InstalledPackagesViewModelTests.cs | 54 +++++++++-- .../Test/Src/PackagesViewModelTests.cs | 17 ++++ .../Test/Src/RecentPackagesViewModelTests.cs | 56 ++++++++++-- 11 files changed, 236 insertions(+), 118 deletions(-) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceCommand.cs b/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceCommand.cs index c3f90e14f2..fa7005bf00 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceCommand.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceCommand.cs @@ -12,9 +12,12 @@ namespace ICSharpCode.PackageManagement { public override void Run() { - AddPackageReferenceView view = new AddPackageReferenceView(); + var view = new AddPackageReferenceView(); view.Owner = WorkbenchSingleton.MainWindow; view.ShowDialog(); + + var viewModel = view.MainPanel.DataContext as AddPackageReferenceViewModel; + viewModel.Dispose(); } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceView.xaml b/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceView.xaml index c78e24646f..a5e1f4b9de 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceView.xaml +++ b/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceView.xaml @@ -21,7 +21,7 @@ UriSource="pack://application:,,,/PackageManagement;component/Resources/exclamation.png"/> - + @@ -54,22 +54,22 @@ diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceViewModel.cs index cbd74993d7..51289e2004 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceViewModel.cs @@ -8,13 +8,9 @@ using NuGet; namespace ICSharpCode.PackageManagement { - public class AddPackageReferenceViewModel : ViewModelBase, IMessageReporter + public class AddPackageReferenceViewModel : ViewModelBase, IMessageReporter, IDisposable { IPackageManagementService packageManagementService; - InstalledPackagesViewModel installedPackagesViewModel; - AvailablePackagesViewModel availablePackagesViewModel; - UpdatedPackagesViewModel updatedPackagesViewModel; - RecentPackagesViewModel recentPackagesViewModel; string message; bool hasError; @@ -25,31 +21,28 @@ namespace ICSharpCode.PackageManagement this.packageManagementService = packageManagementService; this.packageManagementService.OutputMessagesView.Clear(); - availablePackagesViewModel = new AvailablePackagesViewModel(packageManagementService, this, taskFactory); - installedPackagesViewModel = new InstalledPackagesViewModel(packageManagementService, this, taskFactory); - updatedPackagesViewModel = new UpdatedPackagesViewModel(packageManagementService, this, taskFactory); - recentPackagesViewModel = new RecentPackagesViewModel(packageManagementService, this, taskFactory); + AvailablePackagesViewModel = new AvailablePackagesViewModel(packageManagementService, this, taskFactory); + InstalledPackagesViewModel = new InstalledPackagesViewModel(packageManagementService, this, taskFactory); + UpdatedPackagesViewModel = new UpdatedPackagesViewModel(packageManagementService, this, taskFactory); + RecentPackagesViewModel = new RecentPackagesViewModel(packageManagementService, this, taskFactory); - availablePackagesViewModel.ReadPackages(); - installedPackagesViewModel.ReadPackages(); - updatedPackagesViewModel.ReadPackages(); - recentPackagesViewModel.ReadPackages(); + AvailablePackagesViewModel.ReadPackages(); + InstalledPackagesViewModel.ReadPackages(); + UpdatedPackagesViewModel.ReadPackages(); + RecentPackagesViewModel.ReadPackages(); } - public InstalledPackagesViewModel InstalledPackagesViewModel { - get { return installedPackagesViewModel; } - } - - public AvailablePackagesViewModel AvailablePackagesViewModel { - get { return availablePackagesViewModel; } - } + public AvailablePackagesViewModel AvailablePackagesViewModel { get; private set; } + public InstalledPackagesViewModel InstalledPackagesViewModel { get; private set; } + public RecentPackagesViewModel RecentPackagesViewModel { get; private set; } + public UpdatedPackagesViewModel UpdatedPackagesViewModel { get; private set; } - public UpdatedPackagesViewModel UpdatedPackagesViewModel { - get { return updatedPackagesViewModel; } - } - - public RecentPackagesViewModel RecentPackagesViewModel { - get { return recentPackagesViewModel; } + public void Dispose() + { + AvailablePackagesViewModel.Dispose(); + InstalledPackagesViewModel.Dispose(); + RecentPackagesViewModel.Dispose(); + UpdatedPackagesViewModel.Dispose(); } public void ShowErrorMessage(string message) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackagesViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackagesViewModel.cs index e8dcdfa0d3..f1852ff7ff 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackagesViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackagesViewModel.cs @@ -20,8 +20,8 @@ namespace ICSharpCode.PackageManagement ITaskFactory taskFactory) : base(packageManagementService, messageReporter, taskFactory) { - packageManagementService.ParentPackageInstalled += PackageInstalled; - packageManagementService.ParentPackageUninstalled += PackageUninstalled; + packageManagementService.ParentPackageInstalled += ParentPackageInstalled; + packageManagementService.ParentPackageUninstalled += ParentPackageUninstalled; GetActiveProjectManager(); } @@ -35,16 +35,22 @@ namespace ICSharpCode.PackageManagement } } - void PackageInstalled(object sender, EventArgs e) + void ParentPackageInstalled(object sender, EventArgs e) { ReadPackages(); } - void PackageUninstalled(object sender, EventArgs e) + void ParentPackageUninstalled(object sender, EventArgs e) { ReadPackages(); } + protected override void OnDispose() + { + PackageManagementService.ParentPackageInstalled -= ParentPackageInstalled; + PackageManagementService.ParentPackageUninstalled -= ParentPackageUninstalled; + } + protected override void UpdateRepositoryBeforeReadPackagesTaskStarts() { if (projectManager != null) { diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs index 0489523f8f..5a6e31ec5a 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs @@ -11,27 +11,15 @@ using NuGet; namespace ICSharpCode.PackageManagement { - public abstract class PackagesViewModel : ViewModelBase + public abstract class PackagesViewModel : ViewModelBase, IDisposable { - DelegateCommand showNextPageCommand; - DelegateCommand showPreviousPageCommand; - DelegateCommand showPageCommand; - DelegateCommand searchCommand; - - ObservableCollection packageViewModels = - new ObservableCollection(); Pages pages = new Pages(); IPackageManagementService packageManagementService; IPackageViewModelFactory packageViewModelFactory; ITaskFactory taskFactory; IEnumerable allPackages; - string searchTerms; - bool isReadingPackages; ITask task; - int totalItems; - bool hasError; - string errorMessage = String.Empty; public PackagesViewModel( IPackageManagementService packageManagementService, @@ -65,54 +53,48 @@ namespace ICSharpCode.PackageManagement this.packageManagementService = packageManagementService; this.packageViewModelFactory = packageViewModelFactory; this.taskFactory = taskFactory; + + PackageViewModels = new ObservableCollection(); + ErrorMessage = String.Empty; CreateCommands(); } void CreateCommands() { - showNextPageCommand = new DelegateCommand(param => ShowNextPage()); - showPreviousPageCommand = new DelegateCommand(param => ShowPreviousPage()); - showPageCommand = new DelegateCommand(param => ExecuteShowPageCommand(param)); - searchCommand = new DelegateCommand(param => Search()); - } - - public ICommand ShowNextPageCommand { - get { return showNextPageCommand; } + ShowNextPageCommand = new DelegateCommand(param => ShowNextPage()); + ShowPreviousPageCommand = new DelegateCommand(param => ShowPreviousPage()); + ShowPageCommand = new DelegateCommand(param => ExecuteShowPageCommand(param)); + SearchCommand = new DelegateCommand(param => Search()); } - public ICommand ShowPreviousPageCommand { - get { return showPreviousPageCommand; } - } + public ICommand ShowNextPageCommand { get; private set; } + public ICommand ShowPreviousPageCommand { get; private set; } + public ICommand ShowPageCommand { get; private set; } + public ICommand SearchCommand { get; private set; } - public ICommand ShowPageCommand { - get { return showPageCommand; } + public void Dispose() + { + OnDispose(); + IsDisposed = true; } - public ICommand SearchCommand { - get { return searchCommand; } + protected virtual void OnDispose() + { } - public bool HasError { - get { return hasError; } - } + public bool IsDisposed { get; private set; } - public string ErrorMessage { - get { return errorMessage; } - } + public bool HasError { get; private set; } + public string ErrorMessage { get; private set; } - public ObservableCollection PackageViewModels { - get { return packageViewModels; } - set { packageViewModels = value; } - } + public ObservableCollection PackageViewModels { get; set; } public IPackageManagementService PackageManagementService { get { return packageManagementService; } } - public bool IsReadingPackages { - get { return isReadingPackages; } - } + public bool IsReadingPackages { get; private set; } public void ReadPackages() { @@ -124,8 +106,8 @@ namespace ICSharpCode.PackageManagement void StartReadPackagesTask() { - isReadingPackages = true; - hasError = false; + IsReadingPackages = true; + HasError = false; ClearPackages(); CancelReadPackagesTask(); CreateReadPackagesTask(); @@ -153,12 +135,12 @@ namespace ICSharpCode.PackageManagement PackagesForSelectedPageResult GetPackagesForSelectedPageResult() { IEnumerable packages = GetPackagesForSelectedPage(); - return new PackagesForSelectedPageResult(packages, totalItems); + return new PackagesForSelectedPageResult(packages, TotalItems); } void OnPackagesReadForSelectedPage(ITask task) { - isReadingPackages = false; + IsReadingPackages = false; if (task.IsFaulted) { SaveError(task.Exception); } else if (task.IsCancelled) { @@ -176,8 +158,8 @@ namespace ICSharpCode.PackageManagement protected void SaveError(Exception ex) { - hasError = true; - errorMessage = ex.Message; + HasError = true; + ErrorMessage = ex.Message; } void UpdatePackagesForSelectedPage(PackagesForSelectedPageResult result) @@ -205,7 +187,7 @@ namespace ICSharpCode.PackageManagement IQueryable packages = GetAllPackages(); packages = OrderPackages(packages); packages = FilterPackagesBySearchCriteria(packages); - totalItems = packages.Count(); + TotalItems = packages.Count(); allPackages = GetFilteredPackagesBeforePagingResults(packages); } return allPackages; @@ -225,10 +207,10 @@ namespace ICSharpCode.PackageManagement string GetSearchCriteria() { - if (String.IsNullOrWhiteSpace(searchTerms)) { + if (String.IsNullOrWhiteSpace(SearchTerms)) { return null; } - return searchTerms; + return SearchTerms; } protected virtual IQueryable FilterPackagesBySearchCriteria(IQueryable packages, string searchCriteria) @@ -333,9 +315,7 @@ namespace ICSharpCode.PackageManagement set { pages.MaximumSelectablePages = value; } } - public int TotalItems { - get { return totalItems; } - } + public int TotalItems { get; private set; } public void ShowNextPage() { @@ -360,10 +340,7 @@ namespace ICSharpCode.PackageManagement public bool IsSearchable { get; set; } - public string SearchTerms { - get { return searchTerms; } - set { searchTerms = value; } - } + public string SearchTerms { get; set; } public void Search() { diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/RecentPackagesViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/RecentPackagesViewModel.cs index aafb0cddf7..e3f2a8e1b5 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/RecentPackagesViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/RecentPackagesViewModel.cs @@ -18,20 +18,26 @@ namespace ICSharpCode.PackageManagement : base(packageManagementService, messageReporter, taskFactory) { recentPackageRepository = packageManagementService.RecentPackageRepository; - packageManagementService.ParentPackageInstalled += PackageInstalled; - packageManagementService.ParentPackageUninstalled += PackageUninstalled; + packageManagementService.ParentPackageInstalled += ParentPackageInstalled; + packageManagementService.ParentPackageUninstalled += ParentPackageUninstalled; } - void PackageInstalled(object sender, EventArgs e) + void ParentPackageInstalled(object sender, EventArgs e) { ReadPackages(); } - void PackageUninstalled(object sender, EventArgs e) + void ParentPackageUninstalled(object sender, EventArgs e) { ReadPackages(); } + protected override void OnDispose() + { + PackageManagementService.ParentPackageInstalled -= ParentPackageInstalled; + PackageManagementService.ParentPackageUninstalled -= ParentPackageUninstalled; + } + protected override IQueryable GetAllPackages() { return recentPackageRepository.GetPackages(); diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ViewModelLocator.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ViewModelLocator.cs index dfc65ec56f..c2e237b117 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/ViewModelLocator.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/ViewModelLocator.cs @@ -16,9 +16,7 @@ namespace ICSharpCode.PackageManagement public AddPackageReferenceViewModel AddPackageReferenceViewModel { get { - if (addPackageReferenceViewModel == null) { - CreateAddPackageReferenceViewModel(); - } + CreateAddPackageReferenceViewModel(); return addPackageReferenceViewModel; } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/AddPackageReferenceViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/AddPackageReferenceViewModelTests.cs index a9023cb62c..85f4fbba83 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/AddPackageReferenceViewModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/AddPackageReferenceViewModelTests.cs @@ -215,5 +215,49 @@ namespace PackageManagement.Tests Assert.IsFalse(viewModel.HasError); } + + [Test] + public void Dispose_ContainedViewModelsAreDisposed_AvailablePackagesViewModelIsDisposed() + { + CreateViewModel(); + viewModel.Dispose(); + + bool disposed = viewModel.AvailablePackagesViewModel.IsDisposed; + + Assert.IsTrue(disposed); + } + + [Test] + public void Dispose_ContainedViewModelsAreDisposed_InstaledPackagesViewModelIsDisposed() + { + CreateViewModel(); + viewModel.Dispose(); + + bool disposed = viewModel.InstalledPackagesViewModel.IsDisposed; + + Assert.IsTrue(disposed); + } + + [Test] + public void Dispose_ContainedViewModelsAreDisposed_UpdatedPackagesViewModelIsDisposed() + { + CreateViewModel(); + viewModel.Dispose(); + + bool disposed = viewModel.UpdatedPackagesViewModel.IsDisposed; + + Assert.IsTrue(disposed); + } + + [Test] + public void Dispose_ContainedViewModelsAreDisposed_RecentPackagesViewModelIsDisposed() + { + CreateViewModel(); + viewModel.Dispose(); + + bool disposed = viewModel.RecentPackagesViewModel.IsDisposed; + + Assert.IsTrue(disposed); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/InstalledPackagesViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/InstalledPackagesViewModelTests.cs index d89b736732..abc68d2a99 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/InstalledPackagesViewModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/InstalledPackagesViewModelTests.cs @@ -51,16 +51,21 @@ namespace PackageManagement.Tests taskFactory.ClearAllFakeTasks(); } + FakePackage AddPackageToProjectManagerLocalPackageRepository() + { + var package = new FakePackage("Test"); + FakePackageRepository repository = packageManagementService.FakeActiveProjectManager.FakeLocalRepository; + repository.FakePackages.Add(package); + return package; + } + [Test] public void PackageViewModels_PackageReferenceIsAdded_PackageViewModelsIsUpdated() { CreateViewModel(); viewModel.ReadPackages(); CompleteReadPackagesTask(); - FakePackage package = new FakePackage(); - package.Id = "Test"; - FakePackageRepository repository = packageManagementService.FakeActiveProjectManager.FakeLocalRepository; - repository.FakePackages.Add(package); + FakePackage package = AddPackageToProjectManagerLocalPackageRepository(); ClearReadPackagesTasks(); packageManagementService.FireParentPackageInstalled(); @@ -74,14 +79,11 @@ namespace PackageManagement.Tests public void PackageViewModels_PackageReferenceIsRemoved_PackageViewModelsIsUpdated() { CreateViewModel(); - FakePackage package = new FakePackage(); - package.Id = "Test"; - FakePackageRepository repository = packageManagementService.FakeActiveProjectManager.FakeLocalRepository; - repository.FakePackages.Add(package); + FakePackage package = AddPackageToProjectManagerLocalPackageRepository(); viewModel.ReadPackages(); CompleteReadPackagesTask(); - repository.FakePackages.Clear(); + packageManagementService.FakeActiveProjectManager.FakeLocalRepository.FakePackages.Clear(); ClearReadPackagesTasks(); packageManagementService.FireParentPackageUninstalled(); @@ -115,5 +117,39 @@ namespace PackageManagement.Tests Assert.AreEqual(1, viewModel.PackageViewModels.Count); } + + [Test] + public void PackageViewModels_PackageReferenceIsAddedAfterViewModelIsDisposed_PackageViewModelsIsNotUpdated() + { + CreateViewModel(); + viewModel.ReadPackages(); + CompleteReadPackagesTask(); + FakePackage package = AddPackageToProjectManagerLocalPackageRepository(); + + ClearReadPackagesTasks(); + viewModel.Dispose(); + packageManagementService.FireParentPackageInstalled(); + CompleteReadPackagesTask(); + + Assert.AreEqual(0, viewModel.PackageViewModels.Count); + } + + [Test] + public void PackageViewModels_PackageReferenceIsRemovedAfterViewModelIsDisposed_PackageViewModelsIsNotUpdated() + { + CreateViewModel(); + FakePackage package = AddPackageToProjectManagerLocalPackageRepository(); + viewModel.ReadPackages(); + CompleteReadPackagesTask(); + + packageManagementService.FakeActiveProjectManager.FakeLocalRepository.FakePackages.Clear(); + + ClearReadPackagesTasks(); + viewModel.Dispose(); + packageManagementService.FireParentPackageUninstalled(); + CompleteReadPackagesTask(); + + Assert.AreEqual(1, viewModel.PackageViewModels.Count); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackagesViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackagesViewModelTests.cs index 6ac63134b7..672275377c 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackagesViewModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackagesViewModelTests.cs @@ -1235,5 +1235,22 @@ namespace PackageManagement.Tests Assert.IsNull(viewModel.SearchCriteriaPassedToFilterPackagesBySearchCriteria); } + + [Test] + public void IsDisposed_DisposeMethodCalled_ReturnsTrue() + { + CreateViewModel(); + viewModel.Dispose(); + + Assert.IsTrue(viewModel.IsDisposed); + } + + [Test] + public void IsDisposed_DisposeMethodNotCalled_ReturnsFalse() + { + CreateViewModel(); + + Assert.IsFalse(viewModel.IsDisposed); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/RecentPackagesViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/RecentPackagesViewModelTests.cs index 1e7ebbb893..2fe8c0e2fe 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/RecentPackagesViewModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/RecentPackagesViewModelTests.cs @@ -31,7 +31,7 @@ namespace PackageManagement.Tests { taskFactory = new FakeTaskFactory(); var messageReporter = new FakeMessageReporter(); - viewModel = new RecentPackagesViewModel(packageManagementService, messageReporter, taskFactory); + viewModel = new RecentPackagesViewModel(packageManagementService, messageReporter, taskFactory); } void CompleteReadPackagesTask() @@ -43,6 +43,14 @@ namespace PackageManagement.Tests { taskFactory.ClearAllFakeTasks(); } + + FakePackage AddPackageToRecentPackageRepository() + { + var package = new FakePackage("Test"); + FakePackageRepository repository = packageManagementService.FakeRecentPackageRepository; + repository.FakePackages.Add(package); + return package; + } [Test] public void PackageViewModels_PackageIsInstalledAfterRecentPackagesDisplayed_PackagesOnDisplayAreUpdated() @@ -50,9 +58,7 @@ namespace PackageManagement.Tests CreateViewModel(); viewModel.ReadPackages(); CompleteReadPackagesTask(); - var package = new FakePackage("Test"); - FakePackageRepository repository = packageManagementService.FakeRecentPackageRepository; - repository.FakePackages.Add(package); + var package = AddPackageToRecentPackageRepository(); ClearReadPackagesTasks(); packageManagementService.FireParentPackageInstalled(); @@ -61,7 +67,7 @@ namespace PackageManagement.Tests var expectedPackages = new FakePackage[] { package }; - + PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels); } @@ -71,9 +77,7 @@ namespace PackageManagement.Tests CreateViewModel(); viewModel.ReadPackages(); CompleteReadPackagesTask(); - var package = new FakePackage("Test"); - FakePackageRepository repository = packageManagementService.FakeRecentPackageRepository; - repository.FakePackages.Add(package); + var package = AddPackageToRecentPackageRepository(); ClearReadPackagesTasks(); packageManagementService.FireParentPackageUninstalled(); @@ -82,8 +86,42 @@ namespace PackageManagement.Tests var expectedPackages = new FakePackage[] { package }; - + PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels); } + + [Test] + public void PackageViewModels_PackageIsUninstalledAfterViewModelIsDisposed_PackagesOnDisplayAreNotUpdated() + { + CreateViewModel(); + viewModel.ReadPackages(); + CompleteReadPackagesTask(); + AddPackageToRecentPackageRepository(); + + ClearReadPackagesTasks(); + viewModel.Dispose(); + + packageManagementService.FireParentPackageUninstalled(); + CompleteReadPackagesTask(); + + Assert.AreEqual(0, viewModel.PackageViewModels.Count); + } + + [Test] + public void PackageViewModels_PackageIsInstalledAfterViewModelIsDisposed_PackagesOnDisplayAreNotUpdated() + { + CreateViewModel(); + viewModel.ReadPackages(); + CompleteReadPackagesTask(); + AddPackageToRecentPackageRepository(); + + ClearReadPackagesTasks(); + + viewModel.Dispose(); + packageManagementService.FireParentPackageInstalled(); + CompleteReadPackagesTask(); + + Assert.AreEqual(0, viewModel.PackageViewModels.Count); + } } }