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();
+ }
+ }
+}