From 5f38f57c059913e87460c9435a1c30e195921880 Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Sat, 16 Feb 2013 16:55:23 +0100 Subject: [PATCH] AddInSetupTests for AddIn uninstallation. Added skeletons of test classes for the view models. --- .../AddInManager2.Tests.csproj | 4 + .../AddInManager2.Tests/AddInSetupTests.cs | 92 +++++++++++++++++++ .../AvailableAddInsViewModelTests.cs | 28 ++++++ .../Fakes/FakeAddInManagerServices.cs | 51 ++++++++++ .../InstalledAddInsViewModelTests.cs | 37 ++++++++ .../UpdatedAddInsViewModelTests.cs | 28 ++++++ 6 files changed, 240 insertions(+) create mode 100644 src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs create mode 100644 src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeAddInManagerServices.cs create mode 100644 src/AddIns/Misc/AddInManager2/AddInManager2.Tests/InstalledAddInsViewModelTests.cs create mode 100644 src/AddIns/Misc/AddInManager2/AddInManager2.Tests/UpdatedAddInsViewModelTests.cs diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInManager2.Tests.csproj b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInManager2.Tests.csproj index 4de118de6f..ff6d433279 100644 --- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInManager2.Tests.csproj +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInManager2.Tests.csproj @@ -69,7 +69,9 @@ Configuration\GlobalAssemblyInfo.cs + + @@ -80,7 +82,9 @@ + + diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInSetupTests.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInSetupTests.cs index b2a60157b2..67b3a126f8 100644 --- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInSetupTests.cs +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInSetupTests.cs @@ -603,5 +603,97 @@ namespace ICSharpCode.AddInManager2.Tests Assert.That(addInUninstalledEventReceived, Is.False, "AddInUninstalled event sent with correct AddIn"); Assert.That(nuGetPackageUninstalled, Is.False, "Downloaded NuGet package should be uninstalled."); } + + [Test, Description("External AddIn must be uninstalled. Pending uninstallation must be cancellable.")] + public void UninstallValidAddInFromManifestAndCancel() + { + CreateAddIns(); + + // Prepare all (fake) services needed for AddInSetup and its instance, itself + PrepareAddInSetup(); + + // Prepare event handlers + bool addInUninstalledEventReceived = false; + _events.AddInUninstalled += delegate(object sender, AddInInstallationEventArgs e) + { + if (e.AddIn.Manifest.PrimaryIdentity == _addIn1.Manifest.PrimaryIdentity) + { + addInUninstalledEventReceived = true; + } + }; + + // Simulate an installed external AddIn + _sdAddInManagement.TempInstallDirectory = ""; + _sdAddInManagement.UserInstallDirectory = ""; + _sdAddInManagement.RegisteredAddIns.Add(_addIn1); + + // Remove the AddIn + _addInSetup.UninstallAddIn(_addIn1); + + Assert.That(_sdAddInManagement.RemovedExternalAddIns, Contains.Item(_addIn1), "AddIn must have been removed from external AddIns list."); + Assert.That(_sdAddInManagement.AddInsMarkedForRemoval, Contains.Item(_addIn1.Manifest.PrimaryIdentity), "AddIn must have been marked for removal on next startup."); + + Assert.That(addInUninstalledEventReceived, "AddInUninstalled event sent with correct AddIn"); + + // Cancel the uninstallation + _addInSetup.CancelUninstallation(_addIn1); + + // Check if uninstallation has been reverted + Assert.That(_sdAddInManagement.AddInsMarkedForRemoval.Contains(_addIn1.Manifest.PrimaryIdentity), Is.False, "AddIn must not be marked for removal any more."); + } + + [Test, Description("AddIn installed from a NuGet package must be uninstalled.")] + public void UninstallValidNuGetAddIn() + { + CreateAddIns(); + + // Create a fake package + FakePackage fakePackage = new FakePackage() + { + Id = _addIn1.Manifest.PrimaryIdentity, + Version = new SemanticVersion(_addIn1.Version) + }; + + // Prepare all (fake) services needed for AddInSetup and its instance, itself + PrepareAddInSetup(); + + // Prepare event handlers + bool addInUninstalledEventReceived = false; + _events.AddInUninstalled += delegate(object sender, AddInInstallationEventArgs e) + { + if (e.AddIn.Manifest.PrimaryIdentity == _addIn1.Manifest.PrimaryIdentity) + { + addInUninstalledEventReceived = true; + } + }; + + // Simulate an installed AddIn + _sdAddInManagement.TempInstallDirectory = ""; + _sdAddInManagement.UserInstallDirectory = ""; + _sdAddInManagement.RegisteredAddIns.Add(_addIn1); + + // Simulate the installed NuGet package in local repository + FakeCorePackageRepository localRepository = new FakeCorePackageRepository(); + _nuGet.FakeCorePackageManager.LocalRepository = localRepository; + localRepository.ReturnedPackages = (new IPackage[] { fakePackage }).AsQueryable(); + bool nuGetPackageUninstalled = false; + _nuGet.FakeCorePackageManager.UninstallPackageCallback = delegate(IPackage package, bool forceRemove, bool removeDependencies) + { + if ((package == fakePackage) && forceRemove && !removeDependencies) + { + nuGetPackageUninstalled = true; + } + }; + + // Remove the AddIn + _addInSetup.UninstallAddIn(_addIn1); + + Assert.That(addInUninstalledEventReceived, "AddInUninstalled event sent with correct AddIn"); + + // Simulate removing unreferenced NuGet packages + _addInSetup.RemoveUnreferencedNuGetPackages(); + + Assert.That(nuGetPackageUninstalled, Is.True, "NuGet package must be removed after restart."); + } } } diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs new file mode 100644 index 0000000000..400ff9e4f1 --- /dev/null +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs @@ -0,0 +1,28 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; + +namespace ICSharpCode.AddInManager2.Tests +{ + public class AvailableAddInsViewModelTests + { + FakeAddInManagerServices _services; + + public AvailableAddInsViewModelTests() + { + } + + [SetUp] + public void SetUp() + { + _services = new FakeAddInManagerServices(); + _services.Events = new AddInManagerEvents(); + _services.Setup = new FakeAddInSetup(); + _services.Settings = new FakeAddInManagerSettings(); + _services.SDAddInManagement = new FakeSDAddInManagement(); + _services.Repositories = new FakePackageRepositories(); + _services.NuGet = new FakeNuGetPackageManager(); + } + } +} diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeAddInManagerServices.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeAddInManagerServices.cs new file mode 100644 index 0000000000..65a650be82 --- /dev/null +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeAddInManagerServices.cs @@ -0,0 +1,51 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using ICSharpCode.AddInManager2.Model; + +namespace ICSharpCode.AddInManager2.Tests.Fakes +{ + public class FakeAddInManagerServices : IAddInManagerServices + { + public FakeAddInManagerServices() + { + } + + public IAddInManagerEvents Events + { + get; + set + } + + public IPackageRepositories Repositories + { + get; + set + } + + public IAddInSetup Setup + { + get; + set + } + + public INuGetPackageManager NuGet + { + get; + set + } + + public IAddInManagerSettings Settings + { + get; + set + } + + public ISDAddInManagement SDAddInManagement + { + get; + set + } + } +} diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/InstalledAddInsViewModelTests.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/InstalledAddInsViewModelTests.cs new file mode 100644 index 0000000000..6aaf467a80 --- /dev/null +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/InstalledAddInsViewModelTests.cs @@ -0,0 +1,37 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using ICSharpCode.AddInManager2.Model; +using ICSharpCode.AddInManager2.Tests.Fakes; +using NUnit.Framework; + +namespace ICSharpCode.AddInManager2.Tests +{ + public class InstalledAddInsViewModelTests + { + FakeAddInManagerServices _services; + + public InstalledAddInsViewModelTests() + { + } + + [SetUp] + public void SetUp() + { + _services = new FakeAddInManagerServices(); + _services.Events = new AddInManagerEvents(); + _services.Setup = new FakeAddInSetup(); + _services.Settings = new FakeAddInManagerSettings(); + _services.SDAddInManagement = new FakeSDAddInManagement(); + _services.Repositories = new FakePackageRepositories(); + _services.NuGet = new FakeNuGetPackageManager(); + } + + [Test] + public void ShowInstalledAddIns() + { + + } + } +} diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/UpdatedAddInsViewModelTests.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/UpdatedAddInsViewModelTests.cs new file mode 100644 index 0000000000..127bac4fb4 --- /dev/null +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/UpdatedAddInsViewModelTests.cs @@ -0,0 +1,28 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; + +namespace ICSharpCode.AddInManager2.Tests +{ + public class UpdatedAddInsViewModelTests + { + FakeAddInManagerServices _services; + + public UpdatedAddInsViewModelTests() + { + } + + [SetUp] + public void SetUp() + { + _services = new FakeAddInManagerServices(); + _services.Events = new AddInManagerEvents(); + _services.Setup = new FakeAddInSetup(); + _services.Settings = new FakeAddInManagerSettings(); + _services.SDAddInManagement = new FakeSDAddInManagement(); + _services.Repositories = new FakePackageRepositories(); + _services.NuGet = new FakeNuGetPackageManager(); + } + } +}