Browse Source

Show error messages in Add Package Reference dialog.

pull/15/head
mrward 15 years ago
parent
commit
a4d467fb87
  1. 25
      src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackagesViewModel.cs
  2. 6
      src/AddIns/Misc/PackageManagement/Project/Src/PackagesView.xaml
  3. 34
      src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs
  4. 2
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeTask.cs
  5. 44
      src/AddIns/Misc/PackageManagement/Test/Src/InstalledPackagesViewModelTests.cs
  6. 37
      src/AddIns/Misc/PackageManagement/Test/Src/PackagesViewModelTests.cs

25
src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackagesViewModel.cs

@ -10,6 +10,9 @@ namespace ICSharpCode.PackageManagement @@ -10,6 +10,9 @@ namespace ICSharpCode.PackageManagement
{
public class InstalledPackagesViewModel : PackagesViewModel
{
IProjectManager projectManager;
string errorMessage = String.Empty;
public InstalledPackagesViewModel(
IPackageManagementService packageManagementService,
ITaskFactory taskFactory)
@ -17,8 +20,20 @@ namespace ICSharpCode.PackageManagement @@ -17,8 +20,20 @@ namespace ICSharpCode.PackageManagement
{
packageManagementService.PackageInstalled += PackageInstalled;
packageManagementService.PackageUninstalled += PackageUninstalled;
GetActiveProjectManager();
}
void GetActiveProjectManager()
{
try {
this.projectManager = PackageManagementService.ActiveProjectManager;
} catch (Exception ex) {
SaveError(ex);
errorMessage = ErrorMessage;
}
}
void PackageInstalled(object sender, EventArgs e)
{
ReadPackages();
@ -37,7 +52,15 @@ namespace ICSharpCode.PackageManagement @@ -37,7 +52,15 @@ namespace ICSharpCode.PackageManagement
IPackageRepository GetRepository()
{
return ProjectManager.LocalRepository;
if (projectManager == null) {
ThrowOriginalExceptionWhenTryingToGetProjectManager();
}
return projectManager.LocalRepository;
}
void ThrowOriginalExceptionWhenTryingToGetProjectManager()
{
throw new ApplicationException(errorMessage);
}
}
}

6
src/AddIns/Misc/PackageManagement/Project/Src/PackagesView.xaml

@ -240,6 +240,12 @@ @@ -240,6 +240,12 @@
Visibility="{Binding Path=IsReadingPackages, Converter={StaticResource BoolToVisibility}}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<TextBlock
x:Name="ErrorMessageText"
Grid.Row="0"
Visibility="{Binding Path=HasError, Converter={StaticResource BoolToVisibility}}"
Text="{Binding Path=ErrorMessage}"
TextWrapping="Wrap"/>
<pm:PagedResultsView
x:Name="pagedResultsView"
Grid.Row="1"

34
src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs

@ -25,7 +25,6 @@ namespace ICSharpCode.PackageManagement @@ -25,7 +25,6 @@ namespace ICSharpCode.PackageManagement
IPackageManagementService packageManagementService;
IPackageViewModelFactory packageViewModelFactory;
ITaskFactory taskFactory;
IProjectManager projectManager;
IEnumerable<IPackage> allPackages;
string searchTerms;
bool isReadingPackages;
@ -61,27 +60,10 @@ namespace ICSharpCode.PackageManagement @@ -61,27 +60,10 @@ namespace ICSharpCode.PackageManagement
this.packageManagementService = packageManagementService;
this.packageViewModelFactory = packageViewModelFactory;
this.taskFactory = taskFactory;
GetActiveProjectManager();
CreateCommands();
}
void GetActiveProjectManager()
{
try {
this.projectManager = packageManagementService.ActiveProjectManager;
} catch (Exception ex) {
SaveError(ex);
}
}
void SaveError(Exception ex)
{
hasError = true;
errorMessage = ex.Message;
}
void CreateCommands()
{
showNextPageCommand = new DelegateCommand(param => ShowNextPage());
@ -123,10 +105,6 @@ namespace ICSharpCode.PackageManagement @@ -123,10 +105,6 @@ namespace ICSharpCode.PackageManagement
get { return packageManagementService; }
}
public IProjectManager ProjectManager {
get { return projectManager; }
}
public bool IsReadingPackages {
get { return isReadingPackages; }
}
@ -141,6 +119,7 @@ namespace ICSharpCode.PackageManagement @@ -141,6 +119,7 @@ namespace ICSharpCode.PackageManagement
void StartReadPackagesTask()
{
isReadingPackages = true;
hasError = false;
ClearPackages();
CancelReadPackagesTask();
CreateReadPackagesTask();
@ -180,6 +159,17 @@ namespace ICSharpCode.PackageManagement @@ -180,6 +159,17 @@ namespace ICSharpCode.PackageManagement
base.OnPropertyChanged(null);
}
protected void SaveError(AggregateException ex)
{
SaveError(ex.InnerException);
}
protected void SaveError(Exception ex)
{
hasError = true;
errorMessage = ex.Message;
}
void UpdatePackagesForSelectedPage(PackagesForSelectedPageResult result)
{
pages.CollectionChanged -= PagesChanged;

2
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeTask.cs

@ -18,7 +18,7 @@ namespace PackageManagement.Tests.Helpers @@ -18,7 +18,7 @@ namespace PackageManagement.Tests.Helpers
{
this.function = function;
this.continueWith = continueWith;
Exception = new AggregateException();
Exception = new AggregateException(new Exception("FakeTaskAggregateInnerException"));
}
public void Start()

44
src/AddIns/Misc/PackageManagement/Test/Src/InstalledPackagesViewModelTests.cs

@ -18,10 +18,20 @@ namespace PackageManagement.Tests @@ -18,10 +18,20 @@ namespace PackageManagement.Tests
FakeTaskFactory taskFactory;
void CreateViewModel()
{
CreatePackageManagementService();
CreateViewModel(packageManagementService);
}
void CreatePackageManagementService()
{
packageManagementService = new FakePackageManagementService();
}
void CreateViewModel(FakePackageManagementService packageManagementService)
{
taskFactory = new FakeTaskFactory();
viewModel = new InstalledPackagesViewModel(packageManagementService, taskFactory);
viewModel = new InstalledPackagesViewModel(packageManagementService, taskFactory);
}
void CompleteReadPackagesTask()
@ -72,5 +82,37 @@ namespace PackageManagement.Tests @@ -72,5 +82,37 @@ namespace PackageManagement.Tests
Assert.AreEqual(0, viewModel.PackageViewModels.Count);
}
[Test]
public void HasError_ActiveProjectManagerThrowsException_ReturnsTrue()
{
CreatePackageManagementService();
packageManagementService.ActiveProjectManagerExeptionToThrow = new Exception();
CreateViewModel(packageManagementService);
Assert.IsTrue(viewModel.HasError);
}
[Test]
public void ErrorMessage_ActiveProjectManagerThrowsException_ReturnsErrorMessageFromException()
{
CreatePackageManagementService();
packageManagementService.ActiveProjectManagerExeptionToThrow = new Exception("Test");
CreateViewModel(packageManagementService);
Assert.AreEqual("Test", viewModel.ErrorMessage);
}
[Test]
public void ReadPackages_ActiveProjectManagerThrowsException_ErrorMessageFromExceptionNotOverriddenByReadPackagesCall()
{
CreatePackageManagementService();
packageManagementService.ActiveProjectManagerExeptionToThrow = new Exception("Test");
CreateViewModel(packageManagementService);
viewModel.ReadPackages();
ApplicationException ex = Assert.Throws<ApplicationException>(() => CompleteReadPackagesTask());
Assert.AreEqual("Test", ex.Message);
}
}
}

37
src/AddIns/Misc/PackageManagement/Test/Src/PackagesViewModelTests.cs

@ -1079,8 +1079,10 @@ namespace PackageManagement.Tests @@ -1079,8 +1079,10 @@ namespace PackageManagement.Tests
CreateViewModel();
viewModel.AddSixFakePackages();
viewModel.ReadPackages();
AggregateException ex = new AggregateException("Test");
taskFactory.FirstFakeTaskCreated.Exception = ex;
Exception ex = new Exception("Test");
AggregateException aggregateEx = new AggregateException(ex);
taskFactory.FirstFakeTaskCreated.Exception = aggregateEx;
taskFactory.FirstFakeTaskCreated.IsFaulted = true;
CompleteReadPackagesTask();
@ -1088,13 +1090,34 @@ namespace PackageManagement.Tests @@ -1088,13 +1090,34 @@ namespace PackageManagement.Tests
}
[Test]
public void Constructor_ActiveProjectManagerThrowsException_HasErrorReturnsTrue()
public void HasError_ErrorMessageDisplayedAndReadPackagesRetriedAfterFailure_ReturnsFalse()
{
CreatePackageManagementService();
packageManagementService.ActiveProjectManagerExeptionToThrow = new Exception();
CreateViewModel(packageManagementService);
CreateViewModel();
viewModel.ReadPackages();
taskFactory.FirstFakeTaskCreated.IsFaulted = true;
CompleteReadPackagesTask();
viewModel.ReadPackages();
Assert.IsTrue(viewModel.HasError);
Assert.IsFalse(viewModel.HasError);
}
[Test]
public void HasError_ErrorMessageDisplayedAndSelectedPageChangedAfterFailure_ReturnsFalse()
{
CreateViewModel();
viewModel.PageSize = 2;
viewModel.AddSixFakePackages();
viewModel.ReadPackages();
CompleteReadPackagesTask();
ClearReadPackagesTasks();
viewModel.SelectedPageNumber = 2;
taskFactory.FirstFakeTaskCreated.IsFaulted = true;
CompleteReadPackagesTask();
viewModel.SelectedPageNumber = 3;
Assert.IsFalse(viewModel.HasError);
}
}
}

Loading…
Cancel
Save